diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 7c767943674..b49bb7b4459 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; +import android.os.Bundle; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; @@ -45,10 +46,13 @@ import com.android.settingslib.drawer.Tile; import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class DashboardAdapter extends RecyclerView.Adapter implements View.OnClickListener { public static final String TAG = "DashboardAdapter"; + private static final String STATE_SUGGESTION_LIST = "suggestion_list"; + private static final String STATE_CATEGORY_LIST = "category_list"; private static final int NS_SPACER = 0; private static final int NS_SUGGESTION = 1000; private static final int NS_ITEMS = 2000; @@ -80,13 +84,20 @@ public class DashboardAdapter extends RecyclerView.Adapter conditions) { mContext = context; mCache = new IconCache(context); mSuggestionParser = parser; + mConditions = conditions; setHasStableIds(true); setShowingAll(true); + + if (savedInstanceState != null) { + mSuggestions = savedInstanceState.getParcelableArrayList(STATE_SUGGESTION_LIST); + mCategories = savedInstanceState.getParcelableArrayList(STATE_CATEGORY_LIST); + } } public List getSuggestions() { @@ -94,8 +105,10 @@ public class DashboardAdapter extends RecyclerView.Adapter suggestions) { - mSuggestions = suggestions; - recountItems(); + if (!Objects.equals(mSuggestions, suggestions)) { + mSuggestions = suggestions; + recountItems(); + } } public Tile getTile(ComponentName component) { @@ -111,6 +124,9 @@ public class DashboardAdapter extends RecyclerView.Adapter categories) { + if (Objects.equals(mCategories, categories)) { + return; + } mCategories = categories; // TODO: Better place for tinting? @@ -133,8 +149,10 @@ public class DashboardAdapter extends RecyclerView.Adapter conditions) { - mConditions = conditions; - recountItems(); + if (!Objects.equals(mConditions, conditions)) { + mConditions = conditions; + recountItems(); + } } public boolean isShowingAll() { @@ -422,6 +440,12 @@ public class DashboardAdapter extends RecyclerView.Adapter(mSuggestions)); + outState.putParcelableArrayList(STATE_CATEGORY_LIST, + new ArrayList(mCategories)); + } + private static class IconCache { private final Context mContext; diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index e04b255b15a..24b5aee7b7f 100644 --- a/src/com/android/settings/dashboard/DashboardSummary.java +++ b/src/com/android/settings/dashboard/DashboardSummary.java @@ -165,6 +165,9 @@ public class DashboardSummary extends InstrumentedFragment super.onSaveInstanceState(outState); if (mLayoutManager == null) return; outState.putInt(EXTRA_SCROLL_POSITION, mLayoutManager.findFirstVisibleItemPosition()); + if (mAdapter != null) { + mAdapter.onSaveInstanceState(outState); + } } @Override @@ -181,14 +184,13 @@ public class DashboardSummary extends InstrumentedFragment mDashboard.setHasFixedSize(true); mDashboard.setListener(this); mDashboard.addItemDecoration(new DashboardDecorator(getContext())); - mAdapter = new DashboardAdapter(getContext(), mSuggestionParser); - mAdapter.setConditions(mConditionManager.getConditions()); + mAdapter = new DashboardAdapter(getContext(), mSuggestionParser, bundle, + mConditionManager.getConditions()); mDashboard.setAdapter(mAdapter); mSummaryLoader.setAdapter(mAdapter); ConditionAdapterUtils.addDismiss(mDashboard); if (DEBUG_TIMING) Log.d(TAG, "onViewCreated took " + (System.currentTimeMillis() - startTime) + " ms"); - rebuildUI(); }