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

Commit ebec2315 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "Always report user switched after unfreezing screen." into jb-mr1.1-dev

parents e1a867f6 4d78abfc
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();
        }
    }