Switching join contact functionality to LoaderManager.
Change-Id: I935e1610e18d5fb72a321aad9a329ae0232ee192
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index e07d3d1..5695456 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -383,7 +383,8 @@
fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
fragment.setSearchMode(mRequest.isSearchMode());
fragment.setQueryString(mRequest.getQueryString());
- fragment.setDirectorySearchEnabled(mRequest.isDirectorySearchEnabled());
+ fragment.setDirectorySearchEnabled(
+ mRequest.isSearchMode() && mRequest.isDirectorySearchEnabled());
fragment.setAizyEnabled(!mRequest.isSearchMode());
fragment.setSelectionVisible(mTwoPaneLayout);
return fragment;
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 8c491a2..9f6cc13 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -321,16 +321,10 @@
if (loaderId == DIRECTORY_LOADER_ID) {
mAdapter.changeDirectories(data);
} else {
- final int partitionIndex = loaderId; // by convention
- mAdapter.changeCursor(partitionIndex, data);
- showCount(partitionIndex, data);
- if (partitionIndex == mAdapter.getIndexedPartition()) {
- mAizy.setIndexer(mAdapter.getIndexer());
- }
- completeRestoreInstanceState();
+ onPartitionLoaded(loaderId, data);
}
- if (isSearchMode()) {
+ if (isDirectorySearchEnabled()) {
if (mLoadDirectoryList) {
mLoadDirectoryList = false;
startLoading(DIRECTORY_LOADER_ID, null);
@@ -346,6 +340,17 @@
// }
}
+ protected void onPartitionLoaded(int partitionIndex, Cursor data) {
+ mAdapter.changeCursor(partitionIndex, data);
+ showCount(partitionIndex, data);
+ if (partitionIndex == mAdapter.getIndexedPartition()) {
+ mAizy.setIndexer(mAdapter.getIndexer());
+ }
+
+ // TODO should probably only restore instance state after all directories are loaded
+ completeRestoreInstanceState();
+ }
+
protected void reloadData() {
cancelLoading();
mAdapter.onDataReload();
diff --git a/src/com/android/contacts/list/JoinContactListFragment.java b/src/com/android/contacts/list/JoinContactListFragment.java
index acbf725..ad75ef3 100644
--- a/src/com/android/contacts/list/JoinContactListFragment.java
+++ b/src/com/android/contacts/list/JoinContactListFragment.java
@@ -19,6 +19,7 @@
import com.android.contacts.R;
import android.app.Activity;
+import android.app.LoaderManager.LoaderCallbacks;
import android.content.ContentUris;
import android.content.CursorLoader;
import android.content.Intent;
@@ -42,6 +43,51 @@
private long mTargetContactId;
private boolean mAllContactsListShown = false;
+ private LoaderCallbacks<Cursor> mLoaderCallbacks = new LoaderCallbacks<Cursor>() {
+
+ @Override
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ switch (id) {
+ case 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);
+ }
+ case JoinContactListAdapter.PARTITION_ALL_CONTACTS: {
+ JoinContactLoader loader = new JoinContactLoader(getActivity());
+ JoinContactListAdapter adapter = getAdapter();
+ if (adapter != null) {
+ adapter.configureLoader(loader, 0);
+ }
+ return loader;
+ }
+ }
+ throw new IllegalArgumentException("No loader for ID=" + id);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ switch (loader.getId()) {
+ case DISPLAY_NAME_LOADER: {
+ if (data != null && data.moveToFirst()) {
+ showTargetContactName(data.getString(0));
+ }
+ break;
+ }
+ case JoinContactListAdapter.PARTITION_ALL_CONTACTS: {
+ setAizyEnabled(mAllContactsListShown);
+
+ JoinContactListAdapter adapter = getAdapter();
+ Cursor suggestionsCursor = ((JoinContactLoader)loader).getSuggestionsCursor();
+ adapter.setSuggestionsCursor(suggestionsCursor);
+ onPartitionLoaded(JoinContactListAdapter.PARTITION_ALL_CONTACTS, data);
+ break;
+ }
+ }
+ }
+ };
+
public JoinContactListFragment() {
setPhotoLoaderEnabled(true);
setSectionHeaderDisplayEnabled(true);
@@ -53,57 +99,20 @@
}
@Override
- protected void onInitializeLoaders() {
- super.onInitializeLoaders();
- startLoading(DISPLAY_NAME_LOADER, null);
+ public void onStart() {
+ super.onStart();
+ getLoaderManager().initLoader(DISPLAY_NAME_LOADER, null, mLoaderCallbacks);
+ getLoaderManager().initLoader(JoinContactListAdapter.PARTITION_ALL_CONTACTS,
+ null, mLoaderCallbacks);
}
+ // TODO Remove this method when ContactEntryListFragment is converted to LoaderManager
@Override
public 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);
+ return null;
}
- @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 {
- throw new IllegalArgumentException("No loader for ID=" + id);
- }
- }
-
- @Override
- protected void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- if (loader.getId() == DISPLAY_NAME_LOADER) {
- if (data != null && data.moveToFirst()) {
- showTargetContactName(data.getString(0));
- }
- } else {
- JoinContactListAdapter adapter = getAdapter();
- Cursor suggestionsCursor = ((JoinContactLoader)loader).getSuggestionsCursor();
- adapter.setSuggestionsCursor(suggestionsCursor);
- super.onLoadFinished(loader, data);
- }
- }
-
- private void showTargetContactName(String displayName) {
+ private void showTargetContactName(String displayName) {
Activity activity = getActivity();
TextView blurbView = (TextView)activity.findViewById(R.id.join_contact_blurb);
String blurb = activity.getString(R.string.blurbJoinContactDataWith, displayName);
@@ -138,19 +147,15 @@
int partition = adapter.getPartitionForPosition(position);
if (partition == JoinContactListAdapter.PARTITION_SHOW_ALL_CONTACTS) {
mAllContactsListShown = true;
- reloadData();
+ configureAdapter();
+ getLoaderManager().restartLoader(JoinContactListAdapter.PARTITION_ALL_CONTACTS,
+ null, mLoaderCallbacks);
} else {
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);