summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYohei Yukawa <yukawa@google.com>2017-12-15 16:52:05 -0800
committerYohei Yukawa <yukawa@google.com>2017-12-15 16:52:05 -0800
commitcac977204bd70cd74f437383b448cc30a656c5b8 (patch)
tree32369f3c15ef9f7b3e8b8712db8404ba35e440e3
parent41b745ca0d117c07419f9255485b8ca5094c653d (diff)
Map "shell ime" to "shell cmd input_method ime"
This is a follow up CL to my following CLs: * Use IBinder#shellCommand() for 'adb shell ime' [1] * Add a shell command to reset selected/enabled IMEs [2] Previously adb shell ime <command> was an alias of adb shell cmd input_method <command> With this CL, adb shell ime <command> is now an alias of adb shell cmd input_method ime <command> This allows us to rename a sub command "reset-ime" to "reset" without worrying about ambiguity about what will be reset. Note also that the built-in "dump" command now works only as shell cmd input_method dump [1]: I9a2dbbf1d4494addbe22c82e2c416eedc4d585f2 926488d70d09baefee0489537b2915602deaeebf [2]: I1e27aa1c9edf5d9a6d529c469ad42fd1e42b13b1 cc97ebd031b4d4be6f69e3163c362bce6878baf1 Bug: 70475949 Fixes: 70731324 Test: Manually tested as follows. 1. make -j SoftKeyboard 2. adb install -r $OUT/system/app/SoftKeyboard/SoftKeyboard.apk 3. adb shell ime enable com.example.android.softkeyboard/.SoftKeyboard 4. adb shell ime set com.example.android.softkeyboard/.SoftKeyboard 5. Make sure that SoftKeyboard is enabled and selected 6. adb shell ime reset 7. Make sure that SoftKeyboard is no longer enabled and selected Change-Id: I2a325dcd6108e357420d47880e4cbd9f81670ec9
-rwxr-xr-xcmds/ime/ime2
-rw-r--r--services/core/java/com/android/server/InputMethodManagerService.java96
2 files changed, 68 insertions, 30 deletions
diff --git a/cmds/ime/ime b/cmds/ime/ime
index 180dc761055b..7d2f72f74010 100755
--- a/cmds/ime/ime
+++ b/cmds/ime/ime
@@ -1,2 +1,2 @@
#!/system/bin/sh
-exec cmd input_method "$@"
+exec cmd input_method ime "$@"
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 25c3fe42f795..880e1e4beb8d 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -35,6 +35,7 @@ import com.android.internal.os.SomeArgs;
import com.android.internal.os.TransferPipe;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastXmlSerializer;
+import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.view.IInputContext;
import com.android.internal.view.IInputMethod;
import com.android.internal.view.IInputMethodClient;
@@ -4663,23 +4664,31 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
@ShellCommandResult
@Override
public int onCommand(@Nullable String cmd) {
- if (cmd == null) {
- return handleDefaultCommands(cmd);
- }
- switch (cmd) {
- case "list":
- return mService.handleShellCommandListInputMethods(this);
- case "enable":
- return mService.handleShellCommandEnableDisableInputMethod(this, true);
- case "disable":
- return mService.handleShellCommandEnableDisableInputMethod(this, false);
- case "set":
- return mService.handleShellCommandSetInputMethod(this);
- case "reset-ime":
- return mService.handleShellCommandResetInputMethod(this);
- default:
- return handleDefaultCommands(cmd);
+ // For existing "adb shell ime <command>".
+ if ("ime".equals(cmd)) {
+ final String imeCommand = getNextArg();
+ if (imeCommand == null || "help".equals(imeCommand) || "-h".equals(imeCommand)) {
+ onImeCommandHelp();
+ return ShellCommandResult.SUCCESS;
+ }
+ switch (imeCommand) {
+ case "list":
+ return mService.handleShellCommandListInputMethods(this);
+ case "enable":
+ return mService.handleShellCommandEnableDisableInputMethod(this, true);
+ case "disable":
+ return mService.handleShellCommandEnableDisableInputMethod(this, false);
+ case "set":
+ return mService.handleShellCommandSetInputMethod(this);
+ case "reset":
+ return mService.handleShellCommandResetInputMethod(this);
+ default:
+ getOutPrintWriter().println("Unknown command: " + imeCommand);
+ return ShellCommandResult.FAILURE;
+ }
}
+
+ return handleDefaultCommands(cmd);
}
@BinderThread
@@ -4691,19 +4700,48 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
pw.println(" Prints this help text.");
pw.println(" dump [options]");
pw.println(" Synonym of dumpsys.");
- pw.println(" list [-a] [-s]");
- pw.println(" prints all enabled input methods.");
- pw.println(" -a: see all input methods");
- pw.println(" -s: only a single summary line of each");
- pw.println(" enable <ID>");
- pw.println(" allows the given input method ID to be used.");
- pw.println(" disable <ID>");
- pw.println(" disallows the given input method ID to be used.");
- pw.println(" set <ID>");
- pw.println(" switches to the given input method ID.");
- pw.println(" reset-ime");
- pw.println(" reset currently selected/enabled IMEs to the default ones as if");
- pw.println(" the device is initially booted with the current locale.");
+ pw.println(" ime <command> [options]");
+ pw.println(" Manipulate IMEs. Run \"ime help\" for details.");
+ }
+ }
+
+ private void onImeCommandHelp() {
+ try (IndentingPrintWriter pw =
+ new IndentingPrintWriter(getOutPrintWriter(), " ", 100)) {
+ pw.println("ime <command>:");
+ pw.increaseIndent();
+
+ pw.println("list [-a] [-s]");
+ pw.increaseIndent();
+ pw.println("prints all enabled input methods.");
+ pw.increaseIndent();
+ pw.println("-a: see all input methods");
+ pw.println("-s: only a single summary line of each");
+ pw.decreaseIndent();
+ pw.decreaseIndent();
+
+ pw.println("enable <ID>");
+ pw.increaseIndent();
+ pw.println("allows the given input method ID to be used.");
+ pw.decreaseIndent();
+
+ pw.println("disable <ID>");
+ pw.increaseIndent();
+ pw.println("disallows the given input method ID to be used.");
+ pw.decreaseIndent();
+
+ pw.println("set <ID>");
+ pw.increaseIndent();
+ pw.println("switches to the given input method ID.");
+ pw.decreaseIndent();
+
+ pw.println("reset");
+ pw.increaseIndent();
+ pw.println("reset currently selected/enabled IMEs to the default ones as if "
+ + "the device is initially booted with the current locale.");
+ pw.decreaseIndent();
+
+ pw.decreaseIndent();
}
}
}