Fix '-u <user id>' handling in 'adb ime enable' and 'adb ime set'
This is a follow up CL to my previous CLs [1][2], which added
'-u <user id>' option to
adb shell ime enable <ime id>
and
adb shell ime set <ime id>
respectively.
Those CL had a bug that was introduced during the last round of the
code review when I was addressing a review comment. As a result,
those two commands simply fail if '-u' or '--user' option is
specified. With this CL, those we can finally start specifying the
user ID for those two commands.
This CL also fixes a bug that output for
adb shell ime set -u all <ime id>
are not correctly formatted.
Note that this CL only fixes a bug in debug shell commands. There
should be no user-visible behavior change in end-user use cases.
[1]: Ia0f873e4589a9fc3f549469e3d1d966640dc2df5
e177170f64
[2]: I397cf0fb418a395dcafc0ab0d8d4e553b0f2eaab
099f80ce97
Bug: 120784635
Test: Manually tested as follows:
1. Build aosp_blueline-userdebug and flash it
2. make -j SoftKeyboard
3. adb install -r $OUT/system/app/SoftKeyboard/SoftKeyboard.apk
4. adb shell pm create-user test
5. adb shell am switch-user 10
6. adb shell ime disable -u 0 com.example.android.softkeyboard/.SoftKeyboard
-> Input method com.example.android.softkeyboard/.SoftKeyboard: now disabled for user #0
7. adb shell ime enable -u 0 com.example.android.softkeyboard/.SoftKeyboard
-> Input method com.example.android.softkeyboard/.SoftKeyboard: now enabled for user #0
8. adb shell ime set -u 0 com.example.android.softkeyboard/.SoftKeyboard
-> Input method com.example.android.softkeyboard/.SoftKeyboard selected for user #0
Test: Manually tested as follows.
1. Build aosp_blueline-userdebug and flash it
2. adb shell pm create-user test
3. adb shell pm create-user restricted_test
4. adb root
5. adb shell pm set-user-restriction --user 11 no_debugging_features 1
6. adb shell am switch-user 10
7. adb shell am switch-user 11
8. adb shell am switch-user 0
9. adb shell ime set -u all com.android.inputmethod.latin/.LatinIME
-> Input method com.android.inputmethod.latin/.LatinIME selected for user #0
Input method com.android.inputmethod.latin/.LatinIME selected for user #10
User #11 is restricted with DISALLOW_DEBUGGING_FEATURES.
10. adb shell ime disable -u all com.android.inputmethod.latin/.LatinIME
-> Input method com.android.inputmethod.latin/.LatinIME: now disabled for user #0
Input method com.android.inputmethod.latin/.LatinIME: now disabled for user #10
User #11 is restricted with DISALLOW_DEBUGGING_FEATURES.
Change-Id: I4e396519400c0ccd17322fe085b45456621714e7
This commit is contained in:
@@ -4710,10 +4710,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
@ShellCommandResult
|
||||
private int handleShellCommandEnableDisableInputMethod(
|
||||
@NonNull ShellCommand shellCommand, boolean enabled) {
|
||||
final int userIdToBeResolved = handleOptionsForCommandsThatOnlyHaveUserOption(shellCommand);
|
||||
final String imeId = shellCommand.getNextArgRequired();
|
||||
final PrintWriter out = shellCommand.getOutPrintWriter();
|
||||
final PrintWriter error = shellCommand.getErrPrintWriter();
|
||||
final int userIdToBeResolved = handleOptionsForCommandsThatOnlyHaveUserOption(shellCommand);
|
||||
synchronized (mMethodMap) {
|
||||
final int[] userIds = InputMethodUtils.resolveUserId(userIdToBeResolved,
|
||||
mSettings.getCurrentUserId(), shellCommand.getErrPrintWriter());
|
||||
@@ -4733,6 +4733,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
*
|
||||
* <p>You cannot use this helper method if the command has other options.</p>
|
||||
*
|
||||
* <p>CAVEAT: This method must be called only once before any other
|
||||
* {@link ShellCommand#getNextArg()} and {@link ShellCommand#getNextArgRequired()} for the
|
||||
* main arguments.</p>
|
||||
*
|
||||
* @param shellCommand {@link ShellCommand} from which options should be obtained.
|
||||
* @return User ID to be resolved. {@link UserHandle#CURRENT} if not specified.
|
||||
*/
|
||||
@@ -4819,10 +4823,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
@BinderThread
|
||||
@ShellCommandResult
|
||||
private int handleShellCommandSetInputMethod(@NonNull ShellCommand shellCommand) {
|
||||
final int userIdToBeResolved = handleOptionsForCommandsThatOnlyHaveUserOption(shellCommand);
|
||||
final String imeId = shellCommand.getNextArgRequired();
|
||||
final PrintWriter out = shellCommand.getOutPrintWriter();
|
||||
final PrintWriter error = shellCommand.getErrPrintWriter();
|
||||
final int userIdToBeResolved = handleOptionsForCommandsThatOnlyHaveUserOption(shellCommand);
|
||||
synchronized (mMethodMap) {
|
||||
final int[] userIds = InputMethodUtils.resolveUserId(userIdToBeResolved,
|
||||
mSettings.getCurrentUserId(), shellCommand.getErrPrintWriter());
|
||||
@@ -4864,7 +4868,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
out.print("Input method ");
|
||||
out.print(imeId);
|
||||
out.print(" selected for user #");
|
||||
error.println(userId);
|
||||
out.println(userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user