From afa2c9875e881a376df159e73a23bbb437b61aa2 Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Tue, 15 May 2012 12:21:14 -0700 Subject: [PATCH] Modify the sharing flow to first show a list of applications. Store preferred account as a sharing setting. Remove share url only option. Apply share url only if twitter is selected. --- .../res/layout/choose_activity_list_item.xml | 51 ++++ .../res/layout/upload_service_chooser.xml | 6 +- MyTracks/res/menu/track_detail.xml | 12 - MyTracks/res/values/keys.xml | 3 +- MyTracks/res/values/strings.xml | 65 ++--- MyTracks/res/xml/sharing_settings.xml | 11 +- .../apps/mytracks/TrackDetailActivity.java | 50 +--- .../mytracks/fragments/ChartFragment.java | 2 +- .../ChooseActivityDialogFragment.java | 259 +++++++++++++++++ .../sendtogoogle/AbstractSendAsyncTask.java | 6 +- .../sendtogoogle/AccountChooserActivity.java | 29 +- .../mytracks/io/sendtogoogle/SendRequest.java | 51 ++-- .../io/sendtogoogle/UploadResultActivity.java | 66 ++--- .../UploadServiceChooserActivity.java | 43 +-- .../settings/AbstractSettingsActivity.java | 4 +- .../settings/SensorSettingsActivity.java | 2 +- .../settings/SharingSettingsActivity.java | 22 ++ .../apps/mytracks/util/IntentUtils.java | 25 ++ .../apps/mytracks/util/PreferencesUtils.java | 3 +- .../SendFusionTablesActivityTest.java | 2 +- .../io/maps/SendMapsActivityTest.java | 2 +- .../io/maps/SendMapsAsyncTaskTest.java | 2 +- .../io/sendtogoogle/SendRequestTest.java | 269 ++++++++---------- .../UploadResultActivityTest.java | 2 +- .../UploadServiceChooserActivityTest.java | 48 +--- 25 files changed, 593 insertions(+), 442 deletions(-) create mode 100644 MyTracks/res/layout/choose_activity_list_item.xml create mode 100644 MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityDialogFragment.java diff --git a/MyTracks/res/layout/choose_activity_list_item.xml b/MyTracks/res/layout/choose_activity_list_item.xml new file mode 100644 index 000000000..86bff7de9 --- /dev/null +++ b/MyTracks/res/layout/choose_activity_list_item.xml @@ -0,0 +1,51 @@ + + + + + + + + + \ No newline at end of file diff --git a/MyTracks/res/layout/upload_service_chooser.xml b/MyTracks/res/layout/upload_service_chooser.xml index 189ed9921..d97cf5de8 100644 --- a/MyTracks/res/layout/upload_service_chooser.xml +++ b/MyTracks/res/layout/upload_service_chooser.xml @@ -21,7 +21,7 @@ limitations under the License. android:layout_width="fill_parent" android:padding="8dp" android:stretchColumns="1" > - + - + - + - - - - - - - - minRecordingInterval minRequiredAccuracy pickExistingMap - preferredAccount recordingTrackId reportSpeed selectedTrackId @@ -47,7 +46,7 @@ limitations under the License. sendToFusionTables sendToMaps sensorType - shareUrlOnly + sharingAccount showCheckUnitsDialog showWelcomeDialog splitFrequency diff --git a/MyTracks/res/values/strings.xml b/MyTracks/res/values/strings.xml index 08e559fee..b6f072971 100644 --- a/MyTracks/res/values/strings.xml +++ b/MyTracks/res/values/strings.xml @@ -821,6 +821,12 @@ limitations under the License. + + Application + Marker @@ -1096,24 +1102,6 @@ limitations under the License. translation_description="In the menu, to share a track."> Share - - %1$s file - - - Fusion Table URL - - - Map URL - Show on map @@ -1342,11 +1330,6 @@ limitations under the License. %1$s: service name. 'Google Maps', 'Google Fusion Tables', or 'Google Docs'."> Sending to %1$s... - - Share track URL - @@ -1861,6 +1844,14 @@ limitations under the License. Character limit: ~26 (1 line)"> Sharing + + Switch account + + + Switch account used when sending a track to Google. + Make new maps created in Google Maps public. - - Share only URL - - - Include descriptive text when sharing a URL with friends. - - - Remove any descriptive text when sharing a URL with friends. - - Share track using: + the user to select an application."> + Select an application + + + Share track URL diff --git a/MyTracks/res/xml/sharing_settings.xml b/MyTracks/res/xml/sharing_settings.xml index 04276f123..60c2b9ddc 100644 --- a/MyTracks/res/xml/sharing_settings.xml +++ b/MyTracks/res/xml/sharing_settings.xml @@ -16,18 +16,17 @@ limitations under the License. --> + - displayInfos = getDisplayInfos(); + + ArrayAdapter arrayAdapter = new ArrayAdapter(getActivity(), + R.layout.choose_activity_list_item, R.id.choose_activity_list_item_text1, displayInfos) { + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View view; + if (convertView == null) { + view = getActivity() + .getLayoutInflater().inflate(R.layout.choose_activity_list_item, parent, false); + } else { + view = convertView; + } + DisplayInfo displayInfo = getItem(position); + TextView text1 = (TextView) view.findViewById(R.id.choose_activity_list_item_text1); + TextView text2 = (TextView) view.findViewById(R.id.choose_activity_list_item_text2); + ImageView icon = (ImageView) view.findViewById(R.id.choose_activity_list_item_icon); + text1.setText(displayInfo.primaryLabel); + if (displayInfo.secondaryLabel != null) { + text2.setVisibility(View.VISIBLE); + text2.setText(displayInfo.secondaryLabel); + } else { + text2.setVisibility(View.GONE); + } + icon.setImageDrawable(displayInfo.icon); + return view; + } + }; + return new AlertDialog.Builder(getActivity()) + .setSingleChoiceItems(arrayAdapter, 0, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + AlertDialog alertDialog = (AlertDialog) dialog; + DisplayInfo displayInfo = (DisplayInfo) alertDialog.getListView() + .getItemAtPosition(which); + ActivityInfo activityInfo = displayInfo.resolveInfo.activityInfo; + String packageName = activityInfo.applicationInfo.packageName; + String className = activityInfo.name; + + String trackUrl = getArguments().getString(KEY_TRACK_URL); + if (trackUrl == null) { + SendRequest sendRequest = new SendRequest(getArguments().getLong(KEY_TRACK_ID)); + sendRequest.setSendMaps(true); + sendRequest.setNewMap(true); + sendRequest.setSharingAppPackageName(packageName); + sendRequest.setSharingAppClassName(className); + Intent intent = IntentUtils.newIntent(getActivity(), AccountChooserActivity.class) + .putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest); + startActivity(intent); + dismiss(); + } else { + Intent intent = IntentUtils.newShareUrlIntent( + getActivity(), trackUrl, packageName, className); + startActivity(intent); + getActivity().finish(); + } + } + }) + .setTitle(R.string.share_track_picker_title) + .create(); + } + + /** + * Gets the display info. + */ + private List getDisplayInfos() { + List displayInfos = new ArrayList(); + Intent intent = ShareCompat.IntentBuilder.from(getActivity()) + .setType(IntentUtils.TEXT_PLAIN_TYPE).getIntent(); + List resolveInfos = packageManager.queryIntentActivities( + intent, PackageManager.MATCH_DEFAULT_ONLY); + if (resolveInfos != null && resolveInfos.size() > 0) { + int size = resolveInfos.size(); + ResolveInfo firstResolveInfo = resolveInfos.get(0); + for (int i = 1; i < size; i++) { + ResolveInfo resolveInfo = resolveInfos.get(i); + if (firstResolveInfo.priority != resolveInfo.priority + || firstResolveInfo.isDefault != resolveInfo.isDefault) { + while (i < size) { + resolveInfos.remove(i); + size--; + } + } + } + if (size > 1) { + ResolveInfo.DisplayNameComparator displayNameComparator = new ResolveInfo.DisplayNameComparator( + packageManager); + Collections.sort(resolveInfos, displayNameComparator); + } + + firstResolveInfo = resolveInfos.get(0); + int start = 0; + CharSequence firstLabel = firstResolveInfo.loadLabel(packageManager); + for (int i = 1; i < size; i++) { + if (firstLabel == null) { + firstLabel = firstResolveInfo.activityInfo.packageName; + } + ResolveInfo resolveInfo = resolveInfos.get(i); + CharSequence label = resolveInfo.loadLabel(packageManager); + if (label == null) { + label = resolveInfo.activityInfo.packageName; + } + if (label.equals(firstLabel)) { + continue; + } + processGroup(resolveInfos, displayInfos, start, i - 1); + firstResolveInfo = resolveInfo; + firstLabel = label; + start = i; + } + // Process last group + processGroup(resolveInfos, displayInfos, start, size - 1); + } + return displayInfos; + } + + /** + * Contains display info. + * + * @author Jimmy Shih + */ + private final class DisplayInfo { + private ResolveInfo resolveInfo; + private CharSequence primaryLabel; + private CharSequence secondaryLabel; + private Drawable icon; + + public DisplayInfo(ResolveInfo resolveInfo, CharSequence primaryLabel, + CharSequence secondaryLabel, Drawable icon) { + this.resolveInfo = resolveInfo; + this.primaryLabel = primaryLabel; + this.secondaryLabel = secondaryLabel; + this.icon = icon; + } + } + + /** + * Processes a group of items with the same label. + * + * @param resolveInfos list of resolve infos + * @param displayInfos list of display infos + * @param start start index + * @param end end index + */ + private void processGroup( + List resolveInfos, List displayInfos, int start, int end) { + ResolveInfo startResolveInfo = resolveInfos.get(start); + CharSequence primaryLabel = startResolveInfo.loadLabel(packageManager); + Drawable icon = startResolveInfo.loadIcon(packageManager); + + int num = end - start + 1; + if (num == 1) { + // Only one, set the secondary label to null + displayInfos.add(new DisplayInfo(startResolveInfo, primaryLabel, null, icon)); + } else { + // Decide package name or application name for the secondary label + boolean usePackageName = false; + CharSequence appName = startResolveInfo.activityInfo.applicationInfo.loadLabel( + packageManager); + if (appName == null) { + usePackageName = true; + } else { + // Use HashSet to track duplicates + HashSet duplicates = new HashSet(); + duplicates.add(appName); + for (int i = start + 1; i <= end; i++) { + ResolveInfo resolveInfo = resolveInfos.get(i); + CharSequence name = resolveInfo.activityInfo.applicationInfo.loadLabel(packageManager); + if ((name == null) || (duplicates.contains(name))) { + usePackageName = true; + break; + } else { + duplicates.add(name); + } + } + // Clear HashSet for later use + duplicates.clear(); + } + for (int i = start; i <= end; i++) { + ResolveInfo resolveInfo = resolveInfos.get(i); + CharSequence secondaryLabel = usePackageName ? resolveInfo.activityInfo.packageName + : resolveInfo.activityInfo.applicationInfo.loadLabel(packageManager); + displayInfos.add(new DisplayInfo(resolveInfo, primaryLabel, secondaryLabel, icon)); + } + } + } +} \ No newline at end of file diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java index 710d21c6d..11dab9c5c 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java @@ -80,9 +80,6 @@ public abstract class AbstractSendAsyncTask extends AsyncTask entries = new ArrayList(); diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/SharingSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/SharingSettingsActivity.java index a322ce262..eb16dead6 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/settings/SharingSettingsActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/settings/SharingSettingsActivity.java @@ -16,16 +16,23 @@ package com.google.android.apps.mytracks.settings; +import com.google.android.apps.mytracks.Constants; import com.google.android.apps.mytracks.util.DialogUtils; import com.google.android.maps.mytracks.R; +import android.accounts.Account; +import android.accounts.AccountManager; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.preference.CheckBoxPreference; +import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; +import java.util.ArrayList; +import java.util.List; + /** * An activity for accessing the sharing settings. * @@ -56,6 +63,21 @@ public class SharingSettingsActivity extends AbstractSettingsActivity { } } }); + + ListPreference sharingAccountListPreference = (ListPreference) findPreference( + getString(R.string.sharing_account_key)); + List entries = new ArrayList(); + Account[] accounts = AccountManager.get(this).getAccountsByType(Constants.ACCOUNT_TYPE); + for (Account account : accounts) { + entries.add(account.name); + } + + sharingAccountListPreference.setEntries(entries.toArray(new CharSequence[entries.size()])); + sharingAccountListPreference.setEntryValues(entries.toArray( + new CharSequence[entries.size()])); + if (entries.size() == 1) { + sharingAccountListPreference.setValueIndex(0); + } } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/IntentUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/IntentUtils.java index e38b55cff..fc303efe5 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/IntentUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/IntentUtils.java @@ -16,6 +16,9 @@ package com.google.android.apps.mytracks.util; +import com.google.android.maps.mytracks.R; + +import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -26,6 +29,9 @@ import android.content.Intent; */ public class IntentUtils { + public static final String TEXT_PLAIN_TYPE = "text/plain"; + private static final String TWITTER_PACKAGE_NAME = "com.twitter.android"; + private IntentUtils() {} /** @@ -39,4 +45,23 @@ public class IntentUtils { return new Intent(context, cls).addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); } + + /** + * Creates an intent to share a url with a sharing app. + * + * @param context the context + * @param url the url + * @param packageName the sharing app package name + * @param className the sharing app class name + */ + public static final Intent newShareUrlIntent( + Context context, String url, String packageName, String className) { + return new Intent(Intent.ACTION_SEND) + .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP) + .putExtra(Intent.EXTRA_SUBJECT, context.getString(R.string.share_track_subject)) + .putExtra(Intent.EXTRA_TEXT, TWITTER_PACKAGE_NAME.equals(packageName) + ? url : context.getString(R.string.share_track_url_body_format, url)) + .setComponent(new ComponentName(packageName, className)) + .setType(TEXT_PLAIN_TYPE); + } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java index bf4a338ba..6ee57feca 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java @@ -66,14 +66,13 @@ public class PreferencesUtils { public static final int MIN_REQUIRED_ACCURACY_POOR = 5000; public static final boolean PICK_EXISTING_MAP_DEFAULT = false; - public static final String PREFERRED_ACCOUNT_DEFAULT = ""; public static final long RECORDING_TRACK_ID_DEFAULT = -1L; public static final boolean REPORT_SPEED_DEFAULT = true; public static final long SELECTED_TRACK_ID_DEFAULT = -1L; public static final boolean SEND_TO_DOCS_DEFAULT = true; public static final boolean SEND_TO_FUSION_TABLES_DEFAULT = true; public static final boolean SEND_TO_MAPS_DEFAULT = true; - public static final boolean SHARE_URL_ONLY_DEFAULT = false; + public static final String SHARING_ACCOUNT_DEFAULT = ""; public static final boolean SHOW_CHECK_UNITS_DIALOG_DEFAULT = true; public static final boolean SHOW_WELCOME_DIALOG_DEFAULT = true; public static final int SPLIT_FREQUENCY_DEFAULT = 0; diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesActivityTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesActivityTest.java index 09b095a5f..800053ba8 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesActivityTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesActivityTest.java @@ -34,7 +34,7 @@ public class SendFusionTablesActivityTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); - sendRequest = new SendRequest(1L, true, false, true); + sendRequest = new SendRequest(1L); sendFusionTablesActivity = new SendFusionTablesActivity(); } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsActivityTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsActivityTest.java index d2646609a..97f2c0982 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsActivityTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsActivityTest.java @@ -35,7 +35,7 @@ public class SendMapsActivityTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); - sendRequest = new SendRequest(1L, true, false, true); + sendRequest = new SendRequest(1L); sendMapsActivity = new SendMapsActivity(); } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTaskTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTaskTest.java index 65f4fd92c..904114791 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTaskTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTaskTest.java @@ -86,7 +86,7 @@ public class SendMapsAsyncTaskTest extends AndroidTestCase { prepareAndUploadPointsCounter = 0; sendMapsActivityMock = AndroidMock.createMock(SendMapsActivity.class); myTracksProviderUtilsMock = AndroidMock.createMock(MyTracksProviderUtils.class); - sendRequest = new SendRequest(TRACK_ID, false, true, false); + sendRequest = new SendRequest(TRACK_ID); AndroidMock.expect(sendMapsActivityMock.getApplicationContext()).andReturn(getContext()); } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/SendRequestTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/SendRequestTest.java index 0ad6bfa1b..f9ff8ab5d 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/SendRequestTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/SendRequestTest.java @@ -35,7 +35,7 @@ public class SendRequestTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); - sendRequest = new SendRequest(1, true, true, true); + sendRequest = new SendRequest(1); } /** @@ -46,44 +46,6 @@ public class SendRequestTest extends AndroidTestCase { assertEquals(1, sendRequest.getTrackId()); } - /** - * Tests the method {@link SendRequest#isShowMaps()}. The value should be set - * to true when it is initialed in setup method. - */ - public void testIsShowMaps() { - assertEquals(true, sendRequest.isShowMaps()); - } - - /** - * Tests the method {@link SendRequest#isShowFusionTables()}. The value should - * be set to true when it is initialed in setup method. - */ - public void testIsShowFusionTables() { - assertEquals(true, sendRequest.isShowFusionTables()); - } - - /** - * Tests the method {@link SendRequest#isShowDocs()}. The value should be set - * to true when it is initialed in setup method. - */ - public void testIsShowDocs() { - assertEquals(true, sendRequest.isShowDocs()); - } - - public void testIsShowAll() { - assertEquals(true, sendRequest.isShowAll()); - sendRequest = new SendRequest(1, false, true, true); - assertEquals(false, sendRequest.isShowAll()); - sendRequest = new SendRequest(1, true, false, true); - assertEquals(false, sendRequest.isShowAll()); - sendRequest = new SendRequest(1, true, true, false); - assertEquals(false, sendRequest.isShowAll()); - sendRequest = new SendRequest(1, false, true, false); - assertEquals(false, sendRequest.isShowAll()); - sendRequest = new SendRequest(1, false, false, false); - assertEquals(false, sendRequest.isShowAll()); - } - public void testIsSendMaps() { assertEquals(false, sendRequest.isSendMaps()); sendRequest.setSendMaps(true); @@ -174,120 +136,114 @@ public class SendRequestTest extends AndroidTestCase { * Tests SendRequest.CREATOR.createFromParcel when all values are true. */ public void testCreateFromParcel_true() { - Parcel sourceParcel = Parcel.obtain(); - sourceParcel.setDataPosition(0); - sourceParcel.writeLong(2); - sourceParcel.writeByte((byte) 1); - sourceParcel.writeByte((byte) 1); - sourceParcel.writeByte((byte) 1); - sourceParcel.writeByte((byte) 1); - sourceParcel.writeByte((byte) 1); - sourceParcel.writeByte((byte) 1); - sourceParcel.writeByte((byte) 1); + Parcel parcel = Parcel.obtain(); + parcel.setDataPosition(0); + parcel.writeLong(2); + parcel.writeString(""); + parcel.writeString(""); + parcel.writeByte((byte) 1); + parcel.writeByte((byte) 1); + parcel.writeByte((byte) 1); + parcel.writeByte((byte) 1); Account account = new Account(ACCOUNTNAME, ACCOUNTYPE); - sourceParcel.writeParcelable(account, 0); - sourceParcel.writeString(MAPID); - sourceParcel.writeByte((byte) 1); - sourceParcel.writeByte((byte) 1); - sourceParcel.writeByte((byte) 1); - sourceParcel.setDataPosition(0); - sendRequest = SendRequest.CREATOR.createFromParcel(sourceParcel); + parcel.writeParcelable(account, 0); + parcel.writeString(MAPID); + parcel.writeByte((byte) 1); + parcel.writeByte((byte) 1); + parcel.writeByte((byte) 1); + parcel.setDataPosition(0); + sendRequest = SendRequest.CREATOR.createFromParcel(parcel); assertEquals(2, sendRequest.getTrackId()); - assertEquals(true, sendRequest.isShowMaps()); - assertEquals(true, sendRequest.isShowFusionTables()); - assertEquals(true, sendRequest.isShowDocs()); - assertEquals(true, sendRequest.isSendMaps()); - assertEquals(true, sendRequest.isSendFusionTables()); - assertEquals(true, sendRequest.isSendDocs()); - assertEquals(true, sendRequest.isNewMap()); + assertEquals("", sendRequest.getSharingAppPackageName()); + assertEquals("", sendRequest.getSharingAppClassName()); + assertTrue(sendRequest.isSendMaps()); + assertTrue(sendRequest.isSendFusionTables()); + assertTrue(sendRequest.isSendDocs()); + assertTrue(sendRequest.isNewMap()); assertEquals(account, sendRequest.getAccount()); assertEquals(MAPID, sendRequest.getMapId()); - assertEquals(true, sendRequest.isMapsSuccess()); - assertEquals(true, sendRequest.isFusionTablesSuccess()); - assertEquals(true, sendRequest.isDocsSuccess()); + assertTrue(sendRequest.isMapsSuccess()); + assertTrue(sendRequest.isFusionTablesSuccess()); + assertTrue(sendRequest.isDocsSuccess()); } /** * Tests SendRequest.CREATOR.createFromParcel when all values are false. */ public void testCreateFromParcel_false() { - Parcel sourceParcel = Parcel.obtain(); - sourceParcel.setDataPosition(0); - sourceParcel.writeLong(4); - sourceParcel.writeByte((byte) 0); - sourceParcel.writeByte((byte) 0); - sourceParcel.writeByte((byte) 0); - sourceParcel.writeByte((byte) 0); - sourceParcel.writeByte((byte) 0); - sourceParcel.writeByte((byte) 0); - sourceParcel.writeByte((byte) 0); + Parcel parcel = Parcel.obtain(); + parcel.setDataPosition(0); + parcel.writeLong(4); + parcel.writeString(null); + parcel.writeString(null); + parcel.writeByte((byte) 0); + parcel.writeByte((byte) 0); + parcel.writeByte((byte) 0); + parcel.writeByte((byte) 0); Account account = new Account(ACCOUNTNAME, ACCOUNTYPE); - sourceParcel.writeParcelable(account, 0); - sourceParcel.writeString(MAPID); - sourceParcel.writeByte((byte) 0); - sourceParcel.writeByte((byte) 0); - sourceParcel.writeByte((byte) 0); - sourceParcel.setDataPosition(0); - sendRequest = SendRequest.CREATOR.createFromParcel(sourceParcel); + parcel.writeParcelable(account, 0); + parcel.writeString(MAPID); + parcel.writeByte((byte) 0); + parcel.writeByte((byte) 0); + parcel.writeByte((byte) 0); + parcel.setDataPosition(0); + sendRequest = SendRequest.CREATOR.createFromParcel(parcel); assertEquals(4, sendRequest.getTrackId()); - assertEquals(false, sendRequest.isShowMaps()); - assertEquals(false, sendRequest.isShowFusionTables()); - assertEquals(false, sendRequest.isShowDocs()); - assertEquals(false, sendRequest.isSendMaps()); - assertEquals(false, sendRequest.isSendFusionTables()); - assertEquals(false, sendRequest.isSendDocs()); - assertEquals(false, sendRequest.isNewMap()); + assertNull(sendRequest.getSharingAppPackageName()); + assertNull(sendRequest.getSharingAppClassName()); + assertFalse(sendRequest.isSendMaps()); + assertFalse(sendRequest.isSendFusionTables()); + assertFalse(sendRequest.isSendDocs()); + assertFalse(sendRequest.isNewMap()); assertEquals(account, sendRequest.getAccount()); assertEquals(MAPID, sendRequest.getMapId()); - assertEquals(false, sendRequest.isMapsSuccess()); - assertEquals(false, sendRequest.isFusionTablesSuccess()); - assertEquals(false, sendRequest.isDocsSuccess()); + assertFalse(sendRequest.isMapsSuccess()); + assertFalse(sendRequest.isFusionTablesSuccess()); + assertFalse(sendRequest.isDocsSuccess()); } /** - * Tests {@link SendRequest#writeToParcel(Parcel, int)} when all input values - * are true or affirmative. + * Tests {@link SendRequest#writeToParcel(Parcel, int)} with default values. */ - public void testWriteToParcel_allTrue() { - sendRequest = new SendRequest(1, false, false, false); - Parcel parcelWrite1st = Parcel.obtain(); - parcelWrite1st.setDataPosition(0); - sendRequest.writeToParcel(parcelWrite1st, 1); - parcelWrite1st.setDataPosition(0); - long trackId = parcelWrite1st.readLong(); - boolean showMaps = parcelWrite1st.readByte() == 1; - boolean showFusionTables = parcelWrite1st.readByte() == 1; - boolean showDocs = parcelWrite1st.readByte() == 1; - boolean sendMaps = parcelWrite1st.readByte() == 1; - boolean sendFusionTables = parcelWrite1st.readByte() == 1; - boolean sendDocs = parcelWrite1st.readByte() == 1; - boolean newMap = parcelWrite1st.readByte() == 1; - Parcelable account = parcelWrite1st.readParcelable(null); - String mapId = parcelWrite1st.readString(); - boolean mapsSuccess = parcelWrite1st.readByte() == 1; - boolean fusionTablesSuccess = parcelWrite1st.readByte() == 1; - boolean docsSuccess = parcelWrite1st.readByte() == 1; + public void testWriteToParcel_default() { + sendRequest = new SendRequest(1); + Parcel parcel = Parcel.obtain(); + parcel.setDataPosition(0); + sendRequest.writeToParcel(parcel, 1); + parcel.setDataPosition(0); + long trackId = parcel.readLong(); + String sharingAppPackageName = parcel.readString(); + String sharingAppClassName = parcel.readString(); + boolean sendMaps = parcel.readByte() == 1; + boolean sendFusionTables = parcel.readByte() == 1; + boolean sendDocs = parcel.readByte() == 1; + boolean newMap = parcel.readByte() == 1; + Parcelable account = parcel.readParcelable(null); + String mapId = parcel.readString(); + boolean mapsSuccess = parcel.readByte() == 1; + boolean fusionTablesSuccess = parcel.readByte() == 1; + boolean docsSuccess = parcel.readByte() == 1; assertEquals(1, trackId); - assertEquals(false, showMaps); - assertEquals(false, showFusionTables); - assertEquals(false, showDocs); - assertEquals(false, sendMaps); - assertEquals(false, sendFusionTables); - assertEquals(false, sendDocs); - assertEquals(false, newMap); - assertEquals(null, account); - assertEquals(null, mapId); - assertEquals(false, mapsSuccess); - assertEquals(false, fusionTablesSuccess); - assertEquals(false, docsSuccess); + assertNull(sharingAppPackageName); + assertNull(sharingAppClassName); + assertFalse(sendMaps); + assertFalse(sendFusionTables); + assertFalse(sendDocs); + assertFalse(newMap); + assertNull(account); + assertNull(mapId); + assertFalse(mapsSuccess); + assertFalse(fusionTablesSuccess); + assertFalse(docsSuccess); } /** - * Tests {@link SendRequest#writeToParcel(Parcel, int)} when all input values - * are false or negative. + * Tests {@link SendRequest#writeToParcel(Parcel, int)}. */ - public void testWriteToParcel_allFalse() { - sendRequest = new SendRequest(4, true, true, true); + public void testWriteToParcel() { + sendRequest = new SendRequest(4); + sendRequest.setSharingAppPackageName("package"); + sendRequest.setSharingAppClassName("class"); sendRequest.setSendMaps(true); sendRequest.setSendFusionTables(true); sendRequest.setSendDocs(true); @@ -298,36 +254,33 @@ public class SendRequestTest extends AndroidTestCase { sendRequest.setMapsSuccess(true); sendRequest.setFusionTablesSuccess(true); sendRequest.setDocsSuccess(true); - Parcel parcelWrite2nd = Parcel.obtain(); - parcelWrite2nd.setDataPosition(0); - sendRequest.writeToParcel(parcelWrite2nd, 1); - parcelWrite2nd.setDataPosition(0); - long trackId = parcelWrite2nd.readLong(); - boolean showMaps = parcelWrite2nd.readByte() == 1; - boolean showFusionTables = parcelWrite2nd.readByte() == 1; - boolean showDocs = parcelWrite2nd.readByte() == 1; - boolean sendMaps = parcelWrite2nd.readByte() == 1; - boolean sendFusionTables = parcelWrite2nd.readByte() == 1; - boolean sendDocs = parcelWrite2nd.readByte() == 1; - boolean newMap = parcelWrite2nd.readByte() == 1; - Parcelable account = parcelWrite2nd.readParcelable(null); - String mapId = parcelWrite2nd.readString(); - boolean mapsSuccess = parcelWrite2nd.readByte() == 1; - boolean fusionTablesSuccess = parcelWrite2nd.readByte() == 1; - boolean docsSuccess = parcelWrite2nd.readByte() == 1; + Parcel parcel = Parcel.obtain(); + parcel.setDataPosition(0); + sendRequest.writeToParcel(parcel, 1); + parcel.setDataPosition(0); + long trackId = parcel.readLong(); + String sharingAppPackageName = parcel.readString(); + String sharingAppClassName = parcel.readString(); + boolean sendMaps = parcel.readByte() == 1; + boolean sendFusionTables = parcel.readByte() == 1; + boolean sendDocs = parcel.readByte() == 1; + boolean newMap = parcel.readByte() == 1; + Parcelable account = parcel.readParcelable(null); + String mapId = parcel.readString(); + boolean mapsSuccess = parcel.readByte() == 1; + boolean fusionTablesSuccess = parcel.readByte() == 1; + boolean docsSuccess = parcel.readByte() == 1; assertEquals(4, trackId); - assertEquals(true, showMaps); - assertEquals(true, showFusionTables); - assertEquals(true, showDocs); - assertEquals(true, sendMaps); - assertEquals(true, sendFusionTables); - assertEquals(true, sendDocs); - assertEquals(true, newMap); + assertEquals("package", sharingAppPackageName); + assertEquals("class", sharingAppClassName); + assertTrue(sendMaps); + assertTrue(sendFusionTables); + assertTrue(sendDocs); + assertTrue(newMap); assertEquals(accountNew, account); assertEquals(MAPID, mapId); - assertEquals(true, mapsSuccess); - assertEquals(true, fusionTablesSuccess); - assertEquals(true, docsSuccess); + assertTrue(mapsSuccess); + assertTrue(fusionTablesSuccess); + assertTrue(docsSuccess); } - } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadResultActivityTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadResultActivityTest.java index b363ad9c5..f56de3b42 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadResultActivityTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadResultActivityTest.java @@ -97,7 +97,7 @@ public class UploadResultActivityTest private void initialActivity(boolean isSendMaps, boolean isSendFusionTables, boolean isSendDocs, boolean isMapsSuccess, boolean isFusionTablesSuccess, boolean isDocsSuccess) { Intent intent = new Intent(); - SendRequest sendRequest = new SendRequest(1L, true, true, true); + SendRequest sendRequest = new SendRequest(1L); sendRequest.setSendMaps(isSendMaps); sendRequest.setSendFusionTables(isSendFusionTables); sendRequest.setSendDocs(isSendDocs); diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadServiceChooserActivityTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadServiceChooserActivityTest.java index ff72cfb5b..e1caf2cf3 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadServiceChooserActivityTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadServiceChooserActivityTest.java @@ -50,7 +50,7 @@ public class UploadServiceChooserActivityTest extends */ public void testOnCreateDialog_displayAll() { // Initials activity to display all send items. - initialActivity(true, true, true); + initialActivity(); instrumentation.waitForIdleSync(); assertTrue(getMapsCheckBox().isShown()); assertTrue(getFusionTablesCheckBox().isShown()); @@ -79,46 +79,13 @@ public class UploadServiceChooserActivityTest extends assertFalse(getExistingMapRadioButton().isShown()); } - /** - * Tests the logic to display only the "Send to Google Maps" option. - */ - public void testOnCreateDialog_displayOne() { - // Initials activity to display all send items. - initialActivity(true, false, false); - instrumentation.waitForIdleSync(); - assertTrue(getMapsCheckBox().isShown()); - - // Clicks to enable this items. - uploadServiceChooserActivity.runOnUiThread(new Runnable() { - public void run() { - if (!getMapsCheckBox().isChecked()) { - getMapsCheckBox().performClick(); - } - } - }); - instrumentation.waitForIdleSync(); - assertTrue(getMapsCheckBox().isShown()); - assertTrue(getNewMapRadioButton().isShown()); - assertTrue(getExistingMapRadioButton().isShown()); - } - - /** - * Tests the logic to display no option. - */ - public void testOnCreateDialog_displayNone() { - initialActivity(false, false, false); - assertFalse(getMapsCheckBox().isShown()); - assertFalse(getFusionTablesCheckBox().isShown()); - assertFalse(getDocsCheckBox().isShown()); - } - /** * Tests the logic to initial state of check box to unchecked. This test cover * code in method {@link UploadServiceChooserActivity#onCreateDialog(int)}, * {@link UploadServiceChooserActivity#initState()}. */ public void testOnCreateDialog_initStateUnchecked() { - initialActivity(true, true, true); + initialActivity(); // Initial all values to false in SharedPreferences. PreferencesUtils.setBoolean(uploadServiceChooserActivity, R.string.send_to_maps_key, false); PreferencesUtils.setBoolean( @@ -141,7 +108,7 @@ public class UploadServiceChooserActivityTest extends * {@link UploadServiceChooserActivity#initState()}. */ public void testOnCreateDialog_initStateChecked() { - initialActivity(true, true, true); + initialActivity(); // Initial all values to true in SharedPreferences. PreferencesUtils.setBoolean(uploadServiceChooserActivity, R.string.pick_existing_map_key, true); PreferencesUtils.setBoolean(uploadServiceChooserActivity, R.string.send_to_maps_key, true); @@ -168,7 +135,7 @@ public class UploadServiceChooserActivityTest extends * {@link UploadServiceChooserActivity#saveState()}, */ public void testOnCreateDialog_saveState() { - initialActivity(true, true, true); + initialActivity(); // Initial all values to true in SharedPreferences. PreferencesUtils.setBoolean(uploadServiceChooserActivity, R.string.send_to_maps_key, true); PreferencesUtils.setBoolean( @@ -197,7 +164,7 @@ public class UploadServiceChooserActivityTest extends * {@link UploadServiceChooserActivity#startNextActivity()}. */ public void testOnCreateDialog_startNextActivity() { - initialActivity(true, true, true); + initialActivity(); // Initial all values to true or false in SharedPreferences. PreferencesUtils.setBoolean(uploadServiceChooserActivity, R.string.send_to_maps_key, true); PreferencesUtils.setBoolean(uploadServiceChooserActivity, R.string.send_to_docs_key, true); @@ -224,10 +191,9 @@ public class UploadServiceChooserActivityTest extends * @param showFusionTables * @param showDocs */ - private void initialActivity(boolean showMaps, boolean showFusionTables, boolean showDocs) { + private void initialActivity() { Intent intent = new Intent(); - intent.putExtra(SendRequest.SEND_REQUEST_KEY, new SendRequest(1L, showMaps, showFusionTables, - showDocs)); + intent.putExtra(SendRequest.SEND_REQUEST_KEY, new SendRequest(1L)); setActivityIntent(intent); uploadServiceChooserActivity = this.getActivity(); }