Bug 1251362 - Part 7 - Update closed tabs count in the History panel main view. r=liuche draft
authorJan Henning <jh+bugzilla@buttercookie.de>
Sat, 14 May 2016 20:35:07 +0200
changeset 376075 1aebb0670594f3e926d81f15df37c3eb1e27c65f
parent 376074 0945b244dc42f6d3b58a28dc789465a20f14a396
child 376076 3f55eb871bc413492f61fbc5c2760626560ca0d8
push id20500
push usermozilla@buttercookie.de
push dateTue, 07 Jun 2016 11:41:20 +0000
reviewersliuche
bugs1251362
milestone50.0a1
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
mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryAdapter.java
mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryPanel.java
mobile/android/base/java/org/mozilla/gecko/home/RecentTabsAdapter.java
--- 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());
                     }