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

Commit 1c114a56 authored by Ben Lin's avatar Ben Lin Committed by Android (Google) Code Review
Browse files

Merge "Exempt activity from showing app handle if home is not ready/available." into main

parents 55452433 52f93b93
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ class DesktopModeCompatPolicy(private val context: Context) {
        numActivities: Int, isTopActivityNoDisplay: Boolean, isActivityStackTransparent: Boolean) =
        DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue
                && ((isSystemUiTask(packageName)
                || isPartOfDefaultHomePackage(packageName)
                || isPartOfDefaultHomePackageOrNoHomeAvailable(packageName)
                || isTransparentTask(isActivityStackTransparent, numActivities))
                && !isTopActivityNoDisplay)

@@ -85,10 +85,11 @@ class DesktopModeCompatPolicy(private val context: Context) {
    private fun isSystemUiTask(packageName: String?) = packageName == systemUiPackage

    /**
     * Returns true if the tasks base activity is part of the default home package.
     * Returns true if the tasks base activity is part of the default home package, or there is
     * currently no default home package available.
     */
    private fun isPartOfDefaultHomePackage(packageName: String?) =
        packageName != null && packageName == defaultHomePackage
    private fun isPartOfDefaultHomePackageOrNoHomeAvailable(packageName: String?) =
        defaultHomePackage == null || (packageName != null && packageName == defaultHomePackage)

    private fun isAnyForceConsumptionFlagsEnabled(): Boolean =
        DesktopModeFlags.ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS.isTrue
+10 −2
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import android.os.UserManager
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.FlagsParameterization
import android.testing.TestableContext
import android.view.Display.DEFAULT_DISPLAY
import android.view.DragEvent
import android.view.Gravity
@@ -147,6 +148,7 @@ import com.android.wm.shell.transition.TestRemoteTransition
import com.android.wm.shell.transition.Transitions
import com.android.wm.shell.transition.Transitions.ENABLE_SHELL_TRANSITIONS
import com.android.wm.shell.transition.Transitions.TransitionHandler
import com.android.wm.shell.windowdecor.DesktopModeWindowDecorViewModelTestsBase.Companion.HOME_LAUNCHER_PACKAGE_NAME
import com.android.wm.shell.windowdecor.DesktopModeWindowDecoration
import com.android.wm.shell.windowdecor.tiling.DesktopTilingDecorViewModel
import com.google.common.truth.Truth.assertThat
@@ -186,7 +188,6 @@ import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.argThat
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.atLeastOnce
import org.mockito.kotlin.capture
import org.mockito.kotlin.eq
import org.mockito.kotlin.whenever
import org.mockito.quality.Strictness
@@ -256,6 +257,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
    @Mock private lateinit var desksOrganizer: DesksOrganizer
    @Mock private lateinit var userProfileContexts: UserProfileContexts
    @Mock private lateinit var desksTransitionsObserver: DesksTransitionObserver
    @Mock private lateinit var packageManager: PackageManager

    private lateinit var controller: DesktopTasksController
    private lateinit var shellInit: ShellInit
@@ -265,6 +267,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
    private lateinit var recentsTransitionStateListener: RecentsTransitionStateListener
    private lateinit var testScope: CoroutineScope
    private lateinit var desktopModeCompatPolicy: DesktopModeCompatPolicy
    private lateinit var spyContext: TestableContext

    private val shellExecutor = TestShellExecutor()

@@ -281,6 +284,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
    private val UNRESIZABLE_LANDSCAPE_BOUNDS = Rect(25, 449, 1575, 1611)
    private val UNRESIZABLE_PORTRAIT_BOUNDS = Rect(830, 75, 1730, 1275)
    private val wallpaperToken = MockToken().token()
    private val homeComponentName = ComponentName(HOME_LAUNCHER_PACKAGE_NAME, /* class */ "")

    @Before
    fun setUp() {
@@ -294,6 +298,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        doReturn(true).`when` { DesktopModeStatus.canEnterDesktopMode(any()) }

        testScope = CoroutineScope(Dispatchers.Unconfined + SupervisorJob())
        spyContext = spy(mContext)
        shellInit = spy(ShellInit(testExecutor))
        userRepositories =
            DesktopUserRepositories(
@@ -315,7 +320,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
                mContext,
                mockHandler,
            )
        desktopModeCompatPolicy = spy(DesktopModeCompatPolicy(context))
        desktopModeCompatPolicy = spy(DesktopModeCompatPolicy(spyContext))

        whenever(shellTaskOrganizer.getRunningTasks(anyInt())).thenAnswer { runningTasks }
        whenever(transitions.startTransition(anyInt(), any(), isNull())).thenAnswer { Binder() }
@@ -373,6 +378,9 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        taskRepository = userRepositories.current
        taskRepository.addDesk(displayId = DEFAULT_DISPLAY, deskId = DEFAULT_DISPLAY)
        taskRepository.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = DEFAULT_DISPLAY)

        spyContext.setMockPackageManager(packageManager)
        whenever(packageManager.getHomeActivities(ArrayList())).thenReturn(homeComponentName)
    }

    private fun createController() =
+13 −1
Original line number Diff line number Diff line
@@ -16,9 +16,12 @@

package com.android.wm.shell.desktopmode.compatui

import android.content.ComponentName
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Binder
import android.testing.AndroidTestingRunner
import android.testing.TestableContext
import android.view.SurfaceControl
import android.view.WindowManager.TRANSIT_CHANGE
import android.view.WindowManager.TRANSIT_CLOSE
@@ -37,6 +40,7 @@ import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.transition.TransitionInfoBuilder
import com.android.wm.shell.transition.Transitions
import com.android.wm.shell.windowdecor.DesktopModeWindowDecorViewModelTestsBase.Companion.HOME_LAUNCHER_PACKAGE_NAME
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
@@ -44,6 +48,7 @@ import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
import org.mockito.kotlin.spy
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever

