Merge "Forward intent extras to editor activity from springboard" into ub-contactsdialer-h-dev
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 1845a52..3052a24 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -164,7 +164,7 @@
void load(String action, Uri lookupUri, Bundle intentExtras);
/**
- * Applies extras from the hosting Activity to the first writable raw contact.
+ * Applies extras from the hosting Activity to the writable raw contact.
*/
void setIntentExtras(Bundle extras);
diff --git a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
index 5b71c48..69dccb5 100644
--- a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
@@ -30,7 +30,8 @@
* This activity has noHistory set to true, and all intents coming out from it have
* {@code FLAG_ACTIVITY_FORWARD_RESULT} set.
*/
-public class ContactEditorSpringBoardActivity extends AppCompatContactsActivity {
+public class ContactEditorSpringBoardActivity extends AppCompatContactsActivity implements
+ PickRawContactDialogFragment.PickRawContactListener {
private static final String TAG = "EditorSpringBoard";
private static final String TAG_RAW_CONTACTS_DIALOG = "rawContactsDialog";
private static final int LOADER_RAW_CONTACTS = 1;
@@ -109,13 +110,17 @@
if (ContactsContract.AUTHORITY.equals(authority) &&
RawContacts.CONTENT_ITEM_TYPE.equals(type)) {
final long rawContactId = ContentUris.parseId(mUri);
- final Intent editorIntent = getIntentForRawContact(rawContactId);
- ImplicitIntentsUtil.startActivityInApp(this, editorIntent);
+ startEditorAndForwardExtras(getIntentForRawContact(rawContactId));
} else {
getLoaderManager().initLoader(LOADER_RAW_CONTACTS, null, mRawContactLoaderListener);
}
}
+ @Override
+ public void onPickRawContact(long rawContactId) {
+ startEditorAndForwardExtras(getIntentForRawContact(rawContactId));
+ }
+
/**
* Start the dialog to pick the raw contact to edit.
*/
@@ -134,7 +139,7 @@
ft.remove(oldFragment);
}
final PickRawContactDialogFragment newFragment = PickRawContactDialogFragment.getInstance(
- mUri, mCursor, mMaterialPalette, mIsUserProfile);
+ mCursor, mIsUserProfile);
ft.add(newFragment, TAG_RAW_CONTACTS_DIALOG);
// commitAllowingStateLoss is safe in this activity because the fragment entirely depends
// on the result of the loader. Even if we lose the fragment because the activity was
@@ -163,7 +168,7 @@
// Destroy the loader to prevent multiple onLoadFinished calls in case CP2 is updating in
// the background.
getLoaderManager().destroyLoader(LOADER_RAW_CONTACTS);
- ImplicitIntentsUtil.startActivityInApp(this, intent);
+ startEditorAndForwardExtras(intent);
}
/**
@@ -195,4 +200,15 @@
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
return intent;
}
+
+ /**
+ * Starts the given intent within the app, attaching any extras to it that were passed to us.
+ */
+ private void startEditorAndForwardExtras(Intent intent) {
+ final Bundle extras = getIntent().getExtras();
+ if (extras != null) {
+ intent.putExtras(extras);
+ }
+ ImplicitIntentsUtil.startActivityInApp(this, intent);
+ }
}
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 9f55551..0f1ff8e 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -1366,19 +1366,7 @@
@Override
public void setIntentExtras(Bundle extras) {
- if (extras == null || extras.size() == 0) {
- return;
- }
-
- final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
- for (RawContactDelta state : mState) {
- final AccountType type = state.getAccountType(accountTypes);
- if (type.areContactsWritable()) {
- // Apply extras to the first writable raw contact only
- RawContactModifier.parseExtras(mContext, type, state, extras);
- break;
- }
- }
+ getContent().setIntentExtras(extras);
}
@Override
diff --git a/src/com/android/contacts/editor/PickRawContactDialogFragment.java b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
index 623d038..dd079a2 100644
--- a/src/com/android/contacts/editor/PickRawContactDialogFragment.java
+++ b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
@@ -6,7 +6,6 @@
import android.content.ContentUris;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
@@ -28,18 +27,19 @@
import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.model.account.GoogleAccountType;
import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
/**
+ * Should only be started from an activity that implements {@link PickRawContactListener}.
* Dialog containing the raw contacts that make up a contact. On selection the editor is loaded
* for the chosen raw contact.
*/
public class PickRawContactDialogFragment extends DialogFragment {
- private static final String ARGS_URI = "uri";
- private static final String ARGS_MATERIAL_PALETTE = "materialPalette";
private static final String ARGS_IS_USER_PROFILE = "isUserProfile";
+ public interface PickRawContactListener {
+ void onPickRawContact(long rawContactId);
+ }
+
/**
* Used to list the account info for the given raw contacts list.
*/
@@ -142,18 +142,12 @@
// Cursor holding all raw contact rows for the given Contact.
private Cursor mCursor;
- // Uri for the whole Contact.
- private Uri mUri;
private CursorAdapter mAdapter;
- private MaterialPalette mMaterialPalette;
private boolean mIsUserProfile;
- public static PickRawContactDialogFragment getInstance(Uri uri, Cursor cursor,
- MaterialPalette materialPalette, boolean isUserProfile) {
+ public static PickRawContactDialogFragment getInstance(Cursor cursor, boolean isUserProfile) {
final PickRawContactDialogFragment fragment = new PickRawContactDialogFragment();
final Bundle args = new Bundle();
- args.putParcelable(ARGS_URI, uri);
- args.putParcelable(ARGS_MATERIAL_PALETTE, materialPalette);
args.putBoolean(ARGS_IS_USER_PROFILE, isUserProfile);
fragment.setArguments(args);
fragment.setCursor(cursor);
@@ -162,6 +156,10 @@
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
+ if (!(getActivity() instanceof PickRawContactListener)) {
+ throw new IllegalArgumentException(
+ "Host activity doesn't implement PickRawContactListener");
+ }
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
mAdapter = new RawContactAccountListAdapter(getContext(), mCursor);
builder.setTitle(R.string.contact_editor_pick_raw_contact_dialog_title);
@@ -169,10 +167,7 @@
@Override
public void onClick(DialogInterface dialog, int which) {
final long rawContactId = mAdapter.getItemId(which);
- final Intent intent = EditorIntents.createEditContactIntentForRawContact(
- getActivity(), mUri, rawContactId, mMaterialPalette);
- intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
+ ((PickRawContactListener) getActivity()).onPickRawContact(rawContactId);
}
});
builder.setCancelable(true);
@@ -192,8 +187,6 @@
final Bundle args = getArguments();
if (args != null) {
- mUri = args.getParcelable(ARGS_URI);
- mMaterialPalette = args.getParcelable(ARGS_MATERIAL_PALETTE);
mIsUserProfile = args.getBoolean(ARGS_IS_USER_PROFILE);
}
}
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index 1b37dab..fe7894a 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -21,6 +21,7 @@
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.ContactsContract.CommonDataKinds.Email;
@@ -223,6 +224,8 @@
private boolean mIsExpanded;
+ private Bundle mIntentExtras;
+
private ValuesDelta mPhotoValuesDelta;
public RawContactEditorView(Context context) {
@@ -425,6 +428,10 @@
}
}
+ public void setIntentExtras(Bundle extras) {
+ mIntentExtras = extras;
+ }
+
public void setState(RawContactDeltaList rawContactDeltas,
MaterialColorMapUtils.MaterialPalette materialPalette, ViewIdGenerator viewIdGenerator,
boolean hasNewContact, boolean isUserProfile, AccountWithDataSet primaryAccount,
@@ -455,6 +462,8 @@
return;
}
pickRawContactDelta();
+ // Apply any intent extras now that we have selected a raw contact delta.
+ applyIntentExtras();
parseRawContactDelta();
if (mKindSectionDataMap.isEmpty()) {
elog("No kind section data parsed from RawContactDelta(s)");
@@ -531,6 +540,17 @@
}
+ private void applyIntentExtras() {
+ if (mIntentExtras == null || mIntentExtras.size() == 0) {
+ return;
+ }
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(getContext());
+ final AccountType type = mCurrentRawContactDelta.getAccountType(accountTypes);
+
+ RawContactModifier.parseExtras(getContext(), type, mCurrentRawContactDelta, mIntentExtras);
+ mIntentExtras = null;
+ }
+
private void parseRawContactDelta() {
mKindSectionDataMap.clear();
mSortedMimetypes.clear();