Consolidate utility methods to start QuickContact (1/2)

Test: Manually start QuickContact from
  1. DefaultContactBrowseListFragment
  2. Me profile (preferences)
  3. Group members
  4. Duplicates (with result)
  5. Editor (after save)
  6. Shortcuts

Bug: 31666272

Change-Id: I0ad41bdefb69bcc680488dd39e74f02b2b8a4c65
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 2c18744..9990e9f 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -571,10 +571,6 @@
         final Intent intent = new Intent(this, ContactsPreferenceActivity.class);
         intent.putExtra(ContactsPreferenceActivity.EXTRA_NEW_LOCAL_PROFILE,
                 CompactContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE);
-        intent.putExtra(ContactsPreferenceActivity.EXTRA_MODE_FULLY_EXPANDED,
-                QuickContactActivity.MODE_FULLY_EXPANDED);
-        intent.putExtra(ContactsPreferenceActivity.EXTRA_PREVIOUS_SCREEN_TYPE,
-                QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE);
         return intent;
     }
 
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 09963f2..bd106df 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -72,7 +72,6 @@
 import com.android.contacts.list.ContactsRequest;
 import com.android.contacts.list.ContactsUnavailableFragment;
 import com.android.contacts.list.DefaultContactBrowseListFragment;
-import com.android.contacts.quickcontact.QuickContactActivity;
 import com.android.contacts.util.SyncUtil;
 import com.android.contactsbind.FeatureHighlightHelper;
 import com.android.contactsbind.ObjectFactory;
@@ -339,11 +338,8 @@
 
         switch (mRequest.getActionCode()) {
             case ContactsRequest.ACTION_VIEW_CONTACT: {
-                final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
-                        PeopleActivity.this, mRequest.getContactUri(),
-                        QuickContactActivity.MODE_FULLY_EXPANDED);
-                intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, ScreenType.UNKNOWN);
-                ImplicitIntentsUtil.startActivityInApp(this, intent);
+                ImplicitIntentsUtil.startQuickContact(
+                        this, mRequest.getContactUri(), ScreenType.UNKNOWN);
                 return false;
             }
             case ContactsRequest.ACTION_INSERT_GROUP: {
diff --git a/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java b/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java
index dbf3cb9..f544c7b 100644
--- a/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java
+++ b/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java
@@ -40,15 +40,11 @@
     private static final String TAG_DISPLAY_OPTIONS = "display_options";
 
     private String mNewLocalProfileExtra;
-    private String mPreviousScreenExtra;
-    private int mModeFullyExpanded;
     private boolean mAreContactsAvailable;
 
     private ProviderStatusWatcher mProviderStatusWatcher;
 
     public static final String EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
-    public static final String EXTRA_MODE_FULLY_EXPANDED = "modeFullyExpanded";
-    public static final String EXTRA_PREVIOUS_SCREEN_TYPE = "previousScreenType";
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -62,16 +58,12 @@
         mProviderStatusWatcher = ProviderStatusWatcher.getInstance(this);
 
         mNewLocalProfileExtra = getIntent().getStringExtra(EXTRA_NEW_LOCAL_PROFILE);
-        mModeFullyExpanded = getIntent().getIntExtra(EXTRA_MODE_FULLY_EXPANDED,
-                QuickContact.MODE_LARGE);
-        mPreviousScreenExtra = getIntent().getStringExtra(EXTRA_PREVIOUS_SCREEN_TYPE);
         final int providerStatus = mProviderStatusWatcher.getProviderStatus();
         mAreContactsAvailable = providerStatus == ProviderStatus.STATUS_NORMAL;
 
         if (savedInstanceState == null) {
             final DisplayOptionsPreferenceFragment fragment = DisplayOptionsPreferenceFragment
-                    .newInstance(mNewLocalProfileExtra, mPreviousScreenExtra, mModeFullyExpanded,
-                            mAreContactsAvailable);
+                    .newInstance(mNewLocalProfileExtra, mAreContactsAvailable);
             getFragmentManager().beginTransaction()
                     .replace(android.R.id.content, fragment, TAG_DISPLAY_OPTIONS)
                     .commit();
diff --git a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
index 3bbdbb1..89208a8 100644
--- a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
+++ b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
@@ -61,9 +61,7 @@
     private static final int REQUEST_CODE_CUSTOM_CONTACTS_FILTER = 0;
 
     private static final String ARG_CONTACTS_AVAILABLE = "are_contacts_available";
-    private static final String ARG_MODE_FULLY_EXPANDED = "mode_fully_expanded";
     private static final String ARG_NEW_LOCAL_PROFILE = "new_local_profile";
-    private static final String ARG_PREVIOUS_SCREEN = "previous_screen";
 
     private static final String KEY_ABOUT = "about";
     private static final String KEY_ACCOUNTS = "accounts";
@@ -115,8 +113,6 @@
     }
 
     private String mNewLocalProfileExtra;
-    private String mPreviousScreenExtra;
-    private int mModeFullyExpanded;
     private boolean mAreContactsAvailable;
 
     private boolean mHasProfile;
@@ -149,12 +145,10 @@
     };
 
     public static DisplayOptionsPreferenceFragment newInstance(String newLocalProfileExtra,
-            String previousScreenExtra, int modeFullyExpanded, boolean areContactsAvailable) {
+            boolean areContactsAvailable) {
         final DisplayOptionsPreferenceFragment fragment = new DisplayOptionsPreferenceFragment();
         final Bundle args = new Bundle();
         args.putString(ARG_NEW_LOCAL_PROFILE, newLocalProfileExtra);
-        args.putString(ARG_PREVIOUS_SCREEN, previousScreenExtra);
-        args.putInt(ARG_MODE_FULLY_EXPANDED, modeFullyExpanded);
         args.putBoolean(ARG_CONTACTS_AVAILABLE, areContactsAvailable);
         fragment.setArguments(args);
         return fragment;
@@ -179,8 +173,6 @@
 
         final Bundle args = getArguments();
         mNewLocalProfileExtra = args.getString(ARG_NEW_LOCAL_PROFILE);
-        mPreviousScreenExtra = args.getString(ARG_PREVIOUS_SCREEN);
-        mModeFullyExpanded = args.getInt(ARG_MODE_FULLY_EXPANDED);
         mAreContactsAvailable = args.getBoolean(ARG_CONTACTS_AVAILABLE);
 
         removeUnsupportedPreferences();
@@ -312,18 +304,15 @@
             ExportDialogFragment.show(getFragmentManager(), ContactsPreferenceActivity.class,
                     ExportDialogFragment.EXPORT_MODE_ALL_CONTACTS);
             return true;
-        }else if (KEY_MY_INFO.equals(prefKey)) {
-            final Intent intent;
+        } else if (KEY_MY_INFO.equals(prefKey)) {
             if (mHasProfile) {
                 final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, mProfileContactId);
-                intent = ImplicitIntentsUtil.composeQuickContactIntent(getContext(), uri,
-                        mModeFullyExpanded);
-                intent.putExtra(mPreviousScreenExtra, ScreenType.ME_CONTACT);
+                ImplicitIntentsUtil.startQuickContact(getActivity(), uri, ScreenType.ME_CONTACT);
             } else {
-                intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+                final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
                 intent.putExtra(mNewLocalProfileExtra, true);
+                ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
             }
