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

Commit 60e7442f authored by Riley Jones's avatar Riley Jones Committed by Android (Google) Code Review
Browse files

Merge "Fix to make MenuViewLayer not interfere with user inputs." into main

parents beaaf868 73e6d9a6
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -38,6 +38,16 @@ flag {
    bug: "281140482"
}

flag {
    name: "floating_menu_remove_fullscreen_taps"
    namespace: "accessibility"
    description: "Stops MenuViewLayer from taking some inputs by making it unclickable."
    bug: "411287116"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "redesign_magnification_window_size"
    namespace: "accessibility"
+3 −2
Original line number Diff line number Diff line
@@ -515,8 +515,9 @@ class MenuAnimationController {
        mHandler.removeCallbacksAndMessages(/* token= */ null);
    }

    void startTuckedAnimationPreview() {
    Animation startTuckedAnimationPreview() {
        fadeInNowIfEnabled();
        mMenuView.clearAnimation();

        final float toXValue = isOnLeftSide()
                ? -ANIMATION_TO_X_VALUE
@@ -529,10 +530,10 @@ class MenuAnimationController {
        animation.setDuration(ANIMATION_DURATION_MS);
        animation.setRepeatMode(Animation.REVERSE);
        animation.setInterpolator(new OvershootInterpolator());
        animation.setRepeatCount(Animation.INFINITE);
        animation.setStartOffset(ANIMATION_START_OFFSET_MS);

        mMenuView.startAnimation(animation);
        return animation;
    }

    private Handler createUiHandler() {
+49 −2
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import android.view.WindowInsets;
import android.view.WindowManager;
import android.view.WindowMetrics;
import android.view.accessibility.AccessibilityManager;
import android.view.animation.Animation;
import android.widget.FrameLayout;
import android.widget.TextView;

@@ -134,6 +135,8 @@ class MenuViewLayer extends FrameLayout implements
    private final Rect mImeInsetsRect = new Rect();
    private boolean mIsMigrationTooltipShowing;
    private boolean mShouldShowDockTooltip;
    private boolean mShouldLoopDockDemo;
    private boolean mIsDockDemoDocked;
    private boolean mIsNotificationShown;
    private Optional<MenuEduTooltipView> mEduTooltipView = Optional.empty();
    private BroadcastReceiver mNotificationActionReceiver;
@@ -179,6 +182,29 @@ class MenuViewLayer extends FrameLayout implements
        }
    };

    Animation.AnimationListener mTuckDemoListener = new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            mIsDockDemoDocked = false;
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            mEduTooltipView.ifPresent(view -> removeTooltip(view));
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            if (Flags.floatingMenuRemoveFullscreenTaps()) {
                mIsDockDemoDocked = !mIsDockDemoDocked;
                // Only stop animation once MenuView has looped back to its normal position.
                if (!mShouldLoopDockDemo && !mIsDockDemoDocked) {
                    mMenuView.clearAnimation();
                }
            }
        }
    };

    MenuViewLayer(@NonNull Context context, WindowManager windowManager,
            AccessibilityManager accessibilityManager,
            MenuViewModel menuViewModel,
@@ -331,7 +357,9 @@ class MenuViewLayer extends FrameLayout implements
        super.onAttachedToWindow();

        mMenuView.show();
        if (!Flags.floatingMenuRemoveFullscreenTaps()) {
            setOnClickListener(this);
        }
        setOnApplyWindowInsetsListener((view, insets) -> onWindowInsetsApplied(insets));
        getViewTreeObserver().addOnComputeInternalInsetsListener(this);
        mMenuViewModel.getDockTooltipVisibilityData().observeForever(mDockTooltipObserver);
@@ -435,7 +463,11 @@ class MenuViewLayer extends FrameLayout implements
                    getContext().getText(R.string.accessibility_floating_button_docking_tooltip),
                    TooltipType.DOCK));

            mMenuAnimationController.startTuckedAnimationPreview();
            mShouldLoopDockDemo = true;
            dispatchTooltipTuckAnimation();
            mHandler.postDelayed(() -> mShouldLoopDockDemo = false,
                    mAccessibilityManager.getRecommendedTimeoutMillis(
                            SHOW_MESSAGE_DELAY_MS, AccessibilityManager.FLAG_CONTENT_TEXT));
        }

        if (!mMenuView.isMoveToTucked()) {
@@ -444,6 +476,14 @@ class MenuViewLayer extends FrameLayout implements
        mMenuView.onArrivalAtPosition(false);
    }

    void dispatchTooltipTuckAnimation() {
        Animation animation =
                mMenuAnimationController.startTuckedAnimationPreview();
        if (Flags.floatingMenuRemoveFullscreenTaps()) {
            animation.setAnimationListener(mTuckDemoListener);
        }
    }

    void dispatchAccessibilityAction(int id) {
        if (id == R.id.action_remove_menu) {
            if (Flags.floatingMenuDragToHide()) {
@@ -520,6 +560,9 @@ class MenuViewLayer extends FrameLayout implements

        mMenuListViewTouchHandler.setOnActionDownEndListener(
                () -> mEduTooltipView.ifPresent(this::removeTooltip));
        if (Flags.floatingMenuRemoveFullscreenTaps()) {
            setOnClickListener(this);
        }
    }

    private void removeTooltip(View tooltipView) {
@@ -538,6 +581,10 @@ class MenuViewLayer extends FrameLayout implements

        mMenuListViewTouchHandler.setOnActionDownEndListener(null);
        mEduTooltipView = Optional.empty();

        if (Flags.floatingMenuRemoveFullscreenTaps()) {
            setClickable(false);
        }
    }

    @VisibleForTesting