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

Commit 32c5a68a authored by Riley Jones's avatar Riley Jones
Browse files

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
parent 6162ea96
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -135,7 +135,10 @@ android_library {
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 {
+7 −0
Original line number Diff line number Diff line
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
+17 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import androidx.recyclerview.widget.RecyclerView;
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 @@ class MenuView extends FrameLayout implements
    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);
            }
        }
    }


+5 −2
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.view.WindowMetrics;
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 @@ class MenuViewAppearance {
        final int margin = getMenuMargin();
        final Rect draggableBounds = new Rect(getWindowAvailableBounds());

        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();
+10 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.view.WindowInsets;
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 @@ class MenuViewLayerController implements IAccessibilityFloatingMenu {
        params.receiveInsetsIgnoringZOrder = true;
        params.privateFlags |= PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION;
        params.windowAnimations = android.R.style.Animation_Translucent;
        // 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;
    }
}