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

Commit 1e0b1c30 authored by Massimo Carli's avatar Massimo Carli
Browse files

[3/n] Add cache to PackageManager#getActivityInfo usage

Flag: com.android.window.flags.enable_modals_fullscreen_with_permission
Bug: 394714626
Test: atest WMShellUnitTests:DesktopModeCompatPolicyTest

Change-Id: I29ccc7acdc6ebdf045e1850be833059cc1f6430d
parent 187cdb2e
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ class DesktopModeCompatPolicy(private val context: Context) {
        get() = context.getPackageManager()
    private val defaultHomePackage: String?
        get() = pkgManager.getHomeActivities(ArrayList())?.packageName
    private val packageInfoCache = mutableMapOf<String, Boolean>()


    /**
     * If the top activity should be exempt from desktop windowing and forced back to fullscreen.
@@ -94,7 +96,8 @@ class DesktopModeCompatPolicy(private val context: Context) {
            if (packageName == null) {
                return false
            }
            return try {
            return packageInfoCache.getOrPut(packageName) {
                try {
                    val packageInfo = pkgManager.getPackageInfo(
                        packageName,
                        PackageManager.GET_PERMISSIONS
@@ -104,6 +107,7 @@ class DesktopModeCompatPolicy(private val context: Context) {
                    false // Package not found
                }
            }
        }
        // If the flag is disabled we make this condition neutral.
        return true
    }
+28 −0
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ import org.mockito.ArgumentMatchers.anyString
import org.mockito.kotlin.any
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever

/**
@@ -110,6 +112,32 @@ class DesktopModeCompatPolicyTest : ShellTestCase() {
                }))
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MODALS_FULLSCREEN_WITH_PERMISSION)
    fun testIsTopActivityExemptCachedPermissionCheckIsUsed() {
        allowOverlayPermission(arrayOf())
        assertFalse(desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(
            createFreeformTask(/* displayId */ 0)
                .apply {
                    isActivityStackTransparent = true
                    isTopActivityNoDisplay = false
                    numActivities = 1
                    baseActivity = baseActivityTest
                }))
        assertFalse(desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(
            createFreeformTask(/* displayId */ 0)
                .apply {
                    isActivityStackTransparent = true
                    isTopActivityNoDisplay = false
                    numActivities = 1
                    baseActivity = baseActivityTest
                }))
        verify(packageManager, times(1)).getPackageInfo(
            eq("com.test.dummypackage"),
            eq(PackageManager.GET_PERMISSIONS)
        )
    }

    @Test
    fun testIsTopActivityExemptFromDesktopWindowing_noActivitiesInStack() {
        assertFalse(desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(