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

Commit 7c7849ce authored by Riley Jones's avatar Riley Jones
Browse files

Floating menu repositions on navigation mode change

Forces a position update when nav mode changes,
so that if the navBar appears or disappears the FAB moves appropriately

Demonstration video: https://x20web.corp.google.com/users/jo/jonesriley/fabFootage/fabNavModeFix.mp4

Bug: 360030334
Test: atest com.android.systemui.accessibility.floatingmenu
Flag: EXEMPT small internal change
Change-Id: I338b30a6a5d0d4882c4ea8300d13c32f36cc238c
parent e82ae247
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
import com.android.systemui.accessibility.AccessibilityButtonModeObserver.AccessibilityButtonMode;
import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.util.settings.SecureSettings;

@@ -61,6 +62,7 @@ public class AccessibilityFloatingMenuController implements

    private final SecureSettings mSecureSettings;
    private final DisplayTracker mDisplayTracker;
    private final NavigationModeController mNavigationModeController;
    @VisibleForTesting
    IAccessibilityFloatingMenu mFloatingMenu;
    private int mBtnMode;
@@ -106,7 +108,8 @@ public class AccessibilityFloatingMenuController implements
            AccessibilityButtonModeObserver accessibilityButtonModeObserver,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            SecureSettings secureSettings,
            DisplayTracker displayTracker) {
            DisplayTracker displayTracker,
            NavigationModeController navigationModeController) {
        mContext = context;
        mWindowManager = windowManager;
        mViewCaptureAwareWindowManager = viewCaptureAwareWindowManager;
@@ -117,6 +120,7 @@ public class AccessibilityFloatingMenuController implements
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mSecureSettings = secureSettings;
        mDisplayTracker = displayTracker;
        mNavigationModeController = navigationModeController;

        mIsKeyguardVisible = false;
    }
@@ -191,7 +195,8 @@ public class AccessibilityFloatingMenuController implements
            final Context windowContext = mContext.createWindowContext(defaultDisplay,
                    TYPE_NAVIGATION_BAR_PANEL, /* options= */ null);
            mFloatingMenu = new MenuViewLayerController(windowContext, mWindowManager,
                    mViewCaptureAwareWindowManager, mAccessibilityManager, mSecureSettings);
                    mViewCaptureAwareWindowManager, mAccessibilityManager, mSecureSettings,
                    mNavigationModeController);
        }

        mFloatingMenu.show();
+9 −1
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.messages.nano.SystemMessageProto;
import com.android.internal.util.Preconditions;
import com.android.systemui.Flags;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.res.R;
import com.android.systemui.util.settings.SecureSettings;
import com.android.wm.shell.bubbles.DismissViewUtils;
@@ -142,6 +143,8 @@ class MenuViewLayer extends FrameLayout implements
    private boolean mIsNotificationShown;
    private Optional<MenuEduTooltipView> mEduTooltipView = Optional.empty();
    private BroadcastReceiver mNotificationActionReceiver;
    private NavigationModeController mNavigationModeController;
    private NavigationModeController.ModeChangedListener mNavigationModeChangedListender;

    @IntDef({
            LayerIndex.MENU_VIEW,
@@ -220,7 +223,8 @@ class MenuViewLayer extends FrameLayout implements
            MenuViewModel menuViewModel,
            MenuViewAppearance menuViewAppearance, MenuView menuView,
            IAccessibilityFloatingMenu floatingMenu,
            SecureSettings secureSettings) {
            SecureSettings secureSettings,
            NavigationModeController navigationModeController) {
        super(context);

        // Simplifies the translation positioning and animations
@@ -253,6 +257,8 @@ class MenuViewLayer extends FrameLayout implements
        mNotificationFactory = new MenuNotificationFactory(context);
        mNotificationManager = context.getSystemService(NotificationManager.class);
        mStatusBarManager = context.getSystemService(StatusBarManager.class);
        mNavigationModeController = navigationModeController;
        mNavigationModeChangedListender = (mode -> mMenuView.onPositionChanged());

        if (Flags.floatingMenuDragToEdit()) {
            mDragToInteractAnimationController = new DragToInteractAnimationController(
@@ -381,6 +387,7 @@ class MenuViewLayer extends FrameLayout implements
                mMigrationTooltipObserver);
        mMessageView.setUndoListener(view -> undo());
        getContext().registerComponentCallbacks(this);
        mNavigationModeController.addListener(mNavigationModeChangedListender);
    }

    @Override
@@ -396,6 +403,7 @@ class MenuViewLayer extends FrameLayout implements
                mMigrationTooltipObserver);
        mHandler.removeCallbacksAndMessages(/* token= */ null);
        getContext().unregisterComponentCallbacks(this);
        mNavigationModeController.removeListener(mNavigationModeChangedListender);
    }

    @Override
+5 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.view.WindowManager;
import android.view.accessibility.AccessibilityManager;

import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.util.settings.SecureSettings;

/**
@@ -37,7 +38,8 @@ class MenuViewLayerController implements IAccessibilityFloatingMenu {

    MenuViewLayerController(Context context, WindowManager windowManager,
            ViewCaptureAwareWindowManager viewCaptureAwareWindowManager,
            AccessibilityManager accessibilityManager, SecureSettings secureSettings) {
            AccessibilityManager accessibilityManager, SecureSettings secureSettings,
            NavigationModeController navigationModeController) {
        mWindowManager = viewCaptureAwareWindowManager;

        MenuViewModel menuViewModel = new MenuViewModel(
@@ -49,7 +51,8 @@ class MenuViewLayerController implements IAccessibilityFloatingMenu {
                menuViewAppearance,
                new MenuView(context, menuViewModel, menuViewAppearance, secureSettings),
                this,
                secureSettings);
                secureSettings,
                navigationModeController);
    }

    @Override
+10 −4
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.FakeDisplayTracker;
import com.android.systemui.util.settings.SecureSettings;

@@ -90,6 +91,8 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
    private SecureSettings mSecureSettings;
    @Mock
    private Lazy<ViewCapture> mLazyViewCapture;
    @Mock
    private NavigationModeController mNavigationModeController;

    @Before
    public void setUp() throws Exception {
@@ -163,7 +166,8 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
        enableAccessibilityFloatingMenuConfig();
        mController = setUpController();
        mController.mFloatingMenu = new MenuViewLayerController(mContextWrapper, mWindowManager,
                mViewCaptureAwareWindowManager, mAccessibilityManager, mSecureSettings);
                mViewCaptureAwareWindowManager, mAccessibilityManager, mSecureSettings,
                mNavigationModeController);
        captureKeyguardUpdateMonitorCallback();
        mKeyguardCallback.onUserUnlocked();

@@ -190,7 +194,8 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
        enableAccessibilityFloatingMenuConfig();
        mController = setUpController();
        mController.mFloatingMenu = new MenuViewLayerController(mContextWrapper, mWindowManager,
                mViewCaptureAwareWindowManager, mAccessibilityManager, mSecureSettings);
                mViewCaptureAwareWindowManager, mAccessibilityManager, mSecureSettings,
                mNavigationModeController);
        captureKeyguardUpdateMonitorCallback();

        mKeyguardCallback.onUserSwitching(fakeUserId);
@@ -204,7 +209,8 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
        enableAccessibilityFloatingMenuConfig();
        mController = setUpController();
        mController.mFloatingMenu = new MenuViewLayerController(mContextWrapper, mWindowManager,
                mViewCaptureAwareWindowManager, mAccessibilityManager, mSecureSettings);
                mViewCaptureAwareWindowManager, mAccessibilityManager, mSecureSettings,
                mNavigationModeController);
        captureKeyguardUpdateMonitorCallback();
        mKeyguardCallback.onUserUnlocked();
        mKeyguardCallback.onKeyguardVisibilityChanged(true);
@@ -340,7 +346,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
                new AccessibilityFloatingMenuController(mContextWrapper, windowManager,
                        viewCaptureAwareWindowManager, displayManager, mAccessibilityManager,
                        mTargetsObserver, mModeObserver, mKeyguardUpdateMonitor, mSecureSettings,
                        displayTracker);
                        displayTracker, mNavigationModeController);
        controller.init();

        return controller;
+3 −1
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.accessibility.utils.TestUtils;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.res.R;
import com.android.systemui.util.settings.SecureSettings;

@@ -94,7 +95,8 @@ public class MenuItemAccessibilityDelegateTest extends SysuiTestCase {
        mMenuViewLayer = spy(new MenuViewLayer(
                mContext, stubWindowManager, mAccessibilityManager,
                stubMenuViewModel, stubMenuViewAppearance, mMenuView,
                mock(IAccessibilityFloatingMenu.class), mSecureSettings));
                mock(IAccessibilityFloatingMenu.class), mSecureSettings,
                mock(NavigationModeController.class)));
        doNothing().when(mMenuViewLayer).gotoEditScreen();

        doReturn(mDraggableBounds).when(mMenuView).getMenuDraggableBounds();
Loading