Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f65a2e2 authored by Fabián Kozynski's avatar Fabián Kozynski
Browse files

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
parent a17d435d
Loading
Loading
Loading
Loading
+49 −44
Original line number Diff line number Diff line
@@ -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,23 +245,27 @@ constructor(
    private fun Content() {
        PlatformTheme(isDarkTheme = true) {
            ProvideShortcutHelperIndication(interactionsConfig = interactionsConfig()) {
                AnimatedVisibility(
                    visible = viewModel.isQsVisibleAndAnyShadeExpanded,
                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())
                                    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),
                                // 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
@@ -285,7 +288,8 @@ constructor(
                                            .padding(top = { qqsPadding })
                                            .padding(
                                                horizontal = {
                                                QuickSettingsShade.Dimensions.Padding.roundToPx()
                                                    QuickSettingsShade.Dimensions.Padding
                                                        .roundToPx()
                                                }
                                            ),
                                )
@@ -297,6 +301,7 @@ constructor(
                }
            }
        }
    }

    /**
     * STL that contains both QQS (tiles) and QS (brightness, tiles, footer actions), but no Edit