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

Commit e4acd96a authored by Massimo Carli's avatar Massimo Carli Committed by Android (Google) Code Review
Browse files

Merge "[3/n] Add cache to PackageManager#getActivityInfo usage" into main

parents bd26f06e 1e0b1c30
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(