From fe61b556505e6d88263070af8bb799b291ed0b29 Mon Sep 17 00:00:00 2001 From: Daniel Norman Date: Wed, 31 May 2023 23:07:36 +0000 Subject: [PATCH] Attempt v2 of "Disables non-system AccessibilityMenu for secondary users." Re-landing of commit 43cd49fa855a723a13613eacba391bebf28044c0 but uses createContextAsUser instead of createPackageContextAsUser. createPackageContextAsUser looks up the package info for non-system packages, which caused a boottime regression for A11yManagerService from 5ms to ~40ms. This new version has no regression and functions the same for our purposes. Bug: 284196235 Test: Create secondary user, observe only one Accessibility Menu entry in Settings > Accessibility. Test: v2/android-crystalball-eng/asit/perf/boottime_test locally and with go/abtd Change-Id: I8410d818891690d9d3307897b168b94125d41b16 --- .../accessibility/AccessibilityManagerService.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 52d43c06408ad..870e8c131fda7 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -958,7 +958,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final ComponentName menuToMigrate = AccessibilityUtils.getAccessibilityMenuComponentToMigrate(mPackageManager, userId); if (menuToMigrate != null) { - mPackageManager.setComponentEnabledSetting( + // PackageManager#setComponentEnabledSetting disables the component for only the user + // linked to PackageManager's context, but mPackageManager is linked to the system user, + // so grab a new PackageManager for the current user to support secondary users. + final PackageManager userPackageManager = + mContext.createContextAsUser(UserHandle.of(userId), /* flags = */ 0) + .getPackageManager(); + userPackageManager.setComponentEnabledSetting( menuToMigrate, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); @@ -1845,6 +1851,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // find out a way to detect the device finished the OTA and switch the user. migrateAccessibilityButtonSettingsIfNecessaryLocked(userState, null, /* restoreFromSdkInt = */0); + // Package components are disabled per user, so secondary users also need their migrated + // Accessibility Menu component disabled. + disableAccessibilityMenuToMigrateIfNeeded(); if (announceNewUser) { // Schedule announcement of the current user if needed.