Bringing back contacts display preferences.
Cleaning up some life-cycle management issues.
Change-Id: Ifd29b898e46eb5bb713d65327d80cbf7aa562933
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 26fb083..f3660fe 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -409,7 +409,6 @@
}
// The size of a home screen shortcut icon.
- private ContactsPreferences mContactsPrefs;
public int mDisplayOrder;
private int mSortOrder;
@@ -435,8 +434,6 @@
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
- mContactsPrefs = new ContactsPreferences(this);
-
mQueryHandler = new QueryHandler(this);
mJustCreated = true;
mSyncEnabled = true;
@@ -673,7 +670,6 @@
}
case MODE_LEGACY_PICK_PHONE:
case MODE_PICK_PHONE: {
- mListFragment = new DefaultContactListFragment();
PhoneNumberPickerFragment fragment = new PhoneNumberPickerFragment();
if (mMode == MODE_LEGACY_PICK_PHONE) {
fragment.setLegacyCompatibility(true);
@@ -739,8 +735,6 @@
mListFragment.setSearchMode(mSearchMode);
mListFragment.setSearchResultsMode(mSearchResultsMode);
mListFragment.setQueryString(mInitialFilter);
- mListFragment.setContactNameDisplayOrder(mContactsPrefs.getDisplayOrder());
- mListFragment.setSortOrder(mContactsPrefs.getSortOrder());
if ((mMode & MODE_MASK_SHOW_PHOTOS) == MODE_MASK_SHOW_PHOTOS) {
mListFragment.setPhotoLoaderEnabled(true);
@@ -793,29 +787,6 @@
}
}
- /**
- * Sets the mode when the request is for "default"
- */
- private void setDefaultMode() {
- // Load the preferences
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-
- mDisplayOnlyPhones = prefs.getBoolean(Prefs.DISPLAY_ONLY_PHONES,
- Prefs.DISPLAY_ONLY_PHONES_DEFAULT);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- // Move to the fragment
- if (mListFragment != null) {
- mListFragment.setContactNameDisplayOrder(mContactsPrefs.getDisplayOrder());
- mListFragment.setSortOrder(mContactsPrefs.getSortOrder());
- }
- }
-
-
@Override
protected void onStop() {
super.onStop();
@@ -1588,33 +1559,6 @@
// Cancel any pending queries
mQueryHandler.cancelOperation(QUERY_TOKEN);
- mSortOrder = mContactsPrefs.getSortOrder();
- mDisplayOrder = mContactsPrefs.getDisplayOrder();
-
- if (mListFragment != null) {
- mListFragment.setContactNameDisplayOrder(mDisplayOrder);
- mListFragment.setSortOrder(mSortOrder);
- }
-
- if (mListView instanceof ContactEntryListView) {
- ContactEntryListView listView = (ContactEntryListView)mListView;
-
- // When sort order and display order contradict each other, we want to
- // highlight the part of the name used for sorting.
- if (mSortOrder == ContactsContract.Preferences.SORT_ORDER_PRIMARY &&
- mDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_ALTERNATIVE) {
- listView.setHighlightNamesWhenScrolling(true);
- mAdapter.setNameHighlightingEnabled(true);
- } else if (mSortOrder == ContactsContract.Preferences.SORT_ORDER_ALTERNATIVE &&
- mDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) {
- listView.setHighlightNamesWhenScrolling(true);
- mAdapter.setNameHighlightingEnabled(true);
- } else {
- listView.setHighlightNamesWhenScrolling(false);
- mAdapter.setNameHighlightingEnabled(false);
- }
- }
-
String[] projection = getProjectionForQuery();
if (mSearchMode && TextUtils.isEmpty(mListFragment.getQueryString())) {
mAdapter.changeCursor(new MatrixCursor(projection));
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 94585a0..05f2364 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -28,17 +28,12 @@
private OnContactBrowserActionListener mListener;
- // TODO
- private boolean mContactsWithPhoneNumbersOnly;
-
@Override
protected void prepareEmptyView() {
if (isSearchMode()) {
return;
} else if (isSearchResultsMode()) {
setEmptyText(R.string.noMatchingContacts);
- } else if (mContactsWithPhoneNumbersOnly) {
- setEmptyText(R.string.noContactsWithPhoneNumbers);
} else if (isSyncActive()) {
if (hasIccCard()) {
setEmptyText(R.string.noContactsHelpTextWithSync);
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 6f133c4..18a1297 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -22,6 +22,7 @@
import com.android.contacts.ContactsApplicationController;
import com.android.contacts.ContactsListActivity;
import com.android.contacts.R;
+import com.android.contacts.ui.ContactsPreferences;
import com.android.contacts.widget.ContextMenuAdapter;
import com.android.contacts.widget.SearchEditText;
import com.android.contacts.widget.SearchEditText.OnCloseListener;
@@ -36,12 +37,14 @@
import android.content.Context;
import android.content.IContentService;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.database.ContentObserver;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.os.RemoteException;
+import android.preference.PreferenceManager;
import android.provider.ContactsContract;
import android.provider.Settings;
import android.provider.ContactsContract.ProviderStatus;
@@ -109,6 +112,8 @@
private SearchEditText mSearchEditText;
private ContactListEmptyView mEmptyView;
private ProviderStatusLoader mProviderStatusLoader;
+ private SharedPreferences mSharedPrefs;
+ private ContactsPreferences mContactsPrefs;
private int mProviderStatus = ProviderStatus.STATUS_NORMAL;
@@ -130,19 +135,6 @@
return mAdapter;
}
- public void setListAdapter(T adapter) {
- mAdapter = adapter;
- mListView.setAdapter(mAdapter);
- if (isPhotoLoaderEnabled()) {
- mAdapter.setPhotoLoader(mPhotoLoader);
- }
- if (isNameHighlighingEnabled()) {
- mAdapter.setNameHighlightingEnabled(true);
- }
-
- ((ContactsListActivity)getActivity()).setupListView(mAdapter, mListView);
- }
-
public View getView() {
return mView;
}
@@ -189,6 +181,7 @@
}
protected void reloadData() {
+ configureAdapter();
mAdapter.configureLoader(mLoader);
mLoader.forceLoad();
}
@@ -309,11 +302,41 @@
}
@Override
+ public void onStart() {
+ if (mSharedPrefs == null) {
+ Context activity = getActivity();
+ mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(activity);
+ mContactsPrefs = new ContactsPreferences(activity);
+ }
+
+ loadPreferences(mSharedPrefs, mContactsPrefs);
+ configureAdapter();
+ mAdapter.configureLoader(mLoader);
+
+ ContactEntryListView listView = (ContactEntryListView)mListView;
+ listView.setHighlightNamesWhenScrolling(isNameHighlighingEnabled());
+
+ super.onStart();
+ }
+
+ protected void loadPreferences(SharedPreferences prefs, ContactsPreferences contactsPrefs) {
+ setContactNameDisplayOrder(contactsPrefs.getDisplayOrder());
+ setSortOrder(contactsPrefs.getSortOrder());
+ }
+
+ @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container) {
mView = createView(inflater, container);
mAdapter = createListAdapter();
- mAdapter.configureLoader(mLoader);
- setListAdapter(mAdapter);
+ mAdapter.setSearchMode(isSearchMode());
+ mAdapter.setSearchResultsMode(isSearchResultsMode());
+
+ mListView.setAdapter(mAdapter);
+ if (isPhotoLoaderEnabled()) {
+ mAdapter.setPhotoLoader(mPhotoLoader);
+ }
+
+ ((ContactsListActivity)getActivity()).setupListView(mAdapter, mListView);
return mView;
}
@@ -350,9 +373,6 @@
mListView.setOnCreateContextMenuListener(mContextMenuAdapter);
}
- ContactEntryListView listView = (ContactEntryListView)mListView;
- listView.setHighlightNamesWhenScrolling(isNameHighlighingEnabled());
-
if (isPhotoLoaderEnabled()) {
mPhotoLoader =
new ContactPhotoLoader(getActivity(), R.drawable.ic_contact_list_picture);
@@ -377,6 +397,13 @@
return mView;
}
+ protected void configureAdapter() {
+ mAdapter.setQueryString(mQueryString);
+ mAdapter.setContactNameDisplayOrder(mDisplayOrder);
+ mAdapter.setSortOrder(mSortOrder);
+ mAdapter.setNameHighlightingEnabled(isNameHighlighingEnabled());
+ }
+
private boolean isNameHighlighingEnabled() {
// When sort order and display order contradict each other, we want to
// highlight the part of the name used for sorting.
@@ -423,7 +450,6 @@
super.onDestroy();
}
-
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
hideSoftKeyboard();
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index e52a9a2..78c5493 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -104,10 +104,6 @@
adapter.setSearchMode(isSearchMode());
adapter.setSearchResultsMode(isSearchResultsMode());
- adapter.setQueryString(getQueryString());
-
- adapter.setContactNameDisplayOrder(getContactNameDisplayOrder());
- adapter.setSortOrder(getSortOrder());
// If "Create new contact" is shown, don't display the empty list UI
adapter.setEmptyListEnabled(!isCreateContactEnabled());
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 2aa9627..d9f87f4 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -16,7 +16,10 @@
package com.android.contacts.list;
import com.android.contacts.R;
+import com.android.contacts.ui.ContactsPreferences;
+import com.android.contacts.ui.ContactsPreferencesActivity.Prefs;
+import android.content.SharedPreferences;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
@@ -31,6 +34,32 @@
private boolean mEditMode;
private boolean mCreateContactEnabled;
+ private boolean mContactsWithPhoneNumbersOnly;
+
+ @Override
+ protected void prepareEmptyView() {
+ if (mContactsWithPhoneNumbersOnly) {
+ setEmptyText(R.string.noContactsWithPhoneNumbers);
+ } else {
+ super.prepareEmptyView();
+ }
+ }
+
+ @Override
+ protected void loadPreferences(SharedPreferences prefs, ContactsPreferences contactsPrefs) {
+ super.loadPreferences(prefs, contactsPrefs);
+
+ setContactsWithPhoneNumbersOnly(prefs.getBoolean(Prefs.DISPLAY_ONLY_PHONES,
+ Prefs.DISPLAY_ONLY_PHONES_DEFAULT));
+ }
+
+ public void setContactsWithPhoneNumbersOnly(boolean flag) {
+ mContactsWithPhoneNumbersOnly = flag;
+ ContactListAdapter adapter = getAdapter();
+ if (adapter != null) {
+ ((DefaultContactListAdapter)adapter).setContactsWithPhoneNumbersOnly(flag);
+ }
+ }
@Override
protected void onItemClick(int position, long id) {
@@ -56,14 +85,6 @@
protected ContactListAdapter createListAdapter() {
DefaultContactListAdapter adapter = new DefaultContactListAdapter(getActivity());
adapter.setSectionHeaderDisplayEnabled(isSectionHeaderDisplayEnabled());
-
- adapter.setSearchMode(isSearchMode());
- adapter.setSearchResultsMode(isSearchResultsMode());
- adapter.setQueryString(getQueryString());
-
- adapter.setContactNameDisplayOrder(getContactNameDisplayOrder());
- adapter.setSortOrder(getSortOrder());
-
adapter.setDisplayPhotos(true);
adapter.setQuickContactEnabled(true);
@@ -71,6 +92,14 @@
}
@Override
+ protected void configureAdapter() {
+ super.configureAdapter();
+
+ DefaultContactListAdapter adapter = (DefaultContactListAdapter)getAdapter();
+ adapter.setContactsWithPhoneNumbersOnly(mContactsWithPhoneNumbersOnly);
+ }
+
+ @Override
protected View inflateView(LayoutInflater inflater, ViewGroup container) {
if (isSearchMode()) {
return inflater.inflate(R.layout.contacts_search_content, null);
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 3ddf42c..5322041 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -30,10 +30,16 @@
*/
public class DefaultContactListAdapter extends ContactListAdapter {
+ private boolean mContactsWithPhoneNumbersOnly;
+
public DefaultContactListAdapter(Context context) {
super(context);
}
+ public void setContactsWithPhoneNumbersOnly(boolean flag) {
+ mContactsWithPhoneNumbersOnly = flag;
+ }
+
@Override
public void configureLoader(CursorLoader loader) {
Uri uri;
@@ -43,12 +49,22 @@
TextUtils.isEmpty(query) ? "" : Uri.encode(query));
loader.setProjection(CONTACTS_SUMMARY_FILTER_PROJECTION);
if (!isSearchResultsMode()) {
- loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
+ if (mContactsWithPhoneNumbersOnly) {
+ loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1 AND "
+ + Contacts.HAS_PHONE_NUMBER + "=1");
+ } else {
+ loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
+ }
}
} else {
uri = Contacts.CONTENT_URI;
loader.setProjection(CONTACTS_SUMMARY_PROJECTION);
- loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
+ if (mContactsWithPhoneNumbersOnly) {
+ loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1 AND "
+ + Contacts.HAS_PHONE_NUMBER + "=1");
+ } else {
+ loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
+ }
}
if (isSectionHeaderDisplayEnabled()) {
diff --git a/src/com/android/contacts/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
index 315ac82..7d00669 100644
--- a/src/com/android/contacts/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
@@ -63,17 +63,8 @@
@Override
protected PhoneNumberListAdapter createListAdapter() {
PhoneNumberListAdapter adapter = new PhoneNumberListAdapter(getActivity());
-
adapter.setSectionHeaderDisplayEnabled(true);
adapter.setDisplayPhotos(true);
-
- adapter.setSearchMode(isSearchMode());
- adapter.setSearchResultsMode(isSearchResultsMode());
- adapter.setQueryString(getQueryString());
-
- adapter.setContactNameDisplayOrder(getContactNameDisplayOrder());
- adapter.setSortOrder(getSortOrder());
-
return adapter;
}
diff --git a/src/com/android/contacts/list/PostalAddressPickerFragment.java b/src/com/android/contacts/list/PostalAddressPickerFragment.java
index 133ce10..e886a76 100644
--- a/src/com/android/contacts/list/PostalAddressPickerFragment.java
+++ b/src/com/android/contacts/list/PostalAddressPickerFragment.java
@@ -57,13 +57,6 @@
adapter.setSectionHeaderDisplayEnabled(true);
adapter.setDisplayPhotos(true);
- adapter.setSearchMode(isSearchMode());
- adapter.setSearchResultsMode(isSearchResultsMode());
- adapter.setQueryString(getQueryString());
-
- adapter.setContactNameDisplayOrder(getContactNameDisplayOrder());
- adapter.setSortOrder(getSortOrder());
-
return adapter;
}
diff --git a/src/com/android/contacts/list/StrequentContactListFragment.java b/src/com/android/contacts/list/StrequentContactListFragment.java
index 58f7de3..be330ec 100644
--- a/src/com/android/contacts/list/StrequentContactListFragment.java
+++ b/src/com/android/contacts/list/StrequentContactListFragment.java
@@ -43,12 +43,7 @@
new StrequentContactListAdapter(getActivity(), CALL_BUTTON_ID);
adapter.setSectionHeaderDisplayEnabled(false);
adapter.setDisplayPhotos(true);
-
- adapter.setContactNameDisplayOrder(getContactNameDisplayOrder());
- adapter.setSortOrder(getSortOrder());
-
adapter.setQuickContactEnabled(true);
-
adapter.setCallButtonListener(this);
return adapter;
diff --git a/tests/src/com/android/contacts/ContactListModeTest.java b/tests/src/com/android/contacts/ContactListModeTest.java
index 8a3a341..f09cc8d 100644
--- a/tests/src/com/android/contacts/ContactListModeTest.java
+++ b/tests/src/com/android/contacts/ContactListModeTest.java
@@ -102,7 +102,6 @@
startActivity(intent, null, null);
ContactsListActivity activity = getActivity();
activity.runQueriesSynchronously();
- activity.onResume(); // Trigger the queries
ListView listView = (ListView)activity.findViewById(android.R.id.list);
ListAdapter adapter = listView.getAdapter();