Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd7c398e authored by jovanak's avatar jovanak Committed by Jovana Knezevic
Browse files

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 c0bb4e28)
Merged-In: Ib3d70d21cc379f136983f9ddcda31f5bab3f045e
parent d697434f
Loading
Loading
Loading
Loading
+14 −3
Original line number Original line Diff line number Diff line
@@ -1763,6 +1763,12 @@ final class ActivityManagerShellCommand extends ShellCommand {
    }
    }


    private boolean switchUserAndWaitForComplete(int userId) throws RemoteException {
    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.
        // Register switch observer.
        final CountDownLatch switchLatch = new CountDownLatch(1);
        final CountDownLatch switchLatch = new CountDownLatch(1);
        mInterface.registerUserSwitchObserver(
        mInterface.registerUserSwitchObserver(
@@ -1777,13 +1783,18 @@ final class ActivityManagerShellCommand extends ShellCommand {


        // Switch.
        // Switch.
        boolean switched = mInterface.switchUser(userId);
        boolean switched = mInterface.switchUser(userId);
        if (!switched) {
            // Switching failed, don't wait for the user switch observer.
            return false;
        }


        // Wait.
        // Wait.
        try {
        try {
            switchLatch.await(USER_OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS);
            switched = switchLatch.await(USER_OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
        } catch (InterruptedException e) {
            getErrPrintWriter().println("Thread interrupted unexpectedly.");
            getErrPrintWriter().println("Error: Thread interrupted unexpectedly.");
        }
        }

        return switched;
        return switched;
    }
    }


@@ -1815,7 +1826,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
        if (switched) {
        if (switched) {
            return 0;
            return 0;
        } else {
        } else {
            pw.printf("Failed to switch to user %d\n", userId);
            pw.printf("Error: Failed to switch to user %d\n", userId);
            return 1;
            return 1;
        }
        }
    }
    }