Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec77b60f authored by Mady Mellor's avatar Mady Mellor
Browse files

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
parent 56b1b2d2
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -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.
     *
+14 −9
Original line number Diff line number Diff line
@@ -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);
            }
            if (animate) {
                mPointerView.animate().translationX(pointerX).translationY(pointerY).start();
            } else {
                mPointerView.setTranslationY(pointerY);
                mPointerView.setTranslationX(pointerX);
            mCurrentPointer = showVertically ? onLeft ? mLeftPointer : mRightPointer : mTopPointer;
            updatePointerView();
                mPointerView.setVisibility(VISIBLE);
            }
        });
    }

+0 −4
Original line number Diff line number Diff line
@@ -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.
    }
+18 −11
Original line number Diff line number Diff line
@@ -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 */);
    }

    /**
+0 −6
Original line number Diff line number Diff line
@@ -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.
     */