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
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);
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?
return;
}
- List<DashboardCategory> categories =
- ((SettingsActivity) getActivity()).getDashboardCategories();
- mAdapter.setCategories(categories);
-
// recheck to see if any suggestions have been changed.
new SuggestionLoader().execute();
}
@Override
protected void onPostExecute(List<Tile> tiles) {
- mAdapter.setSuggestions(tiles);
+ List<DashboardCategory> categories =
+ ((SettingsActivity) getActivity()).getDashboardCategories();
+ mAdapter.setCategoriesAndSuggestions(categories, tiles);
}
}
}