-            ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
             return true;
         } else if (KEY_ACCOUNTS.equals(prefKey)) {
             ImplicitIntentsUtil.startActivityOutsideApp(getContext(),
diff --git a/src/com/android/contacts/common/util/ImplicitIntentsUtil.java b/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
index 19d171c..3ed59b3 100644
--- a/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
+++ b/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts.common.util;
 
+import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -27,6 +28,7 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 
+import com.android.contacts.common.logging.ScreenEvent.ScreenType;
 import com.android.contacts.common.model.account.GoogleAccountType;
 import com.android.contacts.quickcontact.QuickContactActivity;
 
@@ -96,16 +98,55 @@
     }
 
     /**
+     * Starts QuickContact in app with the default mode and specified previous screen type.
+     */
+    public static void startQuickContact(Activity activity, Uri contactLookupUri,
+            int previousScreenType) {
+        startQuickContact(activity, contactLookupUri, previousScreenType, /* requestCode */ -1);
+    }
+
+    /**
+     * Starts QuickContact for result with the default mode and specified previous screen type.
+     */
+    public static void startQuickContactForResult(Activity activity, Uri contactLookupUri,
+            int previousScreenType, int requestCode) {
+        startQuickContact(activity, contactLookupUri, previousScreenType, requestCode);
+    }
+
+    private static void startQuickContact(Activity activity, Uri contactLookupUri,
+            int previousScreenType, int requestCode) {
+        final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
+                activity, contactLookupUri, previousScreenType);
+
+        if (requestCode >= 0) {
+            activity.startActivityForResult(intent, requestCode);
+        } else {
+            startActivityInApp(activity, intent);
+        }
+    }
+
+    /**
+     * Returns an implicit intent for opening QuickContacts with the default mode and specified
+     * previous screen type.
+     */
+    public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
+            int previousScreenType) {
+        return composeQuickContactIntent(context, contactLookupUri,
+                QuickContactActivity.MODE_FULLY_EXPANDED, previousScreenType);
+    }
+
+    /**
      * Returns an implicit intent for opening QuickContacts.
      */
     public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
-            int extraMode) {
+            int mode, int previousScreenType) {
         final Intent intent = new Intent(context, QuickContactActivity.class);
         intent.setAction(QuickContact.ACTION_QUICK_CONTACT);
         intent.setData(contactLookupUri);
-        intent.putExtra(QuickContact.EXTRA_MODE, extraMode);
+        intent.putExtra(QuickContact.EXTRA_MODE, mode);
         // Make sure not to show QuickContacts on top of another QuickContacts.
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, previousScreenType);
         return intent;
     }
 
@@ -134,7 +175,7 @@
 
     public static Intent getIntentForQuickContactLauncherShortcut(Context context, Uri contactUri) {
         final Intent intent = composeQuickContactIntent(context, contactUri,
-                QuickContact.MODE_LARGE);
+                QuickContact.MODE_LARGE, ScreenType.UNKNOWN);
         intent.setPackage(context.getPackageName());
 
         // When starting from the launcher, start in a new, cleared task.
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index f228b70..4142a79 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -21,7 +21,6 @@
 import android.app.Fragment;
 import android.app.LoaderManager;
 import android.content.ActivityNotFoundException;
-import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
@@ -1547,10 +1546,8 @@
                 if (saveSucceeded && contactLookupUri != null) {
                     final Uri lookupUri = ContactEditorUtils.maybeConvertToLegacyLookupUri(
                             mContext, contactLookupUri, mLookupUri);
-                    resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(mContext,
-                            lookupUri, QuickContactActivity.MODE_FULLY_EXPANDED);
-                    resultIntent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE,
-                            ScreenType.EDITOR);
+                    resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(
+                            mContext, lookupUri, ScreenType.EDITOR);
                     resultIntent.putExtra(QuickContactActivity.EXTRA_CONTACT_EDITED, true);
                 } else {
                     resultIntent = null;
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index f7897bc..fd3c670 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -58,7 +58,6 @@
 import com.android.contacts.list.ContactsRequest;
 import com.android.contacts.list.MultiSelectContactsListFragment;
 import com.android.contacts.list.UiIntentActions;
-import com.android.contacts.quickcontact.QuickContactActivity;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -613,11 +612,8 @@
         final int count = getAdapter().getCount();
         Logger.logListEvent(ListEvent.ActionType.CLICK, ListEvent.ListType.GROUP, count,
                 /* clickedIndex */ position, /* numSelected */ 0);
-        final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
-                getContext(), uri, QuickContactActivity.MODE_FULLY_EXPANDED);
-        intent.putExtra(
-                QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, ScreenEvent.ScreenType.LIST_GROUP);
-        startActivity(intent);
+        ImplicitIntentsUtil.startQuickContact(
+                getActivity(), uri, ScreenEvent.ScreenType.LIST_GROUP);
     }
 
     @Override
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 67293d1..dd45fc2 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -54,7 +54,6 @@
 import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.R;
 import com.android.contacts.activities.ActionBarAdapter;
-import com.android.contacts.activities.PeopleActivity;
 import com.android.contacts.common.Experiments;
 import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.list.ContactEntryListFragment;
@@ -773,7 +772,6 @@
 
         @Override
         public void onSelectionChange() {
-
         }
 
         @Override
@@ -784,8 +782,6 @@
                 ContactsContract.QuickContact.showQuickContact(getContext(), new Rect(),
                         contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED, null);
             } else {
-                final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
-                        getContext(), contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED);
                 final int previousScreen;
                 if (isSearchMode()) {
                     previousScreen = ScreenEvent.ScreenType.SEARCH;
@@ -800,12 +796,14 @@
                         previousScreen = ScreenEvent.ScreenType.LIST_ACCOUNT;
                     }
                 }
+
                 Logger.logListEvent(ListEvent.ActionType.CLICK,
                         /* listType */ getListTypeIncludingSearch(),
                         /* count */ getAdapter().getCount(),
                         /* clickedIndex */ position, /* numSelected */ 0);
-                intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, previousScreen);
-                ImplicitIntentsUtil.startActivityInApp(getContext(), intent);
+
+                ImplicitIntentsUtil.startQuickContact(
+                        getActivity(), contactLookupUri, previousScreen);
             }
         }