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
--- 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();
}
}