@@ -62,16 +67,23 @@ class SystemModalsTransitionHandlerTest : ShellTestCase() {
    private val desktopRepository = mock<DesktopRepository>()
    private val startT = mock<SurfaceControl.Transaction>()
    private val finishT = mock<SurfaceControl.Transaction>()
    private val packageManager = mock<PackageManager>()
    private val componentName = mock<ComponentName>()

    private lateinit var spyContext: TestableContext
    private lateinit var transitionHandler: SystemModalsTransitionHandler
    private lateinit var desktopModeCompatPolicy: DesktopModeCompatPolicy

    @Before
    fun setUp() {
        spyContext = spy(mContext)
        // Simulate having one Desktop task so that we see Desktop Mode as active
        whenever(desktopUserRepositories.current).thenReturn(desktopRepository)
        whenever(desktopRepository.getVisibleTaskCount(anyInt())).thenReturn(1)
        desktopModeCompatPolicy = DesktopModeCompatPolicy(context)
        whenever(spyContext.packageManager).thenReturn(packageManager)
        whenever(componentName.packageName).thenReturn(HOME_LAUNCHER_PACKAGE_NAME)
        whenever(packageManager.getHomeActivities(ArrayList())).thenReturn(componentName)
        desktopModeCompatPolicy = DesktopModeCompatPolicy(spyContext)
        transitionHandler = createTransitionHandler()
    }

+20 −8
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.internal.R
import com.android.window.flags.Flags
import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.desktopmode.DesktopTestHelpers.createFreeformTask
import com.android.wm.shell.windowdecor.DesktopModeWindowDecorViewModelTestsBase.Companion.HOME_LAUNCHER_PACKAGE_NAME
import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges
import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges
import org.junit.Assert.assertFalse
@@ -52,10 +53,14 @@ import org.mockito.kotlin.whenever
class DesktopModeCompatPolicyTest : ShellTestCase() {
    @get:Rule val compatRule = PlatformCompatChangeRule()
    private lateinit var desktopModeCompatPolicy: DesktopModeCompatPolicy
    private val packageManager: PackageManager = mock()
    private val homeActivities = ComponentName(HOME_LAUNCHER_PACKAGE_NAME, /* class */ "")

    @Before
    fun setUp() {
        desktopModeCompatPolicy = DesktopModeCompatPolicy(mContext)
        whenever(packageManager.getHomeActivities(any())).thenReturn(homeActivities)
        mContext.setMockPackageManager(packageManager)
    }

    @Test
@@ -128,10 +133,6 @@ class DesktopModeCompatPolicyTest : ShellTestCase() {

    @Test
    fun testIsTopActivityExemptFromDesktopWindowing_defaultHomePackage() {
        val packageManager: PackageManager = mock()
        val homeActivities = ComponentName("defaultHomePackage", /* class */ "")
        whenever(packageManager.getHomeActivities(any())).thenReturn(homeActivities)
        mContext.setMockPackageManager(packageManager)
        assertTrue(desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(
            createFreeformTask(/* displayId */ 0)
                .apply {
@@ -142,10 +143,6 @@ class DesktopModeCompatPolicyTest : ShellTestCase() {

    @Test
    fun testIsTopActivityExemptFromDesktopWindowing_defaultHomePackage_notDisplayed() {
        val packageManager: PackageManager = mock()
        val homeActivities = ComponentName("defaultHomePackage", /* class */ "")
        whenever(packageManager.getHomeActivities(any())).thenReturn(homeActivities)
        mContext.setMockPackageManager(packageManager)
        assertFalse(desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(
            createFreeformTask(/* displayId */ 0)
                .apply {
@@ -154,6 +151,21 @@ class DesktopModeCompatPolicyTest : ShellTestCase() {
                }))
    }

    @Test
    fun testIsTopActivityExemptFromDesktopWindowing_defaultHomePackage_notYetAvailable() {
        val emptyHomeActivities: ComponentName = mock()
        mContext.setMockPackageManager(packageManager)

        whenever(emptyHomeActivities.packageName).thenReturn(null)
        whenever(packageManager.getHomeActivities(any())).thenReturn(emptyHomeActivities)

        assertTrue(desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(
            createFreeformTask(/* displayId */ 0)
                .apply {
                    isTopActivityNoDisplay = false
                }))
    }

    @Test
    @EnableFlags(Flags.FLAG_EXCLUDE_CAPTION_FROM_APP_BOUNDS)
    @DisableCompatChanges(ActivityInfo.INSETS_DECOUPLED_CONFIGURATION_ENFORCED)
+1 −6
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.Intent.ACTION_MAIN
import android.content.pm.PackageManager
import android.graphics.Rect
import android.graphics.Region
import android.hardware.display.DisplayManager
@@ -310,14 +309,10 @@ class DesktopModeWindowDecorViewModelTests : DesktopModeWindowDecorViewModelTest
    @Test
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY)
    fun testDecorationIsNotCreatedForDefaultHomePackage() {
        val packageManager: PackageManager = org.mockito.kotlin.mock()
        val homeActivities = ComponentName("defaultHomePackage", /* class */ "")
        val task = createTask(windowingMode = WINDOWING_MODE_FULLSCREEN).apply {
            baseActivity = homeActivities
            baseActivity = homeComponentName
            isTopActivityNoDisplay = false
        }
        mContext.setMockPackageManager(packageManager)
        whenever(packageManager.getHomeActivities(any())).thenReturn(homeActivities)

        onTaskOpening(task)

Loading