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

Commit 54645492 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Only show restricted apps that belong to the user." into pi-dev

parents 2d230e14 37d29ee6
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.settings.fuelgauge;

import android.app.AppOpsManager;
import android.content.Context;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;

@@ -38,14 +40,17 @@ public class RestrictAppPreferenceController extends BasePreferenceController {
    @VisibleForTesting
    static final String KEY_RESTRICT_APP = "restricted_app";

    @VisibleForTesting
    List<AppInfo> mAppInfos;
    private AppOpsManager mAppOpsManager;
    private List<AppInfo> mAppInfos;
    private SettingsActivity mSettingsActivity;
    private InstrumentedPreferenceFragment mPreferenceFragment;
    private UserManager mUserManager;

    public RestrictAppPreferenceController(Context context) {
        super(context, KEY_RESTRICT_APP);
        mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
        mUserManager = context.getSystemService(UserManager.class);
    }

    public RestrictAppPreferenceController(SettingsActivity settingsActivity,
@@ -64,7 +69,7 @@ public class RestrictAppPreferenceController extends BasePreferenceController {
    public void updateState(Preference preference) {
        super.updateState(preference);

        mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager);
        mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager);

        final int num = mAppInfos.size();
        // Enable the preference if some apps already been restricted, otherwise disable it
+4 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batterytip;

import android.app.AppOpsManager;
import android.content.Context;
import android.os.UserManager;
import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
@@ -35,12 +36,14 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
    private static final int ON = 1;
    private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
    private AppOpsManager mAppOpsManager;
    private UserManager mUserManager;

    public BatteryManagerPreferenceController(Context context) {
        super(context, KEY_BATTERY_MANAGER);
        mPowerUsageFeatureProvider = FeatureFactory.getFactory(
                context).getPowerUsageFeatureProvider(context);
        mAppOpsManager = context.getSystemService(AppOpsManager.class);
        mUserManager = context.getSystemService(UserManager.class);
    }

    @Override
@@ -51,7 +54,7 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager).size();
        final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager).size();
        final String setting = mPowerUsageFeatureProvider.isSmartBatterySupported()
                ? Settings.Global.APP_STANDBY_ENABLED
                : Settings.Global.APP_AUTO_RESTRICTION_ENABLED;
+8 −2
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.app.PendingIntent;
import android.app.StatsManager;
import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.annotation.NonNull;

import com.android.internal.util.CollectionUtils;
@@ -49,7 +51,9 @@ public class BatteryTipUtils {
     * Get a list of restricted apps with {@link AppOpsManager#OP_RUN_ANY_IN_BACKGROUND}
     */
    @NonNull
    public static List<AppInfo> getRestrictedAppsList(AppOpsManager appOpsManager) {
    public static List<AppInfo> getRestrictedAppsList(AppOpsManager appOpsManager,
            UserManager userManager) {
        final List<UserHandle> userHandles = userManager.getUserProfiles();
        final List<AppOpsManager.PackageOps> packageOpsList = appOpsManager.getPackagesForOps(
                new int[]{AppOpsManager.OP_RUN_ANY_IN_BACKGROUND});
        final List<AppInfo> appInfos = new ArrayList<>();
@@ -62,7 +66,9 @@ public class BatteryTipUtils {
                if (entry.getOp() != AppOpsManager.OP_RUN_ANY_IN_BACKGROUND) {
                    continue;
                }
                if (entry.getMode() != AppOpsManager.MODE_ALLOWED) {
                if (entry.getMode() != AppOpsManager.MODE_ALLOWED
                        && userHandles.contains(
                        new UserHandle(UserHandle.getUserId(packageOps.getUid())))) {
                    appInfos.add(new AppInfo.Builder()
                            .setPackageName(packageOps.getPackageName())
                            .setUid(packageOps.getUid())
+35 −1
Original line number Diff line number Diff line
@@ -29,11 +29,14 @@ import static org.mockito.Mockito.verify;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.v7.preference.Preference;

import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fuelgauge.batterytip.AppInfo;

import org.junit.Before;
import org.junit.Test;
@@ -53,6 +56,7 @@ public class RestrictAppPreferenceControllerTest {
    private static final String ALLOWED_PACKAGE_NAME = "com.android.allowed.package";
    private static final int RESTRICTED_UID = 222;
    private static final String RESTRICTED_PACKAGE_NAME = "com.android.restricted.package";
    private static final int OTHER_USER_UID = UserHandle.PER_USER_RANGE + RESTRICTED_UID;

    @Mock
    private AppOpsManager mAppOpsManager;
@@ -61,9 +65,13 @@ public class RestrictAppPreferenceControllerTest {
    @Mock
    private AppOpsManager.PackageOps mAllowedPackageOps;
    @Mock
    private AppOpsManager.PackageOps mOtherUserPackageOps;
    @Mock
    private SettingsActivity mSettingsActivity;
    @Mock
    private InstrumentedPreferenceFragment mFragment;
    @Mock
    private UserManager mUserManager;
    private List<AppOpsManager.PackageOps> mPackageOpsList;
    private RestrictAppPreferenceController mRestrictAppPreferenceController;
    private Preference mPreference;
@@ -87,15 +95,23 @@ public class RestrictAppPreferenceControllerTest {
        doReturn(RESTRICTED_UID).when(mRestrictedPackageOps).getUid();
        doReturn(RESTRICTED_PACKAGE_NAME).when(mRestrictedPackageOps).getPackageName();
        doReturn(restrictedOps).when(mRestrictedPackageOps).getOps();
        doReturn(OTHER_USER_UID).when(mOtherUserPackageOps).getUid();
        doReturn(RESTRICTED_PACKAGE_NAME).when(mOtherUserPackageOps).getPackageName();
        doReturn(restrictedOps).when(mOtherUserPackageOps).getOps();

        mContext = spy(RuntimeEnvironment.application);
        doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
        doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
        doReturn(mContext).when(mSettingsActivity).getApplicationContext();
        mRestrictAppPreferenceController =
                new RestrictAppPreferenceController(mSettingsActivity, mFragment);
        mPackageOpsList = new ArrayList<>();
        mPreference = new Preference(mContext);
        mPreference.setKey(mRestrictAppPreferenceController.getPreferenceKey());

        final List<UserHandle> userHandles = new ArrayList<>();
        userHandles.add(new UserHandle(0));
        doReturn(userHandles).when(mUserManager).getUserProfiles();
    }

    @Test
@@ -109,10 +125,11 @@ public class RestrictAppPreferenceControllerTest {
    }

    @Test
    public void testUpdateState_twoRestrictApps_showCorrectSummary() {
    public void testUpdateState_twoRestrictedAppsForPrimaryUser_showCorrectSummary() {
        mPackageOpsList.add(mRestrictedPackageOps);
        mPackageOpsList.add(mRestrictedPackageOps);
        mPackageOpsList.add(mAllowedPackageOps);
        mPackageOpsList.add(mOtherUserPackageOps);
        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());

        mRestrictAppPreferenceController.updateState(mPreference);
@@ -120,6 +137,23 @@ public class RestrictAppPreferenceControllerTest {
        assertThat(mPreference.getSummary()).isEqualTo("2 apps");
    }

    @Test
    public void testUpdateState_oneRestrictedAppForTwoUsers_showSummaryAndContainCorrectApp() {
        // Two packageOps share same package name but different uid.
        mPackageOpsList.add(mRestrictedPackageOps);
        mPackageOpsList.add(mOtherUserPackageOps);
        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());

        mRestrictAppPreferenceController.updateState(mPreference);

        assertThat(mPreference.getSummary()).isEqualTo("1 app");
        assertThat(mRestrictAppPreferenceController.mAppInfos).containsExactly(
                new AppInfo.Builder()
                        .setUid(RESTRICTED_UID)
                        .setPackageName(RESTRICTED_PACKAGE_NAME)
                        .build());
    }

    @Test
    public void testUpdateState_zeroRestrictApp_disabled() {
        mPackageOpsList.add(mAllowedPackageOps);