Moving PhotoLoader from the activity to the fragment

Change-Id: I8a4c3a193bce8e5fcb2cacbd77482488ea916134
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index c9d4168..9681ef0 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -105,7 +105,6 @@
 import android.view.View.OnTouchListener;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
-import android.widget.AbsListView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.Filter;
@@ -113,7 +112,6 @@
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.Toast;
-import android.widget.AbsListView.OnScrollListener;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -126,7 +124,7 @@
 @SuppressWarnings("deprecation")
 public class ContactsListActivity extends Activity implements View.OnCreateContextMenuListener,
         View.OnClickListener, View.OnKeyListener, TextWatcher, TextView.OnEditorActionListener,
-        OnFocusChangeListener, OnTouchListener, OnScrollListener, ContactsApplicationController {
+        OnFocusChangeListener, OnTouchListener, ContactsApplicationController {
 
     private static final String TAG = "ContactsListActivity";
 
@@ -415,8 +413,6 @@
     private static final int CONTACTS_ID = 1001;
     private static final UriMatcher sContactsIdMatcher;
 
-    public ContactPhotoLoader mPhotoLoader;
-
     final String[] sLookupProjection = new String[] {
             Contacts.LOOKUP_KEY
     };
@@ -471,7 +467,6 @@
 
         mIconSize = getResources().getDimensionPixelSize(android.R.dimen.app_icon_size);
         mContactsPrefs = new ContactsPreferences(this);
-        mPhotoLoader = new ContactPhotoLoader(this, R.drawable.ic_contact_list_picture);
 
         mQueryHandler = new QueryHandler(this);
         mJustCreated = true;
@@ -685,7 +680,6 @@
     public void setupListView(ListAdapter adapter, ListView list) {
         mAdapter = (ContactEntryListAdapter)adapter;
 
-        list.setOnScrollListener(this);
         list.setOnKeyListener(this);
         list.setOnFocusChangeListener(this);
         list.setOnTouchListener(this);
@@ -711,17 +705,6 @@
         getContentResolver().unregisterContentObserver(mProviderStatusObserver);
     }
 
-    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
-            int totalItemCount) {
-    }
-
-    public void onScrollStateChanged(AbsListView view, int scrollState) {
-        if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
-            mPhotoLoader.pause();
-        } else if (mListFragment.isPhotoLoaderEnabled()) {
-            mPhotoLoader.resume();
-        }
-    }
 
     /**
      * Configures search UI.
@@ -768,11 +751,6 @@
                 Prefs.DISPLAY_ONLY_PHONES_DEFAULT);
     }
 
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        mPhotoLoader.stop();
-    }
 
     @Override
     protected void onPause() {
@@ -797,7 +775,6 @@
         }
 
         registerProviderStatusObserver();
-        mPhotoLoader.resume();
 
         Activity parent = getParent();
 
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index 80f8113..fc6d1a9 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -15,6 +15,7 @@
  */
 package com.android.contacts.list;
 
+import com.android.contacts.ContactPhotoLoader;
 import com.android.contacts.widget.TextWithHighlighting;
 import com.android.contacts.widget.TextWithHighlightingFactory;
 
@@ -47,6 +48,7 @@
 
     private int mDisplayOrder;
     private boolean mNameHighlightingEnabled;
+    private ContactPhotoLoader mPhotoLoader;
 
     public ContactEntryListAdapter(Context context) {
         super(context);
@@ -80,6 +82,14 @@
         return mTextWithHighlightingFactory.createTextWithHighlighting();
     }
 
+    public void setPhotoLoader(ContactPhotoLoader photoLoader) {
+        mPhotoLoader = photoLoader;
+    }
+
+    protected ContactPhotoLoader getPhotoLoader() {
+        return mPhotoLoader;
+    }
+
     /*
      * TODO change this method when loaders are introduced.
      */
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index a965e02..cc7a1f7 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts.list;
 
+import com.android.contacts.ContactPhotoLoader;
 import com.android.contacts.ContactsApplicationController;
 import com.android.contacts.ContactsListActivity;
 import com.android.contacts.R;
@@ -29,15 +30,17 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.inputmethod.InputMethodManager;
+import android.widget.AbsListView;
 import android.widget.AdapterView;
 import android.widget.ListView;
 import android.widget.TextView;
+import android.widget.AbsListView.OnScrollListener;
 
 /**
  * Common base class for various contact-related list fragments.
  */
 public abstract class ContactEntryListFragment extends Fragment
-        implements AdapterView.OnItemClickListener {
+        implements AdapterView.OnItemClickListener, OnScrollListener {
 
     private boolean mSectionHeaderDisplayEnabled;
     private boolean mPhotoLoaderEnabled;
@@ -52,6 +55,7 @@
     private boolean mLegacyCompatibility;
     private int mDisplayOrder;
     private ContextMenuAdapter mContextMenuAdapter;
+    private ContactPhotoLoader mPhotoLoader;
 
     protected abstract View inflateView(LayoutInflater inflater, ViewGroup container);
     protected abstract ContactEntryListAdapter createListAdapter();
@@ -182,6 +186,39 @@
                         "<b>" + getQueryString() + "</b>")));
             }
         }
+
+        if (isPhotoLoaderEnabled()) {
+            mPhotoLoader =
+                    new ContactPhotoLoader(getActivity(), R.drawable.ic_contact_list_picture);
+            mAdapter.setPhotoLoader(mPhotoLoader);
+            mListView.setOnScrollListener(this);
+        }
+    }
+
+    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+            int totalItemCount) {
+    }
+
+    public void onScrollStateChanged(AbsListView view, int scrollState) {
+        if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
+            mPhotoLoader.pause();
+        } else if (isPhotoLoaderEnabled()) {
+            mPhotoLoader.resume();
+        }
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        if (isPhotoLoaderEnabled()) {
+            mPhotoLoader.resume();
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        mPhotoLoader.stop();
+        super.onDestroy();
     }
 
     private void configurePinnedHeader() {
diff --git a/src/com/android/contacts/list/ContactItemListAdapter.java b/src/com/android/contacts/list/ContactItemListAdapter.java
index 9168ac6..a1d1f12 100644
--- a/src/com/android/contacts/list/ContactItemListAdapter.java
+++ b/src/com/android/contacts/list/ContactItemListAdapter.java
@@ -363,8 +363,7 @@
                 viewToUse = view.getPhotoView();
             }
 
-            final int position = cursor.getPosition();
-            contactsListActivity.mPhotoLoader.loadPhoto(viewToUse, photoId);
+            getPhotoLoader().loadPhoto(viewToUse, photoId);
         }
 
         if ((contactsListActivity.mMode & ContactsListActivity.MODE_MASK_NO_PRESENCE) == 0) {
diff --git a/src/com/android/contacts/list/MultiplePhonePickerAdapter.java b/src/com/android/contacts/list/MultiplePhonePickerAdapter.java
index 393b35a..11109d2 100644
--- a/src/com/android/contacts/list/MultiplePhonePickerAdapter.java
+++ b/src/com/android/contacts/list/MultiplePhonePickerAdapter.java
@@ -137,7 +137,7 @@
             }
 
             final int position = cursor.getPosition();
-            mMultiplePhonePickerActivity.mPhotoLoader.loadPhoto(viewToUse, photoId);
+            getPhotoLoader().loadPhoto(viewToUse, photoId);
         }
 
         if (!displayAdditionalData) {