From c98d2f3ef3d1cbf017289294f46ed06d5df8bd8e Mon Sep 17 00:00:00 2001 From: Yohei Yukawa Date: Wed, 12 Oct 2022 12:56:47 -0700 Subject: [PATCH] Remove the dependency on StatusBarManagerService from IMMS This is a mechanical code clean up with no behavior change for InputMethodManagerService. An internal callback InputMethodManagerService#systemRunning(StatusBarManagerService) originates from a quick feature work to show progress dialog for booting after an upgrade [1]. Since then system server lifecycle management has been consolidated [2][3][4], but the direct dependency on StatusBarManagerService from InputMethodManagerService has been there. This CL replaces StatusBarManagerService with StatusBarManagerInternal to remove such a direct dependency from InputMethodManagerService. [1]: I0e78439ccec3850fb67872c22f235bf12a158dae 661cd52e0e1d527132eb1cae604d3e64da7ec0cb [2]: I637ba28412793166cbf519273fdf022241159a92 a00271533f639c8ed36429c663889ac9f654bc72 [3]: Iaacfee8d5f080a28d7cc606761f4624673ed390f ef2ea1faf6449f97a2423ecbdecce664c58bcbe1 [4]: Ic17667df60b30e5355b61a3601ad27a000cab3a3 1e33dc8fdf3f722ecd32cc586b2a9515de24a242 Bug: 234882948 Test: presubmit Change-Id: Iacd258006df73090c16d3f3b813a5f0a8cec488d --- .../InputMethodManagerService.java | 30 +++++++++---------- .../statusbar/StatusBarManagerInternal.java | 25 ++++++++++++++++ .../statusbar/StatusBarManagerService.java | 19 ++++++++++++ 3 files changed, 58 insertions(+), 16 deletions(-) diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 2be84d0592862..848156047f0d9 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -105,7 +105,6 @@ import android.os.Parcel; import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; -import android.os.ServiceManager; import android.os.ShellCallback; import android.os.ShellCommand; import android.os.SystemClock; @@ -190,7 +189,7 @@ import com.android.server.inputmethod.InputMethodManagerInternal.InputMethodList import com.android.server.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem; import com.android.server.inputmethod.InputMethodUtils.InputMethodSettings; import com.android.server.pm.UserManagerInternal; -import com.android.server.statusbar.StatusBarManagerService; +import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.utils.PriorityDump; import com.android.server.wm.WindowManagerInternal; @@ -339,7 +338,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub // Ongoing notification private NotificationManager mNotificationManager; KeyguardManager mKeyguardManager; - private @Nullable StatusBarManagerService mStatusBar; + @Nullable private StatusBarManagerInternal mStatusBarManagerInternal; private final Notification.Builder mImeSwitcherNotification; private final PendingIntent mImeSwitchPendingIntent; private boolean mShowOngoingImeSwitcherForPhones; @@ -1650,9 +1649,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub // Called on ActivityManager thread. // TODO: Dispatch this to a worker thread as needed. if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { - StatusBarManagerService statusBarService = (StatusBarManagerService) ServiceManager - .getService(Context.STATUS_BAR_SERVICE); - mService.systemRunning(statusBarService); + mService.systemRunning(); } } @@ -1933,7 +1930,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub /** * TODO(b/32343335): The entire systemRunning() method needs to be revisited. */ - public void systemRunning(StatusBarManagerService statusBar) { + public void systemRunning() { synchronized (ImfLock.class) { if (DEBUG) { Slog.d(TAG, "--- systemReady"); @@ -1946,7 +1943,8 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub !mUserManagerInternal.isUserUnlockingOrUnlocked(currentUserId)); mKeyguardManager = mContext.getSystemService(KeyguardManager.class); mNotificationManager = mContext.getSystemService(NotificationManager.class); - mStatusBar = statusBar; + mStatusBarManagerInternal = + LocalServices.getService(StatusBarManagerInternal.class); hideStatusBarIconLocked(); updateSystemUiLocked(mImeWindowVis, mBackDisposition); mShowOngoingImeSwitcherForPhones = mRes.getBoolean( @@ -2965,11 +2963,11 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub final CharSequence contentDescription = applicationInfo != null ? userAwarePackageManager.getApplicationLabel(applicationInfo) : null; - if (mStatusBar != null) { - mStatusBar.setIcon(mSlotIme, packageName, iconId, 0, + if (mStatusBarManagerInternal != null) { + mStatusBarManagerInternal.setIcon(mSlotIme, packageName, iconId, 0, contentDescription != null ? contentDescription.toString() : null); - mStatusBar.setIconVisibility(mSlotIme, true); + mStatusBarManagerInternal.setIconVisibility(mSlotIme, true); } } } finally { @@ -2980,8 +2978,8 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub @GuardedBy("ImfLock.class") private void hideStatusBarIconLocked() { - if (mStatusBar != null) { - mStatusBar.setIconVisibility(mSlotIme, false); + if (mStatusBarManagerInternal != null) { + mStatusBarManagerInternal.setIconVisibility(mSlotIme, false); } } @@ -3160,9 +3158,9 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub } // mImeWindowVis should be updated before calling shouldShowImeSwitcherLocked(). final boolean needsToShowImeSwitcher = shouldShowImeSwitcherLocked(vis); - if (mStatusBar != null) { - mStatusBar.setImeWindowStatus(mCurTokenDisplayId, getCurTokenLocked(), vis, - backDisposition, needsToShowImeSwitcher); + if (mStatusBarManagerInternal != null) { + mStatusBarManagerInternal.setImeWindowStatus(mCurTokenDisplayId, + getCurTokenLocked(), vis, backDisposition, needsToShowImeSwitcher); } final InputMethodInfo imi = mMethodMap.get(getSelectedMethodIdLocked()); if (imi != null && needsToShowImeSwitcher) { diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java index 690dd10aa3e5f..4111446ae6707 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java @@ -49,6 +49,31 @@ public interface StatusBarManagerInternal { void dismissKeyboardShortcutsMenu(); void toggleKeyboardShortcutsMenu(int deviceId); + /** + * Used by InputMethodManagerService to notify the IME status. + * + * @param displayId The display to which the IME is bound to. + * @param token The IME token. + * @param vis Bit flags about the IME visibility. + * (e.g. {@link android.inputmethodservice.InputMethodService#IME_ACTIVE}) + * @param backDisposition Bit flags about the IME back disposition. + * (e.g. {@link android.inputmethodservice.InputMethodService#BACK_DISPOSITION_DEFAULT}) + * @param showImeSwitcher {@code true} when the IME switcher button should be shown. + */ + void setImeWindowStatus(int displayId, IBinder token, int vis, + int backDisposition, boolean showImeSwitcher); + + /** + * See {@link android.app.StatusBarManager#setIcon(String, int, int, String)}. + */ + void setIcon(String slot, String iconPackage, int iconId, int iconLevel, + String contentDescription); + + /** + * See {@link android.app.StatusBarManager#setIconVisibility(String, boolean)}. + */ + void setIconVisibility(String slot, boolean visibility); + void showChargingAnimation(int batteryLevel); /** diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index 653b51a959935..7ccf85f34737a 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -483,6 +483,25 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D } } + @Override + public void setImeWindowStatus(int displayId, IBinder token, int vis, int backDisposition, + boolean showImeSwitcher) { + StatusBarManagerService.this.setImeWindowStatus(displayId, token, vis, backDisposition, + showImeSwitcher); + } + + @Override + public void setIcon(String slot, String iconPackage, int iconId, int iconLevel, + String contentDescription) { + StatusBarManagerService.this.setIcon(slot, iconPackage, iconId, iconLevel, + contentDescription); + } + + @Override + public void setIconVisibility(String slot, boolean visibility) { + StatusBarManagerService.this.setIconVisibility(slot, visibility); + } + @Override public void showChargingAnimation(int batteryLevel) { if (mBar != null) {