Bug 1310081 - THIS COMMIT WILL BE FOLDED INTO 2 ONCE BUG 1313144 IS IN THE TREE. Fix tabs grid animator issues. draft
authorTom Klein <twointofive@gmail.com>
Tue, 25 Oct 2016 23:39:19 -0500
changeset 429852 95fbb6802db05347f02c724400b5580710c4e919
parent 429851 1d36c8d4a9d1e0e37d9b5d32753c151b0faffd54
child 535074 683b124698d5889609f197bf54ad5e34ea17fb9a
push id33682
push userbmo:twointofive@gmail.com
push dateWed, 26 Oct 2016 19:05:08 +0000
bugs1310081, 1313144
milestone52.0a1
Bug 1310081 - THIS COMMIT WILL BE FOLDED INTO 2 ONCE BUG 1313144 IS IN THE TREE. Fix tabs grid animator issues. MozReview-Commit-ID: 6hrhK4Nticu
mobile/android/base/java/org/mozilla/gecko/tabs/TabsGridLayout.java
mobile/android/base/java/org/mozilla/gecko/tabs/TabsGridLayoutAnimator.java
mobile/android/base/moz.build
--- a/mobile/android/base/java/org/mozilla/gecko/tabs/TabsGridLayout.java
+++ b/mobile/android/base/java/org/mozilla/gecko/tabs/TabsGridLayout.java
@@ -5,17 +5,16 @@
 
 package org.mozilla.gecko.tabs;
 
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.widget.GridSpacingDecoration;
 
 import android.content.Context;
 import android.content.res.Resources;
-import android.support.v7.widget.DefaultItemAnimator;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.helper.ItemTouchHelper;
 import android.util.AttributeSet;
 
 public class TabsGridLayout extends TabsLayout {
     private final GridSpacingDecoration spacingDecoration;
 
     public TabsGridLayout(Context context, AttributeSet attrs) {
@@ -33,23 +32,17 @@ public class TabsGridLayout extends Tabs
         final int viewPaddingVertical = resources.getDimensionPixelSize(R.dimen.tab_panel_grid_vpadding);
 
         setDesiredColumnWidth(itemWidth + 2 * horizontalItemPadding);
 
         setPadding(viewPaddingHorizontal, viewPaddingVertical, viewPaddingHorizontal, viewPaddingVertical);
         setClipToPadding(false);
         setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
 
-        final DefaultItemAnimator animator = new DefaultItemAnimator();
-        // On close we only animate the moves, not the remove.
-        animator.setRemoveDuration(0);
-        // A fade in/out each time the title/thumbnail/etc. gets updated isn't helpful, so disable
-        // the change animation.
-        animator.setSupportsChangeAnimations(false);
-        setItemAnimator(animator);
+        setItemAnimator(new TabsGridLayoutAnimator());
 
         // A TouchHelper handler for swipe to close.
         final TabsTouchHelperCallback callback = new TabsTouchHelperCallback(this) {
             @Override
             protected float alphaForItemSwipeDx(float dX, int distanceToAlphaMin) {
                 return 1f - 2f * Math.abs(dX) / distanceToAlphaMin;
             }
         };
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/tabs/TabsGridLayoutAnimator.java
@@ -0,0 +1,18 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.tabs;
+
+import org.mozilla.gecko.widget.NoChangeItemAnimator;
+
+import android.support.v7.widget.RecyclerView;
+
+class TabsGridLayoutAnimator extends NoChangeItemAnimator {
+    @Override
+    public boolean animateRemove(final RecyclerView.ViewHolder holder) {
+        dispatchRemoveFinished(holder);
+        return false;
+    }
+}
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -664,16 +664,17 @@ gbjar.sources += ['java/org/mozilla/geck
     'tabs/PrivateTabsPanel.java',
     'tabs/TabCurve.java',
     'tabs/TabHistoryController.java',
     'tabs/TabHistoryFragment.java',
     'tabs/TabHistoryItemRow.java',
     'tabs/TabHistoryPage.java',
     'tabs/TabPanelBackButton.java',
     'tabs/TabsGridLayout.java',
+    'tabs/TabsGridLayoutAnimator.java',
     'tabs/TabsLayout.java',
     'tabs/TabsLayoutAdapter.java',
     'tabs/TabsLayoutItemView.java',
     'tabs/TabsListLayout.java',
     'tabs/TabsListLayoutAnimator.java',
     'tabs/TabsPanel.java',
     'tabs/TabsPanelThumbnailView.java',
     'tabs/TabsTouchHelperCallback.java',