Fixing a broken test

Change-Id: Icced148d376a1e6cd8e810be72b208fa25021b4a
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 60b5bb1..ae63791 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -136,6 +136,8 @@
 
     private Context mContext;
 
+    private LoaderManager mLoaderManager;
+
     protected abstract View inflateView(LayoutInflater inflater, ViewGroup container);
     protected abstract T createListAdapter();
 
@@ -150,6 +152,7 @@
     public void onAttach(Activity activity) {
         super.onAttach(activity);
         setContext(activity);
+        setLoaderManager(super.getLoaderManager());
     }
 
     /**
@@ -164,6 +167,18 @@
         return mContext;
     }
 
+    /**
+     * Overrides a loader manager for use in unit tests.
+     */
+    public void setLoaderManager(LoaderManager loaderManager) {
+        mLoaderManager = loaderManager;
+    }
+
+    @Override
+    public LoaderManager getLoaderManager() {
+        return mLoaderManager;
+    }
+
     public T getAdapter() {
         return mAdapter;
     }
diff --git a/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java b/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java
deleted file mode 100644
index af72389..0000000
--- a/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.widget;
-
-import android.app.Fragment;
-import android.app.LoaderManagingFragment;
-import android.content.Loader;
-import android.os.Bundle;
-
-/**
- * A modification of the {@link LoaderManagingFragment} class that supports testing of
- * loader-based fragments using synchronous data loading.
- */
-public abstract class InstrumentedLoaderManagingFragment<D> extends Fragment {
-
-    public interface Delegate<D> {
-        void onStartLoading(Loader<D> loader);
-    }
-
-    private Delegate<D> mDelegate;
-
-    public void setDelegate(Delegate<D> listener) {
-        this.mDelegate = listener;
-    }
-
-//    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 40607bf..8ad3cb9 100644
--- a/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java
+++ b/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java
@@ -19,15 +19,15 @@
 import com.android.contacts.list.DefaultContactBrowseListFragment;
 import com.android.contacts.tests.mocks.ContactsMockContext;
 import com.android.contacts.tests.mocks.MockContentProvider;
-import com.android.contacts.widget.LoaderManagingFragmentTestDelegate;
+import com.android.contacts.widget.TestLoaderManager;
 
 import android.database.Cursor;
 import android.provider.ContactsContract;
-import android.provider.Settings;
 import android.provider.ContactsContract.ContactCounts;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.ProviderStatus;
 import android.provider.ContactsContract.StatusUpdates;
+import android.provider.Settings;
 import android.test.InstrumentationTestCase;
 import android.test.suitebuilder.annotation.Smoke;
 import android.view.LayoutInflater;
@@ -101,11 +101,11 @@
 
         DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
 
-        LoaderManagingFragmentTestDelegate<Cursor> delegate =
-                new LoaderManagingFragmentTestDelegate<Cursor>();
+        TestLoaderManager loaderManager = new TestLoaderManager();
 
-        // Divert loader registration to the delegate to ensure that loading is done synchronously
-//        fragment.setDelegate(delegate);
+        // Divert loader registration the TestLoaderManager to ensure that loading is
+        // done synchronously
+        fragment.setLoaderManager(loaderManager);
 
         // Fragment life cycle
         fragment.onCreate(null);
@@ -121,7 +121,7 @@
         fragment.onStart();
 
         // All loaders have been registered. Now perform the loading synchronously.
-        delegate.executeLoaders();
+        loaderManager.executeLoaders();
 
         // Now we can assert that the data got loaded into the list.
         ListView listView = (ListView)view.findViewById(android.R.id.list);
diff --git a/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java b/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java
deleted file mode 100644
index 353bfc7..0000000
--- a/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.contacts.widget;
-
-import android.content.AsyncTaskLoader;
-import android.content.Loader;
-
-import java.util.LinkedHashMap;
-
-import junit.framework.Assert;
-
-/**
- * A delegate of {@link InstrumentedLoaderManagingFragment} that performs
- * synchronous loading on demand for unit testing.
- */
-public class LoaderManagingFragmentTestDelegate<D> {
-
-    // Using a linked hash map to get all loading done in a predictable order.
-    private LinkedHashMap<Integer, Loader<D>> mStartedLoaders =
-            new LinkedHashMap<Integer, Loader<D>>();
-
-    public void onStartLoading(Loader<D> loader) {
-        int id = loader.getId();
-        mStartedLoaders.put(id, loader);
-    }
-
-    /**
-     * Synchronously runs all started loaders.
-     */
-    public void executeLoaders() {
-        for (Loader<D> loader : mStartedLoaders.values()) {
-            executeLoader(loader);
-        }
-    }
-
-    /**
-     * Synchronously runs the specified loader.
-     */
-    public void executeLoader(int id) {
-        Loader<D> loader = mStartedLoaders.get(id);
-        if (loader == null) {
-            Assert.fail("Loader not started: " + id);
-        }
-        executeLoader(loader);
-    }
-
-    private void executeLoader(Loader<D> loader) {
-        if (loader instanceof AsyncTaskLoader) {
-            AsyncTaskLoader<D> atLoader = (AsyncTaskLoader<D>)loader;
-            D data = atLoader.loadInBackground();
-            atLoader.deliverResult(data);
-        } else {
-            loader.forceLoad();
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/contacts/widget/TestLoaderManager.java b/tests/src/com/android/contacts/widget/TestLoaderManager.java
new file mode 100644
index 0000000..7d292ae
--- /dev/null
+++ b/tests/src/com/android/contacts/widget/TestLoaderManager.java
@@ -0,0 +1,85 @@
+// Copyright 2010 Google Inc. All Rights Reserved.
+
+package com.android.contacts.widget;
+
+import android.app.LoaderManager;
+import android.content.AsyncTaskLoader;
+import android.content.Loader;
+import android.content.Loader.OnLoadCompleteListener;
+import android.os.Bundle;
+
+import java.util.LinkedHashMap;
+
+import junit.framework.Assert;
+
+/**
+ * A {@link LoaderManager} that performs synchronous loading on demand for unit
+ * testing.
+ */
+public class TestLoaderManager implements LoaderManager {
+
+    // Using a linked hash map to get all loading done in a predictable order.
+    private LinkedHashMap<Integer, Loader<?>> mStartedLoaders = new LinkedHashMap<
+            Integer, Loader<?>>();
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public <D> Loader<D> getLoader(int id) {
+        return (Loader<D>)mStartedLoaders.get(id);
+    }
+
+    @Override
+    public <D> Loader<D> initLoader(int id, Bundle args, final LoaderCallbacks<D> callbacks) {
+        Loader<D> loader = callbacks.onCreateLoader(id, args);
+        loader.registerListener(id, new OnLoadCompleteListener<D>() {
+            @Override
+            public void onLoadComplete(Loader<D> loader, D data) {
+                callbacks.onLoadFinished(loader, data);
+            }
+        });
+
+        mStartedLoaders.put(id, loader);
+        return loader;
+    }
+
+    @Override
+    public <D> Loader<D> restartLoader(int id, Bundle args, LoaderCallbacks<D> callbacks) {
+        return initLoader(id, args, callbacks);
+    }
+
+    @Override
+    public void stopLoader(int id) {
+        mStartedLoaders.get(id).stopLoading();
+    }
+
+    /**
+     * Synchronously runs all started loaders.
+     */
+    public void executeLoaders() {
+        for (Loader<?> loader : mStartedLoaders.values()) {
+            executeLoader(loader);
+        }
+    }
+
+    /**
+     * Synchronously runs the specified loader.
+     */
+    public void executeLoader(int id) {
+        Loader<?> loader = mStartedLoaders.get(id);
+        if (loader == null) {
+            Assert.fail("Loader not started: " + id);
+        }
+        executeLoader(loader);
+    }
+
+    @SuppressWarnings("unchecked")
+    private <D> void executeLoader(final Loader<D> loader) {
+        if (loader instanceof AsyncTaskLoader) {
+            AsyncTaskLoader<D> atLoader = (AsyncTaskLoader<D>)loader;
+            D data = atLoader.loadInBackground();
+            loader.deliverResult(data);
+        } else {
+            loader.forceLoad();
+        }
+    }
+}