Add padlocks to preferences that can be disabled by policy.
Change-Id: I43b6b5954ef6ec65b86d99321cabab9f49df842d
This commit is contained in:
@@ -47,7 +47,7 @@
|
||||
android:selectable="false" />
|
||||
|
||||
<!-- Network reset -->
|
||||
<PreferenceScreen
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
android:key="network_reset"
|
||||
android:title="@string/reset_network_title"
|
||||
settings:keywords="@string/keywords_network_reset"
|
||||
|
@@ -59,7 +59,7 @@
|
||||
android:summaryOff="@string/master_mono_off" />
|
||||
|
||||
<!-- Interruptions -->
|
||||
<PreferenceScreen
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
android:key="zen_mode"
|
||||
android:title="@string/zen_mode_settings_title"
|
||||
settings:keywords="@string/keywords_sounds_and_notifications_interruptions"
|
||||
@@ -89,14 +89,14 @@
|
||||
android:persistent="false"
|
||||
android:ringtoneType="alarm" />
|
||||
|
||||
<PreferenceScreen
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
android:key="cell_broadcast_settings"
|
||||
android:title="@string/cell_broadcast_settings" >
|
||||
<intent
|
||||
android:action="android.intent.action.MAIN"
|
||||
android:targetPackage="com.android.cellbroadcastreceiver"
|
||||
android:targetClass="com.android.cellbroadcastreceiver.CellBroadcastSettings" />
|
||||
</PreferenceScreen>
|
||||
</com.android.settingslib.RestrictedPreference>
|
||||
|
||||
<!-- Other sounds -->
|
||||
<Preference
|
||||
|
@@ -21,7 +21,7 @@
|
||||
android:key="enable_calling"
|
||||
android:title="@string/user_enable_calling_sms"
|
||||
android:persistent="false" />
|
||||
<Preference
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
android:key="remove_user"
|
||||
android:title="@string/user_remove_user" />
|
||||
|
||||
|
@@ -31,7 +31,9 @@
|
||||
<PreferenceCategory
|
||||
android:key="lock_screen_settings"
|
||||
android:title="@string/user_lockscreen_settings">
|
||||
<SwitchPreference android:key="add_users_when_locked" android:title="@string/user_add_on_lockscreen_menu"
|
||||
<com.android.settingslib.RestrictedSwitchPreference
|
||||
android:key="add_users_when_locked"
|
||||
android:title="@string/user_add_on_lockscreen_menu"
|
||||
android:summary="@string/user_add_on_lockscreen_menu_summary" />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
|
@@ -36,17 +36,17 @@
|
||||
settings:keywords="@string/keywords_wifi_calling"
|
||||
android:fragment="com.android.settings.WifiCallingSettings" />
|
||||
|
||||
<PreferenceScreen
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
android:fragment="com.android.settings.nfc.AndroidBeam"
|
||||
android:key="android_beam_settings"
|
||||
android:title="@string/android_beam_settings_title" />
|
||||
|
||||
<PreferenceScreen
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
android:fragment="com.android.settings.TetherSettings"
|
||||
android:key="tether_settings"
|
||||
android:title="@string/tether_settings_title_all" />
|
||||
|
||||
<PreferenceScreen
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
android:fragment="com.android.settings.vpn2.VpnSettings"
|
||||
android:key="vpn_settings"
|
||||
android:title="@string/vpn_settings_title" />
|
||||
|
@@ -25,16 +25,22 @@ import android.text.TextUtils;
|
||||
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;
|
||||
@@ -53,18 +59,6 @@ public class DimmableIconPreference extends Preference {
|
||||
}
|
||||
}
|
||||
|
||||
@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);
|
||||
@@ -72,5 +66,6 @@ public class DimmableIconPreference extends Preference {
|
||||
final TextView titleView = (TextView) view.findViewById(android.R.id.title);
|
||||
titleView.setContentDescription(mContentDescription);
|
||||
}
|
||||
dimIcon(!isEnabled());
|
||||
}
|
||||
}
|
||||
|
@@ -38,6 +38,7 @@ import com.android.internal.logging.MetricsLogger;
|
||||
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 @@ public class PrivacySettings extends SettingsPreferenceFragment implements Index
|
||||
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 @@ public class PrivacySettings extends SettingsPreferenceFragment implements Index
|
||||
nonVisibleKeys.add(AUTO_RESTORE);
|
||||
nonVisibleKeys.add(CONFIGURE_ACCOUNT);
|
||||
}
|
||||
if (UserManager.get(context).hasUserRestriction(
|
||||
UserManager.DISALLOW_NETWORK_RESET)) {
|
||||
nonVisibleKeys.add(NETWORK_RESET);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -28,10 +28,12 @@ import android.view.View;
|
||||
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;
|
||||
|
@@ -51,6 +51,7 @@ import com.android.internal.telephony.TelephonyProperties;
|
||||
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 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde
|
||||
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 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde
|
||||
}
|
||||
// Disable VPN.
|
||||
// TODO: http://b/23693383
|
||||
if (!isAdmin || mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN)) {
|
||||
if (!isAdmin) {
|
||||
removePreference(KEY_VPN_SETTINGS);
|
||||
}
|
||||
|
||||
@@ -315,10 +317,10 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde
|
||||
// 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 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde
|
||||
} 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
|
||||
|
@@ -53,6 +53,7 @@ import android.view.MenuItem;
|
||||
|
||||
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 @@ public class AccountSettings extends SettingsPreferenceFragment
|
||||
/**
|
||||
* 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 @@ public class AccountSettings extends SettingsPreferenceFragment
|
||||
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.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 @@ public class AccountSettings extends SettingsPreferenceFragment
|
||||
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);
|
||||
}
|
||||
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;
|
||||
|
@@ -27,6 +27,7 @@ import android.support.v7.preference.Preference;
|
||||
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 @@ import com.android.settings.R;
|
||||
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 class NfcEnabler implements Preference.OnPreferenceChangeListener {
|
||||
};
|
||||
|
||||
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 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
|
||||
mIntentFilter = null;
|
||||
return;
|
||||
}
|
||||
if (mBeamDisallowed) {
|
||||
mAndroidBeam.setEnabled(false);
|
||||
}
|
||||
mIntentFilter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
|
||||
}
|
||||
|
||||
@@ -117,8 +112,8 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
|
||||
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);
|
||||
|
@@ -37,6 +37,7 @@ import android.os.Bundle;
|
||||
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.Utils;
|
||||
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.Arrays;
|
||||
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 @@ public class SoundSettings extends SettingsPreferenceFragment implements Indexab
|
||||
} 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 @@ public class SoundSettings extends SettingsPreferenceFragment implements Indexab
|
||||
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
|
||||
|
@@ -29,6 +29,7 @@ import android.support.v7.preference.Preference;
|
||||
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 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
|
||||
|
||||
private UserManager mUserManager;
|
||||
private SwitchPreference mPhonePref;
|
||||
private Preference mRemoveUserPref;
|
||||
private RestrictedPreference mRemoveUserPref;
|
||||
|
||||
private UserInfo mUserInfo;
|
||||
private boolean mGuestUser;
|
||||
@@ -79,7 +80,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
|
||||
|
||||
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,12 +103,15 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
|
||||
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) {
|
||||
|
@@ -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.support.v7.preference.PreferenceViewHolder;
|
||||
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 @@ public class UserPreference extends Preference {
|
||||
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 @@ public class UserPreference extends Preference {
|
||||
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 @@ public class UserPreference extends Preference {
|
||||
manageView.setVisibility(View.GONE);
|
||||
manageDividerView.setVisibility(View.GONE);
|
||||
}
|
||||
manageView.setImageAlpha(disabledByAdmin ? ALPHA_DISABLED : ALPHA_ENABLED);
|
||||
}
|
||||
super.onBindViewHolder(view);
|
||||
dimIcon(disabledByAdmin);
|
||||
}
|
||||
|
||||
private int getSerialNumber() {
|
||||
|
@@ -56,6 +56,7 @@ import android.widget.SimpleAdapter;
|
||||
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.dashboard.SummaryLoader;
|
||||
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.Collections;
|
||||
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 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
|
||||
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 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
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 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
}
|
||||
}
|
||||
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 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
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 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
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 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
}
|
||||
|
||||
// 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 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
} 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 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
boolean mIsGuest;
|
||||
boolean mCanAddGuest;
|
||||
boolean mDisallowAddUser;
|
||||
EnforcedAdmin mEnforcedAdmin;
|
||||
|
||||
private UserCapabilities() {}
|
||||
|
||||
@@ -1012,8 +1027,9 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
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 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
", mCanAddRestrictedProfile=" + mCanAddRestrictedProfile +
|
||||
", mIsAdmin=" + mIsAdmin +
|
||||
", mIsGuest=" + mIsGuest +
|
||||
", mCanAddGuest=" + mCanAddGuest +
|
||||
", mDisallowAddUser=" + mDisallowAddUser +
|
||||
", mEnforcedAdmin=" + mEnforcedAdmin +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -1090,7 +1109,7 @@ public class UserSettings extends SettingsPreferenceFragment
|
||||
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
|
||||
|
Reference in New Issue
Block a user