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
This commit is contained in:
Yohei Yukawa
2019-01-25 17:27:03 -08:00
parent e6e4b95341
commit 15be5e6f1c

View File

@@ -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);
}
}