From 2d950c12b5597681162b13ce87f3cd7e64904f6b Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Tue, 21 Jan 2020 14:22:14 -0800 Subject: [PATCH] Improved 'am switch' to handle errors. Bug: 146207078 Test: adb shell am switch-user 42 ; echo $? Change-Id: I005c76652be1fd0908f5c2b40e2513362b5ce5ac Merged-In: I005c76652be1fd0908f5c2b40e2513362b5ce5ac --- .../server/am/ActivityManagerShellCommand.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 3257f73e24df7..7118899d37fa7 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -1709,7 +1709,7 @@ final class ActivityManagerShellCommand extends ShellCommand { return 0; } - private void switchUserAndWaitForComplete(int userId) throws RemoteException { + private boolean switchUserAndWaitForComplete(int userId) throws RemoteException { // Register switch observer. final CountDownLatch switchLatch = new CountDownLatch(1); mInterface.registerUserSwitchObserver( @@ -1723,7 +1723,7 @@ final class ActivityManagerShellCommand extends ShellCommand { }, ActivityManagerShellCommand.class.getName()); // Switch. - mInterface.switchUser(userId); + boolean switched = mInterface.switchUser(userId); // Wait. try { @@ -1731,6 +1731,7 @@ final class ActivityManagerShellCommand extends ShellCommand { } catch (InterruptedException e) { getErrPrintWriter().println("Thread interrupted unexpectedly."); } + return switched; } int runSwitchUser(PrintWriter pw) throws RemoteException { @@ -1752,12 +1753,18 @@ final class ActivityManagerShellCommand extends ShellCommand { } int userId = Integer.parseInt(getNextArgRequired()); + boolean switched; if (wait) { - switchUserAndWaitForComplete(userId); + switched = switchUserAndWaitForComplete(userId); } else { - mInterface.switchUser(userId); + switched = mInterface.switchUser(userId); + } + if (switched) { + return 0; + } else { + pw.printf("Failed to switch to user %d\n", userId); + return 1; } - return 0; } int runGetCurrentUser(PrintWriter pw) throws RemoteException {