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.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<DashboardAdapter.DashboardItemHolder>
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<DashboardAdapter.Dash
private Condition mExpandedCondition = null;
private SuggestionParser mSuggestionParser;
public DashboardAdapter(Context context, SuggestionParser parser) {
public DashboardAdapter(Context context, SuggestionParser parser, Bundle savedInstanceState,
List<Condition> 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<Tile> getSuggestions() {
@@ -94,8 +105,10 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
}
public void setSuggestions(List<Tile> 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<DashboardAdapter.Dash
}
public void setCategories(List<DashboardCategory> categories) {
if (Objects.equals(mCategories, categories)) {
return;
}
mCategories = categories;
// TODO: Better place for tinting?
@@ -133,8 +149,10 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
}
public void setConditions(List<Condition> 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<DashboardAdapter.Dash
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 final Context mContext;

View File

@@ -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();
}