Add padlocks to preferences that can be disabled by policy.
Change-Id: I43b6b5954ef6ec65b86d99321cabab9f49df842d
diff --git a/src/com/android/settings/DimmableIconPreference.java b/src/com/android/settings/DimmableIconPreference.java
index 57cdc8d..98bf551 100644
--- a/src/com/android/settings/DimmableIconPreference.java
+++ b/src/com/android/settings/DimmableIconPreference.java
@@ -25,16 +25,22 @@
import android.util.AttributeSet;
import android.widget.TextView;
+import com.android.settingslib.RestrictedPreference;
+
/**
* A preference item that can dim the icon when it's disabled, either directly or because its parent
* is disabled.
*/
-public class DimmableIconPreference extends Preference {
+public class DimmableIconPreference extends RestrictedPreference {
private static final int ICON_ALPHA_ENABLED = 255;
private static final int ICON_ALPHA_DISABLED = 102;
private final CharSequence mContentDescription;
+ public DimmableIconPreference(Context context) {
+ this(context, (AttributeSet) null);
+ }
+
public DimmableIconPreference(Context context, AttributeSet attrs) {
super(context, attrs);
mContentDescription = null;
@@ -54,23 +60,12 @@
}
@Override
- public void onParentChanged(Preference parent, boolean disableChild) {
- dimIcon(disableChild);
- super.onParentChanged(parent, disableChild);
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- dimIcon(!enabled);
- super.setEnabled(enabled);
- }
-
- @Override
public void onBindViewHolder(PreferenceViewHolder view) {
super.onBindViewHolder(view);
if (!TextUtils.isEmpty(mContentDescription)) {
final TextView titleView = (TextView) view.findViewById(android.R.id.title);
titleView.setContentDescription(mContentDescription);
}
+ dimIcon(!isEnabled());
}
}
diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java
index 0735b11..dbceb2b 100644
--- a/src/com/android/settings/PrivacySettings.java
+++ b/src/com/android/settings/PrivacySettings.java
@@ -38,6 +38,7 @@
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.RestrictedPreference;
import java.util.ArrayList;
import java.util.Collection;
@@ -167,6 +168,12 @@
mConfigure.setEnabled(configureEnabled);
mConfigure.setIntent(configIntent);
setConfigureSummary(configSummary);
+
+ RestrictedPreference networkResetPref = (RestrictedPreference) findPreference(
+ NETWORK_RESET);
+ if (networkResetPref != null) {
+ networkResetPref.checkRestrictionAndSetDisabled(UserManager.DISALLOW_NETWORK_RESET);
+ }
}
private void setConfigureSummary(String summary) {
@@ -290,9 +297,5 @@
nonVisibleKeys.add(AUTO_RESTORE);
nonVisibleKeys.add(CONFIGURE_ACCOUNT);
}
- if (UserManager.get(context).hasUserRestriction(
- UserManager.DISALLOW_NETWORK_RESET)) {
- nonVisibleKeys.add(NETWORK_RESET);
- }
}
}
diff --git a/src/com/android/settings/SeekBarPreference.java b/src/com/android/settings/SeekBarPreference.java
index f225967..ef28ed7 100644
--- a/src/com/android/settings/SeekBarPreference.java
+++ b/src/com/android/settings/SeekBarPreference.java
@@ -28,10 +28,12 @@
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
+import com.android.settingslib.RestrictedPreference;
+
/**
* Based on android.preference.SeekBarPreference, but uses support preference as base.
*/
-public class SeekBarPreference extends Preference
+public class SeekBarPreference extends RestrictedPreference
implements OnSeekBarChangeListener, View.OnKeyListener {
private int mProgress;
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index f5a9dec..63455d8 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -51,6 +51,7 @@
import com.android.settings.nfc.NfcEnabler;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.RestrictedPreference;
import java.util.ArrayList;
import java.util.Arrays;
@@ -226,7 +227,8 @@
final Activity activity = getActivity();
mAirplaneModePreference = (SwitchPreference) findPreference(KEY_TOGGLE_AIRPLANE);
SwitchPreference nfc = (SwitchPreference) findPreference(KEY_TOGGLE_NFC);
- PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);
+ RestrictedPreference androidBeam = (RestrictedPreference) findPreference(
+ KEY_ANDROID_BEAM_SETTINGS);
mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
@@ -258,7 +260,7 @@
}
// Disable VPN.
// TODO: http://b/23693383
- if (!isAdmin || mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN)) {
+ if (!isAdmin) {
removePreference(KEY_VPN_SETTINGS);
}
@@ -315,10 +317,10 @@
// Disable Tethering if it's not allowed or if it's a wifi-only device
final ConnectivityManager cm =
(ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
- if (!isAdmin || !cm.isTetheringSupported()
- || mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING)) {
+
+ if (!isAdmin || !cm.isTetheringSupported()) {
getPreferenceScreen().removePreference(findPreference(KEY_TETHER_SETTINGS));
- } else {
+ } else if (!mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING)) {
Preference p = findPreference(KEY_TETHER_SETTINGS);
p.setTitle(com.android.settingslib.Utils.getTetheringLabel(cm));
@@ -347,6 +349,19 @@
} else {
removePreference(KEY_WFC_SETTINGS);
}
+
+ RestrictedPreference tetherSettingsPref = (RestrictedPreference) findPreference(
+ KEY_TETHER_SETTINGS);
+ if (tetherSettingsPref != null) {
+ tetherSettingsPref.checkRestrictionAndSetDisabled(
+ UserManager.DISALLOW_CONFIG_TETHERING);
+ }
+
+ RestrictedPreference vpnSettingsPref = (RestrictedPreference) findPreference(
+ KEY_VPN_SETTINGS);
+ if (vpnSettingsPref != null) {
+ vpnSettingsPref.checkRestrictionAndSetDisabled(UserManager.DISALLOW_CONFIG_VPN);
+ }
}
@Override
diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java
index 4296689..c8e0322 100644
--- a/src/com/android/settings/accounts/AccountSettings.java
+++ b/src/com/android/settings/accounts/AccountSettings.java
@@ -53,6 +53,7 @@
import com.android.internal.logging.MetricsLogger;
import com.android.settings.AccessiblePreferenceCategory;
+import com.android.settings.DimmableIconPreference;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
@@ -113,7 +114,7 @@
/**
* The preference that displays the add account button.
*/
- public Preference addAccountPreference;
+ public DimmableIconPreference addAccountPreference;
/**
* The preference that displays the button to toggle work profile.
*/
@@ -324,17 +325,17 @@
if (userInfo.isEnabled()) {
profileData.authenticatorHelper = new AuthenticatorHelper(context,
userInfo.getUserHandle(), this);
- if (!mUm.hasUserRestriction(DISALLOW_MODIFY_ACCOUNTS, userInfo.getUserHandle())) {
- profileData.addAccountPreference = newAddAccountPreference(context);
- }
+ profileData.addAccountPreference = newAddAccountPreference(context);
+ profileData.addAccountPreference.checkRestrictionAndSetDisabled(
+ DISALLOW_MODIFY_ACCOUNTS, userInfo.id);
}
mProfiles.put(userInfo.id, profileData);
Index.getInstance(getActivity()).updateFromClassNameResource(
AccountSettings.class.getName(), true, true);
}
- private Preference newAddAccountPreference(Context context) {
- Preference preference = new Preference(getPrefContext());
+ private DimmableIconPreference newAddAccountPreference(Context context) {
+ DimmableIconPreference preference = new DimmableIconPreference(getPrefContext());
preference.setTitle(R.string.add_account_label);
preference.setIcon(R.drawable.ic_menu_add);
preference.setOnPreferenceClickListener(this);
@@ -714,16 +715,13 @@
for (int i = 0; i < profilesCount; i++) {
UserInfo userInfo = profiles.get(i);
if (userInfo.isEnabled()) {
- if (!um.hasUserRestriction(
- DISALLOW_MODIFY_ACCOUNTS, userInfo.getUserHandle())) {
- SearchIndexableRaw data = new SearchIndexableRaw(context);
- data = new SearchIndexableRaw(context);
- data.title = res.getString(R.string.add_account_label);
- data.screenTitle = screenTitle;
- result.add(data);
- }
+ SearchIndexableRaw data = new SearchIndexableRaw(context);
+ data = new SearchIndexableRaw(context);
+ data.title = res.getString(R.string.add_account_label);
+ data.screenTitle = screenTitle;
+ result.add(data);
if (userInfo.isManagedProfile()) {
- SearchIndexableRaw data = new SearchIndexableRaw(context);
+ data = new SearchIndexableRaw(context);
data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.remove_managed_profile_label);
data.screenTitle = screenTitle;
diff --git a/src/com/android/settings/nfc/NfcEnabler.java b/src/com/android/settings/nfc/NfcEnabler.java
index c58c325..b81d342 100644
--- a/src/com/android/settings/nfc/NfcEnabler.java
+++ b/src/com/android/settings/nfc/NfcEnabler.java
@@ -27,6 +27,7 @@
import android.support.v7.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settingslib.RestrictedPreference;
/**
* NfcEnabler is a helper to manage the Nfc on/off checkbox preference. It is
@@ -36,10 +37,9 @@
public class NfcEnabler implements Preference.OnPreferenceChangeListener {
private final Context mContext;
private final SwitchPreference mSwitch;
- private final PreferenceScreen mAndroidBeam;
+ private final RestrictedPreference mAndroidBeam;
private final NfcAdapter mNfcAdapter;
private final IntentFilter mIntentFilter;
- private boolean mBeamDisallowed;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
@@ -53,13 +53,11 @@
};
public NfcEnabler(Context context, SwitchPreference switchPreference,
- PreferenceScreen androidBeam) {
+ RestrictedPreference androidBeam) {
mContext = context;
mSwitch = switchPreference;
mAndroidBeam = androidBeam;
mNfcAdapter = NfcAdapter.getDefaultAdapter(context);
- mBeamDisallowed = ((UserManager) mContext.getSystemService(Context.USER_SERVICE))
- .hasUserRestriction(UserManager.DISALLOW_OUTGOING_BEAM);
if (mNfcAdapter == null) {
// NFC is not supported
@@ -68,9 +66,6 @@
mIntentFilter = null;
return;
}
- if (mBeamDisallowed) {
- mAndroidBeam.setEnabled(false);
- }
mIntentFilter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
}
@@ -117,8 +112,8 @@
case NfcAdapter.STATE_ON:
mSwitch.setChecked(true);
mSwitch.setEnabled(true);
- mAndroidBeam.setEnabled(!mBeamDisallowed);
- if (mNfcAdapter.isNdefPushEnabled() && !mBeamDisallowed) {
+ mAndroidBeam.checkRestrictionAndSetDisabled(UserManager.DISALLOW_OUTGOING_BEAM);
+ if (mNfcAdapter.isNdefPushEnabled() && mAndroidBeam.isEnabled()) {
mAndroidBeam.setSummary(R.string.android_beam_on_summary);
} else {
mAndroidBeam.setSummary(R.string.android_beam_off_summary);
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index dae492f..4eb4f7d 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -37,6 +37,7 @@
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.os.UserHandle;
import android.os.UserManager;
import android.os.Vibrator;
import android.preference.SeekBarVolumizer;
@@ -57,6 +58,8 @@
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.RestrictedPreference;
import java.text.NumberFormat;
import java.util.ArrayList;
@@ -64,6 +67,8 @@
import java.util.List;
import java.util.Objects;
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
public class SoundSettings extends SettingsPreferenceFragment implements Indexable {
private static final String TAG = "SoundSettings";
@@ -164,8 +169,7 @@
} catch (IllegalArgumentException ignored) {
isCellBroadcastAppLinkEnabled = false; // CMAS app not installed
}
- if (!mUserManager.isAdminUser() || !isCellBroadcastAppLinkEnabled
- || mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_CELL_BROADCASTS)) {
+ if (!mUserManager.isAdminUser() || !isCellBroadcastAppLinkEnabled) {
removePreference(KEY_CELL_BROADCAST_SETTINGS);
}
initRingtones();
@@ -186,13 +190,23 @@
for (VolumeSeekBarPreference volumePref : mVolumePrefs) {
volumePref.onActivityResume();
}
- boolean isRestricted = mUserManager.hasUserRestriction(UserManager.DISALLOW_ADJUST_VOLUME);
+
+ final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(mContext,
+ UserManager.DISALLOW_ADJUST_VOLUME, UserHandle.myUserId());
for (String key : RESTRICTED_KEYS) {
Preference pref = findPreference(key);
- if (pref != null) {
- pref.setEnabled(!isRestricted);
+ if (pref instanceof RestrictedPreference) {
+ ((RestrictedPreference) pref).setDisabledByAdmin(admin);
+ } else if (pref != null) {
+ pref.setEnabled(admin == null);
}
}
+ RestrictedPreference broadcastSettingsPref = (RestrictedPreference) findPreference(
+ KEY_CELL_BROADCAST_SETTINGS);
+ if (broadcastSettingsPref != null) {
+ broadcastSettingsPref.checkRestrictionAndSetDisabled(
+ UserManager.DISALLOW_CONFIG_CELL_BROADCASTS);
+ }
}
@Override
diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java
index 9a81d16..07d03ee 100644
--- a/src/com/android/settings/users/UserDetailsSettings.java
+++ b/src/com/android/settings/users/UserDetailsSettings.java
@@ -29,6 +29,7 @@
import com.android.internal.logging.MetricsLogger;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
+import com.android.settingslib.RestrictedPreference;
import java.util.List;
@@ -59,7 +60,7 @@
private UserManager mUserManager;
private SwitchPreference mPhonePref;
- private Preference mRemoveUserPref;
+ private RestrictedPreference mRemoveUserPref;
private UserInfo mUserInfo;
private boolean mGuestUser;
@@ -79,7 +80,7 @@
addPreferencesFromResource(R.xml.user_details_settings);
mPhonePref = (SwitchPreference) findPreference(KEY_ENABLE_TELEPHONY);
- mRemoveUserPref = findPreference(KEY_REMOVE_USER);
+ mRemoveUserPref = (RestrictedPreference) findPreference(KEY_REMOVE_USER);
mGuestUser = getArguments().getBoolean(EXTRA_USER_GUEST, false);
@@ -102,13 +103,16 @@
mPhonePref.setChecked(
!mDefaultGuestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS));
}
- if (mUserManager.hasUserRestriction(UserManager.DISALLOW_REMOVE_USER)) {
- removePreference(KEY_REMOVE_USER);
- }
mPhonePref.setOnPreferenceChangeListener(this);
}
@Override
+ public void onResume() {
+ super.onResume();
+ mRemoveUserPref.checkRestrictionAndSetDisabled(UserManager.DISALLOW_REMOVE_USER);
+ }
+
+ @Override
public boolean onPreferenceClick(Preference preference) {
if (preference == mRemoveUserPref) {
if (!mUserManager.isAdminUser()) {
diff --git a/src/com/android/settings/users/UserPreference.java b/src/com/android/settings/users/UserPreference.java
index 2daf1ef..61ad6df 100644
--- a/src/com/android/settings/users/UserPreference.java
+++ b/src/com/android/settings/users/UserPreference.java
@@ -17,6 +17,7 @@
package com.android.settings.users;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.v7.preference.Preference;
@@ -24,12 +25,18 @@
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
+import android.widget.ImageView;
import com.android.settings.R;
+import com.android.settingslib.RestrictedPreference;
import java.util.Comparator;
-public class UserPreference extends Preference {
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
+public class UserPreference extends RestrictedPreference {
+ private static final int ALPHA_ENABLED = 255;
+ private static final int ALPHA_DISABLED = 102;
public static final int USERID_UNKNOWN = -10;
public static final int USERID_GUEST_DEFAULTS = -11;
@@ -71,6 +78,14 @@
mUserId = userId;
}
+ private void dimIcon(boolean dimmed) {
+ Drawable icon = getIcon();
+ if (icon != null) {
+ icon.mutate().setAlpha(dimmed ? ALPHA_DISABLED : ALPHA_ENABLED);
+ setIcon(icon);
+ }
+ }
+
@Override
public void onBindViewHolder(PreferenceViewHolder view) {
UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
@@ -87,7 +102,8 @@
deleteDividerView.setVisibility(View.GONE);
}
}
- View manageView = view.findViewById(R.id.manage_user);
+ final boolean disabledByAdmin = isDisabledByAdmin();
+ ImageView manageView = (ImageView) view.findViewById(R.id.manage_user);
if (manageView != null) {
if (mSettingsClickListener != null) {
manageView.setOnClickListener(mSettingsClickListener);
@@ -99,8 +115,10 @@
manageView.setVisibility(View.GONE);
manageDividerView.setVisibility(View.GONE);
}
+ manageView.setImageAlpha(disabledByAdmin ? ALPHA_DISABLED : ALPHA_ENABLED);
}
super.onBindViewHolder(view);
+ dimIcon(disabledByAdmin);
}
private int getSerialNumber() {
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 7e0711e..06ec966 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -56,6 +56,7 @@
import com.android.internal.logging.MetricsLogger;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.ChooseLockGeneric;
+import com.android.settings.DimmableIconPreference;
import com.android.settings.OwnerInfoSettings;
import com.android.settings.R;
import com.android.settings.SelectableEditTextPreference;
@@ -66,6 +67,8 @@
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.drawable.CircleFramedDrawable;
import java.util.ArrayList;
@@ -73,6 +76,8 @@
import java.util.HashMap;
import java.util.List;
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
/**
* Screen that manages the list of users on the device.
* Guest user is an always visible entry, even if the guest is not currently
@@ -126,9 +131,9 @@
private PreferenceGroup mUserListCategory;
private UserPreference mMePreference;
- private Preference mAddUser;
+ private DimmableIconPreference mAddUser;
private PreferenceGroup mLockScreenSettings;
- private SwitchPreference mAddUserWhenLocked;
+ private RestrictedSwitchPreference mAddUserWhenLocked;
private int mRemovingUserId = -1;
private int mAddedUserId = 0;
private boolean mAddingUser;
@@ -213,7 +218,7 @@
if (mUserCaps.mIsAdmin) {
mMePreference.setSummary(R.string.user_admin);
}
- mAddUser = findPreference(KEY_ADD_USER);
+ mAddUser = (DimmableIconPreference) findPreference(KEY_ADD_USER);
// Determine if add user/profile button should be visible
if (mUserCaps.mCanAddUser) {
mAddUser.setOnPreferenceClickListener(this);
@@ -223,7 +228,7 @@
}
}
mLockScreenSettings = (PreferenceGroup) findPreference("lock_screen_settings");
- mAddUserWhenLocked = (SwitchPreference) findPreference("add_users_when_locked");
+ mAddUserWhenLocked = (RestrictedSwitchPreference) findPreference("add_users_when_locked");
loadProfile();
setHasOptionsMenu(true);
IntentFilter filter = new IntentFilter(Intent.ACTION_USER_REMOVED);
@@ -745,7 +750,8 @@
userPreferences.add(pref);
}
- if (!mUserCaps.mIsGuest && (mUserCaps.mCanAddGuest || findGuest() != null)) {
+ if (!mUserCaps.mIsGuest &&
+ (mUserCaps.mCanAddGuest || findGuest() != null || mUserCaps.mDisallowAddUser)) {
// Add a virtual Guest user for guest defaults
UserPreference pref = new UserPreference(getPrefContext(), null,
UserPreference.USERID_GUEST_DEFAULTS,
@@ -755,6 +761,8 @@
pref.setIcon(getEncircledDefaultIcon());
pref.setOnPreferenceClickListener(this);
userPreferences.add(pref);
+ pref.setDisabledByAdmin(
+ mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null);
}
// Sort list of users by serialNum
@@ -788,7 +796,7 @@
}
// Append Add user to the end of the list
- if (mUserCaps.mCanAddUser) {
+ if (mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUser) {
boolean moreUsers = mUserManager.canAddMoreUsers();
mAddUser.setOrder(Preference.DEFAULT_ORDER);
preferenceScreen.addPreference(mAddUser);
@@ -798,13 +806,19 @@
} else {
mAddUser.setSummary(null);
}
+ if (mAddUser.isEnabled()) {
+ mAddUser.setDisabledByAdmin(
+ mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null);
+ }
}
- if (mUserCaps.mIsAdmin && !mUserCaps.mDisallowAddUser) {
+ if (mUserCaps.mIsAdmin) {
mLockScreenSettings.setOrder(Preference.DEFAULT_ORDER);
preferenceScreen.addPreference(mLockScreenSettings);
mAddUserWhenLocked.setChecked(Settings.Global.getInt(getContentResolver(),
Settings.Global.ADD_USERS_WHEN_LOCKED, 0) == 1);
mAddUserWhenLocked.setOnPreferenceChangeListener(this);
+ mAddUserWhenLocked.setDisabledByAdmin(
+ mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null);
}
}
@@ -998,6 +1012,7 @@
boolean mIsGuest;
boolean mCanAddGuest;
boolean mDisallowAddUser;
+ EnforcedAdmin mEnforcedAdmin;
private UserCapabilities() {}
@@ -1012,8 +1027,9 @@
final UserInfo myUserInfo = userManager.getUserInfo(UserHandle.myUserId());
caps.mIsGuest = myUserInfo.isGuest();
caps.mIsAdmin = myUserInfo.isAdmin();
- caps.mDisallowAddUser = userManager.hasUserRestriction(
- UserManager.DISALLOW_ADD_USER);
+ caps.mEnforcedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(context,
+ UserManager.DISALLOW_ADD_USER, UserHandle.myUserId());
+ caps.mDisallowAddUser = (caps.mEnforcedAdmin != null);
if (!caps.mIsAdmin || UserManager.getMaxSupportedUsers() < 2
|| !UserManager.supportsMultipleUsers()
|| caps.mDisallowAddUser) {
@@ -1040,6 +1056,9 @@
", mCanAddRestrictedProfile=" + mCanAddRestrictedProfile +
", mIsAdmin=" + mIsAdmin +
", mIsGuest=" + mIsGuest +
+ ", mCanAddGuest=" + mCanAddGuest +
+ ", mDisallowAddUser=" + mDisallowAddUser +
+ ", mEnforcedAdmin=" + mEnforcedAdmin +
'}';
}
}
@@ -1090,7 +1109,7 @@
data.screenTitle = res.getString(R.string.user_settings_title);
result.add(data);
- if (userCaps.mCanAddUser) {
+ if (userCaps.mCanAddUser || userCaps.mDisallowAddUser) {
data = new SearchIndexableRaw(context);
data.title = res.getString(userCaps.mCanAddRestrictedProfile ?
R.string.user_add_user_or_profile_menu