diff options
| author | 2023-12-07 20:34:59 +0000 | |
|---|---|---|
| committer | 2023-12-07 20:34:59 +0000 | |
| commit | 0cdf58e28f34e94fbb951a6c16267f9f026258d4 (patch) | |
| tree | 2f23f6c929667badcde402117ae80328a177c400 | |
| parent | 7ce1093c800d40e8ed8d27ebf638e00e2a0d0325 (diff) | |
| parent | 711d5b4a1e63b36c59a3e424f8f75c82be778bb4 (diff) | |
Merge "Replace ShadeRepository.shadeModel" into main
8 files changed, 20 insertions, 177 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt index cbfd17ff7ae4..9fe5c3f53d96 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt @@ -214,7 +214,7 @@ constructor( private fun listenForLockscreenToPrimaryBouncerDragging() { var transitionId: UUID? = null scope.launch("$TAG#listenForLockscreenToPrimaryBouncerDragging") { - shadeRepository.shadeModel + shadeRepository.legacyShadeExpansion .sample( combine( transitionInteractor.startedKeyguardTransitionStep, @@ -224,23 +224,23 @@ constructor( ), ::toQuad ) - .collect { (shadeModel, keyguardState, statusBarState, isKeyguardUnlocked) -> + .collect { (shadeExpansion, keyguardState, statusBarState, isKeyguardUnlocked) -> val id = transitionId if (id != null) { if (keyguardState.to == KeyguardState.PRIMARY_BOUNCER) { // An existing `id` means a transition is started, and calls to // `updateTransition` will control it until FINISHED or CANCELED var nextState = - if (shadeModel.expansionAmount == 0f) { + if (shadeExpansion == 0f) { TransitionState.FINISHED - } else if (shadeModel.expansionAmount == 1f) { + } else if (shadeExpansion == 1f) { TransitionState.CANCELED } else { TransitionState.RUNNING } transitionRepository.updateTransition( id, - 1f - shadeModel.expansionAmount, + 1f - shadeExpansion, nextState, ) @@ -274,7 +274,7 @@ constructor( // integrated into KeyguardTransitionRepository if ( keyguardState.to == KeyguardState.LOCKSCREEN && - shadeModel.isUserDragging && + shadeRepository.legacyShadeTracking.value && !isKeyguardUnlocked && statusBarState == KEYGUARD ) { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt index 702386d3b498..c12efe875b0b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt @@ -224,8 +224,8 @@ constructor( configurationInteractor .dimensionPixelSize(R.dimen.keyguard_translate_distance_on_swipe_up) .flatMapLatest { translationDistance -> - shadeRepository.shadeModel.map { - if (it.expansionAmount == 0f) { + shadeRepository.legacyShadeExpansion.map { + if (it == 0f) { // Reset the translation value 0f } else { @@ -233,7 +233,7 @@ constructor( MathUtils.lerp( translationDistance, 0, - Interpolators.FAST_OUT_LINEAR_IN.getInterpolation(it.expansionAmount) + Interpolators.FAST_OUT_LINEAR_IN.getInterpolation(it) ) } } diff --git a/packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt b/packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt index e94a3eb5db22..2445bdb17955 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt @@ -15,25 +15,14 @@ */ package com.android.systemui.shade.data.repository -import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging -import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.shade.ShadeExpansionChangeEvent -import com.android.systemui.shade.ShadeExpansionListener -import com.android.systemui.shade.ShadeExpansionStateManager -import com.android.systemui.shade.domain.model.ShadeModel import javax.inject.Inject -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.distinctUntilChanged +/** Data for the shade, mostly related to expansion of the shade and quick settings. */ interface ShadeRepository { - /** ShadeModel information regarding shade expansion events */ - val shadeModel: Flow<ShadeModel> - /** * Amount qs has expanded, [0-1]. 0 means fully collapsed, 1 means fully expanded. Quick * Settings can be expanded without the full shade expansion. @@ -167,34 +156,7 @@ interface ShadeRepository { /** Business logic for shade interactions */ @SysUISingleton -class ShadeRepositoryImpl -@Inject -constructor(shadeExpansionStateManager: ShadeExpansionStateManager) : ShadeRepository { - override val shadeModel: Flow<ShadeModel> = - conflatedCallbackFlow { - val callback = - object : ShadeExpansionListener { - override fun onPanelExpansionChanged(event: ShadeExpansionChangeEvent) { - // Don't propagate ShadeExpansionChangeEvent.dragDownPxAmount field. - // It is too noisy and produces extra events that consumers won't care - // about - val info = - ShadeModel( - expansionAmount = event.fraction, - isExpanded = event.expanded, - isUserDragging = event.tracking - ) - trySendWithFailureLogging(info, TAG, "updated shade expansion info") - } - } - - val currentState = shadeExpansionStateManager.addExpansionListener(callback) - callback.onPanelExpansionChanged(currentState) - - awaitClose { shadeExpansionStateManager.removeExpansionListener(callback) } - } - .distinctUntilChanged() - +class ShadeRepositoryImpl @Inject constructor() : ShadeRepository { private val _qsExpansion = MutableStateFlow(0f) override val qsExpansion: StateFlow<Float> = _qsExpansion.asStateFlow() diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/model/ShadeModel.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/model/ShadeModel.kt deleted file mode 100644 index ce0f4283ff83..000000000000 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/model/ShadeModel.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ -package com.android.systemui.shade.domain.model - -import android.annotation.FloatRange - -/** Information about shade (NotificationPanel) expansion */ -data class ShadeModel( - /** 0 when collapsed, 1 when fully expanded. */ - @FloatRange(from = 0.0, to = 1.0) val expansionAmount: Float = 0f, - /** Whether the panel should be considered expanded */ - val isExpanded: Boolean = false, - /** Whether the user is actively dragging the panel. */ - val isUserDragging: Boolean = false, -) diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/DefaultUdfpsTouchOverlayViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/DefaultUdfpsTouchOverlayViewModelTest.kt index 575d8bf8248c..fa176728619b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/DefaultUdfpsTouchOverlayViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/DefaultUdfpsTouchOverlayViewModelTest.kt @@ -30,7 +30,6 @@ import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.runCurrent import com.android.systemui.runTest import com.android.systemui.shade.data.repository.FakeShadeRepository -import com.android.systemui.shade.domain.model.ShadeModel import com.android.systemui.statusbar.phone.SystemUIDialogManager import com.android.systemui.user.domain.UserDomainLayerModule import com.android.systemui.util.mockito.mock @@ -83,23 +82,13 @@ class DefaultUdfpsTouchOverlayViewModelTest : SysuiTestCase() { private fun TestComponent.shadeExpanded(expanded: Boolean) { if (expanded) { - shadeRepository.setShadeModel( - ShadeModel( - expansionAmount = 1f, - isExpanded = true, - isUserDragging = false, - ) - ) + shadeRepository.setLegacyShadeExpansion(1f) + shadeRepository.setLegacyShadeTracking(false) shadeRepository.setLegacyExpandedOrAwaitingInputTransfer(true) } else { keyguardRepository.setStatusBarState(StatusBarState.SHADE) - shadeRepository.setShadeModel( - ShadeModel( - expansionAmount = 0f, - isExpanded = false, - isUserDragging = false, - ) - ) + shadeRepository.setLegacyShadeExpansion(0f) + shadeRepository.setLegacyShadeTracking(false) shadeRepository.setLegacyExpandedOrAwaitingInputTransfer(false) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt index bf6d5c4535ec..976dc5f01ff9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt @@ -43,7 +43,6 @@ import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.se import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest import com.android.systemui.power.domain.interactor.PowerInteractorFactory import com.android.systemui.shade.data.repository.FakeShadeRepository -import com.android.systemui.shade.domain.model.ShadeModel import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock @@ -1329,12 +1328,8 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { // GIVEN the keyguard is showing locked keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) runCurrent() - shadeRepository.setShadeModel( - ShadeModel( - expansionAmount = .9f, - isUserDragging = true, - ) - ) + shadeRepository.setLegacyShadeTracking(true) + shadeRepository.setLegacyShadeExpansion(.9f) runCurrent() // THEN a transition from LOCKSCREEN => PRIMARY_BOUNCER should occur @@ -1350,12 +1345,8 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { // WHEN the user stops dragging and shade is back to expanded clearInvocations(transitionRepository) runTransitionAndSetWakefulness(KeyguardState.LOCKSCREEN, KeyguardState.PRIMARY_BOUNCER) - shadeRepository.setShadeModel( - ShadeModel( - expansionAmount = 1f, - isUserDragging = false, - ) - ) + shadeRepository.setLegacyShadeTracking(false) + shadeRepository.setLegacyShadeExpansion(1f) runCurrent() // THEN a transition from PRIMARY_BOUNCER => LOCKSCREEN should occur diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt index f8aa359b569d..750693c483a2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt @@ -19,33 +19,20 @@ package com.android.systemui.shade.data.repository import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase -import com.android.systemui.shade.ShadeExpansionChangeEvent -import com.android.systemui.shade.ShadeExpansionStateManager -import com.android.systemui.shade.domain.model.ShadeModel -import com.android.systemui.util.mockito.any -import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope -import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.Mockito.verify -import org.mockito.Mockito.`when` -import org.mockito.MockitoAnnotations @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @RunWith(AndroidJUnit4::class) class ShadeRepositoryImplTest : SysuiTestCase() { - @Mock private lateinit var shadeExpansionStateManager: ShadeExpansionStateManager private val testDispatcher = StandardTestDispatcher() private val testScope = TestScope(testDispatcher) @@ -53,57 +40,10 @@ class ShadeRepositoryImplTest : SysuiTestCase() { @Before fun setUp() { - MockitoAnnotations.initMocks(this) - - underTest = ShadeRepositoryImpl(shadeExpansionStateManager) - `when`(shadeExpansionStateManager.addExpansionListener(any())) - .thenReturn(ShadeExpansionChangeEvent(0f, false, false, 0f)) + underTest = ShadeRepositoryImpl() } @Test - fun shadeExpansionChangeEvent() = - testScope.runTest { - var latest: ShadeModel? = null - val job = underTest.shadeModel.onEach { latest = it }.launchIn(this) - runCurrent() - assertThat(latest?.expansionAmount).isEqualTo(0f) - assertThat(latest?.isExpanded).isEqualTo(false) - assertThat(latest?.isUserDragging).isEqualTo(false) - - val captor = withArgCaptor { - verify(shadeExpansionStateManager).addExpansionListener(capture()) - } - - captor.onPanelExpansionChanged( - ShadeExpansionChangeEvent( - fraction = 1f, - expanded = true, - tracking = false, - dragDownPxAmount = 0f, - ) - ) - runCurrent() - assertThat(latest?.expansionAmount).isEqualTo(1f) - assertThat(latest?.isExpanded).isEqualTo(true) - assertThat(latest?.isUserDragging).isEqualTo(false) - - captor.onPanelExpansionChanged( - ShadeExpansionChangeEvent( - fraction = .67f, - expanded = false, - tracking = true, - dragDownPxAmount = 0f, - ) - ) - runCurrent() - assertThat(latest?.expansionAmount).isEqualTo(.67f) - assertThat(latest?.isExpanded).isEqualTo(false) - assertThat(latest?.isUserDragging).isEqualTo(true) - - job.cancel() - } - - @Test fun updateQsExpansion() = testScope.runTest { assertThat(underTest.qsExpansion.value).isEqualTo(0f) diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt index 9c108487e4c5..f7005ab45ea0 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt @@ -18,21 +18,14 @@ package com.android.systemui.shade.data.repository import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.shade.domain.model.ShadeModel import dagger.Binds import dagger.Module import javax.inject.Inject -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow /** Fake implementation of [ShadeRepository] */ @SysUISingleton class FakeShadeRepository @Inject constructor() : ShadeRepository { - - private val _shadeModel = MutableStateFlow(ShadeModel()) - override val shadeModel: Flow<ShadeModel> = _shadeModel - private val _qsExpansion = MutableStateFlow(0f) override val qsExpansion = _qsExpansion @@ -114,10 +107,6 @@ class FakeShadeRepository @Inject constructor() : ShadeRepository { _legacyIsClosing.value = isClosing } - fun setShadeModel(model: ShadeModel) { - _shadeModel.value = model - } - override fun setQsExpansion(qsExpansion: Float) { _qsExpansion.value = qsExpansion } |