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) {