Bug 1251362 - Part 7 - Update closed tabs count in the History panel main view. r=liuche
We need to update the recent tabs count displayed by the smart folder as necessary. To do this, we copy the approach used for updating the synced devices count.
MozReview-Commit-ID: BFwv5bY1DWk
--- a/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryAdapter.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryAdapter.java
@@ -35,16 +35,17 @@ public class CombinedHistoryAdapter exte
FOUR_MONTHS_AGO,
FIVE_MONTHS_AGO,
OLDER_THAN_SIX_MONTHS
}
private Cursor historyCursor;
private DevicesUpdateHandler devicesUpdateHandler;
private int deviceCount = 0;
+ private RecentTabsUpdateHandler recentTabsUpdateHandler;
private int recentTabsCount = 0;
// We use a sparse array to store each section header's position in the panel [more cheaply than a HashMap].
private final SparseArray<SectionHeader> sectionHeaders;
public CombinedHistoryAdapter(Resources resources) {
super();
sectionHeaders = new SparseArray<>();
@@ -69,16 +70,33 @@ public class CombinedHistoryAdapter exte
deviceCount = count;
notifyItemChanged(SYNCED_DEVICES_SMARTFOLDER_INDEX);
}
};
}
return devicesUpdateHandler;
}
+ public interface RecentTabsUpdateHandler {
+ void onRecentTabsCountUpdated(int count);
+ }
+
+ public RecentTabsUpdateHandler getRecentTabsUpdateHandler() {
+ if (recentTabsUpdateHandler == null) {
+ recentTabsUpdateHandler = new RecentTabsUpdateHandler() {
+ @Override
+ public void onRecentTabsCountUpdated(int count) {
+ recentTabsCount = count;
+ notifyItemChanged(RECENT_TABS_SMARTFOLDER_INDEX);
+ }
+ };
+ }
+ return recentTabsUpdateHandler;
+ }
+
@Override
public CombinedHistoryItem onCreateViewHolder(ViewGroup viewGroup, int viewType) {
final LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
final View view;
final CombinedHistoryItem.ItemType itemType = CombinedHistoryItem.ItemType.viewTypeToItemType(viewType);
switch (itemType) {
--- a/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryPanel.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryPanel.java
@@ -110,17 +110,18 @@ public class CombinedHistoryPanel extend
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
mHistoryAdapter = new CombinedHistoryAdapter(getResources());
mClientsAdapter = new ClientsAdapter(getContext());
// The RecentTabsAdapter doesn't use a cursor and therefore can't use the CursorLoader's
// onLoadFinished() callback for updating the panel state when the closed tab count changes.
// Instead, we provide it with independent callbacks as necessary.
- mRecentTabsAdapter = new RecentTabsAdapter(getContext(), getPanelStateUpdateHandler());
+ mRecentTabsAdapter = new RecentTabsAdapter(getContext(),
+ mHistoryAdapter.getRecentTabsUpdateHandler(), getPanelStateUpdateHandler());
mSyncStatusListener = new RemoteTabsSyncListener();
FirefoxAccounts.addSyncStatusListener(mSyncStatusListener);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.home_combined_history_panel, container, false);
--- a/mobile/android/base/java/org/mozilla/gecko/home/RecentTabsAdapter.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/RecentTabsAdapter.java
@@ -13,16 +13,17 @@ import android.view.ViewGroup;
import android.widget.TextView;
import org.mozilla.gecko.AboutPages;
import org.mozilla.gecko.EventDispatcher;
import org.mozilla.gecko.GeckoAppShell;
import org.mozilla.gecko.GeckoProfile;
import org.mozilla.gecko.R;
import org.mozilla.gecko.SessionParser;
+import org.mozilla.gecko.home.CombinedHistoryAdapter.RecentTabsUpdateHandler;
import org.mozilla.gecko.home.CombinedHistoryPanel.PanelStateUpdateHandler;
import org.mozilla.gecko.util.EventCallback;
import org.mozilla.gecko.util.NativeEventListener;
import org.mozilla.gecko.util.NativeJSObject;
import org.mozilla.gecko.util.ThreadUtils;
import java.util.ArrayList;
import java.util.List;
@@ -49,21 +50,24 @@ public class RecentTabsAdapter extends R
public ClosedTab(String url, String title, String data) {
this.url = url;
this.title = title;
this.data = data;
}
}
private final Context context;
+ private final RecentTabsUpdateHandler recentTabsUpdateHandler;
private final PanelStateUpdateHandler panelStateUpdateHandler;
public RecentTabsAdapter(Context context,
+ RecentTabsUpdateHandler recentTabsUpdateHandler,
PanelStateUpdateHandler panelStateUpdateHandler) {
this.context = context;
+ this.recentTabsUpdateHandler = recentTabsUpdateHandler;
this.panelStateUpdateHandler = panelStateUpdateHandler;
recentlyClosedTabs = new ClosedTab[0];
lastSessionTabs = new ClosedTab[0];
readPreviousSessionData();
}
public void startListeningForClosedTabs() {
@@ -93,16 +97,17 @@ public class RecentTabsAdapter extends R
public void run() {
// Save some data about the old panel state, so we can be
// smarter about notifying the recycler view which bits changed.
int prevClosedTabsCount = recentlyClosedTabs.length;
boolean prevSectionHeaderVisibility = isSectionHeaderVisible();
int prevSectionHeaderIndex = getSectionHeaderIndex();
recentlyClosedTabs = closedTabs;
+ recentTabsUpdateHandler.onRecentTabsCountUpdated(getClosedTabsCount());
panelStateUpdateHandler.onPanelStateUpdated();
// Handle the section header hiding/unhiding.
updateHeaderVisibility(prevSectionHeaderVisibility, prevSectionHeaderIndex);
// Update the "Recently closed" part of the tab list.
updateTabsList(prevClosedTabsCount, recentlyClosedTabs.length, getFirstRecentTabIndex(), getLastRecentTabIndex());
}
@@ -146,16 +151,17 @@ public class RecentTabsAdapter extends R
public void run() {
// Save some data about the old panel state, so we can be
// smarter about notifying the recycler view which bits changed.
int prevClosedTabsCount = lastSessionTabs.length;
boolean prevSectionHeaderVisibility = isSectionHeaderVisible();
int prevSectionHeaderIndex = getSectionHeaderIndex();
lastSessionTabs = closedTabs;
+ recentTabsUpdateHandler.onRecentTabsCountUpdated(getClosedTabsCount());
panelStateUpdateHandler.onPanelStateUpdated();
// Handle the section header hiding/unhiding.
updateHeaderVisibility(prevSectionHeaderVisibility, prevSectionHeaderIndex);
// Update the "Tabs from last time" part of the tab list.
updateTabsList(prevClosedTabsCount, lastSessionTabs.length, getFirstLastSessionTabIndex(), getLastLastSessionTabIndex());
}