Loading core/java/android/content/pm/UserInfo.java +9 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.content.pm; import android.os.Parcel; import android.os.Parcelable; import android.os.SystemProperties; import android.os.UserHandle; /** Loading Loading @@ -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() { } Loading core/java/android/os/UserManager.java +24 −2 Original line number Diff line number Diff line Loading @@ -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)); } /** Loading Loading @@ -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. Loading core/res/res/values/config.xml +2 −0 Original line number Diff line number Diff line Loading @@ -1189,6 +1189,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 Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java +33 −44 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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) { Loading Loading @@ -1120,7 +1110,6 @@ public class KeyguardHostView extends KeyguardViewBase { } } } } @Override public void cleanUp() { Loading Loading
core/java/android/content/pm/UserInfo.java +9 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.content.pm; import android.os.Parcel; import android.os.Parcelable; import android.os.SystemProperties; import android.os.UserHandle; /** Loading Loading @@ -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() { } Loading
core/java/android/os/UserManager.java +24 −2 Original line number Diff line number Diff line Loading @@ -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)); } /** Loading Loading @@ -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. Loading
core/res/res/values/config.xml +2 −0 Original line number Diff line number Diff line Loading @@ -1189,6 +1189,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 Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading
packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java +33 −44 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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) { Loading Loading @@ -1120,7 +1110,6 @@ public class KeyguardHostView extends KeyguardViewBase { } } } } @Override public void cleanUp() { Loading