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

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

Merge "Floating menu repositions on navigation mode change" into main

parents c906b847 7c7849ce
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line 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.AccessibilityButtonModeObserver.AccessibilityButtonMode;
import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.util.settings.SecureSettings;


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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