Part3 - Don't add padlock if the restriction is not set by admin.

Bug: 26687435
Change-Id: Ibfea6d7d5bd32e7a05dcc2cc32b121c9e50b6a34
This commit is contained in:
Sudheer Shanka
2016-02-11 18:48:14 +00:00
parent 7f2a013619
commit 9e9e63b7b3
21 changed files with 207 additions and 84 deletions

View File

@@ -55,6 +55,7 @@
android:key="network_reset" android:key="network_reset"
android:title="@string/reset_network_title" android:title="@string/reset_network_title"
settings:keywords="@string/keywords_network_reset" settings:keywords="@string/keywords_network_reset"
settings:userRestriction="no_network_reset"
settings:useAdminDisabledSummary="true" settings:useAdminDisabledSummary="true"
android:fragment="com.android.settings.ResetNetwork" /> android:fragment="com.android.settings.ResetNetwork" />

View File

@@ -23,6 +23,7 @@
<com.android.settingslib.RestrictedPreference <com.android.settingslib.RestrictedPreference
android:key="remove_user" android:key="remove_user"
android:title="@string/user_remove_user" android:title="@string/user_remove_user"
settings:userRestriction="no_remove_user"
settings:useAdminDisabledSummary="true" /> settings:useAdminDisabledSummary="true" />
</PreferenceScreen> </PreferenceScreen>

View File

@@ -81,7 +81,9 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
private UserManager mUm; private UserManager mUm;
private EnforcedAdmin mFunDisallowedAdmin; private EnforcedAdmin mFunDisallowedAdmin;
private boolean mFunDisallowedBySystem;
private EnforcedAdmin mDebuggingFeaturesDisallowedAdmin; private EnforcedAdmin mDebuggingFeaturesDisallowedAdmin;
private boolean mDebuggingFeaturesDisallowedBySystem;
@Override @Override
protected int getMetricsCategory() { protected int getMetricsCategory() {
@@ -192,8 +194,12 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
mDevHitToast = null; mDevHitToast = null;
mFunDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced( mFunDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(
getActivity(), UserManager.DISALLOW_FUN, UserHandle.myUserId()); getActivity(), UserManager.DISALLOW_FUN, UserHandle.myUserId());
mFunDisallowedBySystem = RestrictedLockUtils.hasBaseUserRestriction(
getActivity(), UserManager.DISALLOW_FUN, UserHandle.myUserId());
mDebuggingFeaturesDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced( mDebuggingFeaturesDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(
getActivity(), UserManager.DISALLOW_DEBUGGING_FEATURES, UserHandle.myUserId()); getActivity(), UserManager.DISALLOW_DEBUGGING_FEATURES, UserHandle.myUserId());
mDebuggingFeaturesDisallowedBySystem = RestrictedLockUtils.hasBaseUserRestriction(
getActivity(), UserManager.DISALLOW_DEBUGGING_FEATURES, UserHandle.myUserId());
} }
@Override @Override
@@ -202,9 +208,11 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
System.arraycopy(mHits, 1, mHits, 0, mHits.length-1); System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
mHits[mHits.length-1] = SystemClock.uptimeMillis(); mHits[mHits.length-1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis()-500)) { if (mHits[0] >= (SystemClock.uptimeMillis()-500)) {
if (mFunDisallowedAdmin != null) { if (mUm.hasUserRestriction(UserManager.DISALLOW_FUN)) {
if (mFunDisallowedAdmin != null && !mFunDisallowedBySystem) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(),
mFunDisallowedAdmin); mFunDisallowedAdmin);
}
Log.d(LOG_TAG, "Sorry, no fun for you!"); Log.d(LOG_TAG, "Sorry, no fun for you!");
return false; return false;
} }
@@ -228,9 +236,12 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
return true; return true;
} }
if (mDebuggingFeaturesDisallowedAdmin != null) { if (mUm.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)) {
if (mDebuggingFeaturesDisallowedAdmin != null &&
!mDebuggingFeaturesDisallowedBySystem) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(),
mDebuggingFeaturesDisallowedAdmin); mDebuggingFeaturesDisallowedAdmin);
}
return true; return true;
} }

View File

@@ -38,6 +38,7 @@ import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.dashboard.SummaryLoader; import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable; import com.android.settings.search.Indexable;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
import java.util.ArrayList; import java.util.ArrayList;
@@ -186,12 +187,6 @@ public class PrivacySettings extends SettingsPreferenceFragment implements Index
// Hide the item if data management intent is not supported by transport. // Hide the item if data management intent is not supported by transport.
getPreferenceScreen().removePreference(mManageData); getPreferenceScreen().removePreference(mManageData);
} }
RestrictedPreference networkResetPref = (RestrictedPreference) findPreference(
NETWORK_RESET);
if (networkResetPref != null) {
networkResetPref.checkRestrictionAndSetDisabled(UserManager.DISALLOW_NETWORK_RESET);
}
} }
private void setConfigureSummary(String summary) { private void setConfigureSummary(String summary) {
@@ -315,5 +310,13 @@ public class PrivacySettings extends SettingsPreferenceFragment implements Index
nonVisibleKeys.add(AUTO_RESTORE); nonVisibleKeys.add(AUTO_RESTORE);
nonVisibleKeys.add(CONFIGURE_ACCOUNT); nonVisibleKeys.add(CONFIGURE_ACCOUNT);
} }
if (RestrictedLockUtils.hasBaseUserRestriction(context,
UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId())) {
nonVisibleKeys.add(FACTORY_RESET);
}
if (RestrictedLockUtils.hasBaseUserRestriction(context,
UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
nonVisibleKeys.add(NETWORK_RESET);
}
} }
} }

View File

@@ -251,7 +251,7 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
@Override @Override
protected void onDataSetChanged() { protected void onDataSetChanged() {
highlightPreferenceIfNeeded(); highlightPreferenceIfNeeded();
if (mAdminSupportDetails != null && isUiRestricted()) { if (mAdminSupportDetails != null && isUiRestrictedByOnlyAdmin()) {
updateAdminSupportDetailsView(); updateAdminSupportDetailsView();
setEmptyView(mAdminSupportDetails); setEmptyView(mAdminSupportDetails);
} else if (mEmptyTextView != null) { } else if (mEmptyTextView != null) {
@@ -266,4 +266,9 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
protected boolean isUiRestricted() { protected boolean isUiRestricted() {
return isRestrictedAndNotProviderProtected() || !hasChallengeSucceeded(); return isRestrictedAndNotProviderProtected() || !hasChallengeSucceeded();
} }
protected boolean isUiRestrictedByOnlyAdmin() {
return isUiRestricted() && !mUserManager.hasBaseUserRestriction(mRestrictionKey,
UserHandle.of(UserHandle.myUserId()));
}
} }

View File

@@ -276,19 +276,30 @@ public class SecuritySettings extends SettingsPreferenceFragment
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
mKeyStore = KeyStore.getInstance(); // needs to be initialized for onResume() mKeyStore = KeyStore.getInstance(); // needs to be initialized for onResume()
if (!RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
UserManager.DISALLOW_CONFIG_CREDENTIALS, MY_USER_ID)) {
RestrictedPreference credentialStorageType = (RestrictedPreference) root.findPreference( RestrictedPreference credentialStorageType = (RestrictedPreference) root.findPreference(
KEY_CREDENTIAL_STORAGE_TYPE); KEY_CREDENTIAL_STORAGE_TYPE);
credentialStorageType.checkRestrictionAndSetDisabled( credentialStorageType.checkRestrictionAndSetDisabled(
UserManager.DISALLOW_CONFIG_CREDENTIALS); UserManager.DISALLOW_CONFIG_CREDENTIALS);
RestrictedPreference installCredentials = (RestrictedPreference) root.findPreference( RestrictedPreference installCredentials = (RestrictedPreference) root.findPreference(
KEY_CREDENTIALS_INSTALL); KEY_CREDENTIALS_INSTALL);
installCredentials.checkRestrictionAndSetDisabled(UserManager.DISALLOW_CONFIG_CREDENTIALS); installCredentials.checkRestrictionAndSetDisabled(
mResetCredentials.checkRestrictionAndSetDisabled(UserManager.DISALLOW_CONFIG_CREDENTIALS); UserManager.DISALLOW_CONFIG_CREDENTIALS);
mResetCredentials.checkRestrictionAndSetDisabled(
UserManager.DISALLOW_CONFIG_CREDENTIALS);
final int storageSummaryRes = final int storageSummaryRes =
mKeyStore.isHardwareBacked() ? R.string.credential_storage_type_hardware mKeyStore.isHardwareBacked() ? R.string.credential_storage_type_hardware
: R.string.credential_storage_type_software; : R.string.credential_storage_type_software;
credentialStorageType.setSummary(storageSummaryRes); credentialStorageType.setSummary(storageSummaryRes);
} else {
PreferenceGroup credentialsManager = (PreferenceGroup)
root.findPreference(KEY_CREDENTIALS_MANAGER);
credentialsManager.removePreference(root.findPreference(KEY_RESET_CREDENTIALS));
credentialsManager.removePreference(root.findPreference(KEY_CREDENTIALS_INSTALL));
credentialsManager.removePreference(root.findPreference(KEY_CREDENTIAL_STORAGE_TYPE));
}
// Application install // Application install
@@ -300,6 +311,12 @@ public class SecuritySettings extends SettingsPreferenceFragment
// Side loading of apps. // Side loading of apps.
// Disable for restricted profiles. For others, check if policy disallows it. // Disable for restricted profiles. For others, check if policy disallows it.
mToggleAppInstallation.setEnabled(!um.getUserInfo(MY_USER_ID).isRestricted()); mToggleAppInstallation.setEnabled(!um.getUserInfo(MY_USER_ID).isRestricted());
if (RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, MY_USER_ID)
|| RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
UserManager.DISALLOW_INSTALL_APPS, MY_USER_ID)) {
mToggleAppInstallation.setEnabled(false);
}
if (mToggleAppInstallation.isEnabled()) { if (mToggleAppInstallation.isEnabled()) {
mToggleAppInstallation.checkRestrictionAndSetDisabled( mToggleAppInstallation.checkRestrictionAndSetDisabled(
UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES); UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES);

View File

@@ -34,6 +34,7 @@ import android.nfc.NfcAdapter;
import android.nfc.NfcManager; import android.nfc.NfcManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import android.provider.Settings; import android.provider.Settings;
@@ -242,7 +243,8 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde
//enable/disable wimax depending on the value in config.xml //enable/disable wimax depending on the value in config.xml
final boolean isWimaxEnabled = isAdmin && this.getResources().getBoolean( final boolean isWimaxEnabled = isAdmin && this.getResources().getBoolean(
com.android.internal.R.bool.config_wimaxEnabled); com.android.internal.R.bool.config_wimaxEnabled);
if (!isWimaxEnabled) { if (!isWimaxEnabled || RestrictedLockUtils.hasBaseUserRestriction(activity,
UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.myUserId())) {
PreferenceScreen root = getPreferenceScreen(); PreferenceScreen root = getPreferenceScreen();
Preference ps = findPreference(KEY_WIMAX_SETTINGS); Preference ps = findPreference(KEY_WIMAX_SETTINGS);
if (ps != null) root.removePreference(ps); if (ps != null) root.removePreference(ps);
@@ -260,7 +262,8 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde
} }
// Disable VPN. // Disable VPN.
// TODO: http://b/23693383 // TODO: http://b/23693383
if (!isAdmin) { if (!isAdmin || RestrictedLockUtils.hasBaseUserRestriction(activity,
UserManager.DISALLOW_CONFIG_VPN, UserHandle.myUserId())) {
removePreference(KEY_VPN_SETTINGS); removePreference(KEY_VPN_SETTINGS);
} }
@@ -285,7 +288,9 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde
// Remove Mobile Network Settings and Manage Mobile Plan for secondary users, // Remove Mobile Network Settings and Manage Mobile Plan for secondary users,
// if it's a wifi-only device. // if it's a wifi-only device.
if (!isAdmin || Utils.isWifiOnly(getActivity())) { if (!isAdmin || Utils.isWifiOnly(getActivity()) ||
RestrictedLockUtils.hasBaseUserRestriction(activity,
UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.myUserId())) {
removePreference(KEY_MOBILE_NETWORK_SETTINGS); removePreference(KEY_MOBILE_NETWORK_SETTINGS);
removePreference(KEY_MANAGE_MOBILE_PLAN); removePreference(KEY_MANAGE_MOBILE_PLAN);
} }
@@ -317,9 +322,11 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde
final ConnectivityManager cm = final ConnectivityManager cm =
(ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE); (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
final boolean adminDisallowedTetherConfig = mUm.hasUserRestriction( final boolean adminDisallowedTetherConfig = RestrictedLockUtils.checkIfRestrictionEnforced(
UserManager.DISALLOW_CONFIG_TETHERING); activity, UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId()) != null;
if (!cm.isTetheringSupported() && !adminDisallowedTetherConfig) { if ((!cm.isTetheringSupported() && !adminDisallowedTetherConfig) ||
RestrictedLockUtils.hasBaseUserRestriction(activity,
UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId())) {
getPreferenceScreen().removePreference(findPreference(KEY_TETHER_SETTINGS)); getPreferenceScreen().removePreference(findPreference(KEY_TETHER_SETTINGS));
} else if (!adminDisallowedTetherConfig) { } else if (!adminDisallowedTetherConfig) {
Preference p = findPreference(KEY_TETHER_SETTINGS); Preference p = findPreference(KEY_TETHER_SETTINGS);

View File

@@ -62,6 +62,7 @@ import com.android.settings.search.Index;
import com.android.settings.search.Indexable; import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw; import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.users.UserDialogs; import com.android.settings.users.UserDialogs;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.accounts.AuthenticatorHelper; import com.android.settingslib.accounts.AuthenticatorHelper;
import java.util.ArrayList; import java.util.ArrayList;
@@ -325,10 +326,13 @@ public class AccountSettings extends SettingsPreferenceFragment
if (userInfo.isEnabled()) { if (userInfo.isEnabled()) {
profileData.authenticatorHelper = new AuthenticatorHelper(context, profileData.authenticatorHelper = new AuthenticatorHelper(context,
userInfo.getUserHandle(), this); userInfo.getUserHandle(), this);
if (!RestrictedLockUtils.hasBaseUserRestriction(context,
UserManager.DISALLOW_MODIFY_ACCOUNTS, userInfo.id)) {
profileData.addAccountPreference = newAddAccountPreference(context); profileData.addAccountPreference = newAddAccountPreference(context);
profileData.addAccountPreference.checkRestrictionAndSetDisabled( profileData.addAccountPreference.checkRestrictionAndSetDisabled(
DISALLOW_MODIFY_ACCOUNTS, userInfo.id); DISALLOW_MODIFY_ACCOUNTS, userInfo.id);
} }
}
mProfiles.put(userInfo.id, profileData); mProfiles.put(userInfo.id, profileData);
Index.getInstance(getActivity()).updateFromClassNameResource( Index.getInstance(getActivity()).updateFromClassNameResource(
AccountSettings.class.getName(), true, true); AccountSettings.class.getName(), true, true);
@@ -715,13 +719,16 @@ public class AccountSettings extends SettingsPreferenceFragment
for (int i = 0; i < profilesCount; i++) { for (int i = 0; i < profilesCount; i++) {
UserInfo userInfo = profiles.get(i); UserInfo userInfo = profiles.get(i);
if (userInfo.isEnabled()) { if (userInfo.isEnabled()) {
if (!RestrictedLockUtils.hasBaseUserRestriction(context,
DISALLOW_MODIFY_ACCOUNTS, userInfo.id)) {
SearchIndexableRaw data = new SearchIndexableRaw(context); SearchIndexableRaw data = new SearchIndexableRaw(context);
data = new SearchIndexableRaw(context); data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.add_account_label); data.title = res.getString(R.string.add_account_label);
data.screenTitle = screenTitle; data.screenTitle = screenTitle;
result.add(data); result.add(data);
}
if (userInfo.isManagedProfile()) { if (userInfo.isManagedProfile()) {
data = new SearchIndexableRaw(context); SearchIndexableRaw data = new SearchIndexableRaw(context);
data = new SearchIndexableRaw(context); data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.remove_managed_profile_label); data.title = res.getString(R.string.remove_managed_profile_label);
data.screenTitle = screenTitle; data.screenTitle = screenTitle;

View File

@@ -262,6 +262,8 @@ public class AccountSyncSettings extends AccountPreferenceBase {
MenuItem syncCancel = menu.add(0, MENU_SYNC_CANCEL_ID, 0, MenuItem syncCancel = menu.add(0, MENU_SYNC_CANCEL_ID, 0,
getString(R.string.sync_menu_sync_cancel)) getString(R.string.sync_menu_sync_cancel))
.setIcon(com.android.internal.R.drawable.ic_menu_close_clear_cancel); .setIcon(com.android.internal.R.drawable.ic_menu_close_clear_cancel);
if (!RestrictedLockUtils.hasBaseUserRestriction(getPrefContext(),
UserManager.DISALLOW_MODIFY_ACCOUNTS, mUserHandle.getIdentifier())) {
MenuItem removeAccount = menu.add(0, MENU_REMOVE_ACCOUNT_ID, 0, MenuItem removeAccount = menu.add(0, MENU_REMOVE_ACCOUNT_ID, 0,
getString(R.string.remove_account_label)) getString(R.string.remove_account_label))
.setIcon(R.drawable.ic_menu_delete); .setIcon(R.drawable.ic_menu_delete);
@@ -276,6 +278,7 @@ public class AccountSyncSettings extends AccountPreferenceBase {
} }
RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getPrefContext(), RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getPrefContext(),
removeAccount, admin); removeAccount, admin);
}
syncNow.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER | syncNow.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |
MenuItem.SHOW_AS_ACTION_WITH_TEXT); MenuItem.SHOW_AS_ACTION_WITH_TEXT);
syncCancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER | syncCancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |

View File

@@ -56,6 +56,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
protected static final boolean localLOGV = false; protected static final boolean localLOGV = false;
protected EnforcedAdmin mAppsControlDisallowedAdmin; protected EnforcedAdmin mAppsControlDisallowedAdmin;
protected boolean mAppsControlDisallowedBySystem;
protected ApplicationsState mState; protected ApplicationsState mState;
protected ApplicationsState.Session mSession; protected ApplicationsState.Session mSession;
@@ -97,6 +98,8 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
mSession.resume(); mSession.resume();
mAppsControlDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(), mAppsControlDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
UserManager.DISALLOW_APPS_CONTROL, mUserId); UserManager.DISALLOW_APPS_CONTROL, mUserId);
mAppsControlDisallowedBySystem = RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
UserManager.DISALLOW_APPS_CONTROL, mUserId);
if (!refreshUi()) { if (!refreshUi()) {
setIntentAndFinish(true, true); setIntentAndFinish(true, true);

View File

@@ -194,7 +194,7 @@ public class AppStorageSettings extends AppInfoWithHeader
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (v == mClearCacheButton) { if (v == mClearCacheButton) {
if (mAppsControlDisallowedAdmin != null) { if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent( RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
getActivity(), mAppsControlDisallowedAdmin); getActivity(), mAppsControlDisallowedAdmin);
return; return;
@@ -203,7 +203,7 @@ public class AppStorageSettings extends AppInfoWithHeader
} }
mPm.deleteApplicationCacheFiles(mPackageName, mClearCacheObserver); mPm.deleteApplicationCacheFiles(mPackageName, mClearCacheObserver);
} else if (v == mClearDataButton) { } else if (v == mClearDataButton) {
if (mAppsControlDisallowedAdmin != null) { if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent( RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
getActivity(), mAppsControlDisallowedAdmin); getActivity(), mAppsControlDisallowedAdmin);
} else if (mAppEntry.info.manageSpaceActivityName != null) { } else if (mAppEntry.info.manageSpaceActivityName != null) {
@@ -219,7 +219,7 @@ public class AppStorageSettings extends AppInfoWithHeader
} else if (v == mChangeStorageButton && mDialogBuilder != null && !isMoveInProgress()) { } else if (v == mChangeStorageButton && mDialogBuilder != null && !isMoveInProgress()) {
mDialogBuilder.show(); mDialogBuilder.show();
} else if (v == mClearUriButton) { } else if (v == mClearUriButton) {
if (mAppsControlDisallowedAdmin != null) { if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent( RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
getActivity(), mAppsControlDisallowedAdmin); getActivity(), mAppsControlDisallowedAdmin);
} else { } else {
@@ -323,6 +323,10 @@ public class AppStorageSettings extends AppInfoWithHeader
mClearCacheButton.setOnClickListener(this); mClearCacheButton.setOnClickListener(this);
} }
} }
if (mAppsControlDisallowedBySystem) {
mClearCacheButton.setEnabled(false);
mClearDataButton.setEnabled(false);
}
} }
@Override @Override
@@ -369,6 +373,10 @@ public class AppStorageSettings extends AppInfoWithHeader
} }
mClearDataButton.setOnClickListener(this); mClearDataButton.setOnClickListener(this);
} }
if (mAppsControlDisallowedBySystem) {
mClearDataButton.setEnabled(false);
}
} }
private void initMoveDialog() { private void initMoveDialog() {
@@ -488,6 +496,10 @@ public class AppStorageSettings extends AppInfoWithHeader
mUri.addPreference(pref); mUri.addPreference(pref);
} }
if (mAppsControlDisallowedBySystem) {
mClearUriButton.setEnabled(false);
}
mClearUri.setOrder(order); mClearUri.setOrder(order);
mClearUriButton.setVisibility(View.VISIBLE); mClearUriButton.setVisibility(View.VISIBLE);

View File

@@ -242,6 +242,10 @@ public class InstalledAppDetails extends AppInfoBase
} }
} }
if (mAppsControlDisallowedBySystem) {
enabled = false;
}
mUninstallButton.setEnabled(enabled); mUninstallButton.setEnabled(enabled);
if (enabled) { if (enabled) {
// Register listener // Register listener
@@ -405,7 +409,7 @@ public class InstalledAppDetails extends AppInfoBase
menu.findItem(UNINSTALL_ALL_USERS_MENU).setVisible(showIt); menu.findItem(UNINSTALL_ALL_USERS_MENU).setVisible(showIt);
mUpdatedSysApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; mUpdatedSysApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES); MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES);
uninstallUpdatesItem.setVisible(mUpdatedSysApp); uninstallUpdatesItem.setVisible(mUpdatedSysApp && !mAppsControlDisallowedBySystem);
if (uninstallUpdatesItem.isVisible()) { if (uninstallUpdatesItem.isVisible()) {
RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(), RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(),
uninstallUpdatesItem, mAppsControlDisallowedAdmin); uninstallUpdatesItem, mAppsControlDisallowedAdmin);
@@ -660,9 +664,13 @@ public class InstalledAppDetails extends AppInfoBase
} }
private void updateForceStopButton(boolean enabled) { private void updateForceStopButton(boolean enabled) {
if (mAppsControlDisallowedBySystem) {
mForceStopButton.setEnabled(false);
} else {
mForceStopButton.setEnabled(enabled); mForceStopButton.setEnabled(enabled);
mForceStopButton.setOnClickListener(InstalledAppDetails.this); mForceStopButton.setOnClickListener(InstalledAppDetails.this);
} }
}
private void checkForceStop() { private void checkForceStop() {
if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) { if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
@@ -719,7 +727,9 @@ public class InstalledAppDetails extends AppInfoBase
if(v == mUninstallButton) { if(v == mUninstallButton) {
EnforcedAdmin admin = RestrictedLockUtils.checkIfUninstallBlocked(getActivity(), EnforcedAdmin admin = RestrictedLockUtils.checkIfUninstallBlocked(getActivity(),
packageName, mUserId); packageName, mUserId);
if (admin != null) { boolean uninstallBlockedBySystem = mAppsControlDisallowedBySystem ||
RestrictedLockUtils.hasBaseUserRestriction(getActivity(), packageName, mUserId);
if (admin != null && !uninstallBlockedBySystem) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin); RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin);
} else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { } else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
if (mAppEntry.info.enabled && !isDisabledUntilUsed()) { if (mAppEntry.info.enabled && !isDisabledUntilUsed()) {
@@ -739,7 +749,7 @@ public class InstalledAppDetails extends AppInfoBase
uninstallPkg(packageName, false, false); uninstallPkg(packageName, false, false);
} }
} else if (v == mForceStopButton) { } else if (v == mForceStopButton) {
if (mAppsControlDisallowedAdmin != null) { if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent( RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
getActivity(), mAppsControlDisallowedAdmin); getActivity(), mAppsControlDisallowedAdmin);
} else { } else {

View File

@@ -171,6 +171,9 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
if (isUiRestricted()) { if (isUiRestricted()) {
setDeviceListGroup(getPreferenceScreen()); setDeviceListGroup(getPreferenceScreen());
if (!isUiRestrictedByOnlyAdmin()) {
getEmptyTextView().setText(R.string.bluetooth_empty_list_user_restricted);
}
removeAllDevices(); removeAllDevices();
return; return;
} }
@@ -294,6 +297,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
mDevicePreferenceMap.clear(); mDevicePreferenceMap.clear();
if (isUiRestricted()) { if (isUiRestricted()) {
messageId = R.string.bluetooth_empty_list_user_restricted;
break; break;
} }
@@ -355,7 +359,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
case BluetoothAdapter.STATE_OFF: case BluetoothAdapter.STATE_OFF:
setOffMessage(); setOffMessage();
if (isUiRestricted()) { if (isUiRestricted()) {
messageId = 0; messageId = R.string.bluetooth_empty_list_user_restricted;
} }
break; break;

View File

@@ -395,7 +395,10 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced( EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
getActivity(), UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA, getActivity(), UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,
UserHandle.myUserId()); UserHandle.myUserId());
if (admin != null) { boolean hasBaseUserRestriction = RestrictedLockUtils.hasBaseUserRestriction(
getActivity(), UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,
UserHandle.myUserId());
if (admin != null && !hasBaseUserRestriction) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin); RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin);
return; return;
} }

View File

@@ -22,6 +22,7 @@ import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager; import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbPort; import android.hardware.usb.UsbPort;
import android.hardware.usb.UsbPortStatus; import android.hardware.usb.UsbPortStatus;
import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
public class UsbBackend { public class UsbBackend {
@@ -37,6 +38,7 @@ public class UsbBackend {
public static final int MODE_DATA_MIDI = 0x03 << 1; public static final int MODE_DATA_MIDI = 0x03 << 1;
private final boolean mRestricted; private final boolean mRestricted;
private final boolean mRestrictedBySystem;
private final boolean mMidi; private final boolean mMidi;
private UserManager mUserManager; private UserManager mUserManager;
@@ -56,6 +58,8 @@ public class UsbBackend {
mUsbManager = context.getSystemService(UsbManager.class); mUsbManager = context.getSystemService(UsbManager.class);
mRestricted = mUserManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER); mRestricted = mUserManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER);
mRestrictedBySystem = mUserManager.hasBaseUserRestriction(
UserManager.DISALLOW_USB_FILE_TRANSFER, UserHandle.of(UserHandle.myUserId()));
mMidi = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI); mMidi = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI);
UsbPort[] ports = mUsbManager.getPorts(); UsbPort[] ports = mUsbManager.getPorts();
@@ -134,7 +138,7 @@ public class UsbBackend {
? UsbPort.POWER_ROLE_SOURCE : UsbPort.POWER_ROLE_SINK; ? UsbPort.POWER_ROLE_SOURCE : UsbPort.POWER_ROLE_SINK;
} }
public boolean isModeDisallowedByAdmin(int mode) { public boolean isModeDisallowed(int mode) {
if (mRestricted && (mode & MODE_DATA_MASK) != MODE_DATA_NONE if (mRestricted && (mode & MODE_DATA_MASK) != MODE_DATA_NONE
&& (mode & MODE_DATA_MASK) != MODE_DATA_MIDI) { && (mode & MODE_DATA_MASK) != MODE_DATA_MIDI) {
// No USB data modes are supported. // No USB data modes are supported.
@@ -143,6 +147,15 @@ public class UsbBackend {
return false; return false;
} }
public boolean isModeDisallowedBySystem(int mode) {
if (mRestrictedBySystem && (mode & MODE_DATA_MASK) != MODE_DATA_NONE
&& (mode & MODE_DATA_MASK) != MODE_DATA_MIDI) {
// No USB data modes are supported.
return true;
}
return false;
}
public boolean isModeSupported(int mode) { public boolean isModeSupported(int mode) {
if (!mMidi && (mode & MODE_DATA_MASK) == MODE_DATA_MIDI) { if (!mMidi && (mode & MODE_DATA_MASK) == MODE_DATA_MIDI) {
return false; return false;

View File

@@ -106,9 +106,10 @@ public class UsbModeChooserActivity extends Activity {
mBackend = new UsbBackend(this); mBackend = new UsbBackend(this);
int current = mBackend.getCurrentMode(); int current = mBackend.getCurrentMode();
for (int i = 0; i < DEFAULT_MODES.length; i++) { for (int i = 0; i < DEFAULT_MODES.length; i++) {
if (mBackend.isModeSupported(DEFAULT_MODES[i])) { if (mBackend.isModeSupported(DEFAULT_MODES[i])
&& !mBackend.isModeDisallowedBySystem(DEFAULT_MODES[i])) {
inflateOption(DEFAULT_MODES[i], current == DEFAULT_MODES[i], container, inflateOption(DEFAULT_MODES[i], current == DEFAULT_MODES[i], container,
mBackend.isModeDisallowedByAdmin(DEFAULT_MODES[i])); mBackend.isModeDisallowed(DEFAULT_MODES[i]));
} }
} }
} }

View File

@@ -266,8 +266,8 @@ public class LocationSettings extends LocationSettingsBase
mManagedProfileSwitch.setOnPreferenceClickListener(null); mManagedProfileSwitch.setOnPreferenceClickListener(null);
final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(), final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
UserManager.DISALLOW_SHARE_LOCATION, mManagedProfile.getIdentifier()); UserManager.DISALLOW_SHARE_LOCATION, mManagedProfile.getIdentifier());
if (mUm.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, mManagedProfile) final boolean isRestrictedByBase = isManagedProfileRestrictedByBase();
&& admin != null) { if (!isRestrictedByBase && admin != null) {
mManagedProfileSwitch.setDisabledByAdmin(admin); mManagedProfileSwitch.setDisabledByAdmin(admin);
mManagedProfileSwitch.setChecked(false); mManagedProfileSwitch.setChecked(false);
} else { } else {
@@ -278,9 +278,8 @@ public class LocationSettings extends LocationSettingsBase
if (!enabled) { if (!enabled) {
mManagedProfileSwitch.setChecked(false); mManagedProfileSwitch.setChecked(false);
} else { } else {
final boolean isRestricted = isManagedProfileRestrictedByBase(); mManagedProfileSwitch.setChecked(!isRestrictedByBase);
mManagedProfileSwitch.setChecked(!isRestricted); summaryResId = (isRestrictedByBase ?
summaryResId = (isRestricted ?
R.string.switch_off_text : R.string.switch_on_text); R.string.switch_off_text : R.string.switch_on_text);
mManagedProfileSwitch.setOnPreferenceClickListener( mManagedProfileSwitch.setOnPreferenceClickListener(
mManagedProfileSwitchClickListener); mManagedProfileSwitchClickListener);
@@ -382,9 +381,11 @@ public class LocationSettings extends LocationSettingsBase
final boolean enabled = (mode != android.provider.Settings.Secure.LOCATION_MODE_OFF); final boolean enabled = (mode != android.provider.Settings.Secure.LOCATION_MODE_OFF);
EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(), EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
UserManager.DISALLOW_SHARE_LOCATION, UserHandle.myUserId()); UserManager.DISALLOW_SHARE_LOCATION, UserHandle.myUserId());
boolean hasBaseUserRestriction = RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
UserManager.DISALLOW_SHARE_LOCATION, UserHandle.myUserId());
// Disable the whole switch bar instead of the switch itself. If we disabled the switch // Disable the whole switch bar instead of the switch itself. If we disabled the switch
// only, it would be re-enabled again if the switch bar is not disabled. // only, it would be re-enabled again if the switch bar is not disabled.
if (admin != null) { if (!hasBaseUserRestriction && admin != null) {
mSwitchBar.setDisabledByAdmin(admin); mSwitchBar.setDisabledByAdmin(admin);
} else { } else {
mSwitchBar.setEnabled(!restricted); mSwitchBar.setEnabled(!restricted);

View File

@@ -21,12 +21,14 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.nfc.NfcAdapter; import android.nfc.NfcAdapter;
import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.support.v14.preference.SwitchPreference; import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
/** /**
@@ -40,6 +42,7 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
private final RestrictedPreference mAndroidBeam; private final RestrictedPreference mAndroidBeam;
private final NfcAdapter mNfcAdapter; private final NfcAdapter mNfcAdapter;
private final IntentFilter mIntentFilter; private final IntentFilter mIntentFilter;
private boolean mBeamDisallowedBySystem;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override @Override
@@ -58,6 +61,8 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
mSwitch = switchPreference; mSwitch = switchPreference;
mAndroidBeam = androidBeam; mAndroidBeam = androidBeam;
mNfcAdapter = NfcAdapter.getDefaultAdapter(context); mNfcAdapter = NfcAdapter.getDefaultAdapter(context);
mBeamDisallowedBySystem = RestrictedLockUtils.hasBaseUserRestriction(context,
UserManager.DISALLOW_OUTGOING_BEAM, UserHandle.myUserId());
if (mNfcAdapter == null) { if (mNfcAdapter == null) {
// NFC is not supported // NFC is not supported
@@ -66,6 +71,9 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
mIntentFilter = null; mIntentFilter = null;
return; return;
} }
if (mBeamDisallowedBySystem) {
mAndroidBeam.setEnabled(false);
}
mIntentFilter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED); mIntentFilter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
} }
@@ -112,7 +120,12 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
case NfcAdapter.STATE_ON: case NfcAdapter.STATE_ON:
mSwitch.setChecked(true); mSwitch.setChecked(true);
mSwitch.setEnabled(true); mSwitch.setEnabled(true);
if (mBeamDisallowedBySystem) {
mAndroidBeam.setDisabledByAdmin(null);
mAndroidBeam.setEnabled(false);
} else {
mAndroidBeam.checkRestrictionAndSetDisabled(UserManager.DISALLOW_OUTGOING_BEAM); mAndroidBeam.checkRestrictionAndSetDisabled(UserManager.DISALLOW_OUTGOING_BEAM);
}
if (mNfcAdapter.isNdefPushEnabled() && mAndroidBeam.isEnabled()) { if (mNfcAdapter.isNdefPushEnabled() && mAndroidBeam.isEnabled()) {
mAndroidBeam.setSummary(R.string.android_beam_on_summary); mAndroidBeam.setSummary(R.string.android_beam_on_summary);
} else { } else {

View File

@@ -69,8 +69,12 @@ abstract public class ZenModeSettingsBase extends RestrictedSettingsFragment {
maybeRefreshRules(true, true /*fireChanged*/); maybeRefreshRules(true, true /*fireChanged*/);
mSettingsObserver.register(); mSettingsObserver.register();
if (isUiRestricted()) { if (isUiRestricted()) {
if (isUiRestrictedByOnlyAdmin()) {
getPreferenceScreen().removeAll(); getPreferenceScreen().removeAll();
return; return;
} else {
finish();
}
} }
} }

View File

@@ -29,7 +29,7 @@ import android.support.v7.preference.Preference;
import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedLockUtils;
import java.util.List; import java.util.List;
@@ -60,7 +60,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
private UserManager mUserManager; private UserManager mUserManager;
private SwitchPreference mPhonePref; private SwitchPreference mPhonePref;
private RestrictedPreference mRemoveUserPref; private Preference mRemoveUserPref;
private UserInfo mUserInfo; private UserInfo mUserInfo;
private boolean mGuestUser; private boolean mGuestUser;
@@ -80,7 +80,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
addPreferencesFromResource(R.xml.user_details_settings); addPreferencesFromResource(R.xml.user_details_settings);
mPhonePref = (SwitchPreference) findPreference(KEY_ENABLE_TELEPHONY); mPhonePref = (SwitchPreference) findPreference(KEY_ENABLE_TELEPHONY);
mRemoveUserPref = (RestrictedPreference) findPreference(KEY_REMOVE_USER); mRemoveUserPref = findPreference(KEY_REMOVE_USER);
mGuestUser = getArguments().getBoolean(EXTRA_USER_GUEST, false); mGuestUser = getArguments().getBoolean(EXTRA_USER_GUEST, false);
@@ -103,13 +103,11 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
mPhonePref.setChecked( mPhonePref.setChecked(
!mDefaultGuestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS)); !mDefaultGuestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS));
} }
mPhonePref.setOnPreferenceChangeListener(this); if (RestrictedLockUtils.hasBaseUserRestriction(context,
UserManager.DISALLOW_REMOVE_USER, UserHandle.myUserId())) {
removePreference(KEY_REMOVE_USER);
} }
mPhonePref.setOnPreferenceChangeListener(this);
@Override
public void onResume() {
super.onResume();
mRemoveUserPref.checkRestrictionAndSetDisabled(UserManager.DISALLOW_REMOVE_USER);
} }
@Override @Override

View File

@@ -633,6 +633,9 @@ public class WifiSettings extends RestrictedSettingsFragment
// Safeguard from some delayed event handling // Safeguard from some delayed event handling
if (getActivity() == null) return; if (getActivity() == null) return;
if (isUiRestricted()) { if (isUiRestricted()) {
if (!isUiRestrictedByOnlyAdmin()) {
addMessagePreference(R.string.wifi_empty_list_user_restricted);
}
getPreferenceScreen().removeAll(); getPreferenceScreen().removeAll();
return; return;
} }
@@ -732,6 +735,9 @@ public class WifiSettings extends RestrictedSettingsFragment
private void setOffMessage() { private void setOffMessage() {
if (isUiRestricted()) { if (isUiRestricted()) {
if (!isUiRestrictedByOnlyAdmin()) {
addMessagePreference(R.string.wifi_empty_list_user_restricted);
}
getPreferenceScreen().removeAll(); getPreferenceScreen().removeAll();
return; return;
} }