Tradefed: startUser uses new -w flag
Q will introduce a new -w flag to "am start-user", to wait until
the user has started and unlocked before continuing. Tradefed now
supports this call.
Bug: 126263999
Bug: 122305663
Bug: 123038606
Test: m -j tradefed-tests && ./tools/tradefederation/core/tests/run_tradefed_tests.sh
Change-Id: I371b0d73da75566909f51763fdd9ffff4e59fd06
Merged-In: Ic6bc3938bfd1af03d6e9b315749ac5439622678c
diff --git a/src/com/android/tradefed/device/TestDevice.java b/src/com/android/tradefed/device/TestDevice.java
index f78d42a..53ab028 100644
--- a/src/com/android/tradefed/device/TestDevice.java
+++ b/src/com/android/tradefed/device/TestDevice.java
@@ -909,11 +909,30 @@
*/
@Override
public boolean startUser(int userId) throws DeviceNotAvailableException {
- final String output = executeShellCommand(String.format("am start-user %s", userId));
+ return startUser(userId, false);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean startUser(int userId, boolean waitFlag) throws DeviceNotAvailableException {
+ if (waitFlag) {
+ checkApiLevelAgainstNextRelease("start-user -w", 29);
+ }
+ String cmd = "am start-user " + (waitFlag ? "-w " : "") + userId;
+
+ CLog.d("Starting user with command: %s", cmd);
+ final String output = executeShellCommand(cmd);
if (output.startsWith("Error")) {
CLog.e("Failed to start user: %s", output);
return false;
}
+ if (waitFlag) {
+ String state = executeShellCommand("am get-started-user-state " + userId);
+ if (!state.contains("RUNNING_UNLOCKED")) {
+ CLog.w("User %s is not RUNNING_UNLOCKED after start-user -w. (%s).", userId, state);
+ return false;
+ }
+ }
return true;
}