Update AccessibilityManagerService to use SystemService
Bug: 70221242
Test: atest CtsAccessibilityServiceTestCases
Change-Id: Icdf0772d0be93168a954fdd746cada4d5d507eb4
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 376d16b..2da0818 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -109,6 +109,7 @@
import com.android.internal.util.IntPair;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.LocalServices;
+import com.android.server.SystemService;
import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.WindowManagerInternal;
@@ -260,6 +261,25 @@
return getUserStateLocked(mCurrentUserId);
}
+ public static final class Lifecycle extends SystemService {
+ private final AccessibilityManagerService mService;
+
+ public Lifecycle(Context context) {
+ super(context);
+ mService = new AccessibilityManagerService(context);
+ }
+
+ @Override
+ public void onStart() {
+ publishBinderService(Context.ACCESSIBILITY_SERVICE, mService);
+ }
+
+ @Override
+ public void onBootPhase(int phase) {
+ mService.onBootPhase(phase);
+ }
+ }
+
/**
* Creates a new instance.
*
@@ -296,6 +316,14 @@
return mFingerprintGestureDispatcher;
}
+ private void onBootPhase(int phase) {
+ if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
+ if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_APP_WIDGETS)) {
+ mAppWidgetService = LocalServices.getService(AppWidgetManagerInternal.class);
+ }
+ }
+ }
+
private UserState getUserState(int userId) {
synchronized (mLock) {
return getUserStateLocked(userId);
@@ -2684,16 +2712,6 @@
}
}
- private AppWidgetManagerInternal getAppWidgetManager() {
- synchronized (mLock) {
- if (mAppWidgetService == null
- && mPackageManager.hasSystemFeature(PackageManager.FEATURE_APP_WIDGETS)) {
- mAppWidgetService = LocalServices.getService(AppWidgetManagerInternal.class);
- }
- return mAppWidgetService;
- }
- }
-
@Override
public void onShellCommand(FileDescriptor in, FileDescriptor out,
FileDescriptor err, String[] args, ShellCallback callback,
@@ -3022,8 +3040,7 @@
return packageName.toString();
}
// Appwidget hosts get to pass packages for widgets they host
- final AppWidgetManagerInternal appWidgetManager = getAppWidgetManager();
- if (appWidgetManager != null && ArrayUtils.contains(appWidgetManager
+ if (mAppWidgetService != null && ArrayUtils.contains(mAppWidgetService
.getHostedWidgetPackages(resolvedUid), packageNameStr)) {
return packageName.toString();
}
@@ -3051,9 +3068,8 @@
// IMPORTANT: The target package is already vetted to be in the target UID
String[] uidPackages = new String[]{targetPackage};
// Appwidget hosts get to pass packages for widgets they host
- final AppWidgetManagerInternal appWidgetManager = getAppWidgetManager();
- if (appWidgetManager != null) {
- final ArraySet<String> widgetPackages = appWidgetManager
+ if (mAppWidgetService != null) {
+ final ArraySet<String> widgetPackages = mAppWidgetService
.getHostedWidgetPackages(targetUid);
if (widgetPackages != null && !widgetPackages.isEmpty()) {
final String[] validPackages = new String[uidPackages.length
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 252a1fd..85de581 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -235,6 +235,8 @@
"com.android.server.timedetector.TimeDetectorService$Lifecycle";
private static final String TIME_ZONE_DETECTOR_SERVICE_CLASS =
"com.android.server.timezonedetector.TimeZoneDetectorService$Lifecycle";
+ private static final String ACCESSIBILITY_MANAGER_SERVICE_CLASS =
+ "com.android.server.accessibility.AccessibilityManagerService$Lifecycle";
private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
@@ -957,8 +959,7 @@
traceBeginAndSlog("StartAccessibilityManagerService");
try {
- ServiceManager.addService(Context.ACCESSIBILITY_SERVICE,
- new AccessibilityManagerService(context));
+ mSystemServiceManager.startService(ACCESSIBILITY_MANAGER_SERVICE_CLASS);
} catch (Throwable e) {
reportWtf("starting Accessibility Manager", e);
}