OSDN Git Service

Combine setCategories() and setSuggestions() in DashboardAdapter.
authorDoris Ling <dling@google.com>
Fri, 15 Jul 2016 18:18:23 +0000 (11:18 -0700)
committerDoris Ling <dling@google.com>
Fri, 15 Jul 2016 20:08:56 +0000 (13:08 -0700)
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

src/com/android/settings/dashboard/DashboardAdapter.java
src/com/android/settings/dashboard/DashboardSummary.java

index b161c41..ca09e51 100644 (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?
index 24b5aee..3a75c8a 100644 (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);
         }
     }
 }