Loading packages/SystemUI/multivalentTests/src/com/android/systemui/topwindoweffects/TopLevelWindowEffectsTest.kt +32 −5 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.jank.interactionJankMonitor import com.android.systemui.keyevent.data.repository.fakeKeyEventRepository import com.android.systemui.keyevent.domain.interactor.keyEventInteractor import com.android.systemui.keyevent.domain.interactor.KeyEventInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.advanceTimeBy import com.android.systemui.kosmos.runCurrent Loading @@ -35,8 +35,8 @@ import com.android.systemui.testKosmos import com.android.systemui.topui.TopUiController import com.android.systemui.topui.TopUiControllerRefactor import com.android.systemui.topui.topUiController import com.android.systemui.topwindoweffects.data.repository.DEFAULT_INITIAL_DELAY_MILLIS import com.android.systemui.topwindoweffects.data.repository.DEFAULT_LONG_PRESS_POWER_DURATION_MILLIS import com.android.systemui.topwindoweffects.data.repository.SqueezeEffectRepositoryImpl.Companion.DEFAULT_INITIAL_DELAY_MILLIS import com.android.systemui.topwindoweffects.data.repository.SqueezeEffectRepositoryImpl.Companion.DEFAULT_LONG_PRESS_POWER_DURATION_MILLIS import com.android.systemui.topwindoweffects.data.repository.fakeSqueezeEffectRepository import com.android.systemui.topwindoweffects.domain.interactor.SqueezeEffectInteractor import com.android.systemui.topwindoweffects.ui.compose.EffectsWindowRoot Loading Loading @@ -77,10 +77,13 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { mainDispatcher = StandardTestDispatcher(testScope.testScheduler), topLevelWindowEffectsScope = testScope.backgroundScope, windowManager = windowManager, keyEventInteractor = keyEventInteractor, viewModelFactory = viewModelFactory, squeezeEffectInteractor = SqueezeEffectInteractor(squeezeEffectRepository = fakeSqueezeEffectRepository), SqueezeEffectInteractor( squeezeEffectRepository = fakeSqueezeEffectRepository, keyEventInteractor = KeyEventInteractor(fakeKeyEventRepository), coroutineContext = testScope.testScheduler, ), appZoomOutOptional = Optional.empty(), notificationShadeWindowController = kosmos.notificationShadeWindowController, topUiController = kosmos.topUiController, Loading Loading @@ -119,6 +122,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -135,6 +139,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -151,6 +156,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -171,6 +177,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -192,6 +199,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -213,6 +221,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -226,6 +235,24 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { verifyAddViewAndTopUi(never()) } @Test fun testNoWindowAddedIfPowerKeyInMultipleKeyCombination() { kosmos.runTest { val expectedDelay = DEFAULT_INITIAL_DELAY_MILLIS + 750 - DEFAULT_LONG_PRESS_POWER_DURATION_MILLIS fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = true underTest.start() advanceTime((expectedDelay + 1).milliseconds) verify(windowManager, never()).addView(any<View>(), any<WindowManager.LayoutParams>()) } } private fun verifyAddViewAndTopUi(mode: VerificationMode) { verify(windowManager, mode).addView(any<View>(), any<WindowManager.LayoutParams>()) if (TopUiControllerRefactor.isEnabled) { Loading packages/SystemUI/multivalentTests/src/com/android/systemui/topwindoweffects/data/repository/SqueezeEffectRepositoryTest.kt +8 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.topwindoweffects.data.repository import android.hardware.input.InputManager import android.os.Bundle import android.os.Handler import android.platform.test.annotations.DisableFlags Loading @@ -32,6 +33,8 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.shared.Flags import com.android.systemui.testKosmos import com.android.systemui.topwindoweffects.data.repository.SqueezeEffectRepositoryImpl.Companion.IS_INVOCATION_EFFECT_ENABLED_KEY import com.android.systemui.topwindoweffects.data.repository.SqueezeEffectRepositoryImpl.Companion.SET_INVOCATION_EFFECT_PARAMETERS_ACTION import com.android.systemui.util.settings.FakeGlobalSettings import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.StandardTestDispatcher Loading @@ -55,13 +58,16 @@ class SqueezeEffectRepositoryTest : SysuiTestCase() { private val globalSettings = FakeGlobalSettings(StandardTestDispatcher()) @Mock private lateinit var bgHandler: Handler @Mock private lateinit var inputManager: InputManager private val Kosmos.underTest by Kosmos.Fixture { SqueezeEffectRepositoryImpl( context = mContext, bgHandler = bgHandler, bgCoroutineContext = testScope.testScheduler, handler = bgHandler, coroutineContext = testScope.testScheduler, executor = Runnable::run, inputManager = inputManager, globalSettings = globalSettings, ) } Loading packages/SystemUI/multivalentTests/src/com/android/systemui/topwindoweffects/domain/interactor/SqueezeEffectInteractorTest.kt +36 −6 Original line number Diff line number Diff line Loading @@ -19,9 +19,12 @@ package com.android.systemui.topwindoweffects.domain.interactor import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.keyevent.data.repository.fakeKeyEventRepository import com.android.systemui.keyevent.domain.interactor.KeyEventInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.collectLastValue import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.testKosmos import com.android.systemui.topwindoweffects.data.repository.fakeSqueezeEffectRepository Loading @@ -35,9 +38,12 @@ class SqueezeEffectInteractorTest : SysuiTestCase() { private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val Kosmos.underTest by Kosmos.Fixture { private val Kosmos.underTest by Kosmos.Fixture { SqueezeEffectInteractor( squeezeEffectRepository = fakeSqueezeEffectRepository squeezeEffectRepository = fakeSqueezeEffectRepository, keyEventInteractor = KeyEventInteractor(fakeKeyEventRepository), coroutineContext = testScope.testScheduler, ) } Loading @@ -60,4 +66,28 @@ class SqueezeEffectInteractorTest : SysuiTestCase() { assertThat(isSqueezeEffectEnabled).isTrue() } @Test fun testPowerKeyInKeyCombination_powerKeyNotDownAsSingleGesture() = kosmos.runTest { fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = true fakeKeyEventRepository.setPowerButtonDown(true) val isPowerButtonDownAsSingleKeyGesture by collectLastValue(underTest.isPowerButtonDownAsSingleKeyGesture) assertThat(isPowerButtonDownAsSingleKeyGesture).isFalse() } @Test fun testPowerKeyNotInKeyCombination_powerKeyDownAsSingleGesture() = kosmos.runTest { fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false fakeKeyEventRepository.setPowerButtonDown(true) val isPowerButtonDownAsSingleKeyGesture by collectLastValue(underTest.isPowerButtonDownAsSingleKeyGesture) assertThat(isPowerButtonDownAsSingleKeyGesture).isTrue() } } packages/SystemUI/src/com/android/systemui/topwindoweffects/TopLevelWindowEffects.kt +3 −6 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyevent.domain.interactor.KeyEventInteractor import com.android.systemui.statusbar.NotificationShadeWindowController import com.android.systemui.topui.TopUiController import com.android.systemui.topui.TopUiControllerRefactor Loading @@ -56,7 +55,6 @@ constructor( @TopLevelWindowEffectsThread private val topLevelWindowEffectsScope: CoroutineScope, private val windowManager: WindowManager, private val squeezeEffectInteractor: SqueezeEffectInteractor, private val keyEventInteractor: KeyEventInteractor, private val viewModelFactory: SqueezeEffectViewModel.Factory, // TODO(b/409930584): make AppZoomOut non-optional private val appZoomOutOptional: Optional<AppZoomOut>, Loading @@ -71,7 +69,8 @@ constructor( topLevelWindowEffectsScope.launch { squeezeEffectInteractor.isSqueezeEffectEnabled.collectLatest { enabled -> if (enabled) { keyEventInteractor.isPowerButtonDown.collectLatest { down -> squeezeEffectInteractor.isPowerButtonDownAsSingleKeyGesture.collectLatest { down -> if (down) { val roundedCornerInfo = squeezeEffectInteractor.getRoundedCornersResourceId() Loading Loading @@ -126,9 +125,7 @@ constructor( if (TopUiControllerRefactor.isEnabled) { topUiController.setRequestTopUi(false, TAG) } else { runOnMainThread { notificationShadeWindowController.setRequestTopUi(false, TAG) } runOnMainThread { notificationShadeWindowController.setRequestTopUi(false, TAG) } } } Loading packages/SystemUI/src/com/android/systemui/topwindoweffects/dagger/TopLevelWindowEffectsModule.kt +47 −17 Original line number Diff line number Diff line Loading @@ -16,21 +16,25 @@ package com.android.systemui.topwindoweffects.dagger import android.os.Handler import android.os.Looper import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.shared.Flags.enableLppAssistInvocationEffect import com.android.systemui.topwindoweffects.TopLevelWindowEffects import dagger.Binds import com.android.systemui.topwindoweffects.qualifiers.TopLevelWindowEffectsThread import dagger.Module import dagger.Provides import dagger.multibindings.ClassKey import dagger.multibindings.IntoMap import java.util.concurrent.Executor import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.asCoroutineDispatcher @Module interface TopLevelWindowEffectsModule { @Binds fun bindTopLevelWindowEffectsCoreStartable(impl: TopLevelWindowEffects): CoreStartable companion object { object TopLevelWindowEffectsModule { @Provides @IntoMap Loading @@ -44,5 +48,31 @@ interface TopLevelWindowEffectsModule { } } } } @Provides @SysUISingleton @TopLevelWindowEffectsThread fun provideTopLevelWindowEffectsHandler(@TopLevelWindowEffectsThread looper: Looper): Handler = Handler(looper) @Provides @SysUISingleton @TopLevelWindowEffectsThread fun provideTopLevelWindowEffectsScope( @TopLevelWindowEffectsThread dispatcher: CoroutineDispatcher ): CoroutineScope = CoroutineScope(dispatcher) @Provides @SysUISingleton @TopLevelWindowEffectsThread fun provideTopLevelWindowEffectsDispatcher( @TopLevelWindowEffectsThread executor: Executor ): CoroutineDispatcher = executor.asCoroutineDispatcher() @Provides @SysUISingleton @TopLevelWindowEffectsThread fun provideTopLevelWindowEffectsContext( @TopLevelWindowEffectsThread dispatcher: CoroutineDispatcher ): CoroutineContext = dispatcher } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/topwindoweffects/TopLevelWindowEffectsTest.kt +32 −5 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.jank.interactionJankMonitor import com.android.systemui.keyevent.data.repository.fakeKeyEventRepository import com.android.systemui.keyevent.domain.interactor.keyEventInteractor import com.android.systemui.keyevent.domain.interactor.KeyEventInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.advanceTimeBy import com.android.systemui.kosmos.runCurrent Loading @@ -35,8 +35,8 @@ import com.android.systemui.testKosmos import com.android.systemui.topui.TopUiController import com.android.systemui.topui.TopUiControllerRefactor import com.android.systemui.topui.topUiController import com.android.systemui.topwindoweffects.data.repository.DEFAULT_INITIAL_DELAY_MILLIS import com.android.systemui.topwindoweffects.data.repository.DEFAULT_LONG_PRESS_POWER_DURATION_MILLIS import com.android.systemui.topwindoweffects.data.repository.SqueezeEffectRepositoryImpl.Companion.DEFAULT_INITIAL_DELAY_MILLIS import com.android.systemui.topwindoweffects.data.repository.SqueezeEffectRepositoryImpl.Companion.DEFAULT_LONG_PRESS_POWER_DURATION_MILLIS import com.android.systemui.topwindoweffects.data.repository.fakeSqueezeEffectRepository import com.android.systemui.topwindoweffects.domain.interactor.SqueezeEffectInteractor import com.android.systemui.topwindoweffects.ui.compose.EffectsWindowRoot Loading Loading @@ -77,10 +77,13 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { mainDispatcher = StandardTestDispatcher(testScope.testScheduler), topLevelWindowEffectsScope = testScope.backgroundScope, windowManager = windowManager, keyEventInteractor = keyEventInteractor, viewModelFactory = viewModelFactory, squeezeEffectInteractor = SqueezeEffectInteractor(squeezeEffectRepository = fakeSqueezeEffectRepository), SqueezeEffectInteractor( squeezeEffectRepository = fakeSqueezeEffectRepository, keyEventInteractor = KeyEventInteractor(fakeKeyEventRepository), coroutineContext = testScope.testScheduler, ), appZoomOutOptional = Optional.empty(), notificationShadeWindowController = kosmos.notificationShadeWindowController, topUiController = kosmos.topUiController, Loading Loading @@ -119,6 +122,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -135,6 +139,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -151,6 +156,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -171,6 +177,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -192,6 +199,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -213,6 +221,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false underTest.start() Loading @@ -226,6 +235,24 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { verifyAddViewAndTopUi(never()) } @Test fun testNoWindowAddedIfPowerKeyInMultipleKeyCombination() { kosmos.runTest { val expectedDelay = DEFAULT_INITIAL_DELAY_MILLIS + 750 - DEFAULT_LONG_PRESS_POWER_DURATION_MILLIS fakeSqueezeEffectRepository.isSqueezeEffectEnabled.value = true fakeSqueezeEffectRepository.invocationEffectInitialDelayMs = expectedDelay fakeKeyEventRepository.setPowerButtonDown(true) fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = true underTest.start() advanceTime((expectedDelay + 1).milliseconds) verify(windowManager, never()).addView(any<View>(), any<WindowManager.LayoutParams>()) } } private fun verifyAddViewAndTopUi(mode: VerificationMode) { verify(windowManager, mode).addView(any<View>(), any<WindowManager.LayoutParams>()) if (TopUiControllerRefactor.isEnabled) { Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/topwindoweffects/data/repository/SqueezeEffectRepositoryTest.kt +8 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.topwindoweffects.data.repository import android.hardware.input.InputManager import android.os.Bundle import android.os.Handler import android.platform.test.annotations.DisableFlags Loading @@ -32,6 +33,8 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.shared.Flags import com.android.systemui.testKosmos import com.android.systemui.topwindoweffects.data.repository.SqueezeEffectRepositoryImpl.Companion.IS_INVOCATION_EFFECT_ENABLED_KEY import com.android.systemui.topwindoweffects.data.repository.SqueezeEffectRepositoryImpl.Companion.SET_INVOCATION_EFFECT_PARAMETERS_ACTION import com.android.systemui.util.settings.FakeGlobalSettings import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.StandardTestDispatcher Loading @@ -55,13 +58,16 @@ class SqueezeEffectRepositoryTest : SysuiTestCase() { private val globalSettings = FakeGlobalSettings(StandardTestDispatcher()) @Mock private lateinit var bgHandler: Handler @Mock private lateinit var inputManager: InputManager private val Kosmos.underTest by Kosmos.Fixture { SqueezeEffectRepositoryImpl( context = mContext, bgHandler = bgHandler, bgCoroutineContext = testScope.testScheduler, handler = bgHandler, coroutineContext = testScope.testScheduler, executor = Runnable::run, inputManager = inputManager, globalSettings = globalSettings, ) } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/topwindoweffects/domain/interactor/SqueezeEffectInteractorTest.kt +36 −6 Original line number Diff line number Diff line Loading @@ -19,9 +19,12 @@ package com.android.systemui.topwindoweffects.domain.interactor import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.keyevent.data.repository.fakeKeyEventRepository import com.android.systemui.keyevent.domain.interactor.KeyEventInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.collectLastValue import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.testKosmos import com.android.systemui.topwindoweffects.data.repository.fakeSqueezeEffectRepository Loading @@ -35,9 +38,12 @@ class SqueezeEffectInteractorTest : SysuiTestCase() { private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val Kosmos.underTest by Kosmos.Fixture { private val Kosmos.underTest by Kosmos.Fixture { SqueezeEffectInteractor( squeezeEffectRepository = fakeSqueezeEffectRepository squeezeEffectRepository = fakeSqueezeEffectRepository, keyEventInteractor = KeyEventInteractor(fakeKeyEventRepository), coroutineContext = testScope.testScheduler, ) } Loading @@ -60,4 +66,28 @@ class SqueezeEffectInteractorTest : SysuiTestCase() { assertThat(isSqueezeEffectEnabled).isTrue() } @Test fun testPowerKeyInKeyCombination_powerKeyNotDownAsSingleGesture() = kosmos.runTest { fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = true fakeKeyEventRepository.setPowerButtonDown(true) val isPowerButtonDownAsSingleKeyGesture by collectLastValue(underTest.isPowerButtonDownAsSingleKeyGesture) assertThat(isPowerButtonDownAsSingleKeyGesture).isFalse() } @Test fun testPowerKeyNotInKeyCombination_powerKeyDownAsSingleGesture() = kosmos.runTest { fakeSqueezeEffectRepository.isPowerButtonDownInKeyCombination.value = false fakeKeyEventRepository.setPowerButtonDown(true) val isPowerButtonDownAsSingleKeyGesture by collectLastValue(underTest.isPowerButtonDownAsSingleKeyGesture) assertThat(isPowerButtonDownAsSingleKeyGesture).isTrue() } }
packages/SystemUI/src/com/android/systemui/topwindoweffects/TopLevelWindowEffects.kt +3 −6 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyevent.domain.interactor.KeyEventInteractor import com.android.systemui.statusbar.NotificationShadeWindowController import com.android.systemui.topui.TopUiController import com.android.systemui.topui.TopUiControllerRefactor Loading @@ -56,7 +55,6 @@ constructor( @TopLevelWindowEffectsThread private val topLevelWindowEffectsScope: CoroutineScope, private val windowManager: WindowManager, private val squeezeEffectInteractor: SqueezeEffectInteractor, private val keyEventInteractor: KeyEventInteractor, private val viewModelFactory: SqueezeEffectViewModel.Factory, // TODO(b/409930584): make AppZoomOut non-optional private val appZoomOutOptional: Optional<AppZoomOut>, Loading @@ -71,7 +69,8 @@ constructor( topLevelWindowEffectsScope.launch { squeezeEffectInteractor.isSqueezeEffectEnabled.collectLatest { enabled -> if (enabled) { keyEventInteractor.isPowerButtonDown.collectLatest { down -> squeezeEffectInteractor.isPowerButtonDownAsSingleKeyGesture.collectLatest { down -> if (down) { val roundedCornerInfo = squeezeEffectInteractor.getRoundedCornersResourceId() Loading Loading @@ -126,9 +125,7 @@ constructor( if (TopUiControllerRefactor.isEnabled) { topUiController.setRequestTopUi(false, TAG) } else { runOnMainThread { notificationShadeWindowController.setRequestTopUi(false, TAG) } runOnMainThread { notificationShadeWindowController.setRequestTopUi(false, TAG) } } } Loading
packages/SystemUI/src/com/android/systemui/topwindoweffects/dagger/TopLevelWindowEffectsModule.kt +47 −17 Original line number Diff line number Diff line Loading @@ -16,21 +16,25 @@ package com.android.systemui.topwindoweffects.dagger import android.os.Handler import android.os.Looper import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.shared.Flags.enableLppAssistInvocationEffect import com.android.systemui.topwindoweffects.TopLevelWindowEffects import dagger.Binds import com.android.systemui.topwindoweffects.qualifiers.TopLevelWindowEffectsThread import dagger.Module import dagger.Provides import dagger.multibindings.ClassKey import dagger.multibindings.IntoMap import java.util.concurrent.Executor import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.asCoroutineDispatcher @Module interface TopLevelWindowEffectsModule { @Binds fun bindTopLevelWindowEffectsCoreStartable(impl: TopLevelWindowEffects): CoreStartable companion object { object TopLevelWindowEffectsModule { @Provides @IntoMap Loading @@ -44,5 +48,31 @@ interface TopLevelWindowEffectsModule { } } } } @Provides @SysUISingleton @TopLevelWindowEffectsThread fun provideTopLevelWindowEffectsHandler(@TopLevelWindowEffectsThread looper: Looper): Handler = Handler(looper) @Provides @SysUISingleton @TopLevelWindowEffectsThread fun provideTopLevelWindowEffectsScope( @TopLevelWindowEffectsThread dispatcher: CoroutineDispatcher ): CoroutineScope = CoroutineScope(dispatcher) @Provides @SysUISingleton @TopLevelWindowEffectsThread fun provideTopLevelWindowEffectsDispatcher( @TopLevelWindowEffectsThread executor: Executor ): CoroutineDispatcher = executor.asCoroutineDispatcher() @Provides @SysUISingleton @TopLevelWindowEffectsThread fun provideTopLevelWindowEffectsContext( @TopLevelWindowEffectsThread dispatcher: CoroutineDispatcher ): CoroutineContext = dispatcher }