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

Commit 00cc0275 authored by Benjamin Franz's avatar Benjamin Franz
Browse files

Do not allow force stopping protected packages

Bug: 75997475
Test: make RunSettingsRoboTests
Test: manual
Change-Id: I0670f6f0afbc603d8ac61711cfefec2b1fc4b43b
parent a976a0ea
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -283,6 +283,10 @@ public class AppActionButtonPreferenceController extends BasePreferenceControlle
            // User can't force stop device admin.
            Log.w(TAG, "User can't force stop device admin");
            updateForceStopButton(false);
        } else if (mPm.isPackageStateProtected(packageInfo.packageName,
            UserHandle.getUserId(appEntry.info.uid))) {
            Log.w(TAG, "User can't force stop protected packages");
            updateForceStopButton(false);
        } else if (AppUtils.isInstant(packageInfo.applicationInfo)) {
            updateForceStopButton(false);
            mActionButtons.setButton2Visible(false);
+23 −0
Original line number Diff line number Diff line
@@ -79,6 +79,8 @@ public class AppActionButtonPreferenceControllerTest {
    private AppInfoDashboardFragment mFragment;
    @Mock
    private ApplicationInfo mAppInfo;
    @Mock
    private PackageManager mPackageManager;

    private Context mContext;
    private AppActionButtonPreferenceController mController;
@@ -95,7 +97,9 @@ public class AppActionButtonPreferenceControllerTest {
        ReflectionHelpers.setField(mController, "mDpm", mDevicePolicyManager);
        ReflectionHelpers.setField(mController, "mApplicationFeatureProvider",
                mFeatureFactory.applicationFeatureProvider);
        ReflectionHelpers.setField(mController, "mPm", mPackageManager);
        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
        when(mContext.getPackageManager()).thenReturn(mPackageManager);
        final PackageInfo packageInfo = mock(PackageInfo.class);
        packageInfo.applicationInfo = mAppInfo;
        when(mFragment.getPackageInfo()).thenReturn(packageInfo);
@@ -213,6 +217,25 @@ public class AppActionButtonPreferenceControllerTest {
        verify(mController.mActionButtons).setButton2Visible(false);
    }

    @Test
    public void checkForceStop_isStateProtected_shouldDisableForceStop() {
        ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
            (InstantAppDataProvider) (i -> false));
        final String packageName = "Package1";
        final PackageInfo packageInfo = new PackageInfo();
        packageInfo.packageName = packageName;
        final ApplicationInfo appInfo = new ApplicationInfo();
        appInfo.uid = 42;
        appInfo.sourceDir = "source";
        final ApplicationsState.AppEntry appEntry = new ApplicationsState.AppEntry(
            mContext, appInfo, 0);
        when(mPackageManager.isPackageStateProtected(packageName, 0)).thenReturn(true);

        mController.checkForceStop(appEntry, packageInfo);

        verify(mController.mActionButtons).setButton2Enabled(false);
    }

    @Test
    public void checkForceStop_hasActiveAdmin_shouldDisableForceStop() {
        ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",