Trigger a support dialog when an action is disabled by policy
Change-Id: I847b481a16cce33fe7bd4040d38ec50ca62172c2
This commit is contained in:
@@ -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--;
|
||||
|
@@ -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 |
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
});
|
||||
|
Reference in New Issue
Block a user