Using an intent to switch to aggregation suggestion.
When the user picks an aggregation suggestion to edit,
switching to the new editor is now done with an intent
instead of a reload. This adds a nice transitional
animation.
Change-Id: Iaeab24a6328be51dcde69c1a6ed9babc929709a4
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index ba37da4..8ac23a4 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -24,14 +24,18 @@
import android.app.Activity;
import android.app.Dialog;
+import android.content.ContentValues;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.provider.ContactsContract.Intents.Insert;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
+import java.util.ArrayList;
+
public class ContactEditorActivity extends Activity implements
DialogManager.DialogShowingViewActivity {
private static final String TAG = "ContactEditorActivity";
@@ -144,6 +148,22 @@
public void onDeleteRequested(Uri lookupUri) {
getContactDeletionInteraction().deleteContact(lookupUri);
}
+
+ @Override
+ public void onEditOtherContactRequested(
+ Uri contactLookupUri, ArrayList<ContentValues> values) {
+ Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
+ intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+ | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
+ // Pass on all the data that has been entered so far
+ if (values != null && values.size() != 0) {
+ intent.putParcelableArrayListExtra(Insert.DATA, values);
+ }
+
+ startActivity(intent);
+ finish();
+ }
};
@Override
diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java
index 3efca45..64980a8 100644
--- a/src/com/android/contacts/views/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java
@@ -18,13 +18,13 @@
import com.android.contacts.JoinContactActivity;
import com.android.contacts.R;
+import com.android.contacts.model.AccountTypes;
import com.android.contacts.model.BaseAccountType;
import com.android.contacts.model.EntityDelta;
import com.android.contacts.model.EntityDelta.ValuesDelta;
import com.android.contacts.model.EntityDeltaList;
import com.android.contacts.model.EntityModifier;
import com.android.contacts.model.GoogleAccountType;
-import com.android.contacts.model.AccountTypes;
import com.android.contacts.util.EmptyService;
import com.android.contacts.util.WeakAsyncTask;
import com.android.contacts.views.ContactLoader;
@@ -66,7 +66,6 @@
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Intents.Insert;
import android.provider.ContactsContract.RawContacts;
import android.provider.MediaStore;
import android.text.TextUtils;
@@ -941,6 +940,13 @@
* User decided to delete the contact.
*/
void onDeleteRequested(Uri lookupUri);
+
+ /**
+ * User switched to editing a different contact (a suggestion from the
+ * aggregation engine).
+ */
+ void onEditOtherContactRequested(
+ Uri contactLookupUri, ArrayList<ContentValues> contentValues);
}
private class EntityDeltaComparator implements Comparator<EntityDelta> {
@@ -1215,21 +1221,12 @@
@Override
public void onEditAction(Uri contactLookupUri) {
- // Save all the data that has been entered so far
- ArrayList<ContentValues> values = mState.get(0).getContentValues();
-
- // Abandon the currently inserted contact
- mState = null;
-
- // Load the suggested one
- Bundle extras = null;
- if (values.size() != 0) {
- extras = new Bundle();
- extras.putParcelableArrayList(Insert.DATA, values);
+ // Abandon the currently edited contact and switch to editing
+ // the suggested one, transferring all the data there
+ if (mListener != null) {
+ mListener.onEditOtherContactRequested(
+ contactLookupUri, mState.get(0).getContentValues());
}
- load(Intent.ACTION_EDIT, contactLookupUri, Contacts.CONTENT_TYPE, extras);
- mStatus = Status.LOADING;
- getLoaderManager().restartLoader(LOADER_DATA, null, mDataLoaderListener);
}
});
suggestionView.bindSuggestion(suggestion);