Loading services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +18 −10 Original line number Diff line number Diff line Loading @@ -1757,6 +1757,15 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub } } @NonNull private static PackageManager getPackageManagerForUser(@NonNull Context context, @UserIdInt int userId) { return context.getUserId() == userId ? context.getPackageManager() : context.createContextAsUser(UserHandle.of(userId), 0 /* flags */) .getPackageManager(); } @GuardedBy("ImfLock.class") private void switchUserOnHandlerLocked(@UserIdInt int newUserId, IInputMethodClient clientToBeReset) { Loading Loading @@ -1801,9 +1810,9 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub updateFromSettingsLocked(true); if (initialUserSwitch) { InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(mIPackageManager, mSettings.getEnabledInputMethodListLocked(), newUserId, mContext.getBasePackageName()); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed( getPackageManagerForUser(mContext, newUserId), mSettings.getEnabledInputMethodListLocked()); } if (DEBUG) Slog.d(TAG, "Switching user stage 3/3. newUserId=" + newUserId Loading Loading @@ -1892,9 +1901,9 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub final boolean imeSelectedOnBoot = !TextUtils.isEmpty(defaultImiId); buildInputMethodListLocked(!imeSelectedOnBoot /* resetDefaultEnabledIme */); updateFromSettingsLocked(true); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(mIPackageManager, mSettings.getEnabledInputMethodListLocked(), currentUserId, mContext.getBasePackageName()); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed( getPackageManagerForUser(mContext, currentUserId), mSettings.getEnabledInputMethodListLocked()); } } } Loading Loading @@ -6122,10 +6131,9 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub setInputMethodEnabledLocked(imi.getId(), true); } updateInputMethodsFromSettingsLocked(true /* enabledMayChange */); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(mIPackageManager, mSettings.getEnabledInputMethodListLocked(), mSettings.getCurrentUserId(), mContext.getBasePackageName()); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed( getPackageManagerForUser(mContext, mSettings.getCurrentUserId()), mSettings.getEnabledInputMethodListLocked()); nextIme = mSettings.getSelectedInputMethod(); nextEnabledImes = mSettings.getEnabledInputMethodListLocked(); } else { Loading services/core/java/com/android/server/inputmethod/InputMethodUtils.java +21 −19 Original line number Diff line number Diff line Loading @@ -18,17 +18,16 @@ package com.android.server.inputmethod; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserHandleAware; import android.annotation.UserIdInt; import android.app.AppOpsManager; import android.content.ContentResolver; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.res.Resources; import android.os.Build; import android.os.LocaleList; import android.os.RemoteException; import android.os.UserHandle; import android.provider.Settings; import android.text.TextUtils; Loading Loading @@ -663,8 +662,9 @@ final class InputMethodUtils { return !subtype.isAuxiliary(); } static void setNonSelectedSystemImesDisabledUntilUsed(IPackageManager packageManager, List<InputMethodInfo> enabledImis, @UserIdInt int userId, String callingPackage) { @UserHandleAware static void setNonSelectedSystemImesDisabledUntilUsed(PackageManager packageManagerForUser, List<InputMethodInfo> enabledImis) { if (DEBUG) { Slog.d(TAG, "setNonSelectedSystemImesDisabledUntilUsed"); } Loading @@ -675,7 +675,8 @@ final class InputMethodUtils { } // Only the current spell checker should be treated as an enabled one. final SpellCheckerInfo currentSpellChecker = TextServicesManagerInternal.get().getCurrentSpellCheckerForUser(userId); TextServicesManagerInternal.get().getCurrentSpellCheckerForUser( packageManagerForUser.getUserId()); for (final String packageName : systemImesDisabledUntilUsed) { if (DEBUG) { Slog.d(TAG, "check " + packageName); Loading @@ -702,11 +703,12 @@ final class InputMethodUtils { } ApplicationInfo ai = null; try { ai = packageManager.getApplicationInfo(packageName, PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, userId); } catch (RemoteException e) { ai = packageManagerForUser.getApplicationInfo(packageName, PackageManager.ApplicationInfoFlags.of( PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS)); } catch (PackageManager.NameNotFoundException e) { Slog.w(TAG, "getApplicationInfo failed. packageName=" + packageName + " userId=" + userId, e); + " userId=" + packageManagerForUser.getUserId(), e); continue; } if (ai == null) { Loading @@ -717,18 +719,18 @@ final class InputMethodUtils { if (!isSystemPackage) { continue; } setDisabledUntilUsed(packageManager, packageName, userId, callingPackage); setDisabledUntilUsed(packageManagerForUser, packageName); } } private static void setDisabledUntilUsed(IPackageManager packageManager, String packageName, int userId, String callingPackage) { private static void setDisabledUntilUsed(PackageManager packageManagerForUser, String packageName) { final int state; try { state = packageManager.getApplicationEnabledSetting(packageName, userId); } catch (RemoteException e) { state = packageManagerForUser.getApplicationEnabledSetting(packageName); } catch (IllegalArgumentException e) { Slog.w(TAG, "getApplicationEnabledSetting failed. packageName=" + packageName + " userId=" + userId, e); + " userId=" + packageManagerForUser.getUserId(), e); return; } if (state == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT Loading @@ -737,12 +739,12 @@ final class InputMethodUtils { Slog.d(TAG, "Update state(" + packageName + "): DISABLED_UNTIL_USED"); } try { packageManager.setApplicationEnabledSetting(packageName, packageManagerForUser.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0 /* newState */, userId, callingPackage); } catch (RemoteException e) { 0 /* newState */); } catch (IllegalArgumentException e) { Slog.w(TAG, "setApplicationEnabledSetting failed. packageName=" + packageName + " userId=" + userId + " callingPackage=" + callingPackage, e); + " userId=" + packageManagerForUser.getUserId(), e); return; } } else { Loading Loading
services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +18 −10 Original line number Diff line number Diff line Loading @@ -1757,6 +1757,15 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub } } @NonNull private static PackageManager getPackageManagerForUser(@NonNull Context context, @UserIdInt int userId) { return context.getUserId() == userId ? context.getPackageManager() : context.createContextAsUser(UserHandle.of(userId), 0 /* flags */) .getPackageManager(); } @GuardedBy("ImfLock.class") private void switchUserOnHandlerLocked(@UserIdInt int newUserId, IInputMethodClient clientToBeReset) { Loading Loading @@ -1801,9 +1810,9 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub updateFromSettingsLocked(true); if (initialUserSwitch) { InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(mIPackageManager, mSettings.getEnabledInputMethodListLocked(), newUserId, mContext.getBasePackageName()); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed( getPackageManagerForUser(mContext, newUserId), mSettings.getEnabledInputMethodListLocked()); } if (DEBUG) Slog.d(TAG, "Switching user stage 3/3. newUserId=" + newUserId Loading Loading @@ -1892,9 +1901,9 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub final boolean imeSelectedOnBoot = !TextUtils.isEmpty(defaultImiId); buildInputMethodListLocked(!imeSelectedOnBoot /* resetDefaultEnabledIme */); updateFromSettingsLocked(true); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(mIPackageManager, mSettings.getEnabledInputMethodListLocked(), currentUserId, mContext.getBasePackageName()); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed( getPackageManagerForUser(mContext, currentUserId), mSettings.getEnabledInputMethodListLocked()); } } } Loading Loading @@ -6122,10 +6131,9 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub setInputMethodEnabledLocked(imi.getId(), true); } updateInputMethodsFromSettingsLocked(true /* enabledMayChange */); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(mIPackageManager, mSettings.getEnabledInputMethodListLocked(), mSettings.getCurrentUserId(), mContext.getBasePackageName()); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed( getPackageManagerForUser(mContext, mSettings.getCurrentUserId()), mSettings.getEnabledInputMethodListLocked()); nextIme = mSettings.getSelectedInputMethod(); nextEnabledImes = mSettings.getEnabledInputMethodListLocked(); } else { Loading
services/core/java/com/android/server/inputmethod/InputMethodUtils.java +21 −19 Original line number Diff line number Diff line Loading @@ -18,17 +18,16 @@ package com.android.server.inputmethod; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserHandleAware; import android.annotation.UserIdInt; import android.app.AppOpsManager; import android.content.ContentResolver; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.res.Resources; import android.os.Build; import android.os.LocaleList; import android.os.RemoteException; import android.os.UserHandle; import android.provider.Settings; import android.text.TextUtils; Loading Loading @@ -663,8 +662,9 @@ final class InputMethodUtils { return !subtype.isAuxiliary(); } static void setNonSelectedSystemImesDisabledUntilUsed(IPackageManager packageManager, List<InputMethodInfo> enabledImis, @UserIdInt int userId, String callingPackage) { @UserHandleAware static void setNonSelectedSystemImesDisabledUntilUsed(PackageManager packageManagerForUser, List<InputMethodInfo> enabledImis) { if (DEBUG) { Slog.d(TAG, "setNonSelectedSystemImesDisabledUntilUsed"); } Loading @@ -675,7 +675,8 @@ final class InputMethodUtils { } // Only the current spell checker should be treated as an enabled one. final SpellCheckerInfo currentSpellChecker = TextServicesManagerInternal.get().getCurrentSpellCheckerForUser(userId); TextServicesManagerInternal.get().getCurrentSpellCheckerForUser( packageManagerForUser.getUserId()); for (final String packageName : systemImesDisabledUntilUsed) { if (DEBUG) { Slog.d(TAG, "check " + packageName); Loading @@ -702,11 +703,12 @@ final class InputMethodUtils { } ApplicationInfo ai = null; try { ai = packageManager.getApplicationInfo(packageName, PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, userId); } catch (RemoteException e) { ai = packageManagerForUser.getApplicationInfo(packageName, PackageManager.ApplicationInfoFlags.of( PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS)); } catch (PackageManager.NameNotFoundException e) { Slog.w(TAG, "getApplicationInfo failed. packageName=" + packageName + " userId=" + userId, e); + " userId=" + packageManagerForUser.getUserId(), e); continue; } if (ai == null) { Loading @@ -717,18 +719,18 @@ final class InputMethodUtils { if (!isSystemPackage) { continue; } setDisabledUntilUsed(packageManager, packageName, userId, callingPackage); setDisabledUntilUsed(packageManagerForUser, packageName); } } private static void setDisabledUntilUsed(IPackageManager packageManager, String packageName, int userId, String callingPackage) { private static void setDisabledUntilUsed(PackageManager packageManagerForUser, String packageName) { final int state; try { state = packageManager.getApplicationEnabledSetting(packageName, userId); } catch (RemoteException e) { state = packageManagerForUser.getApplicationEnabledSetting(packageName); } catch (IllegalArgumentException e) { Slog.w(TAG, "getApplicationEnabledSetting failed. packageName=" + packageName + " userId=" + userId, e); + " userId=" + packageManagerForUser.getUserId(), e); return; } if (state == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT Loading @@ -737,12 +739,12 @@ final class InputMethodUtils { Slog.d(TAG, "Update state(" + packageName + "): DISABLED_UNTIL_USED"); } try { packageManager.setApplicationEnabledSetting(packageName, packageManagerForUser.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0 /* newState */, userId, callingPackage); } catch (RemoteException e) { 0 /* newState */); } catch (IllegalArgumentException e) { Slog.w(TAG, "setApplicationEnabledSetting failed. packageName=" + packageName + " userId=" + userId + " callingPackage=" + callingPackage, e); + " userId=" + packageManagerForUser.getUserId(), e); return; } } else { Loading