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

Commit 097936ad authored by Fyodor Kupolov's avatar Fyodor Kupolov
Browse files

Hide guest entry if the user is not allowed to create guest

Don't show the Guest entry for a secondary user if the user is not allowed to
create a guest and there is currently no guest already created.

Bug: 19035769
Change-Id: Icf4a778533affaec0658af4da5ce000eda261f38
parent 01f35ce4
Loading
Loading
Loading
Loading
+22 −32
Original line number Diff line number Diff line
@@ -773,7 +773,7 @@ public class UserSettings extends SettingsPreferenceFragment
            userPreferences.add(pref);
        }

        if (shouldShowGuestUserPreference(users)) {
        if (mUserCaps.mCanAddGuest || findGuest() != null) {
            // Add a virtual Guest user for guest defaults
            UserPreference pref = new UserPreference(getActivity(), null,
                    UserPreference.USERID_GUEST_DEFAULTS,
@@ -843,23 +843,6 @@ public class UserSettings extends SettingsPreferenceFragment
        return maxUsersAndGuest - managedProfiles;
    }

    private boolean shouldShowGuestUserPreference(List<UserInfo> users) {
        boolean showGuestPreference = !mUserCaps.mIsGuest;
        // If user has DISALLOW_ADD_USER don't allow creating a guest either.
        if (showGuestPreference && mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) {
            showGuestPreference = false;
            // If guest already exists, no user creation needed.
            for (UserInfo user : users) {
                if (user.isGuest()) {
                    showGuestPreference = true;
                    break;
                }
            }
        }
        return showGuestPreference;
    }


    private void loadIconsAsync(List<Integer> missingIcons) {
        new AsyncTask<List<Integer>, Void, Void>() {
            @Override
@@ -952,19 +935,9 @@ public class UserSettings extends SettingsPreferenceFragment
    }

    private void createAndSwitchToGuestUser() {
        List<UserInfo> users = mUserManager.getUsers();
        for (UserInfo user : users) {
            if (user.isGuest()) {
                switchUserNow(user.id);
                return;
            }
        }
        // No guest user. Create one, if there's no restriction.
        // If it is not the primary user, then adding users from lockscreen must be enabled
        if (mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)
                || (!mUserCaps.mIsOwner && Settings.Global.getInt(getContentResolver(),
                        Settings.Global.ADD_USERS_WHEN_LOCKED, 0) != 1)) {
            Log.i(TAG, "Blocking guest creation because it is restricted");
        final UserInfo guest = findGuest();
        if (guest != null) {
            switchUserNow(guest.id);
            return;
        }
        UserInfo guestUser = mUserManager.createGuest(getActivity(),
@@ -974,6 +947,16 @@ public class UserSettings extends SettingsPreferenceFragment
        }
    }

    private UserInfo findGuest() {
        List<UserInfo> users = mUserManager.getUsers();
        for (UserInfo user : users) {
            if (user.isGuest()) {
                return user;
            }
        }
        return null;
    }

    private boolean isInitialized(UserInfo user) {
        return (user.flags & UserInfo.FLAG_INITIALIZED) != 0;
    }
@@ -1041,6 +1024,7 @@ public class UserSettings extends SettingsPreferenceFragment
        boolean mCanAddRestrictedProfile = true;
        boolean mIsOwner = UserHandle.myUserId() == UserHandle.USER_OWNER;
        boolean mIsGuest;
        boolean mCanAddGuest;

        public static UserCapabilities create(Context context) {
            UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
@@ -1050,9 +1034,11 @@ public class UserSettings extends SettingsPreferenceFragment
                return caps;
            }

            final boolean disallowAddUser = userManager.hasUserRestriction(
                    UserManager.DISALLOW_ADD_USER);
            if (!caps.mIsOwner || UserManager.getMaxSupportedUsers() < 2
                    || !UserManager.supportsMultipleUsers()
                    || userManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) {
                    || disallowAddUser) {
                caps.mCanAddUser = false;
            }
            DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
@@ -1063,6 +1049,10 @@ public class UserSettings extends SettingsPreferenceFragment
            }
            final int myUserId = UserHandle.myUserId();
            caps.mIsGuest = userManager.getUserInfo(myUserId).isGuest();

            final boolean canAddUsersWhenLocked = caps.mIsOwner || Settings.Global.getInt(
                    context.getContentResolver(), Settings.Global.ADD_USERS_WHEN_LOCKED, 0) == 1;
            caps.mCanAddGuest = !caps.mIsGuest && !disallowAddUser && canAddUsersWhenLocked;
            return caps;
        }