diff options
author | 2024-12-09 13:01:40 -0500 | |
---|---|---|
committer | 2024-12-09 15:40:37 -0500 | |
commit | 7f65a2e216e9511d0f9a917a6671cb449a8e65db (patch) | |
tree | c574afcc64f53562db99480d4aa24219e299e290 | |
parent | a17d435dc69d972c3b3d6520bda9247871f0e7fd (diff) |
Fix flash of QQS when collapsing in Keyguard
The issue was that qsVisible became false (same for
clippingParams.isEnabled), so QQS was not being clipped anymore, but the
AnimatedVisibility would then play its exit animation making QQS visible
for a frame. This was not observed outside of lockscreen because there,
QQS is always marked as visible (this is an upstream issue that we
resolve by also checking if the shade is expanded).
To solve this flashing issue, replace the AnimatedVisibility with an if
block. This is not an issue because all animations for QQS/QS (like
alpha) are controlled externally.
Test: manual, fling collapse QQS in lockscreen
Fixes: 380416826
Flag: com.android.systemui.qs_ui_refactor_compose_fragment
Change-Id: I2db2a4f365ad74db9971cc0d11638918a3fbddd6
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt | 93 |
1 files changed, 49 insertions, 44 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt b/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt index 4cf6aab30596..5b8ac6408077 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt @@ -33,7 +33,6 @@ import androidx.activity.OnBackPressedDispatcherOwner import androidx.activity.setViewTreeOnBackPressedDispatcherOwner import androidx.annotation.VisibleForTesting import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut @@ -246,51 +245,57 @@ constructor( private fun Content() { PlatformTheme(isDarkTheme = true) { ProvideShortcutHelperIndication(interactionsConfig = interactionsConfig()) { - AnimatedVisibility( - visible = viewModel.isQsVisibleAndAnyShadeExpanded, - modifier = - Modifier.graphicsLayer { alpha = viewModel.viewAlpha } - // Clipping before translation to match QSContainerImpl.onDraw - .offset { - IntOffset(x = 0, y = viewModel.viewTranslationY.fastRoundToInt()) - } - .thenIf(notificationScrimClippingParams.isEnabled) { - Modifier.notificationScrimClip { - notificationScrimClippingParams.params + if (viewModel.isQsVisibleAndAnyShadeExpanded) { + Box( + modifier = + Modifier.graphicsLayer { alpha = viewModel.viewAlpha } + // Clipping before translation to match QSContainerImpl.onDraw + .offset { + IntOffset( + x = 0, + y = viewModel.viewTranslationY.fastRoundToInt(), + ) } + .thenIf(notificationScrimClippingParams.isEnabled) { + Modifier.notificationScrimClip { + notificationScrimClippingParams.params + } + } + // Disable touches in the whole composable while the mirror is + // showing. While the mirror is showing, an ancestor of the + // ComposeView is made alpha 0, but touches are still being captured + // by the composables. + .gesturesDisabled(viewModel.showingMirror) + ) { + val isEditing by + viewModel.containerViewModel.editModeViewModel.isEditing + .collectAsStateWithLifecycle() + val animationSpecEditMode = tween<Float>(EDIT_MODE_TIME_MILLIS) + AnimatedContent( + targetState = isEditing, + transitionSpec = { + fadeIn(animationSpecEditMode) togetherWith + fadeOut(animationSpecEditMode) + }, + label = "EditModeAnimatedContent", + ) { editing -> + if (editing) { + val qqsPadding = viewModel.qqsHeaderHeight + EditMode( + viewModel = viewModel.containerViewModel.editModeViewModel, + modifier = + Modifier.fillMaxWidth() + .padding(top = { qqsPadding }) + .padding( + horizontal = { + QuickSettingsShade.Dimensions.Padding + .roundToPx() + } + ), + ) + } else { + CollapsableQuickSettingsSTL() } - // Disable touches in the whole composable while the mirror is showing. - // While the mirror is showing, an ancestor of the ComposeView is made - // alpha 0, but touches are still being captured by the composables. - .gesturesDisabled(viewModel.showingMirror), - ) { - val isEditing by - viewModel.containerViewModel.editModeViewModel.isEditing - .collectAsStateWithLifecycle() - val animationSpecEditMode = tween<Float>(EDIT_MODE_TIME_MILLIS) - AnimatedContent( - targetState = isEditing, - transitionSpec = { - fadeIn(animationSpecEditMode) togetherWith - fadeOut(animationSpecEditMode) - }, - label = "EditModeAnimatedContent", - ) { editing -> - if (editing) { - val qqsPadding = viewModel.qqsHeaderHeight - EditMode( - viewModel = viewModel.containerViewModel.editModeViewModel, - modifier = - Modifier.fillMaxWidth() - .padding(top = { qqsPadding }) - .padding( - horizontal = { - QuickSettingsShade.Dimensions.Padding.roundToPx() - } - ), - ) - } else { - CollapsableQuickSettingsSTL() } } } |