Fixing INSERT_OR_EDIT intent for contacts
Change-Id: I62e8c3628bed7443232d0e23ed50d34a55788f70
diff --git a/src/com/android/contacts/JoinContactActivity.java b/src/com/android/contacts/JoinContactActivity.java
index ea48763..5089b8c 100644
--- a/src/com/android/contacts/JoinContactActivity.java
+++ b/src/com/android/contacts/JoinContactActivity.java
@@ -75,20 +75,24 @@
mListFragment = new JoinContactListFragment();
mListFragment.setTargetContactId(mTargetContactId);
mListFragment.setOnContactPickerActionListener(new OnContactPickerActionListener() {
+ @Override
public void onPickContactAction(Uri contactUri) {
Intent intent = new Intent(null, contactUri);
setResult(RESULT_OK, intent);
finish();
}
- public void onSearchAllContactsAction(String string) {
- }
-
+ @Override
public void onShortcutIntentCreated(Intent intent) {
}
+ @Override
public void onCreateNewContactAction() {
}
+
+ @Override
+ public void onEditContactAction(Uri contactLookupUri) {
+ }
});
FragmentTransaction transaction = getFragmentManager().openTransaction();
diff --git a/src/com/android/contacts/activities/ContactSearchActivity.java b/src/com/android/contacts/activities/ContactSearchActivity.java
index a42f56b..0c8d141 100644
--- a/src/com/android/contacts/activities/ContactSearchActivity.java
+++ b/src/com/android/contacts/activities/ContactSearchActivity.java
@@ -103,8 +103,6 @@
fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
fragment.setAizyEnabled(false);
fragment.setSelectionVisible(true);
- fragment.setEditMode(mRequest.getActionCode() ==
- ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT);
return fragment;
}
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 7bcfea9..cfe9710 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -178,10 +178,10 @@
mActionCode = mRequest.getActionCode();
switch (mActionCode) {
case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: {
- DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
- fragment.setEditMode(true);
+ ContactPickerFragment fragment = new ContactPickerFragment();
fragment.setCreateContactEnabled(true);
- fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_CONTACT_SHORTCUT);
+ fragment.setEditMode(true);
+ fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
mListFragment = fragment;
break;
}
@@ -337,6 +337,12 @@
}
@Override
+ public void onEditContactAction(Uri contactLookupUri) {
+ Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
+ startActivityAndForwardResult(intent);
+ }
+
+ @Override
public void onPickContactAction(Uri contactUri) {
Intent intent = new Intent();
setResult(RESULT_OK, intent.setData(contactUri));
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 9572dda..0937608 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -21,6 +21,7 @@
import android.content.Intent;
import android.net.Uri;
+import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -33,8 +34,13 @@
public class ContactPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
implements OnShortcutIntentCreatedListener {
+ private static final String KEY_EDIT_MODE = "editMode";
+ private static final String KEY_CREATE_CONTACT_ENABLED = "createContactEnabled";
+ private static final String KEY_SHORTCUT_REQUESTED = "shortcutRequested";
+
private OnContactPickerActionListener mListener;
private boolean mCreateContactEnabled;
+ private boolean mEditMode;
private boolean mShortcutRequested;
public ContactPickerFragment() {
@@ -57,6 +63,14 @@
this.mCreateContactEnabled = flag;
}
+ public boolean isEditMode() {
+ return mEditMode;
+ }
+
+ public void setEditMode(boolean flag) {
+ mEditMode = flag;
+ }
+
public boolean isShortcutRequested() {
return mShortcutRequested;
}
@@ -66,6 +80,27 @@
}
@Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putBoolean(KEY_EDIT_MODE, mEditMode);
+ outState.putBoolean(KEY_CREATE_CONTACT_ENABLED, mCreateContactEnabled);
+ outState.putBoolean(KEY_SHORTCUT_REQUESTED, mShortcutRequested);
+ }
+
+ @Override
+ public void restoreSavedState(Bundle savedState) {
+ super.restoreSavedState(savedState);
+
+ if (savedState == null) {
+ return;
+ }
+
+ mEditMode = savedState.getBoolean(KEY_EDIT_MODE);
+ mCreateContactEnabled = savedState.getBoolean(KEY_CREATE_CONTACT_ENABLED);
+ mShortcutRequested = savedState.getBoolean(KEY_SHORTCUT_REQUESTED);
+ }
+
+ @Override
protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
super.onCreateView(inflater, container);
if (mCreateContactEnabled) {
@@ -75,7 +110,7 @@
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- if (position == 0 && !isSearchMode() && mCreateContactEnabled) {
+ if (position == 0 && mCreateContactEnabled) {
mListener.onCreateNewContactAction();
} else {
super.onItemClick(parent, view, position, id);
@@ -90,14 +125,28 @@
} else {
uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
}
- if (mShortcutRequested) {
+ if (mEditMode) {
+ editContact(uri);
+ } else if (mShortcutRequested) {
ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
builder.createContactShortcutIntent(uri);
} else {
- mListener.onPickContactAction(uri);
+ pickContact(uri);
}
}
+ public void createNewContact() {
+ mListener.onCreateNewContactAction();
+ }
+
+ public void editContact(Uri contactUri) {
+ mListener.onEditContactAction(contactUri);
+ }
+
+ public void pickContact(Uri uri) {
+ mListener.onPickContactAction(uri);
+ }
+
@Override
protected ContactEntryListAdapter createListAdapter() {
if (!isLegacyCompatibilityMode()) {
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index bd43afc..651228b 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -35,14 +35,10 @@
public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
implements ContactListFilterController.ContactListFilterListener {
- private static final String KEY_EDIT_MODE = "editMode";
- private static final String KEY_CREATE_CONTACT_ENABLED = "createContactEnabled";
private static final String KEY_FILTER_ENABLED = "filterEnabled";
private static final int REQUEST_CODE_CUSTOMIZE_FILTER = 3;
- private boolean mEditMode;
- private boolean mCreateContactEnabled;
private View mCounterHeaderView;
private View mSearchHeaderView;
@@ -71,8 +67,6 @@
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- outState.putBoolean(KEY_EDIT_MODE, mEditMode);
- outState.putBoolean(KEY_CREATE_CONTACT_ENABLED, mCreateContactEnabled);
outState.putBoolean(KEY_FILTER_ENABLED, mFilterEnabled);
}
@@ -84,23 +78,12 @@
return;
}
- mEditMode = savedState.getBoolean(KEY_EDIT_MODE);
- mCreateContactEnabled = savedState.getBoolean(KEY_CREATE_CONTACT_ENABLED);
setFilterEnabled(savedState.getBoolean(KEY_FILTER_ENABLED));
}
@Override
protected void onItemClick(int position, long id) {
- ContactListAdapter adapter = getAdapter();
- if (isEditMode()) {
- if (position == 0 && !isSearchMode() && isCreateContactEnabled()) {
- createNewContact();
- } else {
- editContact(adapter.getContactUri(position));
- }
- } else {
- viewContact(adapter.getContactUri(position));
- }
+ viewContact(getAdapter().getContactUri(position));
}
@Override
@@ -197,14 +180,6 @@
}
}
- public boolean isEditMode() {
- return mEditMode;
- }
-
- public void setEditMode(boolean flag) {
- mEditMode = flag;
- }
-
public boolean isFilterEnabled() {
return mFilterEnabled;
}
@@ -213,14 +188,6 @@
this.mFilterEnabled = flag;
}
- public boolean isCreateContactEnabled() {
- return mCreateContactEnabled;
- }
-
- public void setCreateContactEnabled(boolean flag) {
- this.mCreateContactEnabled = flag;
- }
-
@Override
protected void startLoading() {
if (mFilterController != null && !mFilterController.isLoaded()) {
diff --git a/src/com/android/contacts/list/OnContactPickerActionListener.java b/src/com/android/contacts/list/OnContactPickerActionListener.java
index 1216888..0c26e9e 100644
--- a/src/com/android/contacts/list/OnContactPickerActionListener.java
+++ b/src/com/android/contacts/list/OnContactPickerActionListener.java
@@ -24,11 +24,6 @@
public interface OnContactPickerActionListener {
/**
- * Creates a new contact and then returns it to the caller.
- */
- void onCreateNewContactAction();
-
- /**
* Returns the selected contact to the requester.
*/
void onPickContactAction(Uri contactUri);
@@ -37,4 +32,14 @@
* Returns the selected contact as a shortcut intent.
*/
void onShortcutIntentCreated(Intent intent);
+
+ /**
+ * Creates a new contact and then returns it to the caller.
+ */
+ void onCreateNewContactAction();
+
+ /**
+ * Opens the specified contact for editing.
+ */
+ void onEditContactAction(Uri contactLookupUri);
}
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index b3048f5..4cc9cc8 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -316,7 +316,9 @@
}
case ACTION_INSERT_OR_EDIT: {
Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
- startContactListActivity(intent);
+ intent.setType(Contacts.CONTENT_ITEM_TYPE);
+ putDataExtra(intent);
+ startActivity(intent);
break;
}
case ACTION_SEARCH_CALL: {
@@ -440,17 +442,7 @@
case EDIT_NEW_CONTACT_WITH_DATA: {
Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
- ContentValues row1 = new ContentValues();
- row1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
- row1.put(Organization.COMPANY, "Android");
-
- ContentValues row2 = new ContentValues();
- row2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
- row2.put(Email.TYPE, Email.TYPE_CUSTOM);
- row2.put(Email.LABEL, "Green Bot");
- row2.put(Email.ADDRESS, "android@android.com");
-
- intent.putParcelableArrayListExtra(Insert.DATA, Lists.newArrayList(row1, row2));
+ putDataExtra(intent);
startActivity(intent);
break;
@@ -665,21 +657,25 @@
final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
intent.putExtra(Insert.ACCOUNT, account);
- ContentValues row1 = new ContentValues();
- row1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
- row1.put(Organization.COMPANY, "Android");
-
- ContentValues row2 = new ContentValues();
- row2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
- row2.put(Email.TYPE, Email.TYPE_CUSTOM);
- row2.put(Email.LABEL, "Green Bot");
- row2.put(Email.ADDRESS, "android@android.com");
-
- intent.putParcelableArrayListExtra(Insert.DATA, Lists.newArrayList(row1, row2));
+ putDataExtra(intent);
startActivity(intent);
break;
}
}
}
+
+ public void putDataExtra(final Intent intent) {
+ ContentValues row1 = new ContentValues();
+ row1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+ row1.put(Organization.COMPANY, "Android");
+
+ ContentValues row2 = new ContentValues();
+ row2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+ row2.put(Email.TYPE, Email.TYPE_CUSTOM);
+ row2.put(Email.LABEL, "Green Bot");
+ row2.put(Email.ADDRESS, "android@android.com");
+
+ intent.putParcelableArrayListExtra(Insert.DATA, Lists.newArrayList(row1, row2));
+ }
}