diff options
| author | 2024-08-17 00:18:08 +0000 | |
|---|---|---|
| committer | 2024-08-17 00:18:08 +0000 | |
| commit | 5dcd7d3609b3cb2daee0fe1d82d66fd14368dfb0 (patch) | |
| tree | 8da72ca111ca398ae70b74eaabbdf1f7dd7525a6 | |
| parent | c906b847dcc0b487be636033d73d4dfb15824918 (diff) | |
| parent | 7c7849cec5446df02701f47206c388191f843ef1 (diff) | |
Merge "Floating menu repositions on navigation mode change" into main
7 files changed, 40 insertions, 12 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java index f4a1f0546135..e4b7b7e69c61 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java @@ -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(); 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 f4b6bfbddbac..d62162b368fa 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java @@ -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 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 623536f0f928..cb96e7859fba 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.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 diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java index 5ff3915c76f9..113a8c05ee66 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java @@ -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; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java index c5509ac44046..157cccc3d62f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java @@ -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(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerControllerTest.java index 07ce7b9352c1..fcdeff9ab683 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerControllerTest.java @@ -21,6 +21,7 @@ import static android.view.WindowInsets.Type.systemBars; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -41,6 +42,7 @@ import androidx.test.filters.SmallTest; import com.android.app.viewcapture.ViewCapture; import com.android.app.viewcapture.ViewCaptureAwareWindowManager; import com.android.systemui.SysuiTestCase; +import com.android.systemui.navigationbar.NavigationModeController; import com.android.systemui.util.settings.SecureSettings; import kotlin.Lazy; @@ -90,7 +92,8 @@ public class MenuViewLayerControllerTest extends SysuiTestCase { when(mWindowMetrics.getBounds()).thenReturn(new Rect(0, 0, 1080, 2340)); when(mWindowMetrics.getWindowInsets()).thenReturn(stubDisplayInsets()); mMenuViewLayerController = new MenuViewLayerController(mContext, mWindowManager, - viewCaptureAwareWm, mAccessibilityManager, mSecureSettings); + viewCaptureAwareWm, mAccessibilityManager, mSecureSettings, + mock(NavigationModeController.class)); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerTest.java index e1e6139982e7..c451c32c4587 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerTest.java @@ -81,6 +81,7 @@ import com.android.systemui.Flags; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestableContext; 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; import com.android.wm.shell.shared.magnetictarget.MagnetizedObject; @@ -169,7 +170,7 @@ public class MenuViewLayerTest extends SysuiTestCase { mMenuViewLayer = spy(new MenuViewLayer(mSpyContext, mStubWindowManager, mStubAccessibilityManager, mMenuViewModel, menuViewAppearance, mMenuView, - mFloatingMenu, mSecureSettings)); + mFloatingMenu, mSecureSettings, mock(NavigationModeController.class))); mMenuAnimationController = mMenuView.getMenuAnimationController(); doNothing().when(mSpyContext).startActivity(any()); |