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

Commit dfdce387 authored by Ats Jenk's avatar Ats Jenk
Browse files

Clean up bubbles home gesture flag

Remove bubbles home gesture flag. It is turned on by default.

Bug: 256873558
Test: mp sysuig
Change-Id: I0e7cf193d1436d241a81b99be502c9c765abfaca
parent cafab986
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
@@ -253,12 +253,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