summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java4
-rw-r--r--services/core/java/com/android/server/inputmethod/SecureSettingsWrapper.java40
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.