Fixing join contact functionality, including search
Change-Id: I3fe1f6270175cbdd13448c1adecbad1ee96d2fac
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index e899d69..037c670 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -749,12 +749,9 @@
//// mJustCreated = true;
// break;
//
- case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_FILTER:
-// case SUBACTIVITY_SEARCH:
- // Pass through results of filter or search UI
+ case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER:
if (resultCode == RESULT_OK) {
- setResult(RESULT_OK, data);
- finish();
+ mListFragment.onPickerResult(data);
}
// TODO fix or remove multipicker code
diff --git a/src/com/android/contacts/JoinContactActivity.java b/src/com/android/contacts/JoinContactActivity.java
index 0f3eab0..708da8a 100644
--- a/src/com/android/contacts/JoinContactActivity.java
+++ b/src/com/android/contacts/JoinContactActivity.java
@@ -17,8 +17,11 @@
package com.android.contacts;
+import com.android.contacts.list.ContactEntryListFragment;
+import com.android.contacts.list.ContactsRequest;
import com.android.contacts.list.JoinContactListFragment;
import com.android.contacts.list.OnContactPickerActionListener;
+import com.android.contacts.ui.ContactsPreferencesActivity;
import android.app.Activity;
import android.app.FragmentTransaction;
@@ -26,7 +29,12 @@
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
+import android.provider.Settings;
+import android.provider.ContactsContract.Contacts;
import android.util.Log;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
/**
* An activity that shows a list of contacts that can be joined with the target contact.
@@ -52,6 +60,8 @@
private long mTargetContactId;
+ private JoinContactListFragment mListFragment;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -66,9 +76,9 @@
return;
}
- JoinContactListFragment fragment = new JoinContactListFragment();
- fragment.setTargetContactId(mTargetContactId);
- fragment.setOnContactPickerActionListener(new OnContactPickerActionListener() {
+ mListFragment = new JoinContactListFragment();
+ mListFragment.setTargetContactId(mTargetContactId);
+ mListFragment.setOnContactPickerActionListener(new OnContactPickerActionListener() {
public void onPickContactAction(Uri contactUri) {
Intent intent = new Intent(null, contactUri);
setResult(RESULT_OK, intent);
@@ -86,7 +96,43 @@
});
FragmentTransaction transaction = openFragmentTransaction();
- transaction.add(android.R.id.content, fragment);
+ transaction.add(android.R.id.content, mListFragment);
transaction.commit();
}
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.search, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_search: {
+ onSearchRequested();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ mListFragment.startSearch(initialQuery);
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER
+ && resultCode == RESULT_OK) {
+ mListFragment.onPickerResult(data);
+ }
+ }
}
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index ff402a2..b99c0d1 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -141,21 +141,6 @@
public void setSearchMode(boolean flag) {
mSearchMode = flag;
-
- int defaultPartitionIndex = -1;
- int count = getPartitionCount();
- for (int i = 0; i < count; i++) {
- Partition partition = getPartition(i);
- if (partition instanceof DirectoryPartition &&
- ((DirectoryPartition)partition).getDirectoryId() == Directory.DEFAULT) {
- defaultPartitionIndex = i;
- break;
- }
- }
- if (defaultPartitionIndex != -1) {
- setShowIfEmpty(defaultPartitionIndex, flag);
- setHasHeader(defaultPartitionIndex, flag);
- }
}
public boolean isSearchResultsMode() {
@@ -350,6 +335,26 @@
}
}
+ /**
+ * Changes visibility parameters for the default directory partition.
+ */
+ public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) {
+ int defaultPartitionIndex = -1;
+ int count = getPartitionCount();
+ for (int i = 0; i < count; i++) {
+ Partition partition = getPartition(i);
+ if (partition instanceof DirectoryPartition &&
+ ((DirectoryPartition)partition).getDirectoryId() == Directory.DEFAULT) {
+ defaultPartitionIndex = i;
+ break;
+ }
+ }
+ if (defaultPartitionIndex != -1) {
+ setShowIfEmpty(defaultPartitionIndex, showIfEmpty);
+ setHasHeader(defaultPartitionIndex, hasHeader);
+ }
+ }
+
@Override
protected View newHeaderView(Context context, int partition, Cursor cursor,
ViewGroup parent) {
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 9bfdbb3..b111e12 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -73,7 +73,7 @@
extends LoaderManagingFragment<Cursor>
implements OnItemClickListener, OnScrollListener, OnFocusChangeListener, OnTouchListener {
- public static final int ACTIVITY_REQUEST_CODE_FILTER = 1;
+ public static final int ACTIVITY_REQUEST_CODE_PICKER = 1;
private static final String TAG = "ContactEntryListFragment";
@@ -369,6 +369,7 @@
mAdapter.clearPartitions();
mAdapter.setSearchMode(flag);
mAdapter.setPinnedPartitionHeadersEnabled(flag);
+ mAdapter.configureDefaultPartition(flag, flag);
reloadData();
}
@@ -474,7 +475,10 @@
onCreateView(inflater, container);
mAdapter = createListAdapter();
- mAdapter.setSearchMode(isSearchMode());
+
+ boolean searchMode = isSearchMode();
+ mAdapter.setSearchMode(searchMode);
+ mAdapter.configureDefaultPartition(searchMode, searchMode);
mAdapter.setSearchResultsMode(isSearchResultsMode());
mAdapter.setPhotoLoader(mPhotoLoader);
mListView.setAdapter(mAdapter);
@@ -854,6 +858,13 @@
ContactsSearchManager.startSearch(getActivity(), initialQuery, mRequest);
}
+ /**
+ * Processes a result returned by the contact picker.
+ */
+ public void onPickerResult(Intent data) {
+ throw new UnsupportedOperationException("Picker result handler is not implemented.");
+ }
+
// TODO integrate into picker fragments
// protected Uri buildCallingPackageUri(Uri uri) {
// String callingPackage = getContext().getCallingPackage();
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index c3a50a0..de978d0 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -164,6 +164,11 @@
@Override
public void startSearch(String initialQuery) {
ContactsSearchManager.startSearchForResult(getActivity(), initialQuery,
- ACTIVITY_REQUEST_CODE_FILTER, getContactsRequest());
+ ACTIVITY_REQUEST_CODE_PICKER, getContactsRequest());
+ }
+
+ @Override
+ public void onPickerResult(Intent data) {
+ mListener.onPickContactAction(data.getData());
}
}
diff --git a/src/com/android/contacts/list/JoinContactListAdapter.java b/src/com/android/contacts/list/JoinContactListAdapter.java
index 6258be4..83c5da2 100644
--- a/src/com/android/contacts/list/JoinContactListAdapter.java
+++ b/src/com/android/contacts/list/JoinContactListAdapter.java
@@ -70,7 +70,7 @@
addPartition(false, false);
// Partition 2: All contacts
- addPartition(false, true);
+ addPartition(createDefaultDirectoryPartition());
}
public void setTargetContactId(long targetContactId) {
@@ -135,6 +135,12 @@
}
@Override
+ public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) {
+ // Don't change default partition parameters from these defaults
+ super.configureDefaultPartition(false, true);
+ }
+
+ @Override
public int getViewTypeCount() {
return super.getViewTypeCount() + 1;
}
@@ -167,6 +173,11 @@
}
@Override
+ protected void bindHeaderView(View view, int partitionIndex, Cursor cursor) {
+ // Header views are static - nothing needs to be bound
+ }
+
+ @Override
protected View newView(Context context, int partition, Cursor cursor, int position,
ViewGroup parent) {
switch (partition) {
diff --git a/src/com/android/contacts/list/JoinContactListFragment.java b/src/com/android/contacts/list/JoinContactListFragment.java
index 12b4ae4..74ff844 100644
--- a/src/com/android/contacts/list/JoinContactListFragment.java
+++ b/src/com/android/contacts/list/JoinContactListFragment.java
@@ -15,11 +15,13 @@
*/
package com.android.contacts.list;
+import com.android.contacts.ContactsSearchManager;
import com.android.contacts.R;
import android.app.Activity;
import android.content.ContentUris;
import android.content.CursorLoader;
+import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
@@ -34,7 +36,7 @@
*/
public class JoinContactListFragment extends ContactEntryListFragment<JoinContactListAdapter> {
- private static final int DISPLAY_NAME_LOADER = 1;
+ private static final int DISPLAY_NAME_LOADER = -2;
private OnContactPickerActionListener mListener;
private long mTargetContactId;
@@ -43,6 +45,7 @@
public JoinContactListFragment() {
setPhotoLoaderEnabled(true);
setSectionHeaderDisplayEnabled(true);
+ setAizyEnabled(false);
}
public void setOnContactPickerActionListener(OnContactPickerActionListener listener) {
@@ -56,14 +59,33 @@
}
@Override
+ protected Loader<Cursor> startLoading(int id, Bundle args) {
+
+ // The first two partitions don't require loaders
+ if (id == JoinContactListAdapter.PARTITION_SUGGESTIONS ||
+ id == JoinContactListAdapter.PARTITION_SHOW_ALL_CONTACTS) {
+ return null;
+ }
+
+ return super.startLoading(id, args);
+ }
+
+ @Override
protected Loader<Cursor> onCreateLoader(int id, Bundle args) {
if (id == DISPLAY_NAME_LOADER) {
// Loader for the display name of the target contact
return new CursorLoader(getActivity(),
ContentUris.withAppendedId(Contacts.CONTENT_URI, mTargetContactId),
new String[] {Contacts.DISPLAY_NAME}, null, null, null);
+ } else if (id == JoinContactListAdapter.PARTITION_ALL_CONTACTS) {
+ JoinContactLoader loader = new JoinContactLoader(getActivity());
+ JoinContactListAdapter adapter = getAdapter();
+ if (adapter != null) {
+ adapter.configureLoader(loader, 0);
+ }
+ return loader;
} else {
- return new JoinContactLoader(getActivity());
+ throw new IllegalArgumentException("No loader for ID=" + id);
}
}
@@ -121,4 +143,23 @@
mListener.onPickContactAction(adapter.getContactUri(position));
}
}
+
+ @Override
+ protected void reloadData() {
+ setAizyEnabled(mAllContactsListShown);
+ super.reloadData();
+ }
+
+ @Override
+ public void startSearch(String initialQuery) {
+ ContactsRequest request = new ContactsRequest();
+ request.setActionCode(ContactsRequest.ACTION_PICK_CONTACT);
+ ContactsSearchManager.startSearchForResult(getActivity(), initialQuery,
+ ACTIVITY_REQUEST_CODE_PICKER, request);
+ }
+
+ @Override
+ public void onPickerResult(Intent data) {
+ mListener.onPickContactAction(data.getData());
+ }
}
diff --git a/src/com/android/contacts/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
index cf787d2..93b66ac 100644
--- a/src/com/android/contacts/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
@@ -104,6 +104,11 @@
@Override
public void startSearch(String initialQuery) {
ContactsSearchManager.startSearchForResult(getActivity(), initialQuery,
- ACTIVITY_REQUEST_CODE_FILTER, getContactsRequest());
+ ACTIVITY_REQUEST_CODE_PICKER, getContactsRequest());
+ }
+
+ @Override
+ public void onPickerResult(Intent data) {
+ mListener.onPickPhoneNumberAction(data.getData());
}
}