Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4cc507ec authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Android (Google) Code Review
Browse files

Merge "Trigger a support dialog when an action is disabled by policy"

parents d7d48fda ef550767
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -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--;
+2 −4
Original line number Diff line number Diff line
@@ -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);
        }
        syncNow.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |
                MenuItem.SHOW_AS_ACTION_WITH_TEXT);
        syncCancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |
+6 −2
Original line number Diff line number Diff line
@@ -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);
+16 −16
Original line number Diff line number Diff line
@@ -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,9 +218,14 @@ public class AppStorageSettings extends AppInfoWithHeader
        } else if (v == mChangeStorageButton && mDialogBuilder != null && !isMoveInProgress()) {
            mDialogBuilder.show();
        } else if (v == mClearUriButton) {
            if (mAppsControlDisallowedAdmin != null) {
                RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
                        getActivity(), mAppsControlDisallowedAdmin);
            } else {
                clearUriPermissions();
            }
        }
    }

    private boolean isMoveInProgress() {
        try {
@@ -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);

+24 −14
Original line number Diff line number Diff line
@@ -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,13 +660,9 @@ public class InstalledAppDetails extends AppInfoBase
    }

    private void updateForceStopButton(boolean enabled) {
        if (mAppControlRestricted) {
            mForceStopButton.setEnabled(false);
        } else {
        mForceStopButton.setEnabled(enabled);
        mForceStopButton.setOnClickListener(InstalledAppDetails.this);
    }
    }

    private void checkForceStop() {
        if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
@@ -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,10 +739,15 @@ public class InstalledAppDetails extends AppInfoBase
                uninstallPkg(packageName, false, false);
            }
        } else if (v == mForceStopButton) {
            if (mAppsControlDisallowedAdmin != null) {
                RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
                        getActivity(), mAppsControlDisallowedAdmin);
            } else {
                showDialogInner(DLG_FORCE_STOP, 0);
                //forceStopPackage(mAppInfo.packageName);
            }
        }
    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
Loading