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

Commit 17c1aa57 authored by Ats Jenk's avatar Ats Jenk
Browse files

Have BubbleTaskStackListener ignore tasks entering split

If an activity is restarted, but it is moving from bubble to split, it
is continuing to use MULTI_WINDOW windowing mode.
Previously we were attempting to expand the bubble for this task.
Check if there is a parent task and if that parent task is one of the
split root tasks. If it is, skip opening the bubble for the task.

Bug: 396315875
Test: atest WMShellRobolectricTests:BubbleStackListenerTest
Test: atest WMShellMultivalentTestsOnDevice:BubbleTaskStackListenerTest
Flag: com.android.wm.shell.enable_create_any_bubble
Change-Id: I2dd135d4397cae0101fc0405a82d177ee34a14f1
parent c1331907
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -488,6 +488,7 @@ class BubbleControllerBubbleBarTest {
            BubbleResizabilityChecker(),
            HomeIntentProvider(context),
            FakeBubbleAppInfoProvider(),
            { Optional.empty() },
        )
    }

+1 −0
Original line number Diff line number Diff line
@@ -483,6 +483,7 @@ class BubbleControllerTest(flags: FlagsParameterization) {
                resizeChecker,
                HomeIntentProvider(context),
                FakeBubbleAppInfoProvider(),
                { Optional.empty() },
            )
        bubbleController.setInflateSynchronously(true)
        bubbleController.onInit()
+38 −0
Original line number Diff line number Diff line
@@ -37,16 +37,20 @@ import com.android.wm.shell.ShellTaskOrganizer
import com.android.wm.shell.bubbles.util.verifyExitBubbleTransaction
import com.android.wm.shell.taskview.TaskView
import com.android.wm.shell.taskview.TaskViewTaskController
import com.android.wm.shell.splitscreen.SplitScreenController
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.clearInvocations
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
import org.mockito.kotlin.stub
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyNoInteractions
import org.mockito.kotlin.whenever
import java.util.Optional

/**
 * Unit tests for [BubbleTaskStackListener].
@@ -73,9 +77,11 @@ class BubbleTaskStackListenerTest {
    }
    private val bubbleController = mock<BubbleController>()
    private val bubbleData = mock<BubbleData>()
    private val splitScreenController = mock<SplitScreenController>()
    private val bubbleTaskStackListener = BubbleTaskStackListener(
        bubbleController,
        bubbleData,
        { Optional.of(splitScreenController) },
    )
    private val bubbleTaskId = 123
    private val bubbleTaskToken = WindowContainerToken(mock<IWindowContainerToken> {
@@ -141,4 +147,36 @@ class BubbleTaskStackListenerTest {
        verify(taskOrganizer).setInterceptBackPressedOnTaskRoot(task.token, false /* intercept */)
        verify(taskViewTaskController).notifyTaskRemovalStarted(task)
    }

    @Test
    @EnableFlags(
        FLAG_ENABLE_CREATE_ANY_BUBBLE,
        FLAG_ENABLE_BUBBLE_ANYTHING,
        FLAG_EXCLUDE_TASK_FROM_RECENTS,
        FLAG_DISALLOW_BUBBLE_TO_ENTER_PIP,
    )
    fun onActivityRestartAttempt_inStackAppBubbleToSplit_doesNothing() {
        task.parentTaskId = 456
        bubbleData.stub {
            on { getBubbleInStackWithTaskId(bubbleTaskId) } doReturn bubble
        }

        splitScreenController.stub {
            on { isTaskRootOrStageRoot(456) } doReturn true
        }

        val taskViewTaskController = bubble.taskView.controller
        val taskOrganizer = taskViewTaskController.taskOrganizer
        clearInvocations(taskViewTaskController)

        bubbleTaskStackListener.onActivityRestartAttempt(
            task,
            homeTaskVisible = false,
            clearedTask = false,
            wasVisible = false,
        )

        verifyNoInteractions(taskOrganizer)
        verifyNoInteractions(taskViewTaskController)
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import com.android.wm.shell.taskview.TaskViewTransitions
import com.android.wm.shell.transition.Transitions
import com.google.common.truth.Truth.assertThat
import com.google.common.util.concurrent.MoreExecutors.directExecutor
import java.util.Optional
import org.junit.Assert
import org.junit.Before
import org.junit.Test
@@ -167,6 +168,7 @@ class BubbleViewInfoTaskTest {
                BubbleResizabilityChecker(),
                HomeIntentProvider(context),
                appInfoProvider,
                { Optional.empty() },
            )

        // TODO: (b/371829099) - when optional overflow is no longer flagged we can enable this
+2 −0
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.taskview.TaskViewTransitions
import com.android.wm.shell.transition.Transitions
import com.google.common.truth.Truth.assertThat
import java.util.Optional
import org.junit.After
import org.junit.Before
import org.junit.Rule
@@ -247,6 +248,7 @@ class BubbleBarLayerViewTest {
            BubbleResizabilityChecker(),
            HomeIntentProvider(context),
            FakeBubbleAppInfoProvider(),
            { Optional.empty() },
        )
    }

Loading