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

Commit 5eb0f3b3 authored by Rubin Xu's avatar Rubin Xu
Browse files

Maintain mSetupCompletedUsers for profiles correctly

When listening for USER_SETUP_COMPLETE changes, refresh the state for
the affected user instead of the current foreground user which excludes
the active managed profile.

Bug: 27061092
Change-Id: Iae525464d3d3faab9afb76aaf4304b9f10382e01
parent d6c90a88
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -165,15 +165,15 @@ final class UserController {
        void register(ContentResolver resolver) {
            resolver.registerContentObserver(mUserSetupComplete, false, this, UserHandle.USER_ALL);
            synchronized (mService) {
                updateCurrentUserSetupCompleteLocked();
                updateUserSetupCompleteLocked(UserHandle.USER_ALL);
            }
        }

        @Override
        public void onChange(boolean selfChange, Uri uri) {
        public void onChange(boolean selfChange, Uri uri, int userId) {
            if (mUserSetupComplete.equals(uri)) {
                synchronized (mService) {
                    updateCurrentUserSetupCompleteLocked();
                    updateUserSetupCompleteLocked(userId);
                }
            }
        }
@@ -655,7 +655,7 @@ final class UserController {
                final Integer userIdInt = userId;
                mUserLru.remove(userIdInt);
                mUserLru.add(userIdInt);
                updateCurrentUserSetupCompleteLocked();
                updateUserSetupCompleteLocked(userId);

                if (foreground) {
                    mCurrentUserId = userId;
@@ -870,11 +870,22 @@ final class UserController {
        mUserSwitchObservers.finishBroadcast();
    }

    void updateCurrentUserSetupCompleteLocked() {
    void updateUserSetupCompleteLocked(int userId) {
        int[] users;
        if (userId != UserHandle.USER_ALL) {
            users = new int[] {userId};
        } else {
            users = new int[mStartedUsers.size()];
            for (int i = mStartedUsers.size() - 1; i >= 0; i--) {
                users[i] = mStartedUsers.keyAt(i);
            }
        }
        final ContentResolver cr = mService.mContext.getContentResolver();
        for (int i = 0; i < users.length; i++) {
            final boolean setupComplete =
                Settings.Secure.getIntForUser(cr, USER_SETUP_COMPLETE, 0, mCurrentUserId) != 0;
        mSetupCompletedUsers.put(mCurrentUserId, setupComplete);
                    Settings.Secure.getIntForUser(cr, USER_SETUP_COMPLETE, 0, users[i]) != 0;
            mSetupCompletedUsers.put(users[i], setupComplete);
        }
    }

    boolean isUserSetupCompleteLocked(int userId) {