Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c98d2f3e authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

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
      661cd52e
 [2]: I637ba28412793166cbf519273fdf022241159a92
      a0027153
 [3]: Iaacfee8d5f080a28d7cc606761f4624673ed390f
      ef2ea1fa
 [4]: Ic17667df60b30e5355b61a3601ad27a000cab3a3
      1e33dc8f

Bug: 234882948
Test: presubmit
Change-Id: Iacd258006df73090c16d3f3b813a5f0a8cec488d
parent 3ed564d4
Loading
Loading
Loading
Loading
+14 −16
Original line number Diff line number Diff line
@@ -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) {
+25 −0
Original line number Diff line number Diff line
@@ -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);

    /**
+19 −0
Original line number Diff line number Diff line
@@ -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) {