Do not allow force stopping protected packages
Bug: 75997475
Test: make RunSettingsRoboTests
Test: manual
Change-Id: I0670f6f0afbc603d8ac61711cfefec2b1fc4b43b
diff --git a/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java b/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java
index 130138c..6e978dc 100644
--- a/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java
@@ -283,6 +283,10 @@
// 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);
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceControllerTest.java
index d7c2964..e571521 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceControllerTest.java
@@ -79,6 +79,8 @@
private AppInfoDashboardFragment mFragment;
@Mock
private ApplicationInfo mAppInfo;
+ @Mock
+ private PackageManager mPackageManager;
private Context mContext;
private AppActionButtonPreferenceController mController;
@@ -95,7 +97,9 @@
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);
@@ -214,6 +218,25 @@
}
@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",
(InstantAppDataProvider) (i -> false));