Set the stash handle bounds deterministically

The bounds of the bubble stash handle is calculated based on the bounds of
the bubble bar. The problem is that the bubble bar could be invisible, which
results in incorrect bounds set for the handle.

This change sets the bounds for the handle based on the width of the screen.

Fixes: 290992144
Test: Manual
        - Remove bubbles
        - Restart Launcher
        - Open the bubble test app and double tap on a chat
        - Observe that the handle animates in
Change-Id: Ida260014d59b88387de010891c18057f3b091e93
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
index f5e2ddc..6da1a2a 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
@@ -152,6 +152,11 @@
         return mBarView.getBubbleBarBounds();
     }
 
+    /** The horizontal margin of the bubble bar from the edge of the screen. */
+    public int getHorizontalMargin() {
+        return mBarView.getHorizontalMargin();
+    }
+
     /**
      * When the bubble bar is not stashed, it can be collapsed (the icons are in a stack) or
      * expanded (the icons are in a row). This indicates whether the bubble bar is expanded.
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleStashedHandleViewController.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleStashedHandleViewController.java
index 4c197f6..fbab595 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleStashedHandleViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleStashedHandleViewController.java
@@ -123,13 +123,15 @@
     private void updateBounds() {
         // As more bubbles get added, the icon bounds become larger. To ensure a consistent
         // handle bar position, we pin it to the edge of the screen.
-        Rect bubblebarRect = mBarViewController.getBubbleBarBounds();
+        final int right =
+                mActivity.getDeviceProfile().widthPx - mBarViewController.getHorizontalMargin();
+
         final int stashedCenterY = mStashedHandleView.getHeight() - mStashedTaskbarHeight / 2;
 
         mStashedHandleBounds.set(
-                bubblebarRect.right - mStashedHandleWidth,
+                right - mStashedHandleWidth,
                 stashedCenterY - mStashedHandleHeight / 2,
-                bubblebarRect.right,
+                right,
                 stashedCenterY + mStashedHandleHeight / 2);
         mStashedHandleView.updateSampledRegion(mStashedHandleBounds);
 
@@ -240,9 +242,6 @@
      */
     public Animator createRevealAnimToIsStashed(boolean isStashed) {
         Rect bubbleBarBounds = new Rect(mBarViewController.getBubbleBarBounds());
-        // the bubble bar may have been invisible when the bounds were previously calculated,
-        // update them again to ensure they're correct.
-        updateBounds();
 
         // Account for the full visual height of the bubble bar
         int heightDiff = (mBarSize - bubbleBarBounds.height()) / 2;