From b3e02df2b4c833552a2ee98db83731128191fb65 Mon Sep 17 00:00:00 2001 From: Yohei Yukawa Date: Wed, 5 Oct 2022 16:53:27 -0700 Subject: [PATCH] Remove the dependency on IPackageManager from IMMS This CL removes the dependency on IPackageManager from InputMethodManagerService without changing any observable behavior. Bug: 234882948 Test: presubmit Change-Id: If32bd9861a0372b76050140487324d81d87f3492 --- .../InputMethodManagerService.java | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index ab05e034562b2..c898f69970ba6 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -68,7 +68,6 @@ import android.annotation.UiThread; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.ActivityManagerInternal; -import android.app.AppGlobals; import android.app.KeyguardManager; import android.app.Notification; import android.app.NotificationManager; @@ -81,7 +80,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; -import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.ResolveInfo; @@ -800,7 +798,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub private LocaleList mLastSystemLocales; private boolean mAccessibilityRequestingNoSoftKeyboard; private final MyPackageMonitor mMyPackageMonitor = new MyPackageMonitor(); - private final IPackageManager mIPackageManager; private final String mSlotIme; /** @@ -1546,11 +1543,13 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub int change = isPackageDisappearing(curIm.getPackageName()); if (change == PACKAGE_TEMPORARY_CHANGE || change == PACKAGE_PERMANENT_CHANGE) { + final PackageManager userAwarePackageManager = + getPackageManagerForUser(mContext, mSettings.getCurrentUserId()); ServiceInfo si = null; try { - si = mIPackageManager.getServiceInfo( - curIm.getComponent(), 0, mSettings.getCurrentUserId()); - } catch (RemoteException ex) { + si = userAwarePackageManager.getServiceInfo(curIm.getComponent(), + PackageManager.ComponentInfoFlags.of(0)); + } catch (PackageManager.NameNotFoundException ignored) { } if (si == null) { // Uh oh, current input method is no longer around! @@ -1708,7 +1707,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub } public InputMethodManagerService(Context context) { - mIPackageManager = AppGlobals.getPackageManager(); mContext = context; mRes = context.getResources(); // TODO(b/196206770): Disallow I/O on this thread. Currently it's needed for loading @@ -3211,27 +3209,30 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub @GuardedBy("ImfLock.class") void updateInputMethodsFromSettingsLocked(boolean enabledMayChange) { if (enabledMayChange) { + final PackageManager userAwarePackageManager = getPackageManagerForUser(mContext, + mSettings.getCurrentUserId()); + List enabled = mSettings.getEnabledInputMethodListLocked(); for (int i = 0; i < enabled.size(); i++) { // We allow the user to select "disabled until used" apps, so if they // are enabling one of those here we now need to make it enabled. InputMethodInfo imm = enabled.get(i); + ApplicationInfo ai = null; try { - ApplicationInfo ai = mIPackageManager.getApplicationInfo(imm.getPackageName(), - PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, - mSettings.getCurrentUserId()); - if (ai != null && ai.enabledSetting - == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) { - if (DEBUG) { - Slog.d(TAG, "Update state(" + imm.getId() - + "): DISABLED_UNTIL_USED -> DEFAULT"); - } - mIPackageManager.setApplicationEnabledSetting(imm.getPackageName(), - PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, - PackageManager.DONT_KILL_APP, mSettings.getCurrentUserId(), - mContext.getBasePackageName()); + ai = userAwarePackageManager.getApplicationInfo(imm.getPackageName(), + PackageManager.ApplicationInfoFlags.of( + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS)); + } catch (PackageManager.NameNotFoundException ignored) { + } + if (ai != null && ai.enabledSetting + == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) { + if (DEBUG) { + Slog.d(TAG, "Update state(" + imm.getId() + + "): DISABLED_UNTIL_USED -> DEFAULT"); } - } catch (RemoteException e) { + userAwarePackageManager.setApplicationEnabledSetting(imm.getPackageName(), + PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); } } }