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

Commit 03bde3d8 authored by Edward Savage-Jones's avatar Edward Savage-Jones Committed by Chris Antol
Browse files

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

(cherry picked from https://android-review.googlesource.com/q/commit:e6279dd6a20ee254bab9a66e545b9dbaf1895db0)
Change-Id: I0b298af76cec20e4f31ec7411bbf3200a2869035
parent d4d9c4fe
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.content.pm.ServiceInfo;
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;
@@ -58,6 +59,8 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
    private final DevicePolicyManager mDpm;
    private final UserManager mUm;
    private final WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;
    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
@@ -75,6 +78,7 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
        mDpm = dpm;
        mUm = UserManager.get(mContext);
        mWebViewUpdateServiceWrapper = wvusWrapper;
        mSystemConfigManager = context.getSystemService(SystemConfigManager.class);
    }

    @Override
@@ -184,6 +188,7 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
        if (locationHistoryPackage != null) {
            keepEnabledPackages.add(locationHistoryPackage);
        }
        keepEnabledPackages.addAll(mSystemConfigManager.getPreventUserDisablePackages());
        return keepEnabledPackages;
    }

+17 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.content.pm.ResolveInfo;
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;
import android.platform.test.annotations.RequiresFlagsDisabled;
@@ -89,6 +90,9 @@ public final class ApplicationFeatureProviderImplTest {

    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
@@ -103,6 +107,8 @@ public final class ApplicationFeatureProviderImplTest {
    private LocationManager mLocationManager;
    @Mock
    private WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;
    @Mock
    private SystemConfigManager mSystemConfigManager;

    private ApplicationFeatureProvider mProvider;

@@ -116,6 +122,7 @@ public final class ApplicationFeatureProviderImplTest {
        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, mWebViewUpdateServiceWrapper);
@@ -395,6 +402,16 @@ public final class ApplicationFeatureProviderImplTest {
        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),