Modify UploadServiceChooser dialog to ICS style.

- Use AlertDialog title and buttons
- Use @android:style/TextAppearance.DeviceDefault.Medium
- Use 8dp for margin between elements
This commit is contained in:
Jimmy Shih
2012-03-20 18:46:24 -07:00
parent 6e413f41b3
commit 517026bef3
5 changed files with 148 additions and 180 deletions
+82 -83
View File
@@ -14,93 +14,92 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_width="fill_parent" >
android:orientation="vertical">
<TextView <TableLayout
android:background="@drawable/list_bar"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:paddingLeft="10dp" android:stretchColumns="1" >
android:text="@string/send_google_title"
android:textColor="@color/white"
android:textSize="20sp"/>
<ScrollView
android:layout_height="0dp"
android:layout_margin="5dp"
android:layout_weight="1"
android:layout_width="fill_parent">
<TableLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:stretchColumns="1">
<!-- Google Maps --> <TableRow android:id="@+id/send_google_maps_row" >
<TableRow android:id="@+id/send_google_maps_row">
<ImageView <ImageView
android:contentDescription="@string/send_google_maps" android:contentDescription="@string/send_google_maps"
android:src="@drawable/maps_icon" android:layout_height="wrap_content"
style="@style/SendGoogleImageView"/> android:layout_width="wrap_content"
<CheckBox android:src="@drawable/maps_icon" />
android:id="@+id/send_google_maps"
android:text="@string/send_google_maps" <CheckBox
style="@style/SendGoogleCheckBox"/> android:id="@+id/send_google_maps"
</TableRow> android:layout_gravity="center_vertical"
<TableRow android:id="@+id/send_google_maps_option_row"> android:layout_height="wrap_content"
<RadioGroup android:layout_marginLeft="8dp"
android:layout_column="1" android:layout_width="0dp"
style="@android:style/TextAppearance.DeviceDefault.Medium"
android:text="@string/send_google_maps" />
</TableRow>
<TableRow android:id="@+id/send_google_maps_option_row" >
<RadioGroup
android:layout_column="1"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_width="0dp" >
<RadioButton
android:id="@+id/send_google_new_map"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="10dp" android:layout_width="wrap_content"
android:layout_width="0dp"> style="@android:style/TextAppearance.DeviceDefault.Medium"
<RadioButton android:text="@string/send_google_new_map" />
android:id="@+id/send_google_new_map"
android:text="@string/send_google_new_map"
style="@style/SendGoogleRadioButton"/>
<RadioButton
android:id="@+id/send_google_existing_map"
android:text="@string/send_google_existing_map"
style="@style/SendGoogleRadioButton"/>
</RadioGroup>
</TableRow>
<!-- Google Fusion Tables --> <RadioButton
<TableRow android:id="@+id/send_google_fusion_tables_row"> android:id="@+id/send_google_existing_map"
<ImageView android:layout_height="wrap_content"
android:contentDescription="@string/send_google_fusion_tables" android:layout_width="wrap_content"
android:src="@drawable/googledocs_icon" style="@android:style/TextAppearance.DeviceDefault.Medium"
style="@style/SendGoogleImageView"/> android:text="@string/send_google_existing_map" />
<CheckBox </RadioGroup>
android:id="@+id/send_google_fusion_tables" </TableRow>
android:text="@string/send_google_fusion_tables"
style="@style/SendGoogleCheckBox"/>
</TableRow>
<!-- Google Docs --> <TableRow android:id="@+id/send_google_fusion_tables_row" >
<TableRow android:id="@+id/send_google_docs_row">
<ImageView <ImageView
android:contentDescription="@string/send_google_docs" android:contentDescription="@string/send_google_fusion_tables"
android:src="@drawable/googledocs_icon" android:layout_height="wrap_content"
style="@style/SendGoogleImageView"/> android:layout_width="wrap_content"
<CheckBox android:src="@drawable/googledocs_icon" />
android:id="@+id/send_google_docs"
android:text="@string/send_google_docs" <CheckBox
style="@style/SendGoogleCheckBox"/> android:id="@+id/send_google_fusion_tables"
</TableRow> android:layout_gravity="center_vertical"
</TableLayout> android:layout_height="wrap_content"
</ScrollView> android:layout_marginLeft="8dp"
<LinearLayout style="@style/ButtonLayout"> android:layout_width="0dp"
<LinearLayout style="@style/ButtonSpacer"/> style="@android:style/TextAppearance.DeviceDefault.Medium"
<Button android:text="@string/send_google_fusion_tables" />
android:id="@+id/send_google_send_now" </TableRow>
android:layout_gravity="left" <TableRow android:id="@+id/send_google_docs_row" >
android:text="@string/send_google_send_now"
style="@style/Button"/> <ImageView
<Button android:contentDescription="@string/send_google_docs"
android:id="@+id/send_google_cancel" android:layout_height="wrap_content"
android:layout_gravity="right" android:layout_width="wrap_content"
android:text="@string/generic_cancel" android:src="@drawable/googledocs_icon" />
style="@style/Button"/>
<LinearLayout style="@style/ButtonSpacer"/> <CheckBox
</LinearLayout> android:id="@+id/send_google_docs"
</LinearLayout> android:layout_gravity="center_vertical"
android:layout_height="fill_parent"
android:layout_marginLeft="8dp"
android:layout_width="0dp"
style="@android:style/TextAppearance.DeviceDefault.Medium"
android:text="@string/send_google_docs" />
</TableRow>
</TableLayout>
</ScrollView>
+5
View File
@@ -1343,6 +1343,11 @@ limitations under the License.
found."> found.">
No account found No account found
</string> </string>
<string name="send_google_no_service_selected"
translation_description="When sending a track to Google, a message indicating that the user has
not selected any Google service and no data is sent.">
You did not select any service. No data is sent.
</string>
<string name="send_google_progress_title" <string name="send_google_progress_title"
translation_description="When sending a track to a Google service, the title on the progress translation_description="When sending a track to a Google service, the title on the progress
dialog. dialog.
-22
View File
@@ -95,28 +95,6 @@ limitations under the License.
<item name="android:layout_width">wrap_content</item> <item name="android:layout_width">wrap_content</item>
</style> </style>
<!-- Send Google CheckBox -->
<style name="SendGoogleCheckBox">
<item name="android:checked">true</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:layout_marginLeft">10dp</item>
<item name="android:layout_width">0dp</item>
<item name="android:textSize">18sp</item>
</style>
<!-- Send Google ImageView -->
<style name="SendGoogleImageView">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
</style>
<!-- Send Google RadioButton -->
<style name="SendGoogleRadioButton">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textSize">18sp</item>
</style>
<style name="SensorStateLabel"> <style name="SensorStateLabel">
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">fill_parent</item> <item name="android:layout_width">fill_parent</item>
@@ -22,6 +22,7 @@ import com.google.android.maps.mytracks.R;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
@@ -30,27 +31,26 @@ import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.Editor;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton; import android.widget.RadioButton;
import android.widget.TableRow; import android.widget.TableRow;
import android.widget.Toast;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* A chooser to select the Google services to upload a track to. * A chooser to select the Google services to upload a track to.
* *
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public class UploadServiceChooserActivity extends Activity { public class UploadServiceChooserActivity extends Activity {
private static final int SERVICE_PICKER_DIALOG = 1; private static final int DIALOG_CHOOSER_ID = 0;
private SendRequest sendRequest; private SendRequest sendRequest;
private Dialog dialog; private AlertDialog alertDialog;
private TableRow mapsTableRow; private TableRow mapsTableRow;
private TableRow fusionTablesTableRow; private TableRow fusionTablesTableRow;
@@ -64,9 +64,6 @@ public class UploadServiceChooserActivity extends Activity {
private RadioButton newMapRadioButton; private RadioButton newMapRadioButton;
private RadioButton existingMapRadioButton; private RadioButton existingMapRadioButton;
private Button cancel;
private Button send;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -76,35 +73,26 @@ public class UploadServiceChooserActivity extends Activity {
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
showDialog(SERVICE_PICKER_DIALOG); showDialog(DIALOG_CHOOSER_ID);
} }
@Override @Override
protected Dialog onCreateDialog(int id) { protected Dialog onCreateDialog(int id) {
switch (id) { switch (id) {
case SERVICE_PICKER_DIALOG: case DIALOG_CHOOSER_ID:
dialog = new Dialog(this); View view = getLayoutInflater().inflate(R.layout.upload_service_chooser, null);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.upload_service_chooser);
dialog.setCancelable(true);
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface d) {
finish();
}
});
mapsTableRow = (TableRow) dialog.findViewById(R.id.send_google_maps_row); mapsTableRow = (TableRow) view.findViewById(R.id.send_google_maps_row);
fusionTablesTableRow = (TableRow) dialog.findViewById(R.id.send_google_fusion_tables_row); fusionTablesTableRow = (TableRow) view.findViewById(R.id.send_google_fusion_tables_row);
docsTableRow = (TableRow) dialog.findViewById(R.id.send_google_docs_row); docsTableRow = (TableRow) view.findViewById(R.id.send_google_docs_row);
mapsCheckBox = (CheckBox) dialog.findViewById(R.id.send_google_maps); mapsCheckBox = (CheckBox) view.findViewById(R.id.send_google_maps);
fusionTablesCheckBox = (CheckBox) dialog.findViewById(R.id.send_google_fusion_tables); fusionTablesCheckBox = (CheckBox) view.findViewById(R.id.send_google_fusion_tables);
docsCheckBox = (CheckBox) dialog.findViewById(R.id.send_google_docs); docsCheckBox = (CheckBox) view.findViewById(R.id.send_google_docs);
mapsOptionTableRow = (TableRow) dialog.findViewById(R.id.send_google_maps_option_row); mapsOptionTableRow = (TableRow) view.findViewById(R.id.send_google_maps_option_row);
newMapRadioButton = (RadioButton) dialog.findViewById(R.id.send_google_new_map); newMapRadioButton = (RadioButton) view.findViewById(R.id.send_google_new_map);
existingMapRadioButton = (RadioButton) dialog.findViewById(R.id.send_google_existing_map); existingMapRadioButton = (RadioButton) view.findViewById(R.id.send_google_existing_map);
// Setup checkboxes // Setup checkboxes
OnCheckedChangeListener checkBoxListener = new OnCheckedChangeListener() { OnCheckedChangeListener checkBoxListener = new OnCheckedChangeListener() {
@@ -116,31 +104,48 @@ public class UploadServiceChooserActivity extends Activity {
fusionTablesCheckBox.setOnCheckedChangeListener(checkBoxListener); fusionTablesCheckBox.setOnCheckedChangeListener(checkBoxListener);
docsCheckBox.setOnCheckedChangeListener(checkBoxListener); docsCheckBox.setOnCheckedChangeListener(checkBoxListener);
// Setup buttons
cancel = (Button) dialog.findViewById(R.id.send_google_cancel);
cancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
send = (Button) dialog.findViewById(R.id.send_google_send_now);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
saveState();
startNextActivity();
}
});
// Setup initial state // Setup initial state
initState(); initState();
// Update state based on sendRequest // Update state based on sendRequest
updateStateBySendRequest(); updateStateBySendRequest();
// Update state based on current user selection // Update state based on current selection
updateStateBySelection(); updateStateBySelection();
return dialog; alertDialog = new AlertDialog.Builder(this)
.setCancelable(true)
.setNegativeButton(R.string.generic_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface d) {
finish();
}
})
.setPositiveButton(
R.string.send_google_send_now, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
saveState();
if (sendMaps() || sendFusionTables() || sendDocs()) {
startNextActivity();
} else {
Toast.makeText(UploadServiceChooserActivity.this,
R.string.send_google_no_service_selected, Toast.LENGTH_LONG).show();
finish();
}
}
})
.setTitle(R.string.send_google_title)
.setView(view)
.create();
return alertDialog;
default: default:
return null; return null;
} }
@@ -186,7 +191,6 @@ public class UploadServiceChooserActivity extends Activity {
*/ */
private void updateStateBySelection() { private void updateStateBySelection() {
mapsOptionTableRow.setVisibility(sendMaps() ? View.VISIBLE : View.GONE); mapsOptionTableRow.setVisibility(sendMaps() ? View.VISIBLE : View.GONE);
send.setEnabled(sendMaps() || sendFusionTables() || sendDocs());
} }
/** /**
@@ -242,7 +246,7 @@ public class UploadServiceChooserActivity extends Activity {
startActivity(intent); startActivity(intent);
finish(); finish();
} }
/** /**
* Sends stats to Google Analytics. * Sends stats to Google Analytics.
*/ */
@@ -259,12 +263,12 @@ public class UploadServiceChooserActivity extends Activity {
} }
AnalyticsUtils.sendPageViews(this, pages.toArray(new String[pages.size()])); AnalyticsUtils.sendPageViews(this, pages.toArray(new String[pages.size()]));
} }
@VisibleForTesting @VisibleForTesting
Dialog getDialog() { AlertDialog getAlertDialog() {
return dialog; return alertDialog;
} }
@VisibleForTesting @VisibleForTesting
SendRequest getSendRequest() { SendRequest getSendRequest() {
return sendRequest; return sendRequest;
@@ -24,7 +24,6 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.Editor;
import android.test.ActivityInstrumentationTestCase2; import android.test.ActivityInstrumentationTestCase2;
import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.RadioButton; import android.widget.RadioButton;
@@ -59,7 +58,6 @@ public class UploadServiceChooserActivityTest extends
assertTrue(getMapsCheckBox().isShown()); assertTrue(getMapsCheckBox().isShown());
assertTrue(getFusionTablesCheckBox().isShown()); assertTrue(getFusionTablesCheckBox().isShown());
assertTrue(getDocsCheckBox().isShown()); assertTrue(getDocsCheckBox().isShown());
assertTrue(getCancelButton().isEnabled());
// Clicks to disable all send items. // Clicks to disable all send items.
uploadServiceChooserActivity.runOnUiThread(new Runnable() { uploadServiceChooserActivity.runOnUiThread(new Runnable() {
@@ -79,11 +77,9 @@ public class UploadServiceChooserActivityTest extends
assertTrue(getMapsCheckBox().isShown()); assertTrue(getMapsCheckBox().isShown());
assertTrue(getFusionTablesCheckBox().isShown()); assertTrue(getFusionTablesCheckBox().isShown());
assertTrue(getDocsCheckBox().isShown()); assertTrue(getDocsCheckBox().isShown());
assertTrue(getCancelButton().isEnabled());
assertFalse(getNewMapRadioButton().isShown()); assertFalse(getNewMapRadioButton().isShown());
assertFalse(getExistingMapRadioButton().isShown()); assertFalse(getExistingMapRadioButton().isShown());
assertFalse(getSendButton().isEnabled());
} }
/** /**
@@ -94,7 +90,6 @@ public class UploadServiceChooserActivityTest extends
initialActivity(true, false, false); initialActivity(true, false, false);
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
assertTrue(getMapsCheckBox().isShown()); assertTrue(getMapsCheckBox().isShown());
assertTrue(getCancelButton().isEnabled());
// Clicks to enable this items. // Clicks to enable this items.
uploadServiceChooserActivity.runOnUiThread(new Runnable() { uploadServiceChooserActivity.runOnUiThread(new Runnable() {
@@ -108,8 +103,6 @@ public class UploadServiceChooserActivityTest extends
assertTrue(getMapsCheckBox().isShown()); assertTrue(getMapsCheckBox().isShown());
assertTrue(getNewMapRadioButton().isShown()); assertTrue(getNewMapRadioButton().isShown());
assertTrue(getExistingMapRadioButton().isShown()); assertTrue(getExistingMapRadioButton().isShown());
assertTrue(getSendButton().isEnabled());
assertTrue(getCancelButton().isEnabled());
} }
/** /**
@@ -120,8 +113,6 @@ public class UploadServiceChooserActivityTest extends
assertFalse(getMapsCheckBox().isShown()); assertFalse(getMapsCheckBox().isShown());
assertFalse(getFusionTablesCheckBox().isShown()); assertFalse(getFusionTablesCheckBox().isShown());
assertFalse(getDocsCheckBox().isShown()); assertFalse(getDocsCheckBox().isShown());
assertFalse(getSendButton().isEnabled());
assertTrue(getCancelButton().isEnabled());
} }
/** /**
@@ -259,35 +250,26 @@ public class UploadServiceChooserActivityTest extends
uploadServiceChooserActivity = this.getActivity(); uploadServiceChooserActivity = this.getActivity();
} }
private Button getSendButton() {
return (Button) uploadServiceChooserActivity.getDialog()
.findViewById(R.id.send_google_send_now);
}
Button getCancelButton() {
return (Button) uploadServiceChooserActivity.getDialog().findViewById(R.id.send_google_cancel);
}
private CheckBox getMapsCheckBox() { private CheckBox getMapsCheckBox() {
return (CheckBox) uploadServiceChooserActivity.getDialog().findViewById(R.id.send_google_maps); return (CheckBox) uploadServiceChooserActivity.getAlertDialog().findViewById(R.id.send_google_maps);
} }
private CheckBox getFusionTablesCheckBox() { private CheckBox getFusionTablesCheckBox() {
return (CheckBox) uploadServiceChooserActivity.getDialog().findViewById( return (CheckBox) uploadServiceChooserActivity.getAlertDialog().findViewById(
R.id.send_google_fusion_tables); R.id.send_google_fusion_tables);
} }
private CheckBox getDocsCheckBox() { private CheckBox getDocsCheckBox() {
return (CheckBox) uploadServiceChooserActivity.getDialog().findViewById(R.id.send_google_docs); return (CheckBox) uploadServiceChooserActivity.getAlertDialog().findViewById(R.id.send_google_docs);
} }
private RadioButton getNewMapRadioButton() { private RadioButton getNewMapRadioButton() {
return (RadioButton) uploadServiceChooserActivity.getDialog().findViewById( return (RadioButton) uploadServiceChooserActivity.getAlertDialog().findViewById(
R.id.send_google_new_map); R.id.send_google_new_map);
} }
private RadioButton getExistingMapRadioButton() { private RadioButton getExistingMapRadioButton() {
return (RadioButton) uploadServiceChooserActivity.getDialog().findViewById( return (RadioButton) uploadServiceChooserActivity.getAlertDialog().findViewById(
R.id.send_google_existing_map); R.id.send_google_existing_map);
} }
} }