Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModelTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -46,12 +46,14 @@ import com.android.systemui.statusbar.disableflags.shared.model.DisableFlagsMode import com.android.systemui.statusbar.sysuiStatusBarStateController import com.android.systemui.util.animation.DisappearParameters import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.whenever @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @RunWith(AndroidJUnit4::class) @RunWithLooper Loading Loading @@ -457,6 +459,20 @@ class QSFragmentComposeViewModelTest : AbstractQSFragmentComposeViewModelTest() } } @Test fun isEditing() = with(kosmos) { testScope.testWithinLifecycle { underTest.containerViewModel.editModeViewModel.startEditing() runCurrent() assertThat(underTest.isEditing).isTrue() underTest.containerViewModel.editModeViewModel.stopEditing() runCurrent() assertThat(underTest.isEditing).isFalse() } } private fun TestScope.setMediaState(state: MediaState) { with(kosmos) { val activeMedia = state == ACTIVE_MEDIA Loading packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt +5 −3 Original line number Diff line number Diff line Loading @@ -421,7 +421,7 @@ constructor( } override fun isCustomizing(): Boolean { return viewModel.containerViewModel.editModeViewModel.isEditing.value return viewModel.isEditing } override fun closeCustomizer() { Loading Loading @@ -657,7 +657,8 @@ constructor( */ !alwaysCompose || (viewModel.isQsVisibleAndAnyShadeExpanded && viewModel.expansionState.progress < 1f) viewModel.expansionState.progress < 1f && !viewModel.isEditing) }, ) } Loading Loading @@ -784,7 +785,8 @@ constructor( */ !alwaysCompose || (viewModel.isQsVisibleAndAnyShadeExpanded && viewModel.expansionState.progress > 0f) viewModel.expansionState.progress > 0f && !viewModel.isEditing) }, ) } Loading packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt +6 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,6 @@ import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.classifier.Classifier import com.android.systemui.classifier.domain.interactor.FalsingInteractor import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.shared.model.Edge Loading Loading @@ -307,6 +306,12 @@ constructor( val animateTilesExpansion: Boolean get() = inFirstPage && !mediaSuddenlyAppearingInLandscape val isEditing by hydrator.hydratedStateOf( traceName = "isEditing", source = containerViewModel.editModeViewModel.isEditing, ) private val inFirstPage: Boolean get() = inFirstPageViewModel.inFirstPage Loading packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PaginatedGridLayout.kt +9 −0 Original line number Diff line number Diff line Loading @@ -85,6 +85,15 @@ constructor( val pagerState = rememberPagerState(0) { pages.size } LaunchedEffect(listening, pagerState) { snapshotFlow { listening() } .collect { if (!listening()) { pagerState.scrollToPage(0) } } } // Used to track if this is currently in the first page or not, for animations LaunchedEffect(key1 = pagerState) { snapshotFlow { pagerState.currentPage == 0 }.collect { viewModel.inFirstPage = it } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModelTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -46,12 +46,14 @@ import com.android.systemui.statusbar.disableflags.shared.model.DisableFlagsMode import com.android.systemui.statusbar.sysuiStatusBarStateController import com.android.systemui.util.animation.DisappearParameters import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.whenever @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @RunWith(AndroidJUnit4::class) @RunWithLooper Loading Loading @@ -457,6 +459,20 @@ class QSFragmentComposeViewModelTest : AbstractQSFragmentComposeViewModelTest() } } @Test fun isEditing() = with(kosmos) { testScope.testWithinLifecycle { underTest.containerViewModel.editModeViewModel.startEditing() runCurrent() assertThat(underTest.isEditing).isTrue() underTest.containerViewModel.editModeViewModel.stopEditing() runCurrent() assertThat(underTest.isEditing).isFalse() } } private fun TestScope.setMediaState(state: MediaState) { with(kosmos) { val activeMedia = state == ACTIVE_MEDIA Loading
packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt +5 −3 Original line number Diff line number Diff line Loading @@ -421,7 +421,7 @@ constructor( } override fun isCustomizing(): Boolean { return viewModel.containerViewModel.editModeViewModel.isEditing.value return viewModel.isEditing } override fun closeCustomizer() { Loading Loading @@ -657,7 +657,8 @@ constructor( */ !alwaysCompose || (viewModel.isQsVisibleAndAnyShadeExpanded && viewModel.expansionState.progress < 1f) viewModel.expansionState.progress < 1f && !viewModel.isEditing) }, ) } Loading Loading @@ -784,7 +785,8 @@ constructor( */ !alwaysCompose || (viewModel.isQsVisibleAndAnyShadeExpanded && viewModel.expansionState.progress > 0f) viewModel.expansionState.progress > 0f && !viewModel.isEditing) }, ) } Loading
packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt +6 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,6 @@ import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.classifier.Classifier import com.android.systemui.classifier.domain.interactor.FalsingInteractor import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.shared.model.Edge Loading Loading @@ -307,6 +306,12 @@ constructor( val animateTilesExpansion: Boolean get() = inFirstPage && !mediaSuddenlyAppearingInLandscape val isEditing by hydrator.hydratedStateOf( traceName = "isEditing", source = containerViewModel.editModeViewModel.isEditing, ) private val inFirstPage: Boolean get() = inFirstPageViewModel.inFirstPage Loading
packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PaginatedGridLayout.kt +9 −0 Original line number Diff line number Diff line Loading @@ -85,6 +85,15 @@ constructor( val pagerState = rememberPagerState(0) { pages.size } LaunchedEffect(listening, pagerState) { snapshotFlow { listening() } .collect { if (!listening()) { pagerState.scrollToPage(0) } } } // Used to track if this is currently in the first page or not, for animations LaunchedEffect(key1 = pagerState) { snapshotFlow { pagerState.currentPage == 0 }.collect { viewModel.inFirstPage = it } Loading