Merge "Reduce the number of times that dataset changed is triggerd in DashboardAdapter" into nyc-mr1-dev

This commit is contained in:
Doris Ling
2016-07-13 17:13:05 +00:00
committed by Android (Google) Code Review
2 changed files with 34 additions and 8 deletions

View File

@@ -20,6 +20,7 @@ import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon; import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.support.v7.widget.PopupMenu; import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.text.TextUtils; import android.text.TextUtils;
@@ -45,10 +46,13 @@ import com.android.settingslib.drawer.Tile;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.DashboardItemHolder> public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.DashboardItemHolder>
implements View.OnClickListener { implements View.OnClickListener {
public static final String TAG = "DashboardAdapter"; 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_SPACER = 0;
private static final int NS_SUGGESTION = 1000; private static final int NS_SUGGESTION = 1000;
private static final int NS_ITEMS = 2000; private static final int NS_ITEMS = 2000;
@@ -80,13 +84,20 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
private Condition mExpandedCondition = null; private Condition mExpandedCondition = null;
private SuggestionParser mSuggestionParser; private SuggestionParser mSuggestionParser;
public DashboardAdapter(Context context, SuggestionParser parser) { public DashboardAdapter(Context context, SuggestionParser parser, Bundle savedInstanceState,
List<Condition> conditions) {
mContext = context; mContext = context;
mCache = new IconCache(context); mCache = new IconCache(context);
mSuggestionParser = parser; mSuggestionParser = parser;
mConditions = conditions;
setHasStableIds(true); setHasStableIds(true);
setShowingAll(true); setShowingAll(true);
if (savedInstanceState != null) {
mSuggestions = savedInstanceState.getParcelableArrayList(STATE_SUGGESTION_LIST);
mCategories = savedInstanceState.getParcelableArrayList(STATE_CATEGORY_LIST);
}
} }
public List<Tile> getSuggestions() { public List<Tile> getSuggestions() {
@@ -94,9 +105,11 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
} }
public void setSuggestions(List<Tile> suggestions) { public void setSuggestions(List<Tile> suggestions) {
if (!Objects.equals(mSuggestions, suggestions)) {
mSuggestions = suggestions; mSuggestions = suggestions;
recountItems(); recountItems();
} }
}
public Tile getTile(ComponentName component) { public Tile getTile(ComponentName component) {
for (int i = 0; i < mCategories.size(); i++) { for (int i = 0; i < mCategories.size(); i++) {
@@ -111,6 +124,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
} }
public void setCategories(List<DashboardCategory> categories) { public void setCategories(List<DashboardCategory> categories) {
if (Objects.equals(mCategories, categories)) {
return;
}
mCategories = categories; mCategories = categories;
// TODO: Better place for tinting? // TODO: Better place for tinting?
@@ -133,9 +149,11 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
} }
public void setConditions(List<Condition> conditions) { public void setConditions(List<Condition> conditions) {
if (!Objects.equals(mConditions, conditions)) {
mConditions = conditions; mConditions = conditions;
recountItems(); recountItems();
} }
}
public boolean isShowingAll() { public boolean isShowingAll() {
return mIsShowingAll; return mIsShowingAll;
@@ -422,6 +440,12 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
return packageName; return packageName;
} }
void onSaveInstanceState(Bundle outState) {
outState.putParcelableArrayList(STATE_SUGGESTION_LIST, new ArrayList<Tile>(mSuggestions));
outState.putParcelableArrayList(STATE_CATEGORY_LIST,
new ArrayList<DashboardCategory>(mCategories));
}
private static class IconCache { private static class IconCache {
private final Context mContext; private final Context mContext;

View File

@@ -165,6 +165,9 @@ public class DashboardSummary extends InstrumentedFragment
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
if (mLayoutManager == null) return; if (mLayoutManager == null) return;
outState.putInt(EXTRA_SCROLL_POSITION, mLayoutManager.findFirstVisibleItemPosition()); outState.putInt(EXTRA_SCROLL_POSITION, mLayoutManager.findFirstVisibleItemPosition());
if (mAdapter != null) {
mAdapter.onSaveInstanceState(outState);
}
} }
@Override @Override
@@ -181,14 +184,13 @@ public class DashboardSummary extends InstrumentedFragment
mDashboard.setHasFixedSize(true); mDashboard.setHasFixedSize(true);
mDashboard.setListener(this); mDashboard.setListener(this);
mDashboard.addItemDecoration(new DashboardDecorator(getContext())); mDashboard.addItemDecoration(new DashboardDecorator(getContext()));
mAdapter = new DashboardAdapter(getContext(), mSuggestionParser); mAdapter = new DashboardAdapter(getContext(), mSuggestionParser, bundle,
mAdapter.setConditions(mConditionManager.getConditions()); mConditionManager.getConditions());
mDashboard.setAdapter(mAdapter); mDashboard.setAdapter(mAdapter);
mSummaryLoader.setAdapter(mAdapter); mSummaryLoader.setAdapter(mAdapter);
ConditionAdapterUtils.addDismiss(mDashboard); ConditionAdapterUtils.addDismiss(mDashboard);
if (DEBUG_TIMING) Log.d(TAG, "onViewCreated took " if (DEBUG_TIMING) Log.d(TAG, "onViewCreated took "
+ (System.currentTimeMillis() - startTime) + " ms"); + (System.currentTimeMillis() - startTime) + " ms");
rebuildUI(); rebuildUI();
} }