summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Antonio Kantek <kanant@google.com> 2024-09-11 01:44:57 +0000
committer Antonio Kantek <kanant@google.com> 2024-09-13 19:03:42 +0000
commit830ddac8a4eb2ff8a7818f411396fd49d34249d4 (patch)
tree701c8db77406eed5892bbbf5e1dddf9065263a8c
parenta9f5bdf324b33c4b48b428b6f06e331d48e6491f (diff)
Format IMMS#dump to display concurrent multi-users
New output format for `adb shell dumpsys input_method`: ``` Current Input Method Manager state: mSystemReady=... mInteractive=... mConcurrentMultiUserModeEnabled=... ENABLE_HIDE_IME_CAPTION_BAR=... mStylusIds=... mMenuControllerNew: isShowing: ... ... UserId=0 Input Methods: InputMethod #0: ... UserId=10 Input Methods: InputMethod #0: ... UserId=n ... [UserDataRepository] [ClientStates] [StartInputHistory] [SoftInputShowHideHistory] [ImeTrackerService] ``` Bug: 351912418 Flag: EXEMPT refactor dumpsys input_method Test: m Change-Id: I604784d6cb637334d933d20890998daa29181849
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java193
1 files changed, 104 insertions, 89 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index f7478799527c..2bb2b7b21cce 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -6107,7 +6107,22 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
final int argUserId = parseUserIdFromDumpArgs(args);
final Printer p = new PrintWriterPrinter(pw);
p.println("Current Input Method Manager state:");
- p.println(" concurrentMultiUserModeEnabled=" + mConcurrentMultiUserModeEnabled);
+ p.println(" mSystemReady=" + mSystemReady);
+ p.println(" mInteractive=" + mIsInteractive);
+ p.println(" mConcurrentMultiUserModeEnabled=" + mConcurrentMultiUserModeEnabled);
+ p.println(" ENABLE_HIDE_IME_CAPTION_BAR="
+ + InputMethodService.ENABLE_HIDE_IME_CAPTION_BAR);
+ synchronized (ImfLock.class) {
+ p.println(" mStylusIds=" + (mStylusIds != null
+ ? Arrays.toString(mStylusIds.toArray()) : ""));
+ }
+ if (Flags.imeSwitcherRevamp()) {
+ p.println(" mMenuControllerNew:");
+ mMenuControllerNew.dump(p, " ");
+ } else {
+ p.println(" mMenuController:");
+ mMenuController.dump(p, " ");
+ }
if (mConcurrentMultiUserModeEnabled && argUserId == UserHandle.USER_NULL) {
mUserDataRepository.forAllUserData(
u -> dumpAsStringNoCheckForUser(u, fd, pw, args, isCritical));
@@ -6116,6 +6131,22 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
final var userData = getUserData(userId);
dumpAsStringNoCheckForUser(userData, fd, pw, args, isCritical);
}
+
+ // TODO(b/365868861): Make StartInputHistory, SoftInputShowHideHistory and ImeTracker per
+ // user.
+ synchronized (ImfLock.class) {
+ p.println(" mStartInputHistory:");
+ mStartInputHistory.dump(pw, " ");
+
+ p.println(" mSoftInputShowHideHistory:");
+ mSoftInputShowHideHistory.dump(pw, " ");
+ }
+
+ p.println(" mImeTrackerService#History:");
+ mImeTrackerService.dump(pw, " ");
+
+ dumpUserRepository(p);
+ dumpClientStates(p);
}
@UserIdInt
@@ -6140,104 +6171,33 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
userData.mUserId);
final List<InputMethodInfo> methodList = settings.getMethodList();
int numImes = methodList.size();
- p.println(" Input Methods:");
+ p.println(" Input Methods:");
for (int i = 0; i < numImes; i++) {
InputMethodInfo info = methodList.get(i);
- p.println(" InputMethod #" + i + ":");
- info.dump(p, " ");
+ p.println(" InputMethod #" + i + ":");
+ info.dump(p, " ");
}
- // Dump ClientController#mClients
- p.println(" ClientStates:");
- // TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed.
- @SuppressWarnings("GuardedBy") Consumer<ClientState> clientControllerDump = c -> {
- p.println(" " + c + ":");
- p.println(" client=" + c.mClient);
- p.println(" fallbackInputConnection="
- + c.mFallbackInputConnection);
- p.println(" sessionRequested="
- + c.mSessionRequested);
- p.println(" sessionRequestedForAccessibility="
- + c.mSessionRequestedForAccessibility);
- p.println(" curSession=" + c.mCurSession);
- p.println(" selfReportedDisplayId=" + c.mSelfReportedDisplayId);
- p.println(" uid=" + c.mUid);
- p.println(" pid=" + c.mPid);
- };
- mClientController.forAllClients(clientControllerDump);
final var bindingController = userData.mBindingController;
- p.println(" mCurMethodId=" + bindingController.getSelectedMethodId());
+ p.println(" mCurMethodId=" + bindingController.getSelectedMethodId());
client = userData.mCurClient;
- p.println(" mCurClient=" + client + " mCurSeq="
+ p.println(" mCurClient=" + client + " mCurSeq="
+ bindingController.getSequenceNumber());
- p.println(" mFocusedWindowPerceptible=" + mFocusedWindowPerceptible);
+ p.println(" mFocusedWindowPerceptible=" + mFocusedWindowPerceptible);
userData.mImeBindingState.dump(/* prefix= */ " ", p);
-
- p.println(" mCurId=" + bindingController.getCurId()
- + " mHaveConnection=" + bindingController.hasMainConnection()
- + " mBoundToMethod=" + userData.mBoundToMethod + " mVisibleBound="
- + bindingController.isVisibleBound());
-
- p.println(" mUserDataRepository=");
- // TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed.
- @SuppressWarnings("GuardedBy") Consumer<UserData> userDataDump =
- u -> {
- p.println(" mUserId=" + u.mUserId);
- p.println(" unlocked=" + u.mIsUnlockingOrUnlocked.get());
- p.println(" hasMainConnection="
- + u.mBindingController.hasMainConnection());
- p.println(" isVisibleBound=" + u.mBindingController.isVisibleBound());
- p.println(" boundToMethod=" + u.mBoundToMethod);
- p.println(" curClient=" + u.mCurClient);
- if (u.mCurEditorInfo != null) {
- p.println(" curEditorInfo:");
- u.mCurEditorInfo.dump(p, " ", false /* dumpExtras */);
- } else {
- p.println(" curEditorInfo: null");
- }
- p.println(" imeBindingState:");
- u.mImeBindingState.dump(" ", p);
- p.println(" enabledSession=" + u.mEnabledSession);
- p.println(" inFullscreenMode=" + u.mInFullscreenMode);
- p.println(" imeDrawsNavBar=" + u.mImeDrawsNavBar.get());
- p.println(" switchingController:");
- u.mSwitchingController.dump(p, " ");
- p.println(" mLastEnabledInputMethodsStr="
- + u.mLastEnabledInputMethodsStr);
- };
- mUserDataRepository.forAllUserData(userDataDump);
-
- if (Flags.imeSwitcherRevamp()) {
- p.println(" menuControllerNew:");
- mMenuControllerNew.dump(p, " ");
- } else {
- p.println(" menuController:");
- mMenuController.dump(p, " ");
- }
- p.println(" mCurToken=" + bindingController.getCurToken());
- p.println(" mCurTokenDisplayId=" + bindingController.getCurTokenDisplayId());
- p.println(" mCurHostInputToken=" + bindingController.getCurHostInputToken());
- p.println(" mCurIntent=" + bindingController.getCurIntent());
+ p.println(" mCurId=" + bindingController.getCurId());
+ p.println(" mHaveConnection=" + bindingController.hasMainConnection());
+ p.println(" mBoundToMethod=" + userData.mBoundToMethod);
+ p.println(" mVisibleBound=" + bindingController.isVisibleBound());
+ p.println(" mCurToken=" + bindingController.getCurToken());
+ p.println(" mCurTokenDisplayId=" + bindingController.getCurTokenDisplayId());
+ p.println(" mCurHostInputToken=" + bindingController.getCurHostInputToken());
+ p.println(" mCurIntent=" + bindingController.getCurIntent());
method = bindingController.getCurMethod();
- p.println(" mCurMethod=" + method);
- p.println(" mEnabledSession=" + userData.mEnabledSession);
+ p.println(" mCurMethod=" + method);
+ p.println(" mEnabledSession=" + userData.mEnabledSession);
final var visibilityStateComputer = userData.mVisibilityStateComputer;
visibilityStateComputer.dump(pw, " ");
- p.println(" mInFullscreenMode=" + userData.mInFullscreenMode);
- p.println(" mSystemReady=" + mSystemReady + " mInteractive=" + mIsInteractive);
- p.println(" mConcurrentMultiUserModeEnabled=" + mConcurrentMultiUserModeEnabled);
- p.println(" ENABLE_HIDE_IME_CAPTION_BAR="
- + InputMethodService.ENABLE_HIDE_IME_CAPTION_BAR);
- p.println(" mStylusIds=" + (mStylusIds != null
- ? Arrays.toString(mStylusIds.toArray()) : ""));
-
- p.println(" mStartInputHistory:");
- mStartInputHistory.dump(pw, " ");
-
- p.println(" mSoftInputShowHideHistory:");
- mSoftInputShowHideHistory.dump(pw, " ");
-
- p.println(" mImeTrackerService#History:");
- mImeTrackerService.dump(pw, " ");
+ p.println(" mInFullscreenMode=" + userData.mInFullscreenMode);
}
// Exit here for critical dump, as remaining sections require IPCs to other processes.
@@ -6288,6 +6248,61 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
}
}
+ private void dumpClientStates(Printer p) {
+ p.println(" ClientStates:");
+ // TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed.
+ @SuppressWarnings("GuardedBy") Consumer<ClientState> clientControllerDump = c -> {
+ p.println(" " + c + ":");
+ p.println(" client=" + c.mClient);
+ p.println(" fallbackInputConnection="
+ + c.mFallbackInputConnection);
+ p.println(" sessionRequested="
+ + c.mSessionRequested);
+ p.println(" sessionRequestedForAccessibility="
+ + c.mSessionRequestedForAccessibility);
+ p.println(" curSession=" + c.mCurSession);
+ p.println(" selfReportedDisplayId=" + c.mSelfReportedDisplayId);
+ p.println(" uid=" + c.mUid);
+ p.println(" pid=" + c.mPid);
+ };
+ synchronized (ImfLock.class) {
+ mClientController.forAllClients(clientControllerDump);
+ }
+ }
+
+ private void dumpUserRepository(Printer p) {
+ p.println(" mUserDataRepository=");
+ // TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed.
+ @SuppressWarnings("GuardedBy") Consumer<UserData> userDataDump =
+ u -> {
+ p.println(" mUserId=" + u.mUserId);
+ p.println(" unlocked=" + u.mIsUnlockingOrUnlocked.get());
+ p.println(" hasMainConnection="
+ + u.mBindingController.hasMainConnection());
+ p.println(" isVisibleBound=" + u.mBindingController.isVisibleBound());
+ p.println(" boundToMethod=" + u.mBoundToMethod);
+ p.println(" curClient=" + u.mCurClient);
+ if (u.mCurEditorInfo != null) {
+ p.println(" curEditorInfo:");
+ u.mCurEditorInfo.dump(p, " ", false /* dumpExtras */);
+ } else {
+ p.println(" curEditorInfo: null");
+ }
+ p.println(" imeBindingState:");
+ u.mImeBindingState.dump(" ", p);
+ p.println(" enabledSession=" + u.mEnabledSession);
+ p.println(" inFullscreenMode=" + u.mInFullscreenMode);
+ p.println(" imeDrawsNavBar=" + u.mImeDrawsNavBar.get());
+ p.println(" switchingController:");
+ u.mSwitchingController.dump(p, " ");
+ p.println(" mLastEnabledInputMethodsStr="
+ + u.mLastEnabledInputMethodsStr);
+ };
+ synchronized (ImfLock.class) {
+ mUserDataRepository.forAllUserData(userDataDump);
+ }
+ }
+
@BinderThread
@Override
public void onShellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out,