Making filter selection persistent
Change-Id: I703a71b3cb59bc3d1bf6256b7eaf12beb44e467f
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
index 3d32dd0..82d4213 100644
--- a/src/com/android/contacts/list/ContactListFilter.java
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -16,6 +16,7 @@
package com.android.contacts.list;
+import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
@@ -26,9 +27,15 @@
public static final int FILTER_TYPE_ALL_ACCOUNTS = -1;
public static final int FILTER_TYPE_CUSTOM = -2;
+ public static final int FILTER_TYPE_DEFAULT = -3;
public static final int FILTER_TYPE_ACCOUNT = 0;
public static final int FILTER_TYPE_GROUP = 1;
+ private static final String KEY_FILTER_TYPE = "filter.type";
+ private static final String KEY_ACCOUNT_NAME = "filter.accountName";
+ private static final String KEY_ACCOUNT_TYPE = "filter.accountType";
+ private static final String KEY_GROUP_ID = "filter.groupId";
+
public int filterType;
public String accountType;
public String accountName;
@@ -120,4 +127,26 @@
&& TextUtils.equals(accountType, otherFilter.accountType)
&& groupId == otherFilter.groupId;
}
+
+ public static void storeToPreferences(SharedPreferences prefs, ContactListFilter filter) {
+ prefs.edit()
+ .putInt(KEY_FILTER_TYPE, filter == null ? FILTER_TYPE_DEFAULT : filter.filterType)
+ .putString(KEY_ACCOUNT_NAME, filter == null ? null : filter.accountName)
+ .putString(KEY_ACCOUNT_TYPE, filter == null ? null : filter.accountType)
+ .putLong(KEY_GROUP_ID, filter == null ? -1 : filter.groupId)
+ .apply();
+ }
+
+ public static ContactListFilter restoreFromPreferences(SharedPreferences prefs) {
+ int filterType = prefs.getInt(KEY_FILTER_TYPE, FILTER_TYPE_DEFAULT);
+ if (filterType == FILTER_TYPE_DEFAULT) {
+ return null;
+ }
+
+ ContactListFilter filter = new ContactListFilter(filterType);
+ filter.accountName = prefs.getString(KEY_ACCOUNT_NAME, null);
+ filter.accountType = prefs.getString(KEY_ACCOUNT_TYPE, null);
+ filter.groupId = prefs.getLong(KEY_GROUP_ID, -1);
+ return filter;
+ }
}
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 0cc8901..25ae7d8 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -68,6 +68,7 @@
private NotifyingSpinner mFilterSpinner;
private ContactListFilter mFilter;
private boolean mFiltersLoaded;
+ private SharedPreferences mPrefs;
private LoaderCallbacks<List<ContactListFilter>> mGroupFilterLoaderCallbacks =
new LoaderCallbacks<List<ContactListFilter>>() {
@@ -213,8 +214,8 @@
mFilterSpinner.setVisibility(View.GONE);
return;
}
+
mFilterSpinner.setOnItemSelectedListener(this);
- mFilterSpinner.setSetSelectionListener(this);
}
@Override
@@ -279,8 +280,10 @@
@Override
public void onStart() {
+ mPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
if (mFilterEnabled) {
mFiltersLoaded = false;
+ mFilter = ContactListFilter.restoreFromPreferences(mPrefs);
}
super.onStart();
}
@@ -339,15 +342,21 @@
}
}
+ boolean filterChanged = false;
mFiltersLoaded = true;
if (mFilter == null || !filterValid) {
+ filterChanged = mFilter != null;
mFilter = getDefaultFilter();
}
mFilterSpinner.setAdapter(new FilterSpinnerAdapter());
updateFilterView();
- startLoading();
+ if (filterChanged) {
+ reloadData();
+ } else {
+ startLoading();
+ }
}
protected void setContactListFilter(int filterId) {
@@ -365,6 +374,7 @@
if (!filter.equals(mFilter)) {
mFilter = filter;
+ ContactListFilter.storeToPreferences(mPrefs, mFilter);
updateFilterView();
reloadData();
}
@@ -394,6 +404,17 @@
protected void updateFilterView() {
if (mFiltersLoaded) {
+ mFilterSpinner.setSetSelectionListener(null);
+ if (mFilter != null && mFilters != null) {
+ int size = mFilters.size();
+ for (int i = 0; i < size; i++) {
+ if (mFilters.valueAt(i).equals(mFilter)) {
+ mFilterSpinner.setSelection(i);
+ break;
+ }
+ }
+ }
+ mFilterSpinner.setSetSelectionListener(this);
mFilterSpinner.setVisibility(View.VISIBLE);
}
}