Fix to make MenuViewLayer not interfere with user inputs.

MenuViewLayer is only clickable while a tooltip is present. Clicking it (clicking most of the screen) will still dismiss the tooltip.
In addition, the tuck/dock tooltip will automatically dismiss itself after enough time has elapsed.

Bug: 411287116
Test: atest com.android.systemui.accessibility.floatingmenu
Test: acquire TreeDebug logs while FAB is present - verify the FrameLayout referring to MenuViewLayer is no longer clickable.
Test: in addition, verify the tooltip works as described above.
Flag: com.android.systemui.floating_menu_remove_fullscreen_taps
Change-Id: If997b6bab9acf4bbe43ff859f59d8a85e270e7f6
diff --git a/packages/SystemUI/aconfig/accessibility.aconfig b/packages/SystemUI/aconfig/accessibility.aconfig
index 6df39fb..ac75eb1 100644
--- a/packages/SystemUI/aconfig/accessibility.aconfig
+++ b/packages/SystemUI/aconfig/accessibility.aconfig
@@ -39,6 +39,16 @@
 }
 
 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"
     description: "Redesigns the window magnification magnifier sizes provided in the settings panel."
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationController.java
index ab39640..493402b 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationController.java
@@ -515,8 +515,9 @@
         mHandler.removeCallbacksAndMessages(/* token= */ null);
     }
 
-    void startTuckedAnimationPreview() {
+    Animation startTuckedAnimationPreview() {
         fadeInNowIfEnabled();
+        mMenuView.clearAnimation();
 
         final float toXValue = isOnLeftSide()
                 ? -ANIMATION_TO_X_VALUE
@@ -529,10 +530,10 @@
         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() {
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java
index e8187cc..dfa6b03 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java
@@ -56,6 +56,7 @@
 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 @@
     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 @@
         }
     };
 
+    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 @@
         super.onAttachedToWindow();
 
         mMenuView.show();
-        setOnClickListener(this);
+        if (!Flags.floatingMenuRemoveFullscreenTaps()) {
+            setOnClickListener(this);
+        }
         setOnApplyWindowInsetsListener((view, insets) -> onWindowInsetsApplied(insets));
         getViewTreeObserver().addOnComputeInternalInsetsListener(this);
         mMenuViewModel.getDockTooltipVisibilityData().observeForever(mDockTooltipObserver);
@@ -435,7 +463,11 @@
                     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 @@
         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 @@
 
         mMenuListViewTouchHandler.setOnActionDownEndListener(
                 () -> mEduTooltipView.ifPresent(this::removeTooltip));
+        if (Flags.floatingMenuRemoveFullscreenTaps()) {
+            setOnClickListener(this);
+        }
     }
 
     private void removeTooltip(View tooltipView) {
@@ -538,6 +581,10 @@
 
         mMenuListViewTouchHandler.setOnActionDownEndListener(null);
         mEduTooltipView = Optional.empty();
+
+        if (Flags.floatingMenuRemoveFullscreenTaps()) {
+            setClickable(false);
+        }
     }
 
     @VisibleForTesting