From a6a152e7de2b6db73474620c1eccda1ebe2eee9b Mon Sep 17 00:00:00 2001 From: Yohei Yukawa Date: Mon, 7 Mar 2016 13:41:15 -0800 Subject: [PATCH] Switch to SystemService lifecycle in TSMS. Like we did this for InputMethodManagerService [1], TextServicesManagerService (TSMS) needs to be recognized by SystemServiceManager with SystemService lifecycle mechanism so that we can receive SystemService#onUnlockUser() event, which is necessary to make TSMS encryption-aware. As a preparation, with this CL we only does mechcanical migration to SystemService lifecycle mechanism in TSMS. Hence no user-visible behavior change should occur. [1]: Ic17667df60b30e5355b61a3601ad27a000cab3a3 1e33dc8fdf3f722ecd32cc586b2a9515de24a242 Bug: 27456430 Change-Id: Ib3cc799d384f259b4fa3f5295f2da198df015eb8 --- .../android/server/TextServicesManagerService.java | 31 +++++++++++++++++++--- services/java/com/android/server/SystemServer.java | 17 +----------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java index c4b4cbeda3db..6ca021c708cc 100644 --- a/services/core/java/com/android/server/TextServicesManagerService.java +++ b/services/core/java/com/android/server/TextServicesManagerService.java @@ -83,9 +83,34 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { new HashMap(); private final TextServicesSettings mSettings; - public void systemRunning() { - if (!mSystemReady) { - mSystemReady = true; + public static final class Lifecycle extends SystemService { + private TextServicesManagerService mService; + + public Lifecycle(Context context) { + super(context); + mService = new TextServicesManagerService(context); + } + + @Override + public void onStart() { + publishBinderService(Context.TEXT_SERVICES_MANAGER_SERVICE, mService); + } + + @Override + public void onBootPhase(int phase) { + // Called on the system server's main looper thread. + // TODO: Dispatch this to a worker thread as needed. + if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { + mService.systemRunning(); + } + } + } + + void systemRunning() { + synchronized (mSpellCheckerMap) { + if (!mSystemReady) { + mSystemReady = true; + } } } diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index b8c31e3f063e..a2d5259b2758 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -635,7 +635,6 @@ public final class SystemServer { WallpaperManagerService wallpaper = null; LocationManagerService location = null; CountryDetectorService countryDetector = null; - TextServicesManagerService tsms = null; ILockSettings lockSettings = null; AssetAtlasService atlas = null; MediaRouterService mediaRouter = null; @@ -762,14 +761,7 @@ public final class SystemServer { } if (!disableNonCoreServices) { - traceBeginAndSlog("StartTextServicesManagerService"); - try { - tsms = new TextServicesManagerService(context); - ServiceManager.addService(Context.TEXT_SERVICES_MANAGER_SERVICE, tsms); - } catch (Throwable e) { - reportWtf("starting Text Service Manager Service", e); - } - Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); + mSystemServiceManager.startService(TextServicesManagerService.Lifecycle.class); } if (!disableNetwork) { @@ -1256,7 +1248,6 @@ public final class SystemServer { final CountryDetectorService countryDetectorF = countryDetector; final NetworkTimeUpdateService networkTimeUpdaterF = networkTimeUpdater; final CommonTimeManagementService commonTimeMgmtServiceF = commonTimeMgmtService; - final TextServicesManagerService textServiceManagerServiceF = tsms; final StatusBarManagerService statusBarF = statusBar; final AssetAtlasService atlasF = atlas; final InputManagerService inputManagerF = inputManager; @@ -1372,12 +1363,6 @@ public final class SystemServer { reportWtf("Notifying CommonTimeManagementService running", e); } try { - if (textServiceManagerServiceF != null) - textServiceManagerServiceF.systemRunning(); - } catch (Throwable e) { - reportWtf("Notifying TextServicesManagerService running", e); - } - try { if (atlasF != null) atlasF.systemRunning(); } catch (Throwable e) { reportWtf("Notifying AssetAtlasService running", e); -- 2.11.0