Combine setCategories() and setSuggestions() in DashboardAdapter.

In DashboardSummary.rebuildUI(), we first update the adapter with the
current categories, then run the async task to update the adapter with
the suggestions. This causes the adapter to first layout the existing
categories, and relayout when the suggestions is available. This causes
the suggestions view and categories view to overlap before the
relayout is complete.

Since categories and suggestions are borh set each time we try to
rebuild the UI, delaying the update for categories until the suggestions
are ready will avoid the unnecessary relayout of the list elements.

Ran app launch test for Settings app with the change and launch time is
between 412ms and 486ms in 10 runs, which does not show much delay in
app launch time with delaying updating the categories.

Bug: 29318104
Change-Id: I03ae2386392315f28fe2c361682f2f3252e9f827
This commit is contained in:
Doris Ling
2016-07-15 11:18:23 -07:00
parent 995a5144cf
commit 38d8582abe
2 changed files with 9 additions and 16 deletions

View File

@@ -110,14 +110,10 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
return mSuggestions;
}
public void setSuggestions(List<Tile> suggestions) {
if (!Objects.equals(mSuggestions, suggestions)) {
mSuggestions = suggestions;
recountItems();
}
}
public Tile getTile(ComponentName component) {
if (mCategories == null) {
return null;
}
for (int i = 0; i < mCategories.size(); i++) {
for (int j = 0; j < mCategories.get(i).tiles.size(); j++) {
Tile tile = mCategories.get(i).tiles.get(j);
@@ -129,10 +125,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
return null;
}
public void setCategories(List<DashboardCategory> categories) {
if (Objects.equals(mCategories, categories)) {
return;
}
public void setCategoriesAndSuggestions(List<DashboardCategory> categories,
List<Tile> suggestions) {
mSuggestions = suggestions;
mCategories = categories;
// TODO: Better place for tinting?

View File

@@ -200,10 +200,6 @@ public class DashboardSummary extends InstrumentedFragment
return;
}
List<DashboardCategory> categories =
((SettingsActivity) getActivity()).getDashboardCategories();
mAdapter.setCategories(categories);
// recheck to see if any suggestions have been changed.
new SuggestionLoader().execute();
}
@@ -235,7 +231,9 @@ public class DashboardSummary extends InstrumentedFragment
@Override
protected void onPostExecute(List<Tile> tiles) {
mAdapter.setSuggestions(tiles);
List<DashboardCategory> categories =
((SettingsActivity) getActivity()).getDashboardCategories();
mAdapter.setCategoriesAndSuggestions(categories, tiles);
}
}
}