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

Commit 4d78abfc authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Always report user switched after unfreezing screen.

Change-Id: I58172896892a07e72a3430e56e4d2944d388c7c9
parent 860d0cd4
Loading
Loading
Loading
Loading
+30 −23
Original line number Diff line number Diff line
@@ -14131,7 +14131,7 @@ public final class ActivityManagerService extends ActivityManagerNative
    // Multi-user methods
    @Override
    public boolean switchUser(int userId) {
    public boolean switchUser(final int userId) {
        if (checkCallingPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
                != PackageManager.PERMISSION_GRANTED) {
            String msg = "Permission Denial: switchUser() from pid="
@@ -14225,7 +14225,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                                    public void performReceive(Intent intent, int resultCode,
                                            String data, Bundle extras, boolean ordered,
                                            boolean sticky, int sendingUser) {
                                        userInitialized(uss);
                                        userInitialized(uss, userId);
                                    }
                                }, 0, null, null, null, true, false, MY_PID, Process.SYSTEM_UID,
                                userId);
@@ -14352,15 +14352,31 @@ public final class ActivityManagerService extends ActivityManagerNative
                oldUserId, newUserId, uss));
    }
    void userInitialized(UserStartedState uss) {
        synchronized (ActivityManagerService.this) {
            getUserManagerLocked().makeInitialized(uss.mHandle.getIdentifier());
            uss.initializing = false;
            completeSwitchAndInitalizeLocked(uss);
        }
    void userInitialized(UserStartedState uss, int newUserId) {
        completeSwitchAndInitalize(uss, newUserId, true, false);
    }
    void continueUserSwitch(UserStartedState uss, int oldUserId, int newUserId) {
        completeSwitchAndInitalize(uss, newUserId, false, true);
    }
    void completeSwitchAndInitalize(UserStartedState uss, int newUserId,
            boolean clearInitializing, boolean clearSwitching) {
        boolean unfrozen = false;
        synchronized (this) {
            if (clearInitializing) {
                uss.initializing = false;
                getUserManagerLocked().makeInitialized(uss.mHandle.getIdentifier());
            }
            if (clearSwitching) {
                uss.switching = false;
            }
            if (!uss.switching && !uss.initializing) {
                mWindowManager.stopFreezingScreen();
                unfrozen = true;
            }
        }
        if (unfrozen) {
            final int N = mUserSwitchObservers.beginBroadcast();
            for (int i=0; i<N; i++) {
                try {
@@ -14369,15 +14385,6 @@ public final class ActivityManagerService extends ActivityManagerNative
                }
            }
            mUserSwitchObservers.finishBroadcast();
        synchronized (this) {
            uss.switching = false;
            completeSwitchAndInitalizeLocked(uss);
        }
    }
    void completeSwitchAndInitalizeLocked(UserStartedState uss) {
        if (!uss.switching && !uss.initializing) {
            mWindowManager.stopFreezingScreen();
        }
    }