Animate the pointer when IME comes up

* Removes some unnecessary methods off Bubble, these can
  be called directly on the expanded view.
* Add some code to animate the pointer
* Fade the pointer with the TaskView

Test: manual - check that the pointer animates with the
               bubble when the IME comes in / out
Bug: 193911220
Change-Id: I477f34de3611eea79f933958ec6e09f68eb93179
This commit is contained in:
Mady Mellor
2021-09-10 14:41:08 -07:00
parent 56b1b2d2d5
commit ec77b60fe6
5 changed files with 32 additions and 38 deletions

View File

@@ -422,14 +422,6 @@ public class Bubble implements BubbleViewProvider {
}
}
@Override
public void setExpandedContentAlpha(float alpha) {
if (mExpandedView != null) {
mExpandedView.setAlpha(alpha);
mExpandedView.setTaskViewAlpha(alpha);
}
}
/**
* Set visibility of bubble in the expanded state.
*

View File

@@ -398,6 +398,7 @@ public class BubbleExpandedView extends LinearLayout {
updatePointerView();
}
/** Updates the size and visuals of the pointer. **/
private void updatePointerView() {
LayoutParams lp = (LayoutParams) mPointerView.getLayoutParams();
if (mCurrentPointer == mLeftPointer || mCurrentPointer == mRightPointer) {
@@ -524,9 +525,8 @@ public class BubbleExpandedView extends LinearLayout {
if (mTaskView != null) {
mTaskView.setAlpha(alpha);
}
if (mManageButton != null && mManageButton.getVisibility() == View.VISIBLE) {
mManageButton.setAlpha(alpha);
}
mPointerView.setAlpha(alpha);
setAlpha(alpha);
}
/**
@@ -545,6 +545,7 @@ public class BubbleExpandedView extends LinearLayout {
mIsContentVisible = visibility;
if (mTaskView != null && !mIsAlphaAnimating) {
mTaskView.setAlpha(visibility ? 1f : 0f);
mPointerView.setAlpha(visibility ? 1f : 0f);
}
}
@@ -689,7 +690,7 @@ public class BubbleExpandedView extends LinearLayout {
* the bubble if showing vertically.
* @param onLeft whether the stack was on the left side of the screen when expanded.
*/
public void setPointerPosition(float bubblePosition, boolean onLeft) {
public void setPointerPosition(float bubblePosition, boolean onLeft, boolean animate) {
// Pointer gets drawn in the padding
final boolean showVertically = mPositioner.showBubblesVertically();
final float paddingLeft = (showVertically && onLeft)
@@ -710,6 +711,8 @@ public class BubbleExpandedView extends LinearLayout {
: pointerPosition;
// Post because we need the width of the view
post(() -> {
mCurrentPointer = showVertically ? onLeft ? mLeftPointer : mRightPointer : mTopPointer;
updatePointerView();
float pointerY;
float pointerX;
if (showVertically) {
@@ -721,11 +724,13 @@ public class BubbleExpandedView extends LinearLayout {
pointerY = mPointerOverlap;
pointerX = bubbleCenter - (mPointerWidth / 2f);
}
mPointerView.setTranslationY(pointerY);
mPointerView.setTranslationX(pointerX);
mCurrentPointer = showVertically ? onLeft ? mLeftPointer : mRightPointer : mTopPointer;
updatePointerView();
mPointerView.setVisibility(VISIBLE);
if (animate) {
mPointerView.animate().translationX(pointerX).translationY(pointerY).start();
} else {
mPointerView.setTranslationY(pointerY);
mPointerView.setTranslationX(pointerX);
mPointerView.setVisibility(VISIBLE);
}
});
}

View File

@@ -154,10 +154,6 @@ class BubbleOverflow(
return dotPath
}
override fun setExpandedContentAlpha(alpha: Float) {
expandedView?.alpha = alpha
}
override fun setTaskViewVisibility(visible: Boolean) {
// Overflow does not have a TaskView.
}

View File

@@ -891,7 +891,7 @@ public class BubbleStackView extends FrameLayout
// Re-draw bubble row and pointer for new orientation.
beforeExpandedViewAnimation();
updateOverflowVisibility();
updatePointerPosition();
updatePointerPosition(false /* forIme */);
mExpandedAnimationController.expandFromStack(() -> {
afterExpandedViewAnimation();
} /* after */);
@@ -969,7 +969,8 @@ public class BubbleStackView extends FrameLayout
});
mExpandedViewAlphaAnimator.addUpdateListener(valueAnimator -> {
if (mExpandedBubble != null) {
mExpandedBubble.setExpandedContentAlpha((float) valueAnimator.getAnimatedValue());
mExpandedBubble.getExpandedView().setTaskViewAlpha(
(float) valueAnimator.getAnimatedValue());
}
});
@@ -1559,7 +1560,7 @@ public class BubbleStackView extends FrameLayout
} else {
bubble.cleanupViews();
}
updatePointerPosition();
updatePointerPosition(false /* forIme */);
updateExpandedView();
logBubbleEvent(bubble, FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__DISMISSED);
return;
@@ -1600,7 +1601,7 @@ public class BubbleStackView extends FrameLayout
.map(b -> b.getIconView()).collect(Collectors.toList());
mStackAnimationController.animateReorder(bubbleViews, reorder);
}
updatePointerPosition();
updatePointerPosition(false /* forIme */);
}
/**
@@ -1671,7 +1672,6 @@ public class BubbleStackView extends FrameLayout
private void showNewlySelectedBubble(BubbleViewProvider bubbleToSelect) {
final BubbleViewProvider previouslySelected = mExpandedBubble;
mExpandedBubble = bubbleToSelect;
updatePointerPosition();
if (mIsExpanded) {
hideCurrentInputMethod();
@@ -1866,7 +1866,7 @@ public class BubbleStackView extends FrameLayout
updateBadges(false /* setBadgeForCollapsedStack */);
mBubbleContainer.setActiveController(mExpandedAnimationController);
updateOverflowVisibility();
updatePointerPosition();
updatePointerPosition(false /* forIme */);
mExpandedAnimationController.expandFromStack(() -> {
if (mIsExpanded && mExpandedBubble.getExpandedView() != null) {
maybeShowManageEdu();
@@ -1929,7 +1929,7 @@ public class BubbleStackView extends FrameLayout
mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix);
if (mExpandedBubble.getExpandedView() != null) {
mExpandedBubble.setExpandedContentAlpha(0f);
mExpandedBubble.getExpandedView().setTaskViewAlpha(0f);
// We'll be starting the alpha animation after a slight delay, so set this flag early
// here.
@@ -2196,7 +2196,7 @@ public class BubbleStackView extends FrameLayout
if ((mIsExpansionAnimating || mIsBubbleSwitchAnimating) && mIsExpanded) {
// This will update the animation so the bubbles move to position for the IME
mExpandedAnimationController.expandFromStack(() -> {
updatePointerPosition();
updatePointerPosition(false /* forIme */);
afterExpandedViewAnimation();
} /* after */);
return;
@@ -2229,6 +2229,7 @@ public class BubbleStackView extends FrameLayout
ObjectAnimator anim = ObjectAnimator.ofFloat(child, TRANSLATION_Y, transY);
animList.add(anim);
}
updatePointerPosition(true /* forIme */);
AnimatorSet set = new AnimatorSet();
set.playTogether(animList);
set.start();
@@ -2800,7 +2801,7 @@ public class BubbleStackView extends FrameLayout
mExpandedViewContainer.setTranslationX(0f);
mExpandedBubble.getExpandedView().updateView(
mExpandedViewContainer.getLocationOnScreen());
updatePointerPosition();
updatePointerPosition(false /* forIme */);
}
mStackOnLeftOrWillBe = mStackAnimationController.isStackOnLeftSide();
@@ -2871,7 +2872,13 @@ public class BubbleStackView extends FrameLayout
}
}
private void updatePointerPosition() {
/**
* Updates the position of the pointer based on the expanded bubble.
*
* @param forIme whether the position is being updated due to the ime appearing, in this case
* the pointer is animated to the location.
*/
private void updatePointerPosition(boolean forIme) {
if (mExpandedBubble == null || mExpandedBubble.getExpandedView() == null) {
return;
}
@@ -2884,7 +2891,7 @@ public class BubbleStackView extends FrameLayout
? position.y
: position.x;
mExpandedBubble.getExpandedView().setPointerPosition(bubblePosition,
mStackOnLeftOrWillBe);
mStackOnLeftOrWillBe, forIme /* animate */);
}
/**

View File

@@ -28,12 +28,6 @@ import androidx.annotation.Nullable;
public interface BubbleViewProvider {
@Nullable BubbleExpandedView getExpandedView();
/**
* Sets the alpha of the expanded view content. This will be applied to both the expanded view
* container itself (the manage button, etc.) as well as the TaskView within it.
*/
void setExpandedContentAlpha(float alpha);
/**
* Sets whether the contents of the bubble's TaskView should be visible.
*/