Fixes switch-user -w command.

We handle failures better and exit early if already switched to a current user.

Fixes: 150019926
Test: manual verification
Change-Id: Ib3d70d21cc379f136983f9ddcda31f5bab3f045e
(cherry picked from commit c0bb4e2816)
Merged-In: Ib3d70d21cc379f136983f9ddcda31f5bab3f045e
This commit is contained in:
jovanak
2020-02-21 14:45:49 -08:00
committed by Jovana Knezevic
parent d697434fdc
commit fd7c398e07

View File

@@ -1763,6 +1763,12 @@ final class ActivityManagerShellCommand extends ShellCommand {
}
private boolean switchUserAndWaitForComplete(int userId) throws RemoteException {
UserInfo currentUser = mInterface.getCurrentUser();
if (currentUser != null && userId == currentUser.id) {
// Already switched to the correct user, exit early.
return true;
}
// Register switch observer.
final CountDownLatch switchLatch = new CountDownLatch(1);
mInterface.registerUserSwitchObserver(
@@ -1777,13 +1783,18 @@ final class ActivityManagerShellCommand extends ShellCommand {
// Switch.
boolean switched = mInterface.switchUser(userId);
if (!switched) {
// Switching failed, don't wait for the user switch observer.
return false;
}
// Wait.
try {
switchLatch.await(USER_OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS);
switched = switchLatch.await(USER_OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
getErrPrintWriter().println("Thread interrupted unexpectedly.");
getErrPrintWriter().println("Error: Thread interrupted unexpectedly.");
}
return switched;
}
@@ -1815,7 +1826,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
if (switched) {
return 0;
} else {
pw.printf("Failed to switch to user %d\n", userId);
pw.printf("Error: Failed to switch to user %d\n", userId);
return 1;
}
}