Removing system bar insets from the floating menu layoutParams.

This will allow our shortcut buttons to display on top of the navigation bar, rather than being cut off.
Additional adjustments are made to ensure proper placement in different rotations, as well as use of cutouts to maintain visibility when tucked.

This change also establishes a feature flags file for SystemUi Accessibility.

Bug: 283768342
Test: adb sync system_ext && adb shell stop && adb shell start
Change-Id: I5206a6a1433597ca35aa66dc8bb5cf76d29a35bc
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index b472982..2077af8 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -135,7 +135,10 @@
 aconfig_declarations {
     name: "systemui_aconfig_flags",
     package: "com.android.systemui.aconfig",
-    srcs: ["src/com/android/systemui/aconfig/systemui.aconfig"],
+    srcs: [
+        "src/com/android/systemui/aconfig/systemui.aconfig",
+        "src/com/android/systemui/accessibility/aconfig/accessibility.aconfig",
+    ],
 }
 
 java_aconfig_library {
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/aconfig/accessibility.aconfig b/packages/SystemUI/src/com/android/systemui/accessibility/aconfig/accessibility.aconfig
new file mode 100644
index 0000000..91c5551
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/aconfig/accessibility.aconfig
@@ -0,0 +1,7 @@
+package: "com.android.systemui.aconfig"
+flag {
+    name: "floating_menu_overlaps_nav_bars_flag"
+    namespace: "accessibility"
+    description: "Adjusts bounds to allow the floating menu to render on top of navigation bars."
+    bug: "283768342"
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuView.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuView.java
index 47770fa..f29077d 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuView.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuView.java
@@ -38,6 +38,7 @@
 import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate;
 
 import com.android.internal.accessibility.dialog.AccessibilityTarget;
+import com.android.systemui.aconfig.Flags;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -284,6 +285,22 @@
     void updateMenuMoveToTucked(boolean isMoveToTucked) {
         mIsMoveToTucked = isMoveToTucked;
         mMenuViewModel.updateMenuMoveToTucked(isMoveToTucked);
+
+        if (Flags.floatingMenuOverlapsNavBarsFlag()) {
+            if (isMoveToTucked) {
+                final float halfWidth = getMenuWidth() / 2.0f;
+                final boolean isOnLeftSide = mMenuAnimationController.isOnLeftSide();
+                final Rect clipBounds = new Rect(
+                        (int) (!isOnLeftSide ? 0 : halfWidth),
+                        0,
+                        (int) (!isOnLeftSide ? halfWidth : getMenuWidth()),
+                        getMenuHeight()
+                );
+                setClipBounds(clipBounds);
+            } else {
+                setClipBounds(null);
+            }
+        }
     }
 
 
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java
index 3cd250f..3822936 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java
@@ -35,6 +35,7 @@
 import androidx.annotation.DimenRes;
 
 import com.android.systemui.R;
+import com.android.systemui.aconfig.Flags;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -154,8 +155,10 @@
         final int margin = getMenuMargin();
         final Rect draggableBounds = new Rect(getWindowAvailableBounds());
 
-        // Initializes start position for mapping the translation of the menu view.
-        draggableBounds.offsetTo(/* newLeft= */ 0, /* newTop= */ 0);
+        if (!Flags.floatingMenuOverlapsNavBarsFlag()) {
+            // Initializes start position for mapping the translation of the menu view.
+            draggableBounds.offsetTo(/* newLeft= */ 0, /* newTop= */ 0);
+        }
 
         draggableBounds.top += margin;
         draggableBounds.right -= getMenuWidth();
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java
index c52ecc5..cc18c30 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java
@@ -24,6 +24,7 @@
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityManager;
 
+import com.android.systemui.aconfig.Flags;
 import com.android.systemui.util.settings.SecureSettings;
 
 /**
@@ -77,8 +78,15 @@
         params.receiveInsetsIgnoringZOrder = true;
         params.privateFlags |= PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION;
         params.windowAnimations = android.R.style.Animation_Translucent;
-        params.setFitInsetsTypes(
-                WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout());
+        // Insets are configured to allow the menu to display over navigation and system bars.
+        if (Flags.floatingMenuOverlapsNavBarsFlag()) {
+            params.setFitInsetsTypes(0);
+            params.layoutInDisplayCutoutMode =
+                    WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+        } else {
+            params.setFitInsetsTypes(
+                    WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout());
+        }
         return params;
     }
 }