Merge "Reduce the number of times that dataset changed is triggerd in DashboardAdapter" into nyc-mr1-dev
This commit is contained in:
@@ -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;
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user