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

Commit 3a4fc5af authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge changes I7096693f,I6636d61e into main

* changes:
  Use setQsExpanded to start expansion early
  Add flag for jank improvement
parents 8bde7780 1bdf26ef
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1981,3 +1981,13 @@ flag {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
   name: "qs_compose_fragment_early_expansion"
   namespace: "systemui"
   description: "Start expansion from QQS into QS early when touching the shade."
   bug: "414856236"
   metadata {
     purpose: PURPOSE_BUGFIX
   }
}
+27 −0
Original line number Diff line number Diff line
@@ -19,9 +19,12 @@ package com.android.systemui.qs.composefragment.viewmodel
import android.app.StatusBarManager
import android.content.testableContext
import android.graphics.Rect
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.testing.TestableLooper.RunWithLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_QS_COMPOSE_FRAGMENT_EARLY_EXPANSION
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.testScope
@@ -473,6 +476,30 @@ class QSFragmentComposeViewModelTest : AbstractQSFragmentComposeViewModelTest()
            }
        }

    @Test
    @DisableFlags(FLAG_QS_COMPOSE_FRAGMENT_EARLY_EXPANSION)
    fun minExpansion_expanded_noEarlyExpansion() =
        with(kosmos) {
            testScope.testWithinLifecycle {
                underTest.isQsExpanded = true
                underTest.setQsExpansionValue(0f)

                assertThat(underTest.expansionState.progress).isEqualTo(0f)
            }
        }

    @Test
    @EnableFlags(FLAG_QS_COMPOSE_FRAGMENT_EARLY_EXPANSION)
    fun minExpansion_expanded_earlyExpansion() =
        with(kosmos) {
            testScope.testWithinLifecycle {
                underTest.isQsExpanded = true
                underTest.setQsExpansionValue(0f)

                assertThat(underTest.expansionState.progress).isGreaterThan(0f)
            }
        }

    private fun TestScope.setMediaState(state: MediaState) {
        with(kosmos) {
            val activeMedia = state == ACTIVE_MEDIA
+2 −1
Original line number Diff line number Diff line
@@ -847,7 +847,8 @@ constructor(
                                                    derivedStateOf {
                                                        viewModel.isQsVisibleAndAnyShadeExpanded &&
                                                            viewModel.expansionState.progress >
                                                                0f &&
                                                                QSFragmentComposeViewModel
                                                                    .QS_LISTENING_THRESHOLD &&
                                                            !viewModel.isEditing
                                                    }
                                                }
+10 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.internal.logging.UiEventLogger
import com.android.keyguard.BouncerPanelExpansionCalculator
import com.android.systemui.Dumpable
import com.android.systemui.Flags.qsComposeFragmentEarlyExpansion
import com.android.systemui.animation.ShadeInterpolation
import com.android.systemui.classifier.Classifier
import com.android.systemui.classifier.domain.interactor.FalsingInteractor
@@ -215,7 +216,7 @@ constructor(
        if (forceQs) {
            QSExpansionState(1f)
        } else {
            QSExpansionState(qsExpansion.coerceIn(0f, 1f))
            QSExpansionState(qsExpansion.coerceIn(if (isQsExpanded) EARLY_EXPANSION else 0f, 1f))
        }
    }

@@ -587,6 +588,14 @@ constructor(

    // In the future, this may have other relevant elements.
    data class QSExpansionState(@FloatRange(0.0, 1.0) val progress: Float)

    companion object {
        private val EARLY_EXPANSION
            get() = if (qsComposeFragmentEarlyExpansion()) 1.0E-6F else 0f

        val QS_LISTENING_THRESHOLD
            get() = EARLY_EXPANSION * 2
    }
}

private fun Float.constrainSquishiness(): Float {
+16 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.shade;

import static android.view.WindowInsets.Type.ime;

import static com.android.systemui.Flags.qsComposeFragmentEarlyExpansion;
import static com.android.systemui.classifier.Classifier.QS_COLLAPSE;
import static com.android.systemui.shade.NotificationPanelViewController.COUNTER_PANEL_OPEN_QS;
import static com.android.systemui.shade.NotificationPanelViewController.FLING_COLLAPSE;
@@ -1659,6 +1660,9 @@ public class QuickSettingsControllerImpl implements QuickSettingsController, Dum
            mInitialHeightOnTouch = mExpansionHeight;
            mInitialTouchY = event.getY();
            mInitialTouchX = event.getX();
            if (qsComposeFragmentEarlyExpansion() && mQs != null) {
                mQs.setExpanded(true);
            }
        }
        if (!isFullyCollapsed && !isShadeOrQsHeightAnimationRunning) {
            handleDown(event);
@@ -1677,6 +1681,9 @@ public class QuickSettingsControllerImpl implements QuickSettingsController, Dum
        }
        if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
            mConflictingExpansionGesture = false;
            if (qsComposeFragmentEarlyExpansion()) {
                updateQsState();
            }
        }
        if (action == MotionEvent.ACTION_DOWN && isFullyCollapsed && isExpansionEnabled()) {
            mTwoFingerExpandPossible = true;
@@ -1745,6 +1752,9 @@ public class QuickSettingsControllerImpl implements QuickSettingsController, Dum
                mInitialHeightOnTouch = mExpansionHeight;
                initVelocityTracker();
                trackMovement(event);
                if (qsComposeFragmentEarlyExpansion() && mQs != null) {
                    mQs.setExpanded(true);
                }
                break;

            case MotionEvent.ACTION_POINTER_UP:
@@ -1782,6 +1792,9 @@ public class QuickSettingsControllerImpl implements QuickSettingsController, Dum
                    flingQsWithCurrentVelocity(y,
                            event.getActionMasked() == MotionEvent.ACTION_CANCEL);
                } else {
                    if (qsComposeFragmentEarlyExpansion()) {
                        updateQsState();
                    }
                    traceQsJank(false,
                            event.getActionMasked() == MotionEvent.ACTION_CANCEL);
                }
@@ -1867,6 +1880,9 @@ public class QuickSettingsControllerImpl implements QuickSettingsController, Dum
                    mInitialTouchY = y;
                    mInitialTouchX = x;
                    mNotificationStackScrollLayoutController.cancelLongPress();
                    if (qsComposeFragmentEarlyExpansion() && mQs != null) {
                        mQs.setExpanded(true);
                    }
                    return true;
                } else {
                    mShadeLog.logQsTrackingNotStarted(mInitialTouchY, y, h, touchSlop,