diff options
| -rw-r--r-- | services/core/java/com/android/server/inputmethod/InputMethodManagerService.java | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 1564b2f86218..1f3c2f30212d 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -1341,20 +1341,35 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub @Override public void onPackageDataCleared(String packageName, int uid) { + final int userId = getChangingUserId(); synchronized (ImfLock.class) { + final boolean isCurrentUser = (userId == mSettings.getUserId()); + final AdditionalSubtypeMap additionalSubtypeMap; + final InputMethodSettings settings; + if (isCurrentUser) { + additionalSubtypeMap = mAdditionalSubtypeMap; + settings = mSettings; + } else { + additionalSubtypeMap = AdditionalSubtypeUtils.load(userId); + settings = queryInputMethodServicesInternal(mContext, userId, + additionalSubtypeMap, DirectBootAwareness.AUTO); + } + // Note that one package may implement multiple IMEs. final ArrayList<String> changedImes = new ArrayList<>(); - for (InputMethodInfo imi : mSettings.getMethodList()) { + for (InputMethodInfo imi : settings.getMethodList()) { if (imi.getPackageName().equals(packageName)) { changedImes.add(imi.getId()); } } final AdditionalSubtypeMap newMap = - mAdditionalSubtypeMap.cloneWithRemoveOrSelf(changedImes); - if (newMap != mAdditionalSubtypeMap) { - mAdditionalSubtypeMap = newMap; + additionalSubtypeMap.cloneWithRemoveOrSelf(changedImes); + if (newMap != additionalSubtypeMap) { + if (isCurrentUser) { + mAdditionalSubtypeMap = newMap; + } AdditionalSubtypeUtils.save( - mAdditionalSubtypeMap, mSettings.getMethodMap(), mSettings.getUserId()); + newMap, settings.getMethodMap(), settings.getUserId()); } if (!changedImes.isEmpty()) { mChangedPackages.add(packageName); |