diff options
| -rw-r--r-- | services/core/java/com/android/server/inputmethod/InputMethodManagerService.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/inputmethod/SecureSettingsWrapper.java | 40 |
2 files changed, 25 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 7ff03c2060de..10e269ae21fa 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -997,8 +997,6 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. Process.THREAD_PRIORITY_FOREGROUND, true /* allowIo */); ioThread.start(); - SecureSettingsWrapper.setContentResolver(context.getContentResolver()); - return new InputMethodManagerService(context, shouldEnableConcurrentMultiUserMode(context), thread.getLooper(), Handler.createAsync(ioThread.getLooper()), @@ -1057,7 +1055,6 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. public void onUserRemoved(UserInfo user) { // Called directly from UserManagerService. Do not block the calling thread. final int userId = user.id; - SecureSettingsWrapper.onUserRemoved(userId); AdditionalSubtypeMapRepository.remove(userId); InputMethodSettingsRepository.remove(userId); mService.mUserDataRepository.remove(userId); @@ -1163,6 +1160,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. mConcurrentMultiUserModeEnabled = concurrentMultiUserModeEnabled; mContext = context; mRes = context.getResources(); + SecureSettingsWrapper.onStart(mContext); mHandler = Handler.createAsync(uiLooper, this); mIoHandler = ioHandler; diff --git a/services/core/java/com/android/server/inputmethod/SecureSettingsWrapper.java b/services/core/java/com/android/server/inputmethod/SecureSettingsWrapper.java index b3500be054f9..c208a5b209e5 100644 --- a/services/core/java/com/android/server/inputmethod/SecureSettingsWrapper.java +++ b/services/core/java/com/android/server/inputmethod/SecureSettingsWrapper.java @@ -20,7 +20,10 @@ import android.annotation.AnyThread; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; +import android.app.ActivityManagerInternal; import android.content.ContentResolver; +import android.content.Context; +import android.content.pm.UserInfo; import android.provider.Settings; import android.util.ArrayMap; import android.util.ArraySet; @@ -318,13 +321,30 @@ final class SecureSettingsWrapper { } /** - * Called when the system is starting. + * Called when {@link InputMethodManagerService} is starting. * - * @param contentResolver the {@link ContentResolver} to be used + * @param context the {@link Context} to be used. */ @AnyThread - static void setContentResolver(@NonNull ContentResolver contentResolver) { - sContentResolver = contentResolver; + static void onStart(@NonNull Context context) { + sContentResolver = context.getContentResolver(); + + final int userId = LocalServices.getService(ActivityManagerInternal.class) + .getCurrentUserId(); + final UserManagerInternal userManagerInternal = + LocalServices.getService(UserManagerInternal.class); + putOrGet(userId, createImpl(userManagerInternal, userId)); + + userManagerInternal.addUserLifecycleListener( + new UserManagerInternal.UserLifecycleListener() { + @Override + public void onUserRemoved(UserInfo user) { + synchronized (sMutationLock) { + sUserMap = sUserMap.cloneWithRemoveOrSelf(user.id); + } + } + } + ); } /** @@ -357,18 +377,6 @@ final class SecureSettingsWrapper { } /** - * Called when a user is being removed. - * - * @param userId the ID of the user whose storage is being removed. - */ - @AnyThread - static void onUserRemoved(@UserIdInt int userId) { - synchronized (sMutationLock) { - sUserMap = sUserMap.cloneWithRemoveOrSelf(userId); - } - } - - /** * Put the given string {@code value} to {@code key}. * * @param key a secure settings key. |