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

Commit f5d7db2c authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Add device/profile app check in background check" into oc-mr1-dev

parents ef5d680c 00015fbf
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ import com.android.internal.app.UnlaunchableAppActivity;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.UserIcons;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.password.FingerprintManagerWrapper;
import com.android.settings.password.IFingerprintManager;

@@ -1279,6 +1280,28 @@ public final class Utils extends com.android.settingslib.Utils {
        return isVolumeValid(volume) ? volume : null;
    }

    /**
     * Return {@code true} if the supplied package is device owner or profile owner of at
     * least one user.
     * @param userManager used to get profile owner app for each user
     * @param devicePolicyManager used to check whether it is device owner app
     * @param packageName package to check about
     */
    public static boolean isProfileOrDeviceOwner(UserManager userManager,
            DevicePolicyManagerWrapper devicePolicyManager, String packageName) {
        List<UserInfo> userInfos = userManager.getUsers();
        if (devicePolicyManager.isDeviceOwnerAppOnAnyUser(packageName)) {
            return true;
        }
        for (int i = 0, size = userInfos.size(); i < size; i++) {
            ComponentName cn = devicePolicyManager.getProfileOwnerAsUser(userInfos.get(i).id);
            if (cn != null && cn.getPackageName().equals(packageName)) {
                return true;
            }
        }
        return false;
    }

    /**
     * Return the resource id to represent the install status for an app
     */
+5 −2
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.applications.ApplicationsState;
@@ -73,7 +75,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
    protected String mPackageName;

    protected IUsbManager mUsbManager;
    protected DevicePolicyManager mDpm;
    protected DevicePolicyManagerWrapper mDpm;
    protected UserManager mUserManager;
    protected PackageManager mPm;

@@ -92,7 +94,8 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
                .getApplicationFeatureProvider(activity);
        mState = ApplicationsState.getInstance(activity.getApplication());
        mSession = mState.newSession(this);
        mDpm = (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
        mDpm = new DevicePolicyManagerWrapperImpl(
                (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE));
        mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
        mPm = activity.getPackageManager();
        IBinder b = ServiceManager.getService(Context.USB_SERVICE);
+1 −18
Original line number Diff line number Diff line
@@ -274,7 +274,7 @@ public class InstalledAppDetails extends AppInfoBase
        // We don't allow uninstalling DO/PO on *any* users, because if it's a system app,
        // "uninstall" is actually "downgrade to the system version + disable", and "downgrade"
        // will clear data on all users.
        if (isProfileOrDeviceOwner(mPackageInfo.packageName)) {
        if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) {
            enabled = false;
        }

@@ -349,23 +349,6 @@ public class InstalledAppDetails extends AppInfoBase
        return enabled;
    }

    /** Returns if the supplied package is device owner or profile owner of at least one user */
    private boolean isProfileOrDeviceOwner(String packageName) {
        List<UserInfo> userInfos = mUserManager.getUsers();
        DevicePolicyManager dpm = (DevicePolicyManager)
                getContext().getSystemService(Context.DEVICE_POLICY_SERVICE);
        if (dpm.isDeviceOwnerAppOnAnyUser(packageName)) {
            return true;
        }
        for (UserInfo userInfo : userInfos) {
            ComponentName cn = dpm.getProfileOwnerAsUser(userInfo.id);
            if (cn != null && cn.getPackageName().equals(packageName)) {
                return true;
            }
        }
        return false;
    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
+1 −16
Original line number Diff line number Diff line
@@ -381,7 +381,7 @@ public class AppButtonsPreferenceController extends AbstractPreferenceController
        // We don't allow uninstalling DO/PO on *any* users, because if it's a system app,
        // "uninstall" is actually "downgrade to the system version + disable", and "downgrade"
        // will clear data on all users.
        if (isProfileOrDeviceOwner(mPackageInfo.packageName)) {
        if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) {
            enabled = false;
        }

@@ -581,21 +581,6 @@ public class AppButtonsPreferenceController extends AbstractPreferenceController
                || (mUserManager.isSplitSystemUser() && userCount == 2);
    }

    /** Returns if the supplied package is device owner or profile owner of at least one user */
    private boolean isProfileOrDeviceOwner(String packageName) {
        List<UserInfo> userInfos = mUserManager.getUsers();
        if (mDpm.isDeviceOwnerAppOnAnyUser(packageName)) {
            return true;
        }
        for (int i = 0, size = userInfos.size(); i < size; i++) {
            ComponentName cn = mDpm.getProfileOwnerAsUser(userInfos.get(i).id);
            if (cn != null && cn.getPackageName().equals(packageName)) {
                return true;
            }
        }
        return false;
    }

    private final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
+17 −3
Original line number Diff line number Diff line
@@ -15,17 +15,22 @@
package com.android.settings.fuelgauge;

import android.app.AppOpsManager;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.util.Log;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settingslib.core.AbstractPreferenceController;

/**
@@ -39,14 +44,20 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo

    private final PackageManager mPackageManager;
    private final AppOpsManager mAppOpsManager;
    private final UserManager mUserManager;
    private final String[] mPackages;
    private final int mUid;
    @VisibleForTesting
    DevicePolicyManagerWrapper mDpm;

    private String mTargetPackage;

    public BackgroundActivityPreferenceController(Context context, int uid) {
        super(context);
        mPackageManager = context.getPackageManager();
        mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
        mDpm = new DevicePolicyManagerWrapperImpl(
                (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE));
        mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
        mUid = uid;
        mPackages = mPackageManager.getPackagesForUid(mUid);
@@ -56,12 +67,15 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
    public void updateState(Preference preference) {
        final int mode = mAppOpsManager
                .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, mUid, mTargetPackage);
        if (mode == AppOpsManager.MODE_ERRORED) {
            preference.setEnabled(false);
        } else {
        // Set checked or not before we may set it disabled
        if (mode != AppOpsManager.MODE_ERRORED) {
            final boolean checked = mode != AppOpsManager.MODE_IGNORED;
            ((SwitchPreference) preference).setChecked(checked);
        }
        if (mode == AppOpsManager.MODE_ERRORED
                || Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mTargetPackage)) {
            preference.setEnabled(false);
        }

        updateSummary(preference);
    }
Loading