Revert "Animate out bubbles in reverse of the way they animate in."

This reverts commit 90ff97ee31106f80b668d8aefda62dd671f4a21a.

Reason for revert: breaks some tests / behaviour; revert til fix
Change-Id: I40cee68dcd637d574bff4add692b3ef636e2e6f3
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
index 494c1a2..7d9bb07 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
@@ -802,32 +802,16 @@
         if (mStackView == null) {
             return;
         }
-
         if (mStatusBarStateListener.getCurrentState() == SHADE && hasBubbles()) {
             // Bubbles only appear in unlocked shade
             mStackView.setVisibility(hasBubbles() ? VISIBLE : INVISIBLE);
-        } else if (!hasBubbles() && mStackView.hasTransientBubbles()) {
-            // If we only have transient bubbles, then wait until they're gone.
-            mStackView.runActionAfterTransientViewAnimations(() -> {
-                mStackView.setVisibility(INVISIBLE);
-                updateBubblesShowing();
-            });
-        } else {
+        } else if (mStackView != null) {
             mStackView.setVisibility(INVISIBLE);
         }
 
-        updateBubblesShowing();
-    }
-
-    /**
-     * Updates the status bar window controller and the state change listener with whether bubbles
-     * are currently showing.
-     */
-    public void updateBubblesShowing() {
+        // Let listeners know if bubble state changed.
         boolean hadBubbles = mStatusBarWindowController.getBubblesShowing();
-        boolean hasBubblesShowing =
-                (hasBubbles() || mStackView.hasTransientBubbles())
-                        && mStackView.getVisibility() == VISIBLE;
+        boolean hasBubblesShowing = hasBubbles() && mStackView.getVisibility() == VISIBLE;
         mStatusBarWindowController.setBubblesShowing(hasBubblesShowing);
         if (mStateChangeListener != null && hadBubbles != hasBubblesShowing) {
             mStateChangeListener.onHasBubblesChanged(hasBubblesShowing);
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
index f3ad89f..a7100e2 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
@@ -664,10 +664,6 @@
         return mIsExpanded;
     }
 
-    void runActionAfterTransientViewAnimations(Runnable after) {
-        mStackAnimationController.runActionAfterAllViewsAndTransientRemoved(after);
-    }
-
     /**
      * The {@link BubbleView} that is expanded, null if one does not exist.
      */
@@ -698,10 +694,6 @@
         }
     }
 
-    boolean hasTransientBubbles() {
-        return mBubbleContainer.getTransientViewCount() > 0;
-    }
-
     // via BubbleData.Listener
     void addBubble(Bubble bubble) {
         if (DEBUG_BUBBLE_STACK_VIEW) {
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/animation/StackAnimationController.java b/packages/SystemUI/src/com/android/systemui/bubbles/animation/StackAnimationController.java
index 6ec1e46..94d4f59 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/animation/StackAnimationController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/animation/StackAnimationController.java
@@ -144,11 +144,6 @@
      */
     private boolean mFirstBubbleSpringingToTouch = false;
 
-    /**
-     * Action to run after all views, including transient views, have been removed from the layout.
-     */
-    @Nullable private Runnable mAfterAllViewsAndTransientRemoved = null;
-
     /** Horizontal offset of bubbles in the stack. */
     private float mStackOffset;
     /** Diameter of the bubble icon. */
@@ -566,14 +561,6 @@
     }
 
     /**
-     * Sets an action to run after all views, including transient views, have been removed from the
-     * layout.
-     */
-    public void runActionAfterAllViewsAndTransientRemoved(Runnable action) {
-        mAfterAllViewsAndTransientRemoved = action;
-    }
-
-    /**
      * Springs the first bubble to the given final position, with the rest of the stack 'following'.
      */
     protected void springFirstBubbleWithStackFollowing(
@@ -660,26 +647,13 @@
 
     @Override
     void onChildRemoved(View child, int index, Runnable finishRemoval) {
+        // Animate the removing view in the opposite direction of the stack.
+        final float xOffset = getOffsetForChainedPropertyAnimation(DynamicAnimation.TRANSLATION_X);
         animationForChild(child)
-                .alpha(0f,
-                        finishRemoval /* after */,
-                        () -> {
-                            // If this was the last transient view, run the callback.
-                            if (mLayout.getTransientViewCount() == 0
-                                    && mAfterAllViewsAndTransientRemoved != null) {
-
-                                // If a 'real' view was added while we were animating out, don't run
-                                // the callback since all views haven't been removed.
-                                if (mLayout.getChildCount() == 0) {
-                                    mAfterAllViewsAndTransientRemoved.run();
-                                }
-
-                                mAfterAllViewsAndTransientRemoved = null;
-                            }
-                        } /* after */)
-                .scaleX(0f)
-                .scaleY(0f)
-                .withStiffness(ANIMATE_IN_STIFFNESS)
+                .alpha(0f, finishRemoval /* after */)
+                .scaleX(ANIMATE_IN_STARTING_SCALE)
+                .scaleY(ANIMATE_IN_STARTING_SCALE)
+                .translationX(mStackPosition.x - (-xOffset * ANIMATE_TRANSLATION_FACTOR))
                 .start();
 
         if (mLayout.getChildCount() > 0) {