Bug 1400072: Cache tilesSize in swapCursor. r=liuche draft
authorMichael Comella <michael.l.comella@gmail.com>
Fri, 15 Sep 2017 10:48:28 -0700
changeset 665724 4e0f35f391d8174f02930a0a39a8981bc048c8ee
parent 665723 f6c0e40c150ec1419b5fecb5ef6b8e5f8b534373
child 665725 134037803d696b36a81fa9dcb962248a1e79b063
push id80150
push usermichael.l.comella@gmail.com
push dateFri, 15 Sep 2017 21:05:44 +0000
reviewersliuche
bugs1400072
milestone57.0a1
Bug 1400072: Cache tilesSize in swapCursor. r=liuche In this sense, it acts as a refresh function, binding all of our UI state at the same time, helping to prevent bugs where the UI gets out of sync. For example, this fixes this bug because now the tileSize gets updated when we swap the cursor, not just when we the page is initially constructed. MozReview-Commit-ID: 7V2gFyiOJ1R
mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/topsites/TopSitesPageAdapter.java
mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/topsites/TopSitesPagerAdapter.java
--- a/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/topsites/TopSitesPageAdapter.java
+++ b/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/topsites/TopSitesPageAdapter.java
@@ -29,33 +29,33 @@ import java.util.List;
 /* package-local */ class TopSitesPageAdapter extends RecyclerView.Adapter<TopSitesCard> implements RecyclerViewClickSupport.OnItemClickListener {
     private List<TopSite> topSites;
     private final int pageNumber;
     private int tilesSize;
 
     private final HomePager.OnUrlOpenListener onUrlOpenListener;
     private final HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener;
 
-    /* package-local */ TopSitesPageAdapter(Context context, int pageNumber, int tilesSize,
+    /* package-local */ TopSitesPageAdapter(Context context, int pageNumber,
                                HomePager.OnUrlOpenListener onUrlOpenListener, HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener) {
         setHasStableIds(true);
 
         this.topSites = new ArrayList<>();
         this.pageNumber = pageNumber;
-        this.tilesSize = tilesSize;
 
         this.onUrlOpenListener = onUrlOpenListener;
         this.onUrlOpenInBackgroundListener = onUrlOpenInBackgroundListener;
     }
 
     /**
      * @param startIndex The first item that this topsites group should show. This item, and the following
      * 3 items will be displayed by this adapter.
      */
-    public void swapCursor(Cursor cursor, int startIndex) {
+    public void swapCursor(final Cursor cursor, final int startIndex, final int tilesSize) {
+        this.tilesSize = tilesSize;
         topSites.clear();
 
         if (cursor == null) {
             return;
         }
 
         for (int i = 0; i < TopSitesPage.NUM_TILES && startIndex + i < cursor.getCount(); i++) {
             cursor.moveToPosition(startIndex + i);
--- a/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/topsites/TopSitesPagerAdapter.java
+++ b/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/topsites/TopSitesPagerAdapter.java
@@ -100,35 +100,35 @@ public class TopSitesPagerAdapter extend
         final int pageDelta = count - pages.size();
 
         if (pageDelta > 0) {
             final LayoutInflater inflater = LayoutInflater.from(context);
             for (int i = 0; i < pageDelta; i++) {
                 final TopSitesPage page = (TopSitesPage) inflater.inflate(R.layout.activity_stream_topsites_page, null, false);
 
                 final TopSitesPageAdapter adapter = new TopSitesPageAdapter(
-                        context, i, tilesSize, onUrlOpenListener, onUrlOpenInBackgroundListener);
+                        context, i, onUrlOpenListener, onUrlOpenInBackgroundListener);
                 page.setAdapter(adapter);
                 RecyclerViewClickSupport.addTo(page).setOnItemClickListener(adapter);
                 pages.add(page);
             }
         } else if (pageDelta < 0) {
             for (int i = 0; i > pageDelta; i--) {
                 final TopSitesPage page = pages.get(pages.size() - 1);
 
                 // Ensure the page doesn't use the old/invalid cursor anymore
-                page.getAdapter().swapCursor(null, 0);
+                page.getAdapter().swapCursor(null, 0, 0);
 
                 pages.remove(pages.size() - 1);
             }
         } else {
             // do nothing: we will be updating all the pages below
         }
 
         int startIndex = 0;
         for (TopSitesPage page : pages) {
-            page.getAdapter().swapCursor(cursor, startIndex);
+            page.getAdapter().swapCursor(cursor, startIndex, tilesSize);
             startIndex += NUM_TILES;
         }
 
         notifyDataSetChanged();
     }
 }