Start ContactSheet instead of QuickContacts (1/2)
Test: Manually start QuickContact and ContactSheet from
1. DefaultContactBrowseListFragment
2. Me profile (preferences)
3. Group members
4. Duplicates (with result)
5. Editor (known issue here that ContactSheet doesn't refresh)
6. Shortcuts (this one always ones QuickContact)
Bug: 31666272
Change-Id: Ia939b89fee4f18b62b3d72c87a5077cf350ded24
diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
index 772cf26..83b8f4d 100644
--- a/src-bind/com/android/contactsbind/ObjectFactory.java
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -20,6 +20,8 @@
import android.app.Fragment;
import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
/**
* Creates default bindings for overlays.
@@ -47,4 +49,8 @@
public static Fragment getDuplicatesUtilFragment() {
return null;
}
+
+ public static Intent getContactSheetIntent(Context context, Uri contactLookupUri) {
+ return null;
+ }
}
diff --git a/src/com/android/contacts/activities/CompactContactEditorActivity.java b/src/com/android/contacts/activities/CompactContactEditorActivity.java
index 6d969ba..7de2e27 100644
--- a/src/com/android/contacts/activities/CompactContactEditorActivity.java
+++ b/src/com/android/contacts/activities/CompactContactEditorActivity.java
@@ -24,6 +24,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.QuickContact;
import android.provider.ContactsContract.RawContacts;
import android.util.Log;
import android.view.View;
@@ -284,6 +285,14 @@
if (mFinishActivityOnSaveCompleted) {
setResult(resultIntent == null ? RESULT_CANCELED : RESULT_OK, resultIntent);
} else if (resultIntent != null) {
+ // If it's a smart profile Intent it must be started "for result"
+ if (QuickContact.ACTION_QUICK_CONTACT.equals(resultIntent.getAction())) {
+ ImplicitIntentsUtil.startActivityInApp(
+ CompactContactEditorActivity.this, resultIntent);
+ } else {
+ startActivityForResult(resultIntent, /* requestCode */ 0);
+ }
+
ImplicitIntentsUtil.startActivityInApp(
CompactContactEditorActivity.this, resultIntent);
}
diff --git a/src/com/android/contacts/common/Experiments.java b/src/com/android/contacts/common/Experiments.java
index 9db3222..9ddf5b3 100644
--- a/src/com/android/contacts/common/Experiments.java
+++ b/src/com/android/contacts/common/Experiments.java
@@ -21,6 +21,11 @@
public final class Experiments {
/**
+ * Whether to open contact sheet (aka smart profile) instead of our own QuickContact.
+ */
+ public static final String CONTACT_SHEET = "QuickContact__contact_sheet";
+
+ /**
* Experiment to enable dynamic strequent shortcuts.
*/
public static final String DYNAMIC_SHORTCUTS = "Shortcuts__dynamic_shortcuts";
@@ -36,11 +41,6 @@
public static final String SEARCH_YENTA = "Search__yenta";
/**
- * Whether to open contact sheet (aka smart profile) instead of our own QuickContact.
- */
- public static final String CONTACT_SHEET = "QuickContact__contact_sheet";
-
- /**
* Flags for minimum content update time
*/
public static final String DYNAMIC_MIN_CONTENT_CHANGE_UPDATE_DELAY_MILLIS =
diff --git a/src/com/android/contacts/common/util/ImplicitIntentsUtil.java b/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
index 3ed59b3..9a0eb93 100644
--- a/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
+++ b/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
@@ -28,9 +28,12 @@
import android.provider.Settings;
import android.text.TextUtils;
+import com.android.contacts.common.Experiments;
import com.android.contacts.common.logging.ScreenEvent.ScreenType;
import com.android.contacts.common.model.account.GoogleAccountType;
import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
import java.util.List;
@@ -115,10 +118,23 @@
private static void startQuickContact(Activity activity, Uri contactLookupUri,
int previousScreenType, int requestCode) {
+
+ if (Flags.getInstance(activity).getBoolean(Experiments.CONTACT_SHEET)) {
+ final Intent intent = ObjectFactory.getContactSheetIntent(activity, contactLookupUri);
+ if (intent != null) {
+ // We must start ContactSheet "for result" with a requestCode that is >= 0
+ // so that ContactSheet can validate that the caller is a 1P app.
+ activity.startActivityForResult(intent, requestCode >= 0 ? requestCode : 0);
+ return;
+ }
+ }
+
final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
activity, contactLookupUri, previousScreenType);
+ // For the non ContactSheet case we only start "for result" if specifically requested.
if (requestCode >= 0) {
+ intent.setPackage(activity.getPackageName());
activity.startActivityForResult(intent, requestCode);
} else {
startActivityInApp(activity, intent);
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 4142a79..0e7d6e6 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -63,6 +63,7 @@
import com.android.contacts.activities.CompactContactEditorActivity.ContactEditor;
import com.android.contacts.activities.ContactEditorAccountsChangedActivity;
import com.android.contacts.activities.ContactSelectionActivity;
+import com.android.contacts.common.Experiments;
import com.android.contacts.common.logging.ScreenEvent.ScreenType;
import com.android.contacts.common.model.AccountTypeManager;
import com.android.contacts.common.model.Contact;
@@ -83,6 +84,8 @@
import com.android.contacts.util.HelpUtils;
import com.android.contacts.util.PhoneCapabilityTester;
import com.android.contacts.util.UiClosables;
+import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -1542,13 +1545,18 @@
}
switch (saveMode) {
case SaveMode.CLOSE: {
- final Intent resultIntent;
+ Intent resultIntent = null;
if (saveSucceeded && contactLookupUri != null) {
final Uri lookupUri = ContactEditorUtils.maybeConvertToLegacyLookupUri(
mContext, contactLookupUri, mLookupUri);
- resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(
- mContext, lookupUri, ScreenType.EDITOR);
- resultIntent.putExtra(QuickContactActivity.EXTRA_CONTACT_EDITED, true);
+ if (Flags.getInstance(mContext).getBoolean(Experiments.CONTACT_SHEET)) {
+ resultIntent = ObjectFactory.getContactSheetIntent(mContext, lookupUri);
+ }
+ if (resultIntent == null) {
+ resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(
+ mContext, lookupUri, ScreenType.EDITOR);
+ resultIntent.putExtra(QuickContactActivity.EXTRA_CONTACT_EDITED, true);
+ }
} else {
resultIntent = null;
}