Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterbox/DelegateLetterboxTransitionObserver.kt +12 −7 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ import android.window.TransitionInfo import com.android.internal.protolog.ProtoLog import com.android.window.flags.Flags.appCompatRefactoring import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleController import com.android.wm.shell.compatui.letterbox.lifecycle.toLetterboxLifecycleEvent import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleEventFactory import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_APP_COMPAT import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions Loading @@ -35,6 +35,7 @@ class DelegateLetterboxTransitionObserver( shellInit: ShellInit, private val transitions: Transitions, private val letterboxLifecycleController: LetterboxLifecycleController, private val letterboxLifecycleEventFactory: LetterboxLifecycleEventFactory ) : Transitions.TransitionObserver { companion object { Loading @@ -57,14 +58,18 @@ class DelegateLetterboxTransitionObserver( startTransaction: SurfaceControl.Transaction, finishTransaction: SurfaceControl.Transaction ) { info.changes.forEach { info.changes.forEach { change -> if (letterboxLifecycleEventFactory.canHandle(change)) { letterboxLifecycleEventFactory.createLifecycleEvent(change)?.let { event -> letterboxLifecycleController.onLetterboxLifecycleEvent( it.toLetterboxLifecycleEvent(), event, startTransaction, finishTransaction ) } } } } private fun logV(msg: String) { ProtoLog.v(WM_SHELL_APP_COMPAT, "%s: %s", TAG, msg) Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/LetterboxModule.java +16 −2 Original line number Diff line number Diff line Loading @@ -24,12 +24,17 @@ import com.android.wm.shell.compatui.letterbox.LetterboxControllerStrategy; import com.android.wm.shell.compatui.letterbox.MixedLetterboxController; import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleController; import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleControllerImpl; import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleEventFactory; import com.android.wm.shell.compatui.letterbox.lifecycle.MultiLetterboxLifecycleEventFactory; import com.android.wm.shell.compatui.letterbox.lifecycle.TaskInfoLetterboxLifecycleEventFactory; import com.android.wm.shell.sysui.ShellInit; import com.android.wm.shell.transition.Transitions; import dagger.Module; import dagger.Provides; import java.util.List; /** * Provides Letterbox Shell implementation components to Dagger dependency Graph. */ Loading @@ -41,10 +46,19 @@ public abstract class LetterboxModule { static DelegateLetterboxTransitionObserver provideDelegateLetterboxTransitionObserver( @NonNull ShellInit shellInit, @NonNull Transitions transitions, @NonNull LetterboxLifecycleController letterboxLifecycleController @NonNull LetterboxLifecycleController letterboxLifecycleController, @NonNull LetterboxLifecycleEventFactory letterboxLifecycleEventFactory ) { return new DelegateLetterboxTransitionObserver(shellInit, transitions, letterboxLifecycleController); letterboxLifecycleController, letterboxLifecycleEventFactory); } @WMSingleton @Provides static LetterboxLifecycleEventFactory provideLetterboxLifecycleEventFactory() { return new MultiLetterboxLifecycleEventFactory(List.of( new TaskInfoLetterboxLifecycleEventFactory() )); } @WMSingleton Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterbox/DelegateLetterboxTransitionObserverTest.kt +17 −1 Original line number Diff line number Diff line Loading @@ -24,8 +24,10 @@ import androidx.test.filters.SmallTest import com.android.window.flags.Flags import com.android.wm.shell.ShellTestCase import com.android.wm.shell.common.ShellExecutor import com.android.wm.shell.compatui.letterbox.lifecycle.FakeLetterboxLifecycleEventFactory import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleController import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleEvent import com.android.wm.shell.compatui.letterbox.lifecycle.toLetterboxLifecycleEvent import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import com.android.wm.shell.util.executeTransitionObserverTest Loading Loading @@ -119,6 +121,9 @@ class DelegateLetterboxTransitionObserverTest : ShellTestCase() { validateOutput { r.checkLifecycleControllerInvoked(times = 3) r.checkOnLetterboxLifecycleEventFactory { factory -> assert(factory.canHandleInvokeTimes == 3) } } } } Loading @@ -139,6 +144,7 @@ class DelegateLetterboxTransitionObserverTest : ShellTestCase() { private val transitions: Transitions private val letterboxObserver: DelegateLetterboxTransitionObserver private val letterboxLifecycleController: LetterboxLifecycleController private var letterboxLifecycleEventFactory: FakeLetterboxLifecycleEventFactory val observerFactory: () -> DelegateLetterboxTransitionObserver Loading @@ -147,11 +153,15 @@ class DelegateLetterboxTransitionObserverTest : ShellTestCase() { shellInit = ShellInit(executor) transitions = mock<Transitions>() letterboxLifecycleController = mock<LetterboxLifecycleController>() letterboxLifecycleEventFactory = FakeLetterboxLifecycleEventFactory( eventToReturnFactory = { c -> c.toLetterboxLifecycleEvent() } ) letterboxObserver = DelegateLetterboxTransitionObserver( shellInit, transitions, letterboxLifecycleController letterboxLifecycleController, letterboxLifecycleEventFactory ) observerFactory = { letterboxObserver } } Loading @@ -164,6 +174,12 @@ class DelegateLetterboxTransitionObserverTest : ShellTestCase() { verify(transitions, expected.asMode()).registerObserver(observer()) } fun checkOnLetterboxLifecycleEventFactory( consumer: (FakeLetterboxLifecycleEventFactory) -> Unit ) { consumer(letterboxLifecycleEventFactory) } fun checkLifecycleControllerInvoked( times: Int = 1, ) = verify( Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterbox/MigrationLetterboxTransitionObserverTest.kt +17 −1 Original line number Diff line number Diff line Loading @@ -30,8 +30,10 @@ import com.android.window.flags.Flags import com.android.wm.shell.ShellTestCase import com.android.wm.shell.common.ShellExecutor import com.android.wm.shell.common.transition.TransitionStateHolder import com.android.wm.shell.compatui.letterbox.lifecycle.FakeLetterboxLifecycleEventFactory import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleController import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleControllerImpl import com.android.wm.shell.compatui.letterbox.lifecycle.toLetterboxLifecycleEvent import com.android.wm.shell.recents.RecentsTransitionHandler import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions Loading Loading @@ -97,6 +99,9 @@ class MigrationLetterboxTransitionObserverTest : ShellTestCase() { r.visibilityEventDetected(expected = false) r.destroyEventDetected(expected = false) r.updateSurfaceBoundsEventDetected(expected = false) r.checkOnLetterboxLifecycleEventFactory { factory -> assert(factory.canHandleInvokeTimes == 3) } } } } Loading Loading @@ -220,6 +225,7 @@ class MigrationLetterboxTransitionObserverTest : ShellTestCase() { private val transitionStateHolder: TransitionStateHolder private val letterboxStrategy: LetterboxControllerStrategy private val letterboxLifecycleContoller: LetterboxLifecycleController private var letterboxLifecycleEventFactory: FakeLetterboxLifecycleEventFactory val observerFactory: () -> DelegateLetterboxTransitionObserver Loading @@ -237,11 +243,15 @@ class MigrationLetterboxTransitionObserverTest : ShellTestCase() { transitionStateHolder, letterboxStrategy ) letterboxLifecycleEventFactory = FakeLetterboxLifecycleEventFactory( eventToReturnFactory = { c -> c.toLetterboxLifecycleEvent() } ) letterboxObserver = DelegateLetterboxTransitionObserver( shellInit, transitions, letterboxLifecycleContoller letterboxLifecycleContoller, letterboxLifecycleEventFactory ) observerFactory = { letterboxObserver } } Loading @@ -254,6 +264,12 @@ class MigrationLetterboxTransitionObserverTest : ShellTestCase() { verify(transitions, expected.asMode()).registerObserver(observer()) } fun checkOnLetterboxLifecycleEventFactory( consumer: (FakeLetterboxLifecycleEventFactory) -> Unit ) { consumer(letterboxLifecycleEventFactory) } fun configureRecentsState(running: Boolean) { doReturn(running).`when`(transitionStateHolder).isRecentsTransitionRunning() } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterbox/lifecycle/FakeLetterboxLifecycleEventFactory.kt +3 −2 Original line number Diff line number Diff line Loading @@ -24,7 +24,8 @@ import android.window.TransitionInfo.Change */ class FakeLetterboxLifecycleEventFactory( private val canHandleReturn: Boolean = true, private val eventToReturn: LetterboxLifecycleEvent? = null private val eventToReturn: LetterboxLifecycleEvent? = null, private val eventToReturnFactory: (Change) -> LetterboxLifecycleEvent? = { eventToReturn } ) : LetterboxLifecycleEventFactory { companion object { Loading @@ -46,6 +47,6 @@ class FakeLetterboxLifecycleEventFactory( override fun createLifecycleEvent(change: Change): LetterboxLifecycleEvent? { createLifecycleEventInvokeTimes++ lastCreateLifecycleEventChange = change return eventToReturn return eventToReturnFactory(change) } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/letterbox/DelegateLetterboxTransitionObserver.kt +12 −7 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ import android.window.TransitionInfo import com.android.internal.protolog.ProtoLog import com.android.window.flags.Flags.appCompatRefactoring import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleController import com.android.wm.shell.compatui.letterbox.lifecycle.toLetterboxLifecycleEvent import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleEventFactory import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_APP_COMPAT import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions Loading @@ -35,6 +35,7 @@ class DelegateLetterboxTransitionObserver( shellInit: ShellInit, private val transitions: Transitions, private val letterboxLifecycleController: LetterboxLifecycleController, private val letterboxLifecycleEventFactory: LetterboxLifecycleEventFactory ) : Transitions.TransitionObserver { companion object { Loading @@ -57,14 +58,18 @@ class DelegateLetterboxTransitionObserver( startTransaction: SurfaceControl.Transaction, finishTransaction: SurfaceControl.Transaction ) { info.changes.forEach { info.changes.forEach { change -> if (letterboxLifecycleEventFactory.canHandle(change)) { letterboxLifecycleEventFactory.createLifecycleEvent(change)?.let { event -> letterboxLifecycleController.onLetterboxLifecycleEvent( it.toLetterboxLifecycleEvent(), event, startTransaction, finishTransaction ) } } } } private fun logV(msg: String) { ProtoLog.v(WM_SHELL_APP_COMPAT, "%s: %s", TAG, msg) Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/LetterboxModule.java +16 −2 Original line number Diff line number Diff line Loading @@ -24,12 +24,17 @@ import com.android.wm.shell.compatui.letterbox.LetterboxControllerStrategy; import com.android.wm.shell.compatui.letterbox.MixedLetterboxController; import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleController; import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleControllerImpl; import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleEventFactory; import com.android.wm.shell.compatui.letterbox.lifecycle.MultiLetterboxLifecycleEventFactory; import com.android.wm.shell.compatui.letterbox.lifecycle.TaskInfoLetterboxLifecycleEventFactory; import com.android.wm.shell.sysui.ShellInit; import com.android.wm.shell.transition.Transitions; import dagger.Module; import dagger.Provides; import java.util.List; /** * Provides Letterbox Shell implementation components to Dagger dependency Graph. */ Loading @@ -41,10 +46,19 @@ public abstract class LetterboxModule { static DelegateLetterboxTransitionObserver provideDelegateLetterboxTransitionObserver( @NonNull ShellInit shellInit, @NonNull Transitions transitions, @NonNull LetterboxLifecycleController letterboxLifecycleController @NonNull LetterboxLifecycleController letterboxLifecycleController, @NonNull LetterboxLifecycleEventFactory letterboxLifecycleEventFactory ) { return new DelegateLetterboxTransitionObserver(shellInit, transitions, letterboxLifecycleController); letterboxLifecycleController, letterboxLifecycleEventFactory); } @WMSingleton @Provides static LetterboxLifecycleEventFactory provideLetterboxLifecycleEventFactory() { return new MultiLetterboxLifecycleEventFactory(List.of( new TaskInfoLetterboxLifecycleEventFactory() )); } @WMSingleton Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterbox/DelegateLetterboxTransitionObserverTest.kt +17 −1 Original line number Diff line number Diff line Loading @@ -24,8 +24,10 @@ import androidx.test.filters.SmallTest import com.android.window.flags.Flags import com.android.wm.shell.ShellTestCase import com.android.wm.shell.common.ShellExecutor import com.android.wm.shell.compatui.letterbox.lifecycle.FakeLetterboxLifecycleEventFactory import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleController import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleEvent import com.android.wm.shell.compatui.letterbox.lifecycle.toLetterboxLifecycleEvent import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import com.android.wm.shell.util.executeTransitionObserverTest Loading Loading @@ -119,6 +121,9 @@ class DelegateLetterboxTransitionObserverTest : ShellTestCase() { validateOutput { r.checkLifecycleControllerInvoked(times = 3) r.checkOnLetterboxLifecycleEventFactory { factory -> assert(factory.canHandleInvokeTimes == 3) } } } } Loading @@ -139,6 +144,7 @@ class DelegateLetterboxTransitionObserverTest : ShellTestCase() { private val transitions: Transitions private val letterboxObserver: DelegateLetterboxTransitionObserver private val letterboxLifecycleController: LetterboxLifecycleController private var letterboxLifecycleEventFactory: FakeLetterboxLifecycleEventFactory val observerFactory: () -> DelegateLetterboxTransitionObserver Loading @@ -147,11 +153,15 @@ class DelegateLetterboxTransitionObserverTest : ShellTestCase() { shellInit = ShellInit(executor) transitions = mock<Transitions>() letterboxLifecycleController = mock<LetterboxLifecycleController>() letterboxLifecycleEventFactory = FakeLetterboxLifecycleEventFactory( eventToReturnFactory = { c -> c.toLetterboxLifecycleEvent() } ) letterboxObserver = DelegateLetterboxTransitionObserver( shellInit, transitions, letterboxLifecycleController letterboxLifecycleController, letterboxLifecycleEventFactory ) observerFactory = { letterboxObserver } } Loading @@ -164,6 +174,12 @@ class DelegateLetterboxTransitionObserverTest : ShellTestCase() { verify(transitions, expected.asMode()).registerObserver(observer()) } fun checkOnLetterboxLifecycleEventFactory( consumer: (FakeLetterboxLifecycleEventFactory) -> Unit ) { consumer(letterboxLifecycleEventFactory) } fun checkLifecycleControllerInvoked( times: Int = 1, ) = verify( Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterbox/MigrationLetterboxTransitionObserverTest.kt +17 −1 Original line number Diff line number Diff line Loading @@ -30,8 +30,10 @@ import com.android.window.flags.Flags import com.android.wm.shell.ShellTestCase import com.android.wm.shell.common.ShellExecutor import com.android.wm.shell.common.transition.TransitionStateHolder import com.android.wm.shell.compatui.letterbox.lifecycle.FakeLetterboxLifecycleEventFactory import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleController import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleControllerImpl import com.android.wm.shell.compatui.letterbox.lifecycle.toLetterboxLifecycleEvent import com.android.wm.shell.recents.RecentsTransitionHandler import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions Loading Loading @@ -97,6 +99,9 @@ class MigrationLetterboxTransitionObserverTest : ShellTestCase() { r.visibilityEventDetected(expected = false) r.destroyEventDetected(expected = false) r.updateSurfaceBoundsEventDetected(expected = false) r.checkOnLetterboxLifecycleEventFactory { factory -> assert(factory.canHandleInvokeTimes == 3) } } } } Loading Loading @@ -220,6 +225,7 @@ class MigrationLetterboxTransitionObserverTest : ShellTestCase() { private val transitionStateHolder: TransitionStateHolder private val letterboxStrategy: LetterboxControllerStrategy private val letterboxLifecycleContoller: LetterboxLifecycleController private var letterboxLifecycleEventFactory: FakeLetterboxLifecycleEventFactory val observerFactory: () -> DelegateLetterboxTransitionObserver Loading @@ -237,11 +243,15 @@ class MigrationLetterboxTransitionObserverTest : ShellTestCase() { transitionStateHolder, letterboxStrategy ) letterboxLifecycleEventFactory = FakeLetterboxLifecycleEventFactory( eventToReturnFactory = { c -> c.toLetterboxLifecycleEvent() } ) letterboxObserver = DelegateLetterboxTransitionObserver( shellInit, transitions, letterboxLifecycleContoller letterboxLifecycleContoller, letterboxLifecycleEventFactory ) observerFactory = { letterboxObserver } } Loading @@ -254,6 +264,12 @@ class MigrationLetterboxTransitionObserverTest : ShellTestCase() { verify(transitions, expected.asMode()).registerObserver(observer()) } fun checkOnLetterboxLifecycleEventFactory( consumer: (FakeLetterboxLifecycleEventFactory) -> Unit ) { consumer(letterboxLifecycleEventFactory) } fun configureRecentsState(running: Boolean) { doReturn(running).`when`(transitionStateHolder).isRecentsTransitionRunning() } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/letterbox/lifecycle/FakeLetterboxLifecycleEventFactory.kt +3 −2 Original line number Diff line number Diff line Loading @@ -24,7 +24,8 @@ import android.window.TransitionInfo.Change */ class FakeLetterboxLifecycleEventFactory( private val canHandleReturn: Boolean = true, private val eventToReturn: LetterboxLifecycleEvent? = null private val eventToReturn: LetterboxLifecycleEvent? = null, private val eventToReturnFactory: (Change) -> LetterboxLifecycleEvent? = { eventToReturn } ) : LetterboxLifecycleEventFactory { companion object { Loading @@ -46,6 +47,6 @@ class FakeLetterboxLifecycleEventFactory( override fun createLifecycleEvent(change: Change): LetterboxLifecycleEvent? { createLifecycleEventInvokeTimes++ lastCreateLifecycleEventChange = change return eventToReturn return eventToReturnFactory(change) } }