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

Commit 3e531f56 authored by András Kurucz's avatar András Kurucz
Browse files

Fix alpha fading of NotificationShelf in LS

While we are on the LS and we close the Shade, the NotificationShelf
alpha was not animating. Now we share the same logic for calculating the
alpha values for the ExpandableNotificationRows and the
NotificationShelf.

Added new testCases to StackScrollAlgorithmTest to check an intermediate
state of the animated alpha values. Previously it was only checking the
end state, which is 0.0f.

Test: atest NotificationShelfTest
Test: atest StackScrollAlgorithmTest

Fixes: 237339523
Change-Id: I97b734d296397b6e2587512ff96ab62d976b6192
parent 7b46b29b
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.systemui.statusbar;

import static com.android.keyguard.BouncerPanelExpansionCalculator.aboutToShowBouncerProgress;

import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -90,6 +92,12 @@ public class NotificationShelf extends ActivatableNotificationView implements
        super(context, attrs);
    }

    @VisibleForTesting
    public NotificationShelf(Context context, AttributeSet attrs, boolean showNotificationShelf) {
        super(context, attrs);
        mShowNotificationShelf = showNotificationShelf;
    }

    @Override
    @VisibleForTesting
    public void onFinishInflate() {
@@ -175,7 +183,11 @@ public class NotificationShelf extends ActivatableNotificationView implements

            if (ambientState.isExpansionChanging() && !ambientState.isOnKeyguard()) {
                float expansion = ambientState.getExpansionFraction();
                if (ambientState.isBouncerInTransit()) {
                    viewState.alpha = aboutToShowBouncerProgress(expansion);
                } else {
                    viewState.alpha = ShadeInterpolation.getContentAlpha(expansion);
                }
            } else {
                viewState.alpha = 1f - ambientState.getHideAmount();
            }
+73 −10
Original line number Diff line number Diff line
@@ -3,15 +3,22 @@ package com.android.systemui.statusbar.notification.stack
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
import androidx.test.filters.SmallTest
import com.android.keyguard.BouncerPanelExpansionCalculator.aboutToShowBouncerProgress
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.ShadeInterpolation
import com.android.systemui.statusbar.NotificationShelf
import com.android.systemui.statusbar.StatusBarIconView
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView
import junit.framework.Assert.*
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.StackScrollAlgorithmState
import com.android.systemui.util.mockito.mock
import junit.framework.Assert.assertEquals
import junit.framework.Assert.assertFalse
import junit.framework.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.*
import org.mockito.Mockito.mock
import org.mockito.Mockito.`when` as whenever

/**
@@ -22,13 +29,18 @@ import org.mockito.Mockito.`when` as whenever
@RunWithLooper
class NotificationShelfTest : SysuiTestCase() {

    private val shelf = NotificationShelf(context, /* attrs */ null)
    private val shelf = NotificationShelf(
            context,
            /* attrs */ null,
            /* showNotificationShelf */true
    )
    private val shelfState = shelf.viewState as NotificationShelf.ShelfState
    private val ambientState = mock(AmbientState::class.java)
    private val hostLayoutController: NotificationStackScrollLayoutController = mock()

    @Before
    fun setUp() {
        shelf.bind(ambientState, /* hostLayoutController */ null)
        shelf.bind(ambientState, /* hostLayoutController */ hostLayoutController)
        shelf.layout(/* left */ 0, /* top */ 0, /* right */ 30, /* bottom */5)
    }

@@ -37,7 +49,7 @@ class NotificationShelfTest : SysuiTestCase() {
        setFractionToShade(0f)
        setOnLockscreen(true)

        shelf.updateActualWidth(/* fractionToShade */ 0f, /* shortestWidth */ 10f);
        shelf.updateActualWidth(/* fractionToShade */ 0f, /* shortestWidth */ 10f)
        assertTrue(shelf.actualWidth == 10)

        shelf.updateActualWidth(/* fractionToShade */ 0.5f, /* shortestWidth */ 10f)
@@ -251,6 +263,42 @@ class NotificationShelfTest : SysuiTestCase() {
        assertEquals(0f, amountInShelf)
    }

    @Test
    fun updateState_expansionChanging_shelfTransparent() {
        updateState_expansionChanging_shelfAlphaUpdated(
                expansionFraction = 0.25f,
                expectedAlpha = 0.0f
        )
    }

    @Test
    fun updateState_expansionChangingWhileBouncerInTransit_shelfTransparent() {
        whenever(ambientState.isBouncerInTransit).thenReturn(true)

        updateState_expansionChanging_shelfAlphaUpdated(
                expansionFraction = 0.85f,
                expectedAlpha = 0.0f
        )
    }

    @Test
    fun updateState_expansionChanging_shelfAlphaUpdated() {
        updateState_expansionChanging_shelfAlphaUpdated(
                expansionFraction = 0.6f,
                expectedAlpha = ShadeInterpolation.getContentAlpha(0.6f)
        )
    }

    @Test
    fun updateState_expansionChangingWhileBouncerInTransit_shelfAlphaUpdated() {
        whenever(ambientState.isBouncerInTransit).thenReturn(true)

        updateState_expansionChanging_shelfAlphaUpdated(
                expansionFraction = 0.95f,
                expectedAlpha = aboutToShowBouncerProgress(0.95f)
        )
    }

    private fun setFractionToShade(fraction: Float) {
        whenever(ambientState.fractionToShade).thenReturn(fraction)
    }
@@ -258,4 +306,19 @@ class NotificationShelfTest : SysuiTestCase() {
    private fun setOnLockscreen(isOnLockscreen: Boolean) {
        whenever(ambientState.isOnKeyguard).thenReturn(isOnLockscreen)
    }

    private fun updateState_expansionChanging_shelfAlphaUpdated(
            expansionFraction: Float,
            expectedAlpha: Float
    ) {
        whenever(ambientState.lastVisibleBackgroundChild)
                .thenReturn(ExpandableNotificationRow(mContext, null))
        whenever(ambientState.isExpansionChanging).thenReturn(true)
        whenever(ambientState.expansionFraction).thenReturn(expansionFraction)
        whenever(hostLayoutController.speedBumpIndex).thenReturn(0)

        shelf.updateState(StackScrollAlgorithmState(), ambientState)

        assertEquals(expectedAlpha, shelf.viewState.alpha)
    }
}
+52 −12
Original line number Diff line number Diff line
@@ -20,7 +20,10 @@ import junit.framework.Assert.assertFalse
import junit.framework.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.mockito.Mockito.any
import org.mockito.Mockito.eq
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever

@SmallTest
@@ -35,7 +38,6 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
    private val emptyShadeView = EmptyShadeView(context, /* attrs= */ null).apply {
        layout(/* l= */ 0, /* t= */ 0, /* r= */ 100, /* b= */ 100)
    }

    private val ambientState = AmbientState(
            context,
            dumpManager,
@@ -115,29 +117,54 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
    }

    @Test
    fun resetViewStates_isExpansionChanging_viewBecomesTransparent() {
    fun resetViewStates_expansionChanging_notificationBecomesTransparent() {
        whenever(mStatusBarKeyguardViewManager.isBouncerInTransit).thenReturn(false)
        ambientState.isExpansionChanging = true
        ambientState.expansionFraction = 0.25f
        stackScrollAlgorithm.initView(context)
        resetViewStates_expansionChanging_notificationAlphaUpdated(
                expansionFraction = 0.25f,
                expectedAlpha = 0.0f
        )
    }

        stackScrollAlgorithm.resetViewStates(ambientState, /* speedBumpIndex= */ 0)
    @Test
    fun resetViewStates_expansionChangingWhileBouncerInTransit_viewBecomesTransparent() {
        whenever(mStatusBarKeyguardViewManager.isBouncerInTransit).thenReturn(true)
        resetViewStates_expansionChanging_notificationAlphaUpdated(
                expansionFraction = 0.85f,
                expectedAlpha = 0.0f
        )
    }

        val expected = getContentAlpha(0.25f)
        assertThat(notificationRow.viewState.alpha).isEqualTo(expected)
    @Test
    fun resetViewStates_expansionChanging_notificationAlphaUpdated() {
        whenever(mStatusBarKeyguardViewManager.isBouncerInTransit).thenReturn(false)
        resetViewStates_expansionChanging_notificationAlphaUpdated(
                expansionFraction = 0.6f,
                expectedAlpha = getContentAlpha(0.6f)
        )
    }

    @Test
    fun resetViewStates_isExpansionChangingWhileBouncerInTransit_viewBecomesTransparent() {
    fun resetViewStates_expansionChangingWhileBouncerInTransit_notificationAlphaUpdated() {
        whenever(mStatusBarKeyguardViewManager.isBouncerInTransit).thenReturn(true)
        resetViewStates_expansionChanging_notificationAlphaUpdated(
                expansionFraction = 0.95f,
                expectedAlpha = aboutToShowBouncerProgress(0.95f)
        )
    }

    @Test
    fun resetViewStates_expansionChanging_shelfUpdated() {
        ambientState.shelf = notificationShelf
        ambientState.isExpansionChanging = true
        ambientState.expansionFraction = 0.25f
        ambientState.expansionFraction = 0.6f
        stackScrollAlgorithm.initView(context)

        stackScrollAlgorithm.resetViewStates(ambientState, /* speedBumpIndex= */ 0)

        val expected = aboutToShowBouncerProgress(0.25f)
        assertThat(notificationRow.viewState.alpha).isEqualTo(expected)
        verify(notificationShelf).updateState(
                /* algorithmState= */any(),
                /* ambientState= */eq(ambientState)
        )
    }

    @Test
@@ -458,4 +485,17 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
                /* originalCornerRoundness= */ 1f)
        assertEquals(1f, currentRoundness)
    }

    private fun resetViewStates_expansionChanging_notificationAlphaUpdated(
            expansionFraction: Float,
            expectedAlpha: Float
    ) {
        ambientState.isExpansionChanging = true
        ambientState.expansionFraction = expansionFraction
        stackScrollAlgorithm.initView(context)

        stackScrollAlgorithm.resetViewStates(ambientState, /* speedBumpIndex= */ 0)

        assertThat(notificationRow.viewState.alpha).isEqualTo(expectedAlpha)
    }
}