Merge "Remove the dependency on StatusBarManagerService from IMMS"

This commit is contained in:
Yohei Yukawa
2022-10-13 14:35:54 +00:00
committed by Android (Google) Code Review
3 changed files with 58 additions and 16 deletions

View File

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

View File

@@ -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);
/**

View File

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