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:
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
}
|
||||
|
||||
@@ -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 */);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user