diff options
| -rw-r--r-- | services/core/java/com/android/server/inputmethod/InputMethodManagerService.java | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 2d7f62d90914..c516232caea9 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -474,6 +474,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } } + @GuardedBy("mMethodMap") final ArrayMap<IBinder, ClientState> mClients = new ArrayMap<>(); private static final class ActivityViewInfo { @@ -5322,20 +5323,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub case "reset": return mService.handleShellCommandResetInputMethod(this); case "tracing": - int result = ImeTracing.getInstance().onShellCommand(this); - boolean isImeTraceEnabled = ImeTracing.getInstance().isEnabled(); - for (ClientState state : mService.mClients.values()) { - if (state != null) { - try { - state.client.setImeTraceEnabled(isImeTraceEnabled); - } catch (RemoteException e) { - Log.e(TAG, - "Error while trying to enable/disable ime " - + "trace on client window", e); - } - } - } - return result; + return mService.handleShellCommandTraceInputMethod(this); default: getOutPrintWriter().println("Unknown command: " + imeCommand); return ShellCommandResult.FAILURE; @@ -5716,6 +5704,34 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } /** + * Handles {@code adb shell ime tracing start/stop}. + * @param shellCommand {@link ShellCommand} object that is handling this command. + * @return Exit code of the command. + */ + @BinderThread + @ShellCommandResult + private int handleShellCommandTraceInputMethod(@NonNull ShellCommand shellCommand) { + int result = ImeTracing.getInstance().onShellCommand(shellCommand); + boolean isImeTraceEnabled = ImeTracing.getInstance().isEnabled(); + ArrayMap<IBinder, ClientState> clients; + synchronized (mMethodMap) { + clients = new ArrayMap<>(mClients); + } + for (ClientState state : clients.values()) { + if (state != null) { + try { + state.client.setImeTraceEnabled(isImeTraceEnabled); + } catch (RemoteException e) { + Log.e(TAG, + "Error while trying to enable/disable ime " + + "trace on client window", e); + } + } + } + return result; + } + + /** * @param userId the actual user handle obtained by {@link UserHandle#getIdentifier()} * and *not* pseudo ids like {@link UserHandle#USER_ALL etc}. * @return {@code true} if userId has debugging privileges. |