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

Commit 07357614 authored by Merissa Mitchell's avatar Merissa Mitchell
Browse files

Fix DesktopPipTransitionObserver dependencies in WMShellModule.

The original commit 148cfd94 for PiP in
Desktop Mode caused a crash when the DESKTOP_WINDOWING_PIP flag is not
enabled due to the forced get() calls.

This CL is a fix forward along with the reland of the original CL.

Bug: 401865824
Bug: 401978578
Test: atest DesktopTasksControllerTest
DesktopTasksTransitionObserverTest
Test: Disable DESKTOP_WINDOWING_PIP flag and check that there are no
crashes and tests still pass
Flag: com.android.window.flags.enable_desktop_windowing_pip

Change-Id: I3615a8f1c30525182cea69aac819b192b7a9b499
parent 89b6ee18
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -825,7 +825,7 @@ public abstract class WMShellModule {
                overviewToDesktopTransitionObserver,
                desksOrganizer,
                desksTransitionObserver.get(),
                desktopPipTransitionObserver.get(),
                desktopPipTransitionObserver,
                userProfileContexts,
                desktopModeCompatPolicy,
                dragToDisplayTransitionHandler,
@@ -1241,7 +1241,7 @@ public abstract class WMShellModule {
                                        transitions,
                                        shellTaskOrganizer,
                                        desktopMixedTransitionHandler.get(),
                                        desktopPipTransitionObserver.get(),
                                        desktopPipTransitionObserver,
                                        backAnimationController.get(),
                                        desktopWallpaperActivityTokenProvider,
                                        shellInit)));
@@ -1266,7 +1266,7 @@ public abstract class WMShellModule {
    static Optional<DesktopPipTransitionObserver> provideDesktopPipTransitionObserver(
            Context context
    ) {
        if (DesktopModeStatus.canEnterDesktopModeOrShowAppHandle(context)
        if (DesktopModeStatus.canEnterDesktopMode(context)
                && DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_PIP.isTrue()) {
            return Optional.of(
                    new DesktopPipTransitionObserver());
+3 −2
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ class DesktopTasksController(
    private val overviewToDesktopTransitionObserver: OverviewToDesktopTransitionObserver,
    private val desksOrganizer: DesksOrganizer,
    private val desksTransitionObserver: DesksTransitionObserver,
    private val desktopPipTransitionObserver: DesktopPipTransitionObserver,
    private val desktopPipTransitionObserver: Optional<DesktopPipTransitionObserver>,
    private val userProfileContexts: UserProfileContexts,
    private val desktopModeCompatPolicy: DesktopModeCompatPolicy,
    private val dragToDisplayTransitionHandler: DragToDisplayTransitionHandler,
@@ -811,6 +811,7 @@ class DesktopTasksController(
            }
        val isMinimizingToPip =
            DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_PIP.isTrue &&
                desktopPipTransitionObserver.isPresent &&
                (taskInfo.pictureInPictureParams?.isAutoEnterEnabled ?: false)

        // If task is going to PiP, start a PiP transition instead of a minimize transition
@@ -827,7 +828,7 @@ class DesktopTasksController(
            val requestRes = transitions.dispatchRequest(Binder(), requestInfo, /* skip= */ null)
            wct.merge(requestRes.second, true)

            desktopPipTransitionObserver.addPendingPipTransition(
            desktopPipTransitionObserver.get().addPendingPipTransition(
                DesktopPipTransitionObserver.PendingPipTransition(
                    token = freeformTaskTransitionStarter.startPipTransition(wct),
                    taskId = taskInfo.taskId,
+3 −2
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.wm.shell.shared.TransitionUtil
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.transition.Transitions
import java.util.Optional

/**
 * A [Transitions.TransitionObserver] that observes shell transitions and updates the
@@ -52,7 +53,7 @@ class DesktopTasksTransitionObserver(
    private val transitions: Transitions,
    private val shellTaskOrganizer: ShellTaskOrganizer,
    private val desktopMixedTransitionHandler: DesktopMixedTransitionHandler,
    private val desktopPipTransitionObserver: DesktopPipTransitionObserver,
    private val desktopPipTransitionObserver: Optional<DesktopPipTransitionObserver>,
    private val backAnimationController: BackAnimationController,
    private val desktopWallpaperActivityTokenProvider: DesktopWallpaperActivityTokenProvider,
    shellInit: ShellInit,
@@ -94,7 +95,7 @@ class DesktopTasksTransitionObserver(
            removeTaskIfNeeded(info)
        }
        removeWallpaperOnLastTaskClosingIfNeeded(transition, info)
        desktopPipTransitionObserver.onTransitionReady(transition, info)
        desktopPipTransitionObserver.ifPresent { it.onTransitionReady(transition, info) }
    }

    private fun removeTaskIfNeeded(info: TransitionInfo) {
+1 −1
Original line number Diff line number Diff line
@@ -458,7 +458,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
            overviewToDesktopTransitionObserver,
            desksOrganizer,
            desksTransitionsObserver,
            desktopPipTransitionObserver,
            Optional.of(desktopPipTransitionObserver),
            userProfileContexts,
            desktopModeCompatPolicy,
            dragToDisplayTransitionHandler,
+2 −1
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.transition.Transitions
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import java.util.Optional
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -110,7 +111,7 @@ class DesktopTasksTransitionObserverTest {
                transitions,
                shellTaskOrganizer,
                mixedHandler,
                pipTransitionObserver,
                Optional.of(pipTransitionObserver),
                backAnimationController,
                desktopWallpaperActivityTokenProvider,
                shellInit,