From 00cc0275347de4b6f72b318970e2334e86938536 Mon Sep 17 00:00:00 2001 From: Benjamin Franz Date: Thu, 22 Mar 2018 11:16:07 +0000 Subject: [PATCH] Do not allow force stopping protected packages Bug: 75997475 Test: make RunSettingsRoboTests Test: manual Change-Id: I0670f6f0afbc603d8ac61711cfefec2b1fc4b43b --- .../AppActionButtonPreferenceController.java | 4 ++++ .../AppActionButtonPreferenceControllerTest.java | 23 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java b/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java index 130138c376..6e978dcbc7 100644 --- a/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java @@ -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); 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 d7c2964f3c..e571521fc6 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 @@ 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); @@ -214,6 +218,25 @@ public class AppActionButtonPreferenceControllerTest { } @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)); -- 2.11.0