From 46e10f86bbeb39ac4adae8b58e98b5e8aed4d9a8 Mon Sep 17 00:00:00 2001 From: "junseok01.lee" Date: Thu, 20 Feb 2025 08:49:20 -0800 Subject: fix UserManagerService.enforceCurrentUserIfVisibleBackgroundEnabled secondary_user_on_secondary_display is for background users that have access to UI on assigned displays (a.k.a. visible background users) on devices that have config_multiuserVisibleBackgroundUsers enabled. The main use case is Automotive's multi-display Whole Cabin experience where passengers (modeled as visible background users) can interact with the display in front of them concurrently with the driver (modeled as the the current user) interacting with driver's display. A11yMS replaces the current user ID of A11yMS with the ID of the visible background user through the workaround code A11yMS.changeCurrentUserForTestAutomationIfNeededLocked when the visible background user is utilizing the service. If this value is provided as an input parameter to UserManagerService.enforceCurrentUserIfVisibleBackgroundEnabled, it may lead to malfunctions, as this value does not correspond to the actual current user ID. The structure of accepting the current user ID as an input parameter in UserManagerService.enforceCurrentUserIfVisibleBackgroundEnabled can result in such errors; therefore, it would be better to utilize ActivityManager.getCurrentUser within the function to obtain the current user ID. Fixes include - Removed the input parameter for UserManagerService.enforceCurrentUserIfVisibleBackgroundEnabled that accepts the current user ID. - Ensured that UserManagerService.enforceCurrentUserIfVisibleBackgroundEnabled retrieves the current user ID using ActivityManager.getCurrentUser within its implementation Bug: 395311248 Flag: EXEMPT bugfix Test: atest CtsUiAutomationTestCases atest CtsUiAutomationTestCases --user-type secondary_user atest CtsUiAutomationTestCases --user-type secondary_user_on_secondary_display atest CtsAppTestCases:android.app.cts.UiModeManagerTest atest CtsAppTestCases:android.app.cts.UiModeManagerTest --user-type secondary_user atest CtsAppTestCases:android.app.cts.UiModeManagerTest --user-type secondary_user_on_secondary_display atest FrameworksServicesTests:com.android.server.accessibility.AccessibilityManagerServiceTest atest FrameworksUiServicesTests:com.android.server.UiModeManagerServiceTest (cherry picked from https://partner-android-review.googlesource.com/q/commit:7e327fdc350126b63af06e913faabe208bb081c0) Change-Id: Icbf357ecd348eb4bf6421334dc5263ee12ebcc66 --- .../AbstractAccessibilityServiceConnection.java | 10 ++------- .../accessibility/AccessibilityManagerService.java | 26 +++++----------------- 2 files changed, 7 insertions(+), 29 deletions(-) (limited to 'services/accessibility/java') diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java index 4b042489f3eb..47aa8f5736bf 100644 --- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java @@ -1115,14 +1115,12 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ if (svcConnTracingEnabled()) { logTraceSvcConn("performGlobalAction", "action=" + action); } - int currentUserId; synchronized (mLock) { if (!hasRightsToCurrentUserLocked()) { return false; } - currentUserId = mSystemSupport.getCurrentUserIdLocked(); } - enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId); + enforceCurrentUserIfVisibleBackgroundEnabled(); final long identity = Binder.clearCallingIdentity(); try { return mSystemActionPerformer.performSystemAction(action); @@ -2791,11 +2789,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ @RequiresNoPermission @Override public void setAnimationScale(float scale) { - int currentUserId; - synchronized (mLock) { - currentUserId = mSystemSupport.getCurrentUserIdLocked(); - } - enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId); + enforceCurrentUserIfVisibleBackgroundEnabled(); final long identity = Binder.clearCallingIdentity(); try { Settings.Global.putFloat( diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 9eb8442be783..1c951848bc0a 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -1402,11 +1402,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub @EnforcePermission(MANAGE_ACCESSIBILITY) public void registerSystemAction(RemoteAction action, int actionId) { registerSystemAction_enforcePermission(); - int currentUserId; - synchronized (mLock) { - currentUserId = mCurrentUserId; - } - enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId); + enforceCurrentUserIfVisibleBackgroundEnabled(); if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) { mTraceManager.logTrace(LOG_TAG + ".registerSystemAction", FLAGS_ACCESSIBILITY_MANAGER, "action=" + action + ";actionId=" + actionId); @@ -1423,11 +1419,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub @EnforcePermission(MANAGE_ACCESSIBILITY) public void unregisterSystemAction(int actionId) { unregisterSystemAction_enforcePermission(); - int currentUserId; - synchronized (mLock) { - currentUserId = mCurrentUserId; - } - enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId); + enforceCurrentUserIfVisibleBackgroundEnabled(); if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) { mTraceManager.logTrace(LOG_TAG + ".unregisterSystemAction", FLAGS_ACCESSIBILITY_MANAGER, "actionId=" + actionId); @@ -1759,7 +1751,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub synchronized (mLock) { currentUserId = mCurrentUserId; } - enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId); + enforceCurrentUserIfVisibleBackgroundEnabled(); if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) { mTraceManager.logTrace(LOG_TAG + ".notifyAccessibilityButtonClicked", FLAGS_ACCESSIBILITY_MANAGER, @@ -1807,11 +1799,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub @EnforcePermission(STATUS_BAR_SERVICE) public void notifyAccessibilityButtonVisibilityChanged(boolean shown) { notifyAccessibilityButtonVisibilityChanged_enforcePermission(); - int currentUserId; - synchronized (mLock) { - currentUserId = mCurrentUserId; - } - enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId); + enforceCurrentUserIfVisibleBackgroundEnabled(); if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) { mTraceManager.logTrace(LOG_TAG + ".notifyAccessibilityButtonVisibilityChanged", FLAGS_ACCESSIBILITY_MANAGER, "shown=" + shown); @@ -5002,11 +4990,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub throws RemoteException { registerProxyForDisplay_enforcePermission(); mSecurityPolicy.checkForAccessibilityPermissionOrRole(); - int currentUserId; - synchronized (mLock) { - currentUserId = mCurrentUserId; - } - enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId); + enforceCurrentUserIfVisibleBackgroundEnabled(); if (client == null) { return false; } -- cgit v1.2.3-59-g8ed1b