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

Commit 699445c2 authored by Joao Victor Mendes Freire's avatar Joao Victor Mendes Freire
Browse files

Stop checking for supervision packages when supervision is not enabled.

Flag: android.content.pm.protect_supervision_packages
Bug: 417794960
Test: atest FrameworksMockingServicesTests:com.android.server.pm.ProtectedPackagesMockedTest
Change-Id: I3283d1f79eb1e60b2841f96d03cad3cf545fddce
parent f6d67a27
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.pm;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.role.RoleManager;
import android.app.supervision.SupervisionManager;
import android.content.Context;
import android.content.pm.Flags;
import android.os.Binder;
@@ -190,6 +191,11 @@ public class ProtectedPackages {

    /** Query the packages with supervision related roles. */
    private boolean isSupervisionPackage(@UserIdInt int userId, String packageName) {
        SupervisionManager supervisionManager = mContext.getSystemService(SupervisionManager.class);
        if (supervisionManager == null || !supervisionManager.isSupervisionEnabled()) {
            Slog.w(TAG, "Supervision is not enabled.");
            return false;
        }
        final RoleManager roleManager = mContext.getSystemService(RoleManager.class);
        if (roleManager == null) {
            Slog.w(TAG, "Failed to get RoleManager. Assuming package isn't role holder.");
+36 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.pm

import android.app.role.RoleManager
import android.app.supervision.SupervisionManager
import android.content.pm.Flags
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
@@ -48,6 +49,8 @@ open class ProtectedPackagesMockedTest {

    @Mock lateinit var roleManager: RoleManager

    @Mock lateinit var supervisionManager: SupervisionManager

    lateinit var protectedPackages: ProtectedPackages

    @Before
@@ -61,6 +64,9 @@ open class ProtectedPackagesMockedTest {
            .thenReturn(listOf(SUPERVISION_PKG))
        whenever(rule.mocks().context.getSystemService(RoleManager::class.java))
            .thenReturn(roleManager)
        whenever(supervisionManager.isSupervisionEnabled()).thenReturn(true)
        whenever(rule.mocks().context.getSystemService(SupervisionManager::class.java))
            .thenReturn(supervisionManager)
        protectedPackages = ProtectedPackages(rule.mocks().context)
    }

@@ -100,6 +106,20 @@ open class ProtectedPackagesMockedTest {
        assertThat(dataProtected).isFalse()
    }

    @Test
    @Throws(Exception::class)
    @EnableFlags(Flags.FLAG_PROTECT_SUPERVISION_PACKAGES)
    fun testIsPackageProtected_supervisionDisabled_flagEnabled_returnsFalse() {
        whenever(supervisionManager.isSupervisionEnabled()).thenReturn(false)

        val stateProtected =
            protectedPackages.isPackageStateProtected(TEST_USER_ID, SUPERVISION_PKG)
        val dataProtected = protectedPackages.isPackageDataProtected(TEST_USER_ID, SUPERVISION_PKG)

        assertThat(stateProtected).isFalse()
        assertThat(dataProtected).isFalse()
    }

    @Test
    @Throws(Exception::class)
    @EnableFlags(Flags.FLAG_PROTECT_SUPERVISION_PACKAGES)
@@ -115,6 +135,22 @@ open class ProtectedPackagesMockedTest {
        assertThat(dataProtected).isFalse()
    }

    @Test
    @Throws(Exception::class)
    @EnableFlags(Flags.FLAG_PROTECT_SUPERVISION_PACKAGES)
    /* This case should not happen. Is is covered here for completeness. */
    fun testIsPackageProtected_missingSupervisionManager_flagEnabled_returnsFalse() {
        whenever(rule.mocks().context.getSystemService(SupervisionManager::class.java))
            .thenReturn(null)

        val stateProtected =
            protectedPackages.isPackageStateProtected(TEST_USER_ID, SUPERVISION_PKG)
        val dataProtected = protectedPackages.isPackageDataProtected(TEST_USER_ID, SUPERVISION_PKG)

        assertThat(stateProtected).isFalse()
        assertThat(dataProtected).isFalse()
    }

    @Test
    @Throws(Exception::class)
    @DisableFlags(Flags.FLAG_PROTECT_SUPERVISION_PACKAGES)