Bubbles: fix some issues with the pointer
* Pointer was missing if showing vertically on the right
side, this is fixed & tried to make the code a lil more
clear
* Pointer was missing for the bubble overflow, this is
also fixed
Bug: 181888630
Test: manual - make sure the pointer is visible when the
stack is expanded, check landscape left &
right on small & large screen and check
portrait on phone.
Change-Id: Id7dc6ae9a1f3e798940342b780940fb77ceaed3a
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
index 696f705..d8ec650 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
@@ -395,7 +395,6 @@
mPointerView.setBackground(mCurrentPointer);
}
-
private String getBubbleKey() {
return mBubble != null ? mBubble.getKey() : "null";
}
@@ -519,16 +518,11 @@
+ " bubble=" + getBubbleKey());
}
mIsContentVisible = visibility;
-
- final float alpha = visibility ? 1f : 0f;
-
- mPointerView.setAlpha(alpha);
if (mTaskView != null && !mIsAlphaAnimating) {
- mTaskView.setAlpha(alpha);
+ mTaskView.setAlpha(visibility ? 1f : 0f);
}
}
-
@Nullable
TaskView getTaskView() {
return mTaskView;
@@ -673,26 +667,48 @@
}
/**
- * Set the position that the tip of the triangle should point to.
+ * Sets the position of the pointer.
+ *
+ * When bubbles are showing "vertically" they display along the left / right sides of the
+ * screen with the expanded view beside them.
+ *
+ * If they aren't showing vertically they're positioned along the top of the screen with the
+ * expanded view below them.
+ *
+ * @param bubblePosition the x position of the bubble if showing on top, the y position of
+ * the bubble if showing vertically.
+ * @param onLeft whether the stack was on the left side of the screen when expanded.
*/
- public void setPointerPosition(float x, float y, boolean isLandscape, boolean onLeft) {
+ public void setPointerPosition(float bubblePosition, boolean onLeft) {
// Pointer gets drawn in the padding
- int paddingLeft = (isLandscape && onLeft) ? mPointerHeight : 0;
- int paddingRight = (isLandscape && !onLeft) ? mPointerHeight : 0;
- int paddingTop = isLandscape ? 0 : mExpandedViewPadding;
+ final boolean showVertically = mPositioner.showBubblesVertically();
+ final int paddingLeft = (showVertically && onLeft) ? mPointerHeight : 0;
+ final int paddingRight = (showVertically && !onLeft) ? mPointerHeight : 0;
+ final int paddingTop = showVertically ? 0 : mExpandedViewPadding;
setPadding(paddingLeft, paddingTop, paddingRight, 0);
- if (isLandscape) {
- // TODO: why setY vs setTranslationY ? linearlayout?
- mPointerView.setY(y - (mPointerWidth / 2f));
- mPointerView.setTranslationX(onLeft ? -mPointerHeight : x - mExpandedViewPadding);
- } else {
- mPointerView.setTranslationY(0f);
- mPointerView.setTranslationX(x - mExpandedViewPadding - (mPointerWidth / 2f));
- }
- mCurrentPointer = isLandscape ? onLeft ? mLeftPointer : mRightPointer : mTopPointer;
- updatePointerView();
- mPointerView.setVisibility(VISIBLE);
+ final float expandedViewY = mPositioner.getExpandedViewY();
+ final float bubbleSize = mPositioner.getBubbleBitmapSize();
+ final float bubbleCenter = showVertically
+ ? bubblePosition + (bubbleSize / 2f) - expandedViewY
+ : bubblePosition + (bubbleSize / 2f);
+ // Post because we need the width of the view
+ post(() -> {
+ float pointerY;
+ float pointerX;
+ if (showVertically) {
+ pointerY = bubbleCenter - (mPointerWidth / 2f);
+ pointerX = onLeft ? -mPointerHeight : getWidth() - mPaddingRight;
+ } else {
+ pointerY = 0;
+ pointerX = bubbleCenter - mPaddingLeft - (mPointerWidth / 2f);
+ }
+ mPointerView.setTranslationY(pointerY);
+ mPointerView.setTranslationX(pointerX);
+ mCurrentPointer = showVertically ? onLeft ? mLeftPointer : mRightPointer : mTopPointer;
+ updatePointerView();
+ mPointerView.setVisibility(VISIBLE);
+ });
}
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
index c4d3387..ea5eeaa 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
@@ -2683,7 +2683,7 @@
Log.d(TAG, "updateExpandedView: mIsExpanded=" + mIsExpanded);
}
boolean isOverflowExpanded = mExpandedBubble != null
- && mBubbleOverflow.KEY.equals(mExpandedBubble.getKey());
+ && BubbleOverflow.KEY.equals(mExpandedBubble.getKey());
int[] paddings = mPositioner.getExpandedViewPadding(
mStackAnimationController.isStackOnLeftSide(), isOverflowExpanded);
mExpandedViewContainer.setPadding(paddings[0], 0, paddings[1], 0);
@@ -2695,6 +2695,7 @@
mExpandedViewContainer.setTranslationX(0f);
mExpandedBubble.getExpandedView().updateView(
mExpandedViewContainer.getLocationOnScreen());
+ updatePointerPosition();
}
mStackOnLeftOrWillBe = mStackAnimationController.isStackOnLeftSide();
@@ -2732,27 +2733,7 @@
return;
}
float bubblePosition = mExpandedAnimationController.getBubbleXOrYForOrientation(index);
- float expandedViewY = mPositioner.getExpandedViewY();
- if (mPositioner.showBubblesVertically()) {
- float x = mStackOnLeftOrWillBe
- ? mPositioner.getAvailableRect().left
- : mPositioner.getAvailableRect().right
- - mExpandedViewContainer.getPaddingRight()
- - mPointerHeight;
- float bubbleCenter = bubblePosition - expandedViewY + (mBubbleSize / 2f);
- mExpandedBubble.getExpandedView().setPointerPosition(
- x,
- bubbleCenter,
- true,
- mStackOnLeftOrWillBe);
- } else {
- float bubbleCenter = bubblePosition + (mBubbleSize / 2f);
- mExpandedBubble.getExpandedView().setPointerPosition(
- bubbleCenter,
- expandedViewY,
- false,
- mStackOnLeftOrWillBe);
- }
+ mExpandedBubble.getExpandedView().setPointerPosition(bubblePosition, mStackOnLeftOrWillBe);
}
/**