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

Commit 3160d386 authored by Ats Jenk's avatar Ats Jenk Committed by Automerger Merge Worker
Browse files

Merge "Clean up bubbles home gesture flag" into tm-qpr-dev am: 28ba402d

parents 78118597 28ba402d
Loading
Loading
Loading
Loading
+8 −183
Original line number Original line Diff line number Diff line
@@ -83,7 +83,6 @@ import com.android.wm.shell.bubbles.animation.AnimatableScaleMatrix;
import com.android.wm.shell.bubbles.animation.ExpandedAnimationController;
import com.android.wm.shell.bubbles.animation.ExpandedAnimationController;
import com.android.wm.shell.bubbles.animation.ExpandedViewAnimationController;
import com.android.wm.shell.bubbles.animation.ExpandedViewAnimationController;
import com.android.wm.shell.bubbles.animation.ExpandedViewAnimationControllerImpl;
import com.android.wm.shell.bubbles.animation.ExpandedViewAnimationControllerImpl;
import com.android.wm.shell.bubbles.animation.ExpandedViewAnimationControllerStub;
import com.android.wm.shell.bubbles.animation.PhysicsAnimationLayout;
import com.android.wm.shell.bubbles.animation.PhysicsAnimationLayout;
import com.android.wm.shell.bubbles.animation.StackAnimationController;
import com.android.wm.shell.bubbles.animation.StackAnimationController;
import com.android.wm.shell.common.FloatingContentCoordinator;
import com.android.wm.shell.common.FloatingContentCoordinator;
@@ -105,11 +104,6 @@ import java.util.stream.Collectors;
 */
 */
public class BubbleStackView extends FrameLayout
public class BubbleStackView extends FrameLayout
        implements ViewTreeObserver.OnComputeInternalInsetsListener {
        implements ViewTreeObserver.OnComputeInternalInsetsListener {
    /**
     * Set to {@code true} to enable home gesture handling in bubbles
     */
    public static final boolean HOME_GESTURE_ENABLED =
            SystemProperties.getBoolean("persist.wm.debug.bubbles_home_gesture", true);


    public static final boolean ENABLE_FLING_TO_DISMISS_BUBBLE =
    public static final boolean ENABLE_FLING_TO_DISMISS_BUBBLE =
            SystemProperties.getBoolean("persist.wm.debug.fling_to_dismiss_bubble", true);
            SystemProperties.getBoolean("persist.wm.debug.fling_to_dismiss_bubble", true);
@@ -898,12 +892,8 @@ public class BubbleStackView extends FrameLayout
        mExpandedAnimationController = new ExpandedAnimationController(mPositioner,
        mExpandedAnimationController = new ExpandedAnimationController(mPositioner,
                onBubbleAnimatedOut, this);
                onBubbleAnimatedOut, this);


        if (HOME_GESTURE_ENABLED) {
        mExpandedViewAnimationController =
        mExpandedViewAnimationController =
                new ExpandedViewAnimationControllerImpl(context, mPositioner);
                new ExpandedViewAnimationControllerImpl(context, mPositioner);
        } else {
            mExpandedViewAnimationController = new ExpandedViewAnimationControllerStub();
        }


        mSurfaceSynchronizer = synchronizer != null ? synchronizer : DEFAULT_SURFACE_SYNCHRONIZER;
        mSurfaceSynchronizer = synchronizer != null ? synchronizer : DEFAULT_SURFACE_SYNCHRONIZER;


@@ -1965,11 +1955,7 @@ public class BubbleStackView extends FrameLayout


        if (wasExpanded) {
        if (wasExpanded) {
            stopMonitoringSwipeUpGesture();
            stopMonitoringSwipeUpGesture();
            if (HOME_GESTURE_ENABLED) {
            animateCollapse();
            animateCollapse();
            } else {
                animateCollapseWithScale();
            }
            logBubbleEvent(mExpandedBubble, FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED);
            logBubbleEvent(mExpandedBubble, FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED);
        } else {
        } else {
            animateExpansion();
            animateExpansion();
@@ -1977,14 +1963,12 @@ public class BubbleStackView extends FrameLayout
            logBubbleEvent(mExpandedBubble, FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED);
            logBubbleEvent(mExpandedBubble, FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED);
            logBubbleEvent(mExpandedBubble,
            logBubbleEvent(mExpandedBubble,
                    FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__STACK_EXPANDED);
                    FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__STACK_EXPANDED);
            if (HOME_GESTURE_ENABLED) {
            mBubbleController.isNotificationPanelExpanded(notifPanelExpanded -> {
            mBubbleController.isNotificationPanelExpanded(notifPanelExpanded -> {
                if (!notifPanelExpanded && mIsExpanded) {
                if (!notifPanelExpanded && mIsExpanded) {
                    startMonitoringSwipeUpGesture();
                    startMonitoringSwipeUpGesture();
                }
                }
            });
            });
        }
        }
        }
        notifyExpansionChanged(mExpandedBubble, mIsExpanded);
        notifyExpansionChanged(mExpandedBubble, mIsExpanded);
    }
    }


@@ -2299,106 +2283,6 @@ public class BubbleStackView extends FrameLayout
        mMainExecutor.executeDelayed(mDelayedAnimation, startDelay);
        mMainExecutor.executeDelayed(mDelayedAnimation, startDelay);
    }
    }


    private void animateCollapseWithScale() {
        cancelDelayedExpandCollapseSwitchAnimations();

        if (mManageEduView != null && mManageEduView.getVisibility() == VISIBLE) {
            mManageEduView.hide();
        }
        // Hide the menu if it's visible.
        showManageMenu(false);

        mIsExpanded = false;
        mIsExpansionAnimating = true;

        showScrim(false);

        mBubbleContainer.cancelAllAnimations();

        // If we were in the middle of swapping, the animating-out surface would have been scaling
        // to zero - finish it off.
        PhysicsAnimator.getInstance(mAnimatingOutSurfaceContainer).cancel();
        mAnimatingOutSurfaceContainer.setScaleX(0f);
        mAnimatingOutSurfaceContainer.setScaleY(0f);

        // Let the expanded animation controller know that it shouldn't animate child adds/reorders
        // since we're about to animate collapsed.
        mExpandedAnimationController.notifyPreparingToCollapse();

        mExpandedAnimationController.collapseBackToStack(
                mStackAnimationController.getStackPositionAlongNearestHorizontalEdge()
                /* collapseTo */,
                () -> mBubbleContainer.setActiveController(mStackAnimationController));

        int index;
        if (mExpandedBubble != null && BubbleOverflow.KEY.equals(mExpandedBubble.getKey())) {
            index = mBubbleData.getBubbles().size();
        } else {
            index = mBubbleData.getBubbles().indexOf(mExpandedBubble);
        }
        // Value the bubble is animating from (back into the stack).
        final PointF p = mPositioner.getExpandedBubbleXY(index, getState());
        if (mPositioner.showBubblesVertically()) {
            float pivotX;
            float pivotY = p.y + mBubbleSize / 2f;
            if (mStackOnLeftOrWillBe) {
                pivotX = mPositioner.getAvailableRect().left + mBubbleSize + mExpandedViewPadding;
            } else {
                pivotX = mPositioner.getAvailableRect().right - mBubbleSize - mExpandedViewPadding;
            }
            mExpandedViewContainerMatrix.setScale(
                    1f, 1f,
                    pivotX, pivotY);
        } else {
            mExpandedViewContainerMatrix.setScale(
                    1f, 1f,
                    p.x + mBubbleSize / 2f,
                    p.y + mBubbleSize + mExpandedViewPadding);
        }

        mExpandedViewAlphaAnimator.reverse();

        // When the animation completes, we should no longer be showing the content.
        if (mExpandedBubble.getExpandedView() != null) {
            mExpandedBubble.getExpandedView().setContentVisibility(false);
        }

        PhysicsAnimator.getInstance(mExpandedViewContainerMatrix).cancel();
        PhysicsAnimator.getInstance(mExpandedViewContainerMatrix)
                .spring(AnimatableScaleMatrix.SCALE_X,
                        AnimatableScaleMatrix.getAnimatableValueForScaleFactor(
                                1f - EXPANDED_VIEW_ANIMATE_SCALE_AMOUNT),
                        mScaleOutSpringConfig)
                .spring(AnimatableScaleMatrix.SCALE_Y,
                        AnimatableScaleMatrix.getAnimatableValueForScaleFactor(
                                1f - EXPANDED_VIEW_ANIMATE_SCALE_AMOUNT),
                        mScaleOutSpringConfig)
                .addUpdateListener((target, values) -> {
                    mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix);
                })
                .withEndActions(() -> {
                    final BubbleViewProvider previouslySelected = mExpandedBubble;
                    beforeExpandedViewAnimation();
                    if (mManageEduView != null) {
                        mManageEduView.hide();
                    }

                    if (DEBUG_BUBBLE_STACK_VIEW) {
                        Log.d(TAG, "animateCollapse");
                        Log.d(TAG, BubbleDebugConfig.formatBubblesString(getBubblesOnScreen(),
                                mExpandedBubble));
                    }
                    updateOverflowVisibility();
                    updateZOrder();
                    updateBadges(true /* setBadgeForCollapsedStack */);
                    afterExpandedViewAnimation();
                    if (previouslySelected != null) {
                        previouslySelected.setTaskViewVisibility(false);
                    }
                })
                .start();
    }

    private void animateCollapse() {
    private void animateCollapse() {
        cancelDelayedExpandCollapseSwitchAnimations();
        cancelDelayedExpandCollapseSwitchAnimations();


@@ -2580,65 +2464,6 @@ public class BubbleStackView extends FrameLayout
     * and clip the expanded view.
     * and clip the expanded view.
     */
     */
    public void setImeVisible(boolean visible) {
    public void setImeVisible(boolean visible) {
        if (HOME_GESTURE_ENABLED) {
            setImeVisibleInternal(visible);
        } else {
            setImeVisibleWithoutClipping(visible);
        }
    }

    private void setImeVisibleWithoutClipping(boolean visible) {
        if ((mIsExpansionAnimating || mIsBubbleSwitchAnimating) && mIsExpanded) {
            // This will update the animation so the bubbles move to position for the IME
            mExpandedAnimationController.expandFromStack(() -> {
                updatePointerPosition(false /* forIme */);
                afterExpandedViewAnimation();
            } /* after */);
            return;
        }

        if (!mIsExpanded && getBubbleCount() > 0) {
            final float stackDestinationY =
                    mStackAnimationController.animateForImeVisibility(visible);

            // How far the stack is animating due to IME, we'll just animate the flyout by that
            // much too.
            final float stackDy =
                    stackDestinationY - mStackAnimationController.getStackPosition().y;

            // If the flyout is visible, translate it along with the bubble stack.
            if (mFlyout.getVisibility() == VISIBLE) {
                PhysicsAnimator.getInstance(mFlyout)
                        .spring(DynamicAnimation.TRANSLATION_Y,
                                mFlyout.getTranslationY() + stackDy,
                                FLYOUT_IME_ANIMATION_SPRING_CONFIG)
                        .start();
            }
        } else if (mPositioner.showBubblesVertically() && mIsExpanded
                && mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
            float selectedY = mPositioner.getExpandedBubbleXY(getState().selectedIndex,
                    getState()).y;
            float newExpandedViewTop = mPositioner.getExpandedViewY(mExpandedBubble, selectedY);
            mExpandedBubble.getExpandedView().setImeVisible(visible);
            if (!mExpandedBubble.getExpandedView().isUsingMaxHeight()) {
                mExpandedViewContainer.animate().translationY(newExpandedViewTop);
            }

            List<Animator> animList = new ArrayList();
            for (int i = 0; i < mBubbleContainer.getChildCount(); i++) {
                View child = mBubbleContainer.getChildAt(i);
                float transY = mPositioner.getExpandedBubbleXY(i, getState()).y;
                ObjectAnimator anim = ObjectAnimator.ofFloat(child, TRANSLATION_Y, transY);
                animList.add(anim);
            }
            updatePointerPosition(true /* forIme */);
            AnimatorSet set = new AnimatorSet();
            set.playTogether(animList);
            set.start();
        }
    }

    private void setImeVisibleInternal(boolean visible) {
        if ((mIsExpansionAnimating || mIsBubbleSwitchAnimating) && mIsExpanded) {
        if ((mIsExpansionAnimating || mIsBubbleSwitchAnimating) && mIsExpanded) {
            // This will update the animation so the bubbles move to position for the IME
            // This will update the animation so the bubbles move to position for the IME
            mExpandedAnimationController.expandFromStack(() -> {
            mExpandedAnimationController.expandFromStack(() -> {
+4 −22
Original line number Original line Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.view.View.LAYOUT_DIRECTION_RTL;


import static com.android.wm.shell.bubbles.BubblePositioner.NUM_VISIBLE_WHEN_RESTING;
import static com.android.wm.shell.bubbles.BubblePositioner.NUM_VISIBLE_WHEN_RESTING;
import static com.android.wm.shell.bubbles.BubbleStackView.ENABLE_FLING_TO_DISMISS_BUBBLE;
import static com.android.wm.shell.bubbles.BubbleStackView.ENABLE_FLING_TO_DISMISS_BUBBLE;
import static com.android.wm.shell.bubbles.BubbleStackView.HOME_GESTURE_ENABLED;


import android.content.res.Resources;
import android.content.res.Resources;
import android.graphics.Path;
import android.graphics.Path;
@@ -81,11 +80,6 @@ public class ExpandedAnimationController
            new PhysicsAnimator.SpringConfig(
            new PhysicsAnimator.SpringConfig(
                    EXPAND_COLLAPSE_ANIM_STIFFNESS, SpringForce.DAMPING_RATIO_NO_BOUNCY);
                    EXPAND_COLLAPSE_ANIM_STIFFNESS, SpringForce.DAMPING_RATIO_NO_BOUNCY);


    private final PhysicsAnimator.SpringConfig mAnimateOutSpringConfigWithoutHomeGesture =
            new PhysicsAnimator.SpringConfig(
                    EXPAND_COLLAPSE_ANIM_STIFFNESS_WITHOUT_HOME_GESTURE,
                    SpringForce.DAMPING_RATIO_NO_BOUNCY);

    /** Horizontal offset between bubbles, which we need to know to re-stack them. */
    /** Horizontal offset between bubbles, which we need to know to re-stack them. */
    private float mStackOffsetPx;
    private float mStackOffsetPx;
    /** Size of each bubble. */
    /** Size of each bubble. */
@@ -307,14 +301,8 @@ public class ExpandedAnimationController
                    (firstBubbleLeads && index == 0)
                    (firstBubbleLeads && index == 0)
                            || (!firstBubbleLeads && index == mLayout.getChildCount() - 1);
                            || (!firstBubbleLeads && index == mLayout.getChildCount() - 1);


            Interpolator interpolator;
            Interpolator interpolator = expanding
            if (HOME_GESTURE_ENABLED) {
                // When home gesture is enabled, we use a different animation timing for collapse
                interpolator = expanding
                    ? Interpolators.EMPHASIZED_ACCELERATE : Interpolators.EMPHASIZED_DECELERATE;
                    ? Interpolators.EMPHASIZED_ACCELERATE : Interpolators.EMPHASIZED_DECELERATE;
            } else {
                interpolator = Interpolators.LINEAR;
            }


            animation
            animation
                    .followAnimatedTargetAlongPath(
                    .followAnimatedTargetAlongPath(
@@ -564,16 +552,10 @@ public class ExpandedAnimationController
            finishRemoval.run();
            finishRemoval.run();
            mOnBubbleAnimatedOutAction.run();
            mOnBubbleAnimatedOutAction.run();
        } else {
        } else {
            PhysicsAnimator.SpringConfig springConfig;
            if (HOME_GESTURE_ENABLED) {
                springConfig = mAnimateOutSpringConfig;
            } else {
                springConfig = mAnimateOutSpringConfigWithoutHomeGesture;
            }
            PhysicsAnimator.getInstance(child)
            PhysicsAnimator.getInstance(child)
                    .spring(DynamicAnimation.ALPHA, 0f)
                    .spring(DynamicAnimation.ALPHA, 0f)
                    .spring(DynamicAnimation.SCALE_X, 0f, springConfig)
                    .spring(DynamicAnimation.SCALE_X, 0f, mAnimateOutSpringConfig)
                    .spring(DynamicAnimation.SCALE_Y, 0f, springConfig)
                    .spring(DynamicAnimation.SCALE_Y, 0f, mAnimateOutSpringConfig)
                    .withEndActions(finishRemoval, mOnBubbleAnimatedOutAction)
                    .withEndActions(finishRemoval, mOnBubbleAnimatedOutAction)
                    .start();
                    .start();
        }
        }
+0 −57
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.wm.shell.bubbles.animation;

import com.android.wm.shell.bubbles.BubbleExpandedView;

/**
 * Stub implementation {@link ExpandedViewAnimationController} that does not animate the
 * {@link BubbleExpandedView}
 */
public class ExpandedViewAnimationControllerStub implements ExpandedViewAnimationController {
    @Override
    public void setExpandedView(BubbleExpandedView expandedView) {
    }

    @Override
    public void updateDrag(float distance) {
    }

    @Override
    public void setSwipeVelocity(float velocity) {
    }

    @Override
    public boolean shouldCollapse() {
        return false;
    }

    @Override
    public void animateCollapse(Runnable startStackCollapse, Runnable after) {
    }

    @Override
    public void animateBackToExpanded() {
    }

    @Override
    public void animateForImeVisibilityChange(boolean visible) {
    }

    @Override
    public void reset() {
    }
}
+0 −6
Original line number Original line Diff line number Diff line
@@ -249,12 +249,6 @@ object Flags {
    val WM_ENABLE_SHELL_TRANSITIONS =
    val WM_ENABLE_SHELL_TRANSITIONS =
        SysPropBooleanFlag(1100, "persist.wm.debug.shell_transit", false)
        SysPropBooleanFlag(1100, "persist.wm.debug.shell_transit", false)


    /** b/170163464: animate bubbles expanded view collapse with home gesture */
    @JvmField
    @Keep
    val BUBBLES_HOME_GESTURE =
        SysPropBooleanFlag(1101, "persist.wm.debug.bubbles_home_gesture", true)

    // TODO(b/254513207): Tracking Bug
    // TODO(b/254513207): Tracking Bug
    @JvmField
    @JvmField
    @Keep
    @Keep