Prevent the disabling of specified apps
Prevent the disabling of specified apps, avoiding cases
where disabling the app may result in an unusable system.
Bug: 200043113
Test: make RunSettingsRoboTests ROBOTEST_FILTER=ApplicationFeatureProviderImplTest
Change-Id: I0b298af76cec20e4f31ec7411bbf3200a2869035
Merged-In: I0b298af76cec20e4f31ec7411bbf3200a2869035
diff --git a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
index 80d3947..371326c 100644
--- a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
+++ b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
@@ -30,6 +30,7 @@
import android.content.pm.UserInfo;
import android.location.LocationManager;
import android.os.RemoteException;
+import android.os.SystemConfigManager;
import android.os.UserManager;
import android.service.euicc.EuiccService;
import android.telecom.DefaultDialerManager;
@@ -54,6 +55,8 @@
private final IPackageManager mPms;
private final DevicePolicyManager mDpm;
private final UserManager mUm;
+ private final SystemConfigManager mSystemConfigManager;
+
/** Flags to use when querying PackageManager for Euicc component implementations. */
private static final int EUICC_QUERY_FLAGS =
PackageManager.MATCH_SYSTEM_ONLY | PackageManager.MATCH_DEBUG_TRIAGED_MISSING
@@ -66,6 +69,7 @@
mPms = pms;
mDpm = dpm;
mUm = UserManager.get(mContext);
+ mSystemConfigManager = context.getSystemService(SystemConfigManager.class);
}
@Override
@@ -167,6 +171,7 @@
if (locationHistoryPackage != null) {
keepEnabledPackages.add(locationHistoryPackage);
}
+ keepEnabledPackages.addAll(mSystemConfigManager.getPreventUserDisablePackages());
return keepEnabledPackages;
}
diff --git a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
index 7044389..5fef809 100644
--- a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
@@ -35,6 +35,7 @@
import android.content.pm.UserInfo;
import android.location.LocationManager;
import android.os.Build;
+import android.os.SystemConfigManager;
import android.os.UserHandle;
import android.os.UserManager;
@@ -76,6 +77,9 @@
private final String PERMISSION = "some.permission";
+ private final List<String> PREVENT_USER_DISABLE_PACKAGES = List.of(
+ "prevent.disable.package1", "prevent.disable.package2", "prevent.disable.package3");
+
@Mock
private UserManager mUserManager;
@Mock
@@ -88,6 +92,8 @@
private DevicePolicyManager mDevicePolicyManager;
@Mock
private LocationManager mLocationManager;
+ @Mock
+ private SystemConfigManager mSystemConfigManager;
private ApplicationFeatureProvider mProvider;
@@ -101,6 +107,7 @@
when(mContext.getApplicationContext()).thenReturn(mContext);
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
when(mContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager);
+ when(mContext.getSystemService(SystemConfigManager.class)).thenReturn(mSystemConfigManager);
mProvider = new ApplicationFeatureProviderImpl(mContext, mPackageManager,
mPackageManagerService, mDevicePolicyManager);
@@ -356,6 +363,16 @@
assertThat(allowlist).contains("com.android.packageinstaller");
}
+ @Test
+ public void getKeepEnabledPackages_shouldContainPreventUserDisablePackages() {
+ when(mSystemConfigManager.getPreventUserDisablePackages())
+ .thenReturn(PREVENT_USER_DISABLE_PACKAGES);
+
+ final Set<String> keepEnabledPackages = mProvider.getKeepEnabledPackages();
+
+ assertThat(keepEnabledPackages).containsAtLeastElementsIn(PREVENT_USER_DISABLE_PACKAGES);
+ }
+
private void setUpUsersAndInstalledApps() {
when(mUserManager.getProfiles(UserHandle.myUserId())).thenReturn(Arrays.asList(
new UserInfo(MAIN_USER_ID, "main", UserInfo.FLAG_ADMIN),