Merge "Use new Loader API and properly unregister Observers"
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 05f18ed..81c4a2b 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -83,10 +83,10 @@
@Override
public void onStart() {
- super.onStart();
if (mSelectedContactUri != null && isSelectionVisible()) {
getLoaderManager().initLoader(SELECTED_ID_LOADER, null, mIdLoaderCallbacks);
}
+ super.onStart();
}
@Override
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 9f6cc13..60b5bb1 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -24,11 +24,13 @@
import com.android.contacts.ui.ContactsPreferences;
import com.android.contacts.widget.CompositeCursorAdapter.Partition;
import com.android.contacts.widget.ContextMenuAdapter;
-import com.android.contacts.widget.InstrumentedLoaderManagingFragment;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.app.LoaderManager.LoaderCallbacks;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
@@ -69,8 +71,9 @@
* Common base class for various contact-related list fragments.
*/
public abstract class ContactEntryListFragment<T extends ContactEntryListAdapter>
- extends InstrumentedLoaderManagingFragment<Cursor>
- implements OnItemClickListener, OnScrollListener, OnFocusChangeListener, OnTouchListener {
+ extends Fragment
+ implements OnItemClickListener, OnScrollListener, OnFocusChangeListener, OnTouchListener,
+ LoaderCallbacks<Cursor> {
public static final int ACTIVITY_REQUEST_CODE_PICKER = 1;
@@ -179,10 +182,6 @@
}
@Override
- protected void onInitializeLoaders() {
- }
-
- @Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(KEY_SECTION_HEADER_DISPLAY_ENABLED, mSectionHeaderDisplayEnabled);
@@ -274,13 +273,13 @@
startLoadingDirectoryPartition(i);
}
} else {
- startLoading(i, null);
+ getLoaderManager().initLoader(i, null, this);
}
}
}
@Override
- protected Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
if (id == DIRECTORY_LOADER_ID) {
DirectoryListLoader loader = new DirectoryListLoader(mContext);
mAdapter.configureDirectoryLoader(loader);
@@ -297,19 +296,18 @@
private void startLoadingDirectoryPartition(int partitionIndex) {
DirectoryPartition partition = (DirectoryPartition)mAdapter.getPartition(partitionIndex);
- CursorLoader loader = (CursorLoader)getLoader(partitionIndex);
- if (loader == null) {
- Bundle args = new Bundle();
- args.putLong(DIRECTORY_ID_ARG_KEY, partition.getDirectoryId());
- startLoading(partitionIndex, args);
- } else if (mForceLoad) {
- mAdapter.configureLoader(loader, partition.getDirectoryId());
- loader.forceLoad();
+ Bundle args = new Bundle();
+ long directoryId = partition.getDirectoryId();
+ args.putLong(DIRECTORY_ID_ARG_KEY, directoryId);
+ if (mForceLoad) {
+ getLoaderManager().restartLoader(partitionIndex, args, this);
+ } else {
+ getLoaderManager().initLoader(partitionIndex, args, this);
}
}
@Override
- protected void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (!checkProviderStatus(false)) {
if (data != null) {
data.close();
@@ -327,7 +325,7 @@
if (isDirectorySearchEnabled()) {
if (mLoadDirectoryList) {
mLoadDirectoryList = false;
- startLoading(DIRECTORY_LOADER_ID, null);
+ getLoaderManager().initLoader(DIRECTORY_LOADER_ID, null, this);
} else if (mLoadPriorityDirectoriesOnly) {
mLoadPriorityDirectoriesOnly = false;
startLoading();
@@ -352,29 +350,12 @@
}
protected void reloadData() {
- cancelLoading();
mAdapter.onDataReload();
mLoadPriorityDirectoriesOnly = true;
mForceLoad = true;
startLoading();
}
- private void cancelLoading() {
- int size = mAdapter.getPartitionCount();
- for (int i = 0; i < size; i++) {
- CursorLoader loader = (CursorLoader)getLoader(i);
- if (loader != null) {
- loader.cancelLoad();
- }
- }
- }
-
- @Override
- public void onStop() {
- super.onStop();
- mAdapter.clearPartitions();
- }
-
/**
* Configures the empty view. It is called when we are about to populate
* the list with an empty cursor.
diff --git a/src/com/android/contacts/list/JoinContactListFragment.java b/src/com/android/contacts/list/JoinContactListFragment.java
index ad75ef3..591a999 100644
--- a/src/com/android/contacts/list/JoinContactListFragment.java
+++ b/src/com/android/contacts/list/JoinContactListFragment.java
@@ -106,12 +106,6 @@
null, mLoaderCallbacks);
}
- // TODO Remove this method when ContactEntryListFragment is converted to LoaderManager
- @Override
- public Loader<Cursor> startLoading(int id, Bundle args) {
- return null;
- }
-
private void showTargetContactName(String displayName) {
Activity activity = getActivity();
TextView blurbView = (TextView)activity.findViewById(R.id.join_contact_blurb);
diff --git a/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java b/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java
index 213f954..af72389 100644
--- a/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java
+++ b/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java
@@ -15,6 +15,7 @@
*/
package com.android.contacts.widget;
+import android.app.Fragment;
import android.app.LoaderManagingFragment;
import android.content.Loader;
import android.os.Bundle;
@@ -23,7 +24,7 @@
* A modification of the {@link LoaderManagingFragment} class that supports testing of
* loader-based fragments using synchronous data loading.
*/
-public abstract class InstrumentedLoaderManagingFragment<D> extends LoaderManagingFragment<D> {
+public abstract class InstrumentedLoaderManagingFragment<D> extends Fragment {
public interface Delegate<D> {
void onStartLoading(Loader<D> loader);
@@ -35,15 +36,15 @@
this.mDelegate = listener;
}
- @Override
- public Loader<D> startLoading(int id, Bundle args) {
- if (mDelegate != null) {
- Loader<D> loader = onCreateLoader(id, args);
- loader.registerListener(id, this);
- mDelegate.onStartLoading(loader);
- return loader;
- } else {
- return super.startLoading(id, args);
- }
- }
+// public Loader<D> startLoading(int id, Bundle args) {
+// getLoaderManager().initLoader(id, args, callback);
+// if (mDelegate != null) {
+// Loader<D> loader = onCreateLoader(id, args);
+// loader.registerListener(id, this);
+// mDelegate.onStartLoading(loader);
+// return loader;
+// } else {
+// return super.startLoading(id, args);
+// }
+// }
}
diff --git a/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java b/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java
index cfc87d9..40607bf 100644
--- a/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java
+++ b/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java
@@ -105,7 +105,7 @@
new LoaderManagingFragmentTestDelegate<Cursor>();
// Divert loader registration to the delegate to ensure that loading is done synchronously
- fragment.setDelegate(delegate);
+// fragment.setDelegate(delegate);
// Fragment life cycle
fragment.onCreate(null);
diff --git a/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java b/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java
index d5763a2..353bfc7 100644
--- a/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java
+++ b/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java
@@ -13,8 +13,7 @@
* A delegate of {@link InstrumentedLoaderManagingFragment} that performs
* synchronous loading on demand for unit testing.
*/
-public class LoaderManagingFragmentTestDelegate<D> implements
- InstrumentedLoaderManagingFragment.Delegate<D> {
+public class LoaderManagingFragmentTestDelegate<D> {
// Using a linked hash map to get all loading done in a predictable order.
private LinkedHashMap<Integer, Loader<D>> mStartedLoaders =