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

Commit 1a447535 authored by Kenny Guy's avatar Kenny Guy
Browse files

Hide managed profiles from user switchers.

Hide managed profiles from lockscreen user switcher on tablets.
Hide managed profiles from power menu user switcher on phones.
Add flag to enable multi user ui turned off by default.

Change-Id: I4c69a6f7b0f39c249fc85fd940318df1ddab073f
parent e0ebe276
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.content.pm;

import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemProperties;
import android.os.UserHandle;

/**
@@ -116,6 +117,14 @@ public class UserInfo implements Parcelable {
        return (flags & FLAG_MANAGED_PROFILE) == FLAG_MANAGED_PROFILE;
    }

    /**
     * @return true if this user can be switched to.
     **/
    public boolean supportsSwitchTo() {
        // TODO remove fw.show_hidden_users when we have finished developing managed profiles.
        return !isManagedProfile() || SystemProperties.getBoolean("fw.show_hidden_users", false);
    }

    public UserInfo() {
    }

+24 −2
Original line number Diff line number Diff line
@@ -164,11 +164,13 @@ public class UserManager {

    /**
     * Returns whether the system supports multiple users.
     * @return true if multiple users can be created, false if it is a single user device.
     * @return true if multiple users can be created by user, false if it is a single user device.
     * @hide
     */
    public static boolean supportsMultipleUsers() {
        return getMaxSupportedUsers() > 1;
        return getMaxSupportedUsers() > 1
                && SystemProperties.getBoolean("fw.show_multiuserui",
                Resources.getSystem().getBoolean(R.bool.config_enableMultiUserUI));
    }

    /**
@@ -600,6 +602,26 @@ public class UserManager {
                Resources.getSystem().getInteger(R.integer.config_multiuserMaximumUsers));
    }

    /**
     * Returns true if the user switcher should be shown, this will be if there
     * are multiple users that aren't managed profiles.
     * @hide
     * @return true if user switcher should be shown.
     */
    public boolean isUserSwitcherEnabled() {
        List<UserInfo> users = getUsers(true);
        if (users == null) {
           return false;
        }
        int switchableUserCount = 0;
        for (UserInfo user : users) {
            if (user.supportsSwitchTo()) {
                ++switchableUserCount;
            }
        }
        return switchableUserCount > 1;
    }

    /**
     * Returns a serial number on this device for a given userHandle. User handles can be recycled
     * when deleting and creating users, but serial numbers are not reused until the device is wiped.
+2 −0
Original line number Diff line number Diff line
@@ -1181,6 +1181,8 @@

    <!--  Maximum number of supported users -->
    <integer name="config_multiuserMaximumUsers">1</integer>
    <!-- Whether UI for multi user should be shown -->
    <bool name="config_enableMultiUserUI">false</bool>

    <!-- Minimum span needed to begin a touch scaling gesture.
         If the span is equal to or greater than this size, a scaling gesture
+1 −0
Original line number Diff line number Diff line
@@ -289,6 +289,7 @@
  <java-symbol type="bool" name="config_useFixedVolume" />
  <java-symbol type="bool" name="config_forceDefaultOrientation" />
  <java-symbol type="bool" name="config_wifi_batched_scan_supported" />
  <java-symbol type="bool" name="config_enableMultiUserUI"/>

  <java-symbol type="integer" name="config_cursorWindowSize" />
  <java-symbol type="integer" name="config_extraFreeKbytesAdjust" />
+33 −44
Original line number Diff line number Diff line
@@ -1051,9 +1051,6 @@ public class KeyguardHostView extends KeyguardViewBase {
    }

    private void enableUserSelectorIfNecessary() {
        if (!UserManager.supportsMultipleUsers()) {
            return; // device doesn't support multi-user mode
        }
        final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
        if (um == null) {
            Throwable t = new Throwable();
@@ -1063,27 +1060,20 @@ public class KeyguardHostView extends KeyguardViewBase {
        }

        // if there are multiple users, we need to enable to multi-user switcher
        final List<UserInfo> users = um.getUsers(true);
        if (users == null) {
            Throwable t = new Throwable();
            t.fillInStackTrace();
            Log.e(TAG, "list of users is null.", t);
        if (!um.isUserSwitcherEnabled()) {
            return;
        }

        final View multiUserView = findViewById(R.id.keyguard_user_selector);
        if (multiUserView == null) {
            Throwable t = new Throwable();
            t.fillInStackTrace();
            Log.e(TAG, "can't find user_selector in layout.", t);
            if (DEBUG) Log.d(TAG, "can't find user_selector in layout.");
            return;
        }

        if (users.size() > 1) {
        if (multiUserView instanceof KeyguardMultiUserSelectorView) {
            mKeyguardMultiUserSelectorView = (KeyguardMultiUserSelectorView) multiUserView;
            mKeyguardMultiUserSelectorView.setVisibility(View.VISIBLE);
                mKeyguardMultiUserSelectorView.addUsers(users);
            mKeyguardMultiUserSelectorView.addUsers(um.getUsers(true));
            UserSwitcherCallback callback = new UserSwitcherCallback() {
                @Override
                public void hideSecurityView(int duration) {
@@ -1120,7 +1110,6 @@ public class KeyguardHostView extends KeyguardViewBase {
            }
        }
    }
    }

    @Override
    public void cleanUp() {
Loading