summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yohei Yukawa <yukawa@google.com> 2019-01-25 17:27:03 -0800
committer Yohei Yukawa <yukawa@google.com> 2019-01-25 17:27:03 -0800
commit15be5e6f1c19ff329a6382c5063aa58bc92fb36e (patch)
tree7d5dccecb439d9a6c12d4818dc16f622d02e2bd3
parente6e4b9534196b32d3d47b3cfbc32a2dfe3bc906f (diff)
Take CLONE_TO_MANAGED_PROFILE into account in InputMethodSettings
This is a preparation to clone SHOW_IME_WITH_HARD_KEYBOARD to profile users. With this CL, InputMethodSettings takes CLONE_TO_MANAGED_PROFILE into account when writing secure settings. The point is that when a secure settings key is in Settings.Secure.CLONE_TO_MANAGED_PROFILE, the value needs to be written into the profile parent's settings, not the current user's one. In this way, InputMethodSettings doesn't need to be updated when a new entry is added to / removed from CLONE_TO_MANAGED_PROFILE. This CL does not change Settings.Secure.CLONE_TO_MANAGED_PROFILE hence there should be no behavior change. Bug: 123379418 Test: make -j checkbuild Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases Change-Id: Ieefefb8630ddef3b247ebb865a604e5c72dfb49c
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodUtils.java17
1 files changed, 15 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodUtils.java b/services/core/java/com/android/server/inputmethod/InputMethodUtils.java
index cfc85dac8a53..326984c7202c 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodUtils.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodUtils.java
@@ -34,6 +34,7 @@ import android.os.UserManagerInternal;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.ArrayMap;
+import android.util.ArraySet;
import android.util.IntArray;
import android.util.Pair;
import android.util.Printer;
@@ -756,6 +757,14 @@ final class InputMethodUtils {
*/
private final ArrayMap<String, String> mCopyOnWriteDataStore = new ArrayMap<>();
+ private static final ArraySet<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>();
+ static {
+ Settings.Secure.getCloneToManagedProfileSettings(CLONE_TO_MANAGED_PROFILE);
+ }
+
+ private static final UserManagerInternal sUserManagerInternal =
+ LocalServices.getService(UserManagerInternal.class);
+
private boolean mCopyOnWrite = false;
@NonNull
private String mEnabledInputMethodsStrCache = "";
@@ -833,7 +842,9 @@ final class InputMethodUtils {
if (mCopyOnWrite) {
mCopyOnWriteDataStore.put(key, str);
} else {
- Settings.Secure.putStringForUser(mResolver, key, str, mCurrentUserId);
+ final int userId = CLONE_TO_MANAGED_PROFILE.contains(key)
+ ? sUserManagerInternal.getProfileParentId(mCurrentUserId) : mCurrentUserId;
+ Settings.Secure.putStringForUser(mResolver, key, str, userId);
}
}
@@ -852,7 +863,9 @@ final class InputMethodUtils {
if (mCopyOnWrite) {
mCopyOnWriteDataStore.put(key, String.valueOf(value));
} else {
- Settings.Secure.putIntForUser(mResolver, key, value, mCurrentUserId);
+ final int userId = CLONE_TO_MANAGED_PROFILE.contains(key)
+ ? sUserManagerInternal.getProfileParentId(mCurrentUserId) : mCurrentUserId;
+ Settings.Secure.putIntForUser(mResolver, key, value, userId);
}
}