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

Commit cb77823b authored by Lei Yu's avatar Lei Yu
Browse files

Update the restrict app list

Before this cl, we use getPackagesForOps() to populate restrict app
list. However in that API not all the apps are currently restricted,
so in this cl we filter out all the allowed apps.

Bug: 73085780
Test: RunSettingsRoboTest
Change-Id: Ia7c1eb95b07a1a0d203b394eb64dcd98d25bd561
parent f11976d8
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -67,17 +67,26 @@ public class RestrictAppPreferenceController extends BasePreferenceController {

        final List<AppOpsManager.PackageOps> packageOpsList = mAppOpsManager.getPackagesForOps(
                new int[]{AppOpsManager.OP_RUN_ANY_IN_BACKGROUND});
        final int num = CollectionUtils.size(packageOpsList);
        mAppInfos = new ArrayList<>();

        for (int i = 0; i < num; i++) {
        for (int i = 0, size = CollectionUtils.size(packageOpsList); i < size; i++) {
            final AppOpsManager.PackageOps packageOps = packageOpsList.get(i);
            final List<AppOpsManager.OpEntry> entries = packageOps.getOps();
            for (int j = 0; j < entries.size(); j++) {
                AppOpsManager.OpEntry ent = entries.get(j);
                if (ent.getOp() != AppOpsManager.OP_RUN_ANY_IN_BACKGROUND) {
                    continue;
                }
                if (ent.getMode() != AppOpsManager.MODE_ALLOWED) {
                    mAppInfos.add(new AppInfo.Builder()
                            .setPackageName(packageOps.getPackageName())
                            .setUid(packageOps.getUid())
                            .build());
                }
            }
        }

        final int num = mAppInfos.size();
        // Enable the preference if some apps already been restricted, otherwise disable it
        preference.setEnabled(num > 0);
        preference.setSummary(
+32 −7
Original line number Diff line number Diff line
@@ -18,7 +18,9 @@ package com.android.settings.fuelgauge;

import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT;
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
@@ -47,11 +49,17 @@ import java.util.List;

@RunWith(RobolectricTestRunner.class)
public class RestrictAppPreferenceControllerTest {
    private static final int ALLOWED_UID = 111;
    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";

    @Mock
    private AppOpsManager mAppOpsManager;
    @Mock
    private AppOpsManager.PackageOps mPackageOps;
    private AppOpsManager.PackageOps mRestrictedPackageOps;
    @Mock
    private AppOpsManager.PackageOps mAllowedPackageOps;
    @Mock
    private SettingsActivity mSettingsActivity;
    @Mock
@@ -65,6 +73,21 @@ public class RestrictAppPreferenceControllerTest {
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        final AppOpsManager.OpEntry allowOpEntry = new AppOpsManager.OpEntry(
                AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_ALLOWED, 0, 0, 0, 0, "");
        final List<AppOpsManager.OpEntry> allowOps = new ArrayList<>();
        allowOps.add(allowOpEntry);
        final AppOpsManager.OpEntry restrictedOpEntry = new AppOpsManager.OpEntry(
                AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_IGNORED, 0, 0, 0, 0, "");
        final List<AppOpsManager.OpEntry> restrictedOps = new ArrayList<>();
        restrictedOps.add(restrictedOpEntry);
        doReturn(ALLOWED_UID).when(mAllowedPackageOps).getUid();
        doReturn(ALLOWED_PACKAGE_NAME).when(mAllowedPackageOps).getPackageName();
        doReturn(allowOps).when(mAllowedPackageOps).getOps();
        doReturn(RESTRICTED_UID).when(mRestrictedPackageOps).getUid();
        doReturn(RESTRICTED_PACKAGE_NAME).when(mRestrictedPackageOps).getPackageName();
        doReturn(restrictedOps).when(mRestrictedPackageOps).getOps();

        mContext = spy(RuntimeEnvironment.application);
        doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
        doReturn(mContext).when(mSettingsActivity).getApplicationContext();
@@ -77,7 +100,7 @@ public class RestrictAppPreferenceControllerTest {

    @Test
    public void testUpdateState_oneApp_showCorrectSummary() {
        mPackageOpsList.add(mPackageOps);
        mPackageOpsList.add(mRestrictedPackageOps);
        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());

        mRestrictAppPreferenceController.updateState(mPreference);
@@ -86,9 +109,10 @@ public class RestrictAppPreferenceControllerTest {
    }

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

        mRestrictAppPreferenceController.updateState(mPreference);
@@ -97,7 +121,8 @@ public class RestrictAppPreferenceControllerTest {
    }

    @Test
    public void testUpdateState_zeroApp_disabled() {
    public void testUpdateState_zeroRestrictApp_disabled() {
        mPackageOpsList.add(mAllowedPackageOps);
        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());

        mRestrictAppPreferenceController.updateState(mPreference);