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) {