Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c50ced0 authored by Doris Ling's avatar Doris Ling Committed by Android (Google) Code Review
Browse files

Merge "Reduce the number of times that dataset changed is triggerd in...

Merge "Reduce the number of times that dataset changed is triggerd in DashboardAdapter" into nyc-mr1-dev
parents 3cd686d4 b76de265
Loading
Loading
Loading
Loading
+29 −5
Original line number Diff line number Diff line
@@ -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,9 +105,11 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
    }

    public void setSuggestions(List<Tile> suggestions) {
        if (!Objects.equals(mSuggestions, suggestions)) {
            mSuggestions = suggestions;
            recountItems();
        }
    }

    public Tile getTile(ComponentName component) {
        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) {
        if (Objects.equals(mCategories, categories)) {
            return;
        }
        mCategories = categories;

        // TODO: Better place for tinting?
@@ -133,9 +149,11 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
    }

    public void setConditions(List<Condition> conditions) {
        if (!Objects.equals(mConditions, conditions)) {
            mConditions = conditions;
            recountItems();
        }
    }

    public boolean isShowingAll() {
        return mIsShowingAll;
@@ -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;
+5 −3
Original line number Diff line number Diff line
@@ -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();
    }