diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java index 95f1a83560e..05bcec184d6 100644 --- a/src/com/android/settings/DeviceInfoSettings.java +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -25,6 +25,7 @@ import android.os.PersistableBundle; import android.os.SELinux; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.UserHandle; import android.os.UserManager; import android.provider.SearchIndexableResource; import android.provider.Settings; @@ -41,11 +42,14 @@ import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Index; import com.android.settings.search.Indexable; import com.android.settingslib.DeviceInfoUtils; +import com.android.settingslib.RestrictedLockUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; + public class DeviceInfoSettings extends SettingsPreferenceFragment implements Indexable { private static final String LOG_TAG = "DeviceInfoSettings"; @@ -76,6 +80,9 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In private UserManager mUm; + private EnforcedAdmin mFunDisallowedAdmin; + private EnforcedAdmin mDebuggingFeaturesDisallowedAdmin; + @Override protected int getMetricsCategory() { return MetricsLogger.DEVICEINFO; @@ -183,6 +190,10 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In Context.MODE_PRIVATE).getBoolean(DevelopmentSettings.PREF_SHOW, android.os.Build.TYPE.equals("eng")) ? -1 : TAPS_TO_BE_A_DEVELOPER; mDevHitToast = null; + mFunDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced( + getActivity(), UserManager.DISALLOW_FUN, UserHandle.myUserId()); + mDebuggingFeaturesDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced( + getActivity(), UserManager.DISALLOW_DEBUGGING_FEATURES, UserHandle.myUserId()); } @Override @@ -191,7 +202,9 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In System.arraycopy(mHits, 1, mHits, 0, mHits.length-1); mHits[mHits.length-1] = SystemClock.uptimeMillis(); if (mHits[0] >= (SystemClock.uptimeMillis()-500)) { - if (mUm.hasUserRestriction(UserManager.DISALLOW_FUN)) { + if (mFunDisallowedAdmin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), + mFunDisallowedAdmin); Log.d(LOG_TAG, "Sorry, no fun for you!"); return false; } @@ -215,7 +228,11 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In return true; } - if (mUm.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)) return true; + if (mDebuggingFeaturesDisallowedAdmin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), + mDebuggingFeaturesDisallowedAdmin); + return true; + } if (mDevHitCountdown > 0) { mDevHitCountdown--; diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java index ded97d39671..ed56651b544 100644 --- a/src/com/android/settings/accounts/AccountSyncSettings.java +++ b/src/com/android/settings/accounts/AccountSyncSettings.java @@ -273,10 +273,8 @@ public class AccountSyncSettings extends AccountPreferenceBase { final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced( getPrefContext(), UserManager.DISALLOW_MODIFY_ACCOUNTS, mUserHandle.getIdentifier()); - if (admin != null) { - RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getPrefContext(), - removeAccount, admin); - } + RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getPrefContext(), + removeAccount, admin); syncNow.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER | MenuItem.SHOW_AS_ACTION_WITH_TEXT); syncCancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER | diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java index 599f61e635e..b67eb2b16ea 100644 --- a/src/com/android/settings/applications/AppInfoBase.java +++ b/src/com/android/settings/applications/AppInfoBase.java @@ -38,11 +38,14 @@ import android.util.Log; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; +import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import java.util.ArrayList; +import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; + public abstract class AppInfoBase extends SettingsPreferenceFragment implements ApplicationsState.Callbacks { @@ -52,7 +55,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment protected static final String TAG = AppInfoBase.class.getSimpleName(); protected static final boolean localLOGV = false; - protected boolean mAppControlRestricted = false; + protected EnforcedAdmin mAppsControlDisallowedAdmin; protected ApplicationsState mState; protected ApplicationsState.Session mSession; @@ -92,7 +95,8 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment public void onResume() { super.onResume(); mSession.resume(); - mAppControlRestricted = mUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL); + mAppsControlDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(), + UserManager.DISALLOW_APPS_CONTROL, mUserId); if (!refreshUi()) { setIntentAndFinish(true, true); diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java index 71d16675bb2..ae0c10adf31 100644 --- a/src/com/android/settings/applications/AppStorageSettings.java +++ b/src/com/android/settings/applications/AppStorageSettings.java @@ -48,6 +48,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.deviceinfo.StorageWizardMoveConfirm; +import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.Callbacks; @@ -192,13 +193,19 @@ public class AppStorageSettings extends AppInfoWithHeader @Override public void onClick(View v) { if (v == mClearCacheButton) { - // Lazy initialization of observer - if (mClearCacheObserver == null) { + if (mAppsControlDisallowedAdmin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent( + getActivity(), mAppsControlDisallowedAdmin); + return; + } else if (mClearCacheObserver == null) { // Lazy initialization of observer mClearCacheObserver = new ClearCacheObserver(); } mPm.deleteApplicationCacheFiles(mPackageName, mClearCacheObserver); } else if (v == mClearDataButton) { - if (mAppEntry.info.manageSpaceActivityName != null) { + if (mAppsControlDisallowedAdmin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent( + getActivity(), mAppsControlDisallowedAdmin); + } else if (mAppEntry.info.manageSpaceActivityName != null) { if (!Utils.isMonkeyRunning()) { Intent intent = new Intent(Intent.ACTION_DEFAULT); intent.setClassName(mAppEntry.info.packageName, @@ -211,7 +218,12 @@ public class AppStorageSettings extends AppInfoWithHeader } else if (v == mChangeStorageButton && mDialogBuilder != null && !isMoveInProgress()) { mDialogBuilder.show(); } else if (v == mClearUriButton) { - clearUriPermissions(); + if (mAppsControlDisallowedAdmin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent( + getActivity(), mAppsControlDisallowedAdmin); + } else { + clearUriPermissions(); + } } } @@ -310,10 +322,6 @@ public class AppStorageSettings extends AppInfoWithHeader mClearCacheButton.setOnClickListener(this); } } - if (mAppControlRestricted) { - mClearCacheButton.setEnabled(false); - mClearDataButton.setEnabled(false); - } } @Override @@ -360,10 +368,6 @@ public class AppStorageSettings extends AppInfoWithHeader } mClearDataButton.setOnClickListener(this); } - - if (mAppControlRestricted) { - mClearDataButton.setEnabled(false); - } } private void initMoveDialog() { @@ -483,10 +487,6 @@ public class AppStorageSettings extends AppInfoWithHeader mUri.addPreference(pref); } - if (mAppControlRestricted) { - mClearUriButton.setEnabled(false); - } - mClearUri.setOrder(order); mClearUriButton.setVisibility(View.VISIBLE); diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 42d8e469850..74785962ab1 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -48,6 +48,7 @@ import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; +import android.os.UserManager; import android.support.v7.preference.Preference; import android.support.v7.preference.Preference.OnPreferenceClickListener; import android.text.TextUtils; @@ -80,6 +81,7 @@ import com.android.settings.notification.AppNotificationSettings; import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend.AppRow; import com.android.settingslib.AppItem; +import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; @@ -92,6 +94,8 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; + /** * Activity to display application information from Settings. This activity presents * extended information associated with a package like code, data, total size, permissions @@ -238,10 +242,6 @@ public class InstalledAppDetails extends AppInfoBase } } - if (mAppControlRestricted) { - enabled = false; - } - mUninstallButton.setEnabled(enabled); if (enabled) { // Register listener @@ -404,7 +404,12 @@ public class InstalledAppDetails extends AppInfoBase } menu.findItem(UNINSTALL_ALL_USERS_MENU).setVisible(showIt); mUpdatedSysApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; - menu.findItem(UNINSTALL_UPDATES).setVisible(mUpdatedSysApp && !mAppControlRestricted); + MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES); + uninstallUpdatesItem.setVisible(mUpdatedSysApp); + if (uninstallUpdatesItem.isVisible()) { + RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(), + uninstallUpdatesItem, mAppsControlDisallowedAdmin); + } } @Override @@ -655,12 +660,8 @@ public class InstalledAppDetails extends AppInfoBase } private void updateForceStopButton(boolean enabled) { - if (mAppControlRestricted) { - mForceStopButton.setEnabled(false); - } else { - mForceStopButton.setEnabled(enabled); - mForceStopButton.setOnClickListener(InstalledAppDetails.this); - } + mForceStopButton.setEnabled(enabled); + mForceStopButton.setOnClickListener(InstalledAppDetails.this); } private void checkForceStop() { @@ -716,7 +717,11 @@ public class InstalledAppDetails extends AppInfoBase } String packageName = mAppEntry.info.packageName; if(v == mUninstallButton) { - if ((mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { + EnforcedAdmin admin = RestrictedLockUtils.checkIfUninstallBlocked(getActivity(), + packageName, mUserId); + if (admin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin); + } else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { if (mAppEntry.info.enabled && !isDisabledUntilUsed()) { if (mUpdatedSysApp) { showDialogInner(DLG_SPECIAL_DISABLE, 0); @@ -734,8 +739,13 @@ public class InstalledAppDetails extends AppInfoBase uninstallPkg(packageName, false, false); } } else if (v == mForceStopButton) { - showDialogInner(DLG_FORCE_STOP, 0); - //forceStopPackage(mAppInfo.packageName); + if (mAppsControlDisallowedAdmin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent( + getActivity(), mAppsControlDisallowedAdmin); + } else { + showDialogInner(DLG_FORCE_STOP, 0); + //forceStopPackage(mAppInfo.packageName); + } } } diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java index 6b429862cff..06c287b4bb4 100644 --- a/src/com/android/settings/deviceinfo/StorageSettings.java +++ b/src/com/android/settings/deviceinfo/StorageSettings.java @@ -28,6 +28,8 @@ import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; +import android.os.UserHandle; +import android.os.UserManager; import android.os.storage.DiskInfo; import android.os.storage.StorageEventListener; import android.os.storage.StorageManager; @@ -48,11 +50,15 @@ import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; +import com.android.settingslib.RestrictedLockUtils; + import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; + /** * Panel showing both internal storage (both built-in storage and private * volumes) and removable storage (public volumes). @@ -386,6 +392,13 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced( + getActivity(), UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA, + UserHandle.myUserId()); + if (admin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin); + return; + } new MountTask(context, vol).execute(); } });