diff options
| author | 2025-01-09 23:17:14 -0800 | |
|---|---|---|
| committer | 2025-01-09 23:17:14 -0800 | |
| commit | 15b8a9121cd227dbc0281df513817e77cf7ae009 (patch) | |
| tree | 1a32a4c041b912798fff49d9197f219d00160e80 | |
| parent | 06af608ba99616b41cbcb8e07540483b19bf691e (diff) | |
| parent | 8e42f0aff1f7ab6af03b3656737f0aa154aa6905 (diff) | |
Merge "Display the floating menu with the same context as current running process" into main
10 files changed, 27 insertions, 18 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/DragToInteractAnimationControllerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/DragToInteractAnimationControllerTest.java index 266591028efb..6edf94939010 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/DragToInteractAnimationControllerTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/DragToInteractAnimationControllerTest.java @@ -65,7 +65,7 @@ public class DragToInteractAnimationControllerTest extends SysuiTestCase { @Before public void setUp() throws Exception { final WindowManager stubWindowManager = mContext.getSystemService(WindowManager.class); - final SecureSettings mockSecureSettings = TestUtils.mockSecureSettings(); + final SecureSettings mockSecureSettings = TestUtils.mockSecureSettings(mContext); final MenuViewModel stubMenuViewModel = new MenuViewModel(mContext, mAccessibilityManager, mockSecureSettings, mHearingAidDeviceManager); final MenuViewAppearance stubMenuViewAppearance = new MenuViewAppearance(mContext, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java index 241da5fbc444..15afd2559d9d 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java @@ -71,7 +71,7 @@ public class MenuItemAccessibilityDelegateTest extends SysuiTestCase { private AccessibilityManager mAccessibilityManager; @Mock private HearingAidDeviceManager mHearingAidDeviceManager; - private final SecureSettings mSecureSettings = TestUtils.mockSecureSettings(); + private final SecureSettings mSecureSettings = TestUtils.mockSecureSettings(mContext); private RecyclerView mStubListView; private MenuView mMenuView; private MenuViewLayer mMenuViewLayer; diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuListViewTouchHandlerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuListViewTouchHandlerTest.java index 715c40a31632..56a97bb34172 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuListViewTouchHandlerTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuListViewTouchHandlerTest.java @@ -89,7 +89,7 @@ public class MenuListViewTouchHandlerTest extends SysuiTestCase { @Before public void setUp() throws Exception { final WindowManager windowManager = mContext.getSystemService(WindowManager.class); - final SecureSettings secureSettings = TestUtils.mockSecureSettings(); + final SecureSettings secureSettings = TestUtils.mockSecureSettings(mContext); final MenuViewModel stubMenuViewModel = new MenuViewModel(mContext, mAccessibilityManager, secureSettings, mHearingAidDeviceManager); final MenuViewAppearance stubMenuViewAppearance = new MenuViewAppearance(mContext, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuViewTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuViewTest.java index cb7c205742fc..5ff7bd063427 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuViewTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/floatingmenu/MenuViewTest.java @@ -91,7 +91,7 @@ public class MenuViewTest extends SysuiTestCase { mSpyContext = spy(mContext); doNothing().when(mSpyContext).startActivity(any()); - final SecureSettings secureSettings = TestUtils.mockSecureSettings(); + final SecureSettings secureSettings = TestUtils.mockSecureSettings(mContext); final MenuViewModel stubMenuViewModel = new MenuViewModel(mContext, mAccessibilityManager, secureSettings, mHearingAidDeviceManager); final WindowManager stubWindowManager = mContext.getSystemService(WindowManager.class); diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/utils/TestUtils.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/utils/TestUtils.java index 8399fa85bfb1..aafb21209468 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/utils/TestUtils.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/accessibility/utils/TestUtils.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import android.content.ComponentName; +import android.content.Context; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; @@ -76,8 +77,10 @@ public class TestUtils { * Returns a mock secure settings configured to return information needed for tests. * Currently, this only includes button targets. */ - public static SecureSettings mockSecureSettings() { + public static SecureSettings mockSecureSettings(Context context) { SecureSettings secureSettings = mock(SecureSettings.class); + when(secureSettings.getRealUserHandle(UserHandle.USER_CURRENT)) + .thenReturn(context.getUserId()); final String targets = getShortcutTargets( Set.of(TEST_COMPONENT_A, TEST_COMPONENT_B)); 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 5f0acfa644dc..67aa4ff577b8 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java @@ -23,7 +23,6 @@ import android.annotation.Nullable; import android.content.Context; import android.hardware.display.DisplayManager; import android.os.Handler; -import android.os.UserHandle; import android.text.TextUtils; import android.view.Display; import android.view.WindowManager; @@ -58,7 +57,7 @@ public class AccessibilityFloatingMenuController implements private final AccessibilityButtonTargetsObserver mAccessibilityButtonTargetsObserver; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; - private Context mContext; + private final Context mContext; private final WindowManager mWindowManager; private final ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager; private final DisplayManager mDisplayManager; @@ -226,7 +225,6 @@ public class AccessibilityFloatingMenuController implements @Override public void onUserInitializationComplete(int userId) { mIsUserInInitialization = false; - mContext = mContext.createContextAsUser(UserHandle.of(userId), /* flags= */ 0); mBtnMode = mAccessibilityButtonModeObserver.getCurrentAccessibilityButtonMode(); mBtnTargets = mAccessibilityButtonTargetsObserver.getCurrentAccessibilityButtonTargets(); diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuInfoRepository.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuInfoRepository.java index 121b51f768e7..a1cb0367421b 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuInfoRepository.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuInfoRepository.java @@ -79,6 +79,8 @@ class MenuInfoRepository { private static final int DEFAULT_MIGRATION_TOOLTIP_VALUE_PROMPT = MigrationPrompt.DISABLED; private final Context mContext; + // Pref always get the userId from the context to store SharedPreferences for the correct user + private final Context mCurrentUserContext; private final Configuration mConfiguration; private final AccessibilityManager mAccessibilityManager; private final AccessibilityManager.AccessibilityServicesStateChangeListener @@ -157,6 +159,9 @@ class MenuInfoRepository { OnContentsChanged settingsContentsChanged, SecureSettings secureSettings, @Nullable HearingAidDeviceManager hearingAidDeviceManager) { mContext = context; + final int currentUserId = secureSettings.getRealUserHandle(UserHandle.USER_CURRENT); + mCurrentUserContext = context.createContextAsUser( + UserHandle.of(currentUserId), /* flags= */ 0); mAccessibilityManager = accessibilityManager; mConfiguration = new Configuration(context.getResources().getConfiguration()); mSettingsContentsCallback = settingsContentsChanged; @@ -168,12 +173,13 @@ class MenuInfoRepository { void loadMenuMoveToTucked(OnInfoReady<Boolean> callback) { callback.onReady( - Prefs.getBoolean(mContext, Prefs.Key.HAS_ACCESSIBILITY_FLOATING_MENU_TUCKED, + Prefs.getBoolean( + mCurrentUserContext, Prefs.Key.HAS_ACCESSIBILITY_FLOATING_MENU_TUCKED, DEFAULT_MOVE_TO_TUCKED_VALUE)); } void loadDockTooltipVisibility(OnInfoReady<Boolean> callback) { - callback.onReady(Prefs.getBoolean(mContext, + callback.onReady(Prefs.getBoolean(mCurrentUserContext, Prefs.Key.HAS_SEEN_ACCESSIBILITY_FLOATING_MENU_DOCK_TOOLTIP, DEFAULT_HAS_SEEN_DOCK_TOOLTIP_VALUE)); } @@ -215,19 +221,19 @@ class MenuInfoRepository { } void updateMoveToTucked(boolean isMoveToTucked) { - Prefs.putBoolean(mContext, Prefs.Key.HAS_ACCESSIBILITY_FLOATING_MENU_TUCKED, + Prefs.putBoolean(mCurrentUserContext, Prefs.Key.HAS_ACCESSIBILITY_FLOATING_MENU_TUCKED, isMoveToTucked); } void updateMenuSavingPosition(Position percentagePosition) { mPercentagePosition = percentagePosition; - Prefs.putString(mContext, Prefs.Key.ACCESSIBILITY_FLOATING_MENU_POSITION, + Prefs.putString(mCurrentUserContext, Prefs.Key.ACCESSIBILITY_FLOATING_MENU_POSITION, percentagePosition.toString()); } void updateDockTooltipVisibility(boolean hasSeen) { - Prefs.putBoolean(mContext, Prefs.Key.HAS_SEEN_ACCESSIBILITY_FLOATING_MENU_DOCK_TOOLTIP, - hasSeen); + Prefs.putBoolean(mCurrentUserContext, + Prefs.Key.HAS_SEEN_ACCESSIBILITY_FLOATING_MENU_DOCK_TOOLTIP, hasSeen); } void updateMigrationTooltipVisibility(boolean visible) { @@ -243,7 +249,7 @@ class MenuInfoRepository { } private Position getStartPosition() { - final String absolutePositionString = Prefs.getString(mContext, + final String absolutePositionString = Prefs.getString(mCurrentUserContext, Prefs.Key.ACCESSIBILITY_FLOATING_MENU_POSITION, /* defaultValue= */ null); final float defaultPositionXPercent = 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 184518ac35eb..e7470a34a065 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java @@ -17,6 +17,7 @@ package com.android.systemui.accessibility.floatingmenu; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; +import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS; import android.content.Context; import android.graphics.PixelFormat; @@ -90,7 +91,8 @@ class MenuViewLayerController implements IAccessibilityFloatingMenu { WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.receiveInsetsIgnoringZOrder = true; - params.privateFlags |= PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; + params.privateFlags |= + PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION | SYSTEM_FLAG_SHOW_FOR_ALL_USERS; params.windowAnimations = android.R.style.Animation_Translucent; // Insets are configured to allow the menu to display over navigation and system bars. params.setFitInsetsTypes(0); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationControllerTest.java index 856c37934251..9f6ad56335d7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationControllerTest.java @@ -82,7 +82,7 @@ public class MenuAnimationControllerTest extends SysuiTestCase { final WindowManager stubWindowManager = mContext.getSystemService(WindowManager.class); final MenuViewAppearance stubMenuViewAppearance = new MenuViewAppearance(mContext, stubWindowManager); - final SecureSettings secureSettings = TestUtils.mockSecureSettings(); + final SecureSettings secureSettings = TestUtils.mockSecureSettings(mContext); final MenuViewModel stubMenuViewModel = new MenuViewModel(mContext, mAccessibilityManager, secureSettings, mHearingAidDeviceManager); 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 33cfb3890e71..1500340c9d89 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 @@ -144,7 +144,7 @@ public class MenuViewLayerTest extends SysuiTestCase { private HearingAidDeviceManager mHearingAidDeviceManager; @Mock private PackageManager mMockPackageManager; - private final SecureSettings mSecureSettings = TestUtils.mockSecureSettings(); + private final SecureSettings mSecureSettings = TestUtils.mockSecureSettings(mContext); private final NotificationManager mMockNotificationManager = mock(NotificationManager.class); |