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

Commit 8aca17bc authored by Fabián Kozynski's avatar Fabián Kozynski Committed by Jordan Demeulenaere
Browse files

Make Compose QS STL match the CUJ start/end signals

Test: manual, perfetto
Bug: 389985793
Flag: com.android.systemui.qs_ui_refactor_compose_fragment
Change-Id: Ie97c9f435806148f3d47743fc52d3ebac09a89bf
parent 2acac35d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -203,6 +203,8 @@ public interface QS extends FragmentBase {
     */
    void setIsNotificationPanelFullWidth(boolean isFullWidth);

    default void setQSExpandingOrCollapsing(boolean isQSExpandingOrCollapsing) {}

    /**
     * Callback for when QSPanel container is scrolled
     */
+37 −16
Original line number Diff line number Diff line
@@ -305,6 +305,7 @@ constructor(
                sceneState,
                viewModel.containerViewModel.editModeViewModel.isEditing,
                snapshotFlow { viewModel.expansionState }.map { it.progress },
                snapshotFlow { viewModel.isQSExpandingOrCollapsing },
            )
        }

@@ -536,6 +537,10 @@ constructor(
        return qqsVisible.value
    }

    override fun setQSExpandingOrCollapsing(isQSExpandingOrCollapsing: Boolean) {
        viewModel.isQSExpandingOrCollapsing = isQSExpandingOrCollapsing
    }

    private fun setListenerCollections() {
        lifecycleScope.launch {
            lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
@@ -876,6 +881,7 @@ private suspend fun synchronizeQsState(
    state: MutableSceneTransitionLayoutState,
    editMode: Flow<Boolean>,
    expansion: Flow<Float>,
    isQSExpandingOrCollapsing: Flow<Boolean>,
) {
    coroutineScope {
        val animationScope = this
@@ -887,25 +893,42 @@ private suspend fun synchronizeQsState(
            currentTransition = null
        }

        editMode.combine(expansion, ::Pair).collectLatest { (editMode, progress) ->
        var lastValidProgress = 0f
        combine(editMode, expansion, isQSExpandingOrCollapsing, ::Triple).collectLatest {
            (editMode, progress, isQSExpandingOrCollapsing) ->
            if (editMode && state.currentScene != SceneKeys.EditMode) {
                state.setTargetScene(SceneKeys.EditMode, animationScope)?.second?.join()
            } else if (!editMode && state.currentScene == SceneKeys.EditMode) {
                state.setTargetScene(SceneKeys.QuickSettings, animationScope)?.second?.join()
            }

            if (!editMode) {
                when (progress) {
                    0f -> snapTo(QuickQuickSettings)
                    1f -> snapTo(QuickSettings)
                    else -> {
                if (!isQSExpandingOrCollapsing) {
                    if (progress == 0f) {
                        snapTo(QuickQuickSettings)
                        return@collectLatest
                    }

                    if (progress == 1f) {
                        snapTo(QuickSettings)
                        return@collectLatest
                    }
                }

                var progress = progress
                if (progress >= 0f || progress <= 1f) {
                    lastValidProgress = progress
                } else {
                    progress = lastValidProgress
                }

                val transition = currentTransition
                if (transition != null) {
                    transition.progress = progress
                    return@collectLatest
                }

                        val newTransition =
                            ExpansionTransition(progress).also { currentTransition = it }
                val newTransition = ExpansionTransition(progress).also { currentTransition = it }
                state.startTransitionImmediately(
                    animationScope = animationScope,
                    transition = newTransition,
@@ -914,8 +937,6 @@ private suspend fun synchronizeQsState(
        }
    }
}
    }
}

private class ExpansionTransition(currentProgress: Float) :
    TransitionState.Transition.ChangeScene(
+3 −1
Original line number Diff line number Diff line
@@ -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
@@ -308,6 +307,8 @@ constructor(
    val animateTilesExpansion: Boolean
        get() = inFirstPage && !mediaSuddenlyAppearingInLandscape

    var isQSExpandingOrCollapsing by mutableStateOf(false)

    private val inFirstPage: Boolean
        get() = inFirstPageViewModel.inFirstPage

@@ -541,6 +542,7 @@ constructor(
                println("proposedTranslation", proposedTranslation)
                println("expansionState", expansionState)
                println("forceQS", forceQs)
                println("isShadeExpandingOrCollapsing", isQSExpandingOrCollapsing)
                printSection("Derived values") {
                    println("headerTranslation", headerTranslation)
                    println("translationScaleY", translationScaleY)
+11 −4
Original line number Diff line number Diff line
@@ -105,15 +105,14 @@ import com.android.systemui.util.kotlin.JavaAdapter;

import dalvik.annotation.optimization.NeverCompile;

import dagger.Lazy;

import kotlin.Unit;

import java.io.PrintWriter;

import javax.inject.Inject;
import javax.inject.Provider;

import dagger.Lazy;
import kotlin.Unit;

/** Handles QuickSettings touch handling, expansion and animation state. */
@SysUISingleton
public class QuickSettingsControllerImpl implements QuickSettingsController, Dumpable {
@@ -2366,8 +2365,16 @@ public class QuickSettingsControllerImpl implements QuickSettingsController, Dum
            return;
        }
        if (startTracing) {
            if (mQs != null) {
                mQs.setQSExpandingOrCollapsing(true);
            }

            monitor.begin(mPanelView, Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
        } else {
            if (mQs != null) {
                mQs.setQSExpandingOrCollapsing(false);
            }

            if (wasCancelled) {
                monitor.cancel(Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
            } else {