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

Commit 833975ac authored by Yining Liu's avatar Yining Liu Committed by Automerger Merge Worker
Browse files

Merge "Remove obsolete shadow logic from StackScrollAlgorithm...

Merge "Remove obsolete shadow logic from StackScrollAlgorithm updateChildZValue" into tm-qpr-dev am: be2f4b96 am: d0c44070

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20583231



Change-Id: Ieff2fa639bf36fc909ea7ea0b396e7eb01b5776c
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 37c11b04 d0c44070
Loading
Loading
Loading
Loading
+16 −28
Original line number Diff line number Diff line
@@ -871,8 +871,7 @@ public class StackScrollAlgorithm {
        }

        for (int i = childCount - 1; i >= 0; i--) {
            childrenOnTop = updateChildZValue(i, childrenOnTop,
                    algorithmState, ambientState, i == topHunIndex);
            updateChildZValue(i, algorithmState, ambientState, i == topHunIndex);
        }
    }

@@ -882,12 +881,8 @@ public class StackScrollAlgorithm {
     *
     * @param isTopHun      Whether the child is a top HUN. A top HUN means a HUN that shows on the
     *                      vertically top of screen. Top HUNs should have drop shadows
     * @param childrenOnTop It is greater than 0 when there's an existing HUN that is elevated
     * @return childrenOnTop The decimal part represents the fraction of the elevated HUN's height
     *                      that overlaps with QQS Panel. The integer part represents the count of
     *                      previous HUNs whose Z positions are greater than 0.
     */
    protected float updateChildZValue(int i, float childrenOnTop,
    protected void updateChildZValue(int i,
                                     StackScrollAlgorithmState algorithmState,
                                     AmbientState ambientState,
                                     boolean isTopHun) {
@@ -904,22 +899,16 @@ public class StackScrollAlgorithm {
            // Handles HUN shadow when Shade is opened, and AmbientState.mScrollY > 0
            // Calculate the HUN's z-value based on its overlapping fraction with QQS Panel.
            // When scrolling down shade to make HUN back to in-position in Notification Panel,
            // The over-lapping fraction goes to 0, and shadows hides gradually.
            if (childrenOnTop != 0.0f) {
                // To elevate the later HUN over previous HUN
                childrenOnTop++;
            } else {
            // the overlapFraction goes to 0, and the pinned HUN's shadows hides gradually.
            float overlap = ambientState.getTopPadding()
                    + ambientState.getStackTranslation() - childViewState.getYTranslation();
                // To prevent over-shadow during HUN entry
                childrenOnTop += Math.min(
                        1.0f,
                        overlap / childViewState.height
                );
                MathUtils.saturate(childrenOnTop);
            }

            if (childViewState.height > 0) { // To avoid 0/0 problems
                // To prevent over-shadow
                float overlapFraction = MathUtils.saturate(overlap / childViewState.height);
                childViewState.setZTranslation(baseZ
                    + childrenOnTop * mPinnedZTranslationExtra);
                        + overlapFraction * mPinnedZTranslationExtra);
            }
        } else if (isTopHun) {
            // In case this is a new view that has never been measured before, we don't want to
            // elevate if we are currently expanded more than the notification
@@ -947,15 +936,14 @@ public class StackScrollAlgorithm {
        }

        // Handles HUN shadow when shade is closed.
        // While HUN is showing and Shade is closed: headerVisibleAmount stays 0, shadow stays.
        // While shade is closed, and during HUN's entry: headerVisibleAmount stays 0, shadow stays.
        // While shade is closed, and HUN is showing: headerVisibleAmount stays 0, shadow stays.
        // During HUN-to-Shade (eg. dragging down HUN to open Shade): headerVisibleAmount goes
        // gradually from 0 to 1, shadow hides gradually.
        // Header visibility is a deprecated concept, we are using headerVisibleAmount only because
        // this value nicely goes from 0 to 1 during the HUN-to-Shade process.

        childViewState.setZTranslation(childViewState.getZTranslation()
                + (1.0f - child.getHeaderVisibleAmount()) * mPinnedZTranslationExtra);
        return childrenOnTop;
    }

    public void setIsExpanded(boolean isExpanded) {
+10 −12
Original line number Diff line number Diff line
@@ -518,7 +518,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
                isShadeOpen = true,
                fullyVisible = false,
                headerVisibleAmount = 1f
                headerVisibleAmount = 1f,
        )
        val algorithmState = StackScrollAlgorithm.StackScrollAlgorithmState()
        algorithmState.visibleChildren.add(childHunView)
@@ -526,7 +526,6 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
@@ -546,7 +545,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
                isShadeOpen = true,
                fullyVisible = false,
                headerVisibleAmount = 1f
                headerVisibleAmount = 1f,
        )
        // Use half of the HUN's height as overlap
        childHunView.viewState.yTranslation = (childHunView.viewState.height + 1 shr 1).toFloat()
@@ -556,7 +555,6 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
@@ -580,7 +578,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
                isShadeOpen = true,
                fullyVisible = true,
                headerVisibleAmount = 1f
                headerVisibleAmount = 1f,
        )
        // HUN doesn't overlap with QQS Panel
        childHunView.viewState.yTranslation = ambientState.topPadding +
@@ -591,7 +589,6 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
@@ -611,7 +608,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
                isShadeOpen = false,
                fullyVisible = false,
                headerVisibleAmount = 0f
                headerVisibleAmount = 0f,
        )
        childHunView.viewState.yTranslation = 0f
        // Shade is closed, thus childHunView's headerVisibleAmount is 0
@@ -622,7 +619,6 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
@@ -642,7 +638,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
                isShadeOpen = false,
                fullyVisible = false,
                headerVisibleAmount = 0.5f
                headerVisibleAmount = 0.5f,
        )
        childHunView.viewState.yTranslation = 0f
        // Shade is being opened, thus childHunView's headerVisibleAmount is between 0 and 1
@@ -654,7 +650,6 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
@@ -669,7 +664,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
    private fun createHunViewMock(
            isShadeOpen: Boolean,
            fullyVisible: Boolean,
            headerVisibleAmount: Float
            headerVisibleAmount: Float,
    ) =
            mock<ExpandableNotificationRow>().apply {
                val childViewStateMock = createHunChildViewState(isShadeOpen, fullyVisible)
@@ -680,7 +675,10 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
            }


    private fun createHunChildViewState(isShadeOpen: Boolean, fullyVisible: Boolean) =
    private fun createHunChildViewState(
            isShadeOpen: Boolean,
            fullyVisible: Boolean,
    ) =
            ExpandableViewState().apply {
                // Mock the HUN's height with ambientState.topPadding +
                // ambientState.stackTranslation