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

Commit 9078e990 authored by Selim Cinek's avatar Selim Cinek Committed by Android (Google) Code Review
Browse files

Merge "Fix flickering of min priority notification icons" into main

parents 327fd6ad 7838f534
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -15,10 +15,14 @@
 */
package com.android.systemui.statusbar.phone

import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.SetFlagsRule
import android.service.notification.StatusBarNotification
import android.testing.TestableLooper.RunWithLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.StatusBarIconView
import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT
@@ -26,6 +30,7 @@ import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
import junit.framework.Assert.assertEquals
import junit.framework.Assert.assertFalse
import junit.framework.Assert.assertTrue
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.mock
@@ -37,6 +42,8 @@ import org.mockito.Mockito.`when` as whenever
@RunWithLooper
class NotificationIconContainerTest : SysuiTestCase() {

    @get:Rule
    val setFlagsRule = SetFlagsRule()
    private val iconContainer = NotificationIconContainer(context, /* attrs= */ null)

    @Test
@@ -174,6 +181,7 @@ class NotificationIconContainerTest : SysuiTestCase() {
    }

    @Test
    @EnableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT)
    fun calculateIconXTranslations_givenWidthNotEnoughForFourIcons_atCorrectXWithOverflowDot() {
        iconContainer.setActualPaddingStart(0f)
        iconContainer.setActualPaddingEnd(0f)
@@ -191,6 +199,34 @@ class NotificationIconContainerTest : SysuiTestCase() {
        iconContainer.addView(iconFour)
        assertEquals(4, iconContainer.childCount)

        iconContainer.calculateIconXTranslations()
        assertEquals(0f, iconContainer.getIconState(iconOne).xTranslation)
        assertEquals(10f, iconContainer.getIconState(iconTwo).xTranslation)
        assertEquals(STATE_HIDDEN, iconContainer.getIconState(iconThree).visibleState)
        assertEquals(STATE_DOT, iconContainer.getIconState(iconFour).visibleState)
        assertTrue(iconContainer.areIconsOverflowing())
    }


    @Test
    @DisableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT)
    fun calculateIconXTranslations_givenWidthNotEnoughForFourIcons_atCorrectXWithOverflowDotNonPhysical() {
        iconContainer.setActualPaddingStart(0f)
        iconContainer.setActualPaddingEnd(0f)
        iconContainer.setActualLayoutWidth(35)
        iconContainer.setIconSize(10)

        val iconOne = mockStatusBarIcon()
        val iconTwo = mockStatusBarIcon()
        val iconThree = mockStatusBarIcon()
        val iconFour = mockStatusBarIcon()

        iconContainer.addView(iconOne)
        iconContainer.addView(iconTwo)
        iconContainer.addView(iconThree)
        iconContainer.addView(iconFour)
        assertEquals(4, iconContainer.childCount)

        iconContainer.calculateIconXTranslations()
        assertEquals(0f, iconContainer.getIconState(iconOne).xTranslation)
        assertEquals(10f, iconContainer.getIconState(iconTwo).xTranslation)
+2 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar;

import static com.android.keyguard.BouncerPanelExpansionCalculator.aboutToShowBouncerProgress;
import static com.android.systemui.Flags.physicalNotificationMovement;
import static com.android.systemui.util.ColorUtilKt.hexColorString;

import android.content.Context;
@@ -929,7 +930,7 @@ public class NotificationShelf extends ActivatableNotificationView {
        iconState.setAlpha(ICON_ALPHA_INTERPOLATOR.getInterpolation(transitionAmount));
        boolean isAppearing = row.isDrawingAppearAnimation() && !row.isInShelf();
        iconState.hidden = isAppearing
                || (view instanceof ExpandableNotificationRow
                || (!physicalNotificationMovement() && view instanceof ExpandableNotificationRow
                && ((ExpandableNotificationRow) view).isMinimized()
                && mShelfIcons.areIconsOverflowing())
                || (transitionAmount == 0.0f && !iconState.isAnimating(icon))
+12 −4
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.systemui.statusbar.phone;

import static com.android.systemui.Flags.physicalNotificationMovement;
import static com.android.systemui.statusbar.phone.HeadsUpAppearanceController.CONTENT_FADE_DELAY;
import static com.android.systemui.statusbar.phone.HeadsUpAppearanceController.CONTENT_FADE_DURATION;

@@ -522,17 +523,24 @@ public class NotificationIconContainer extends ViewGroup {
                IconState iconState = mIconStates.get(view);
                int dotWidth = mStaticDotDiameter + mDotPadding;
                iconState.setXTranslation(translationX);
                boolean isLastChild = i == childCount - 1;
                if (!mIsShowingOverflowDot) {
                    if (iconState.iconAppearAmount < 0.8f) {
                    if (iconState.iconAppearAmount < 0.8f && (isLastChild || !physicalNotificationMovement())) {
                        iconState.visibleState = StatusBarIconView.STATE_ICON;
                    } else {
                        iconState.visibleState = StatusBarIconView.STATE_DOT;
                        iconState.visibleState = isLastChild || !physicalNotificationMovement() ?
                            StatusBarIconView.STATE_DOT:
                            StatusBarIconView.STATE_HIDDEN;
                        mIsShowingOverflowDot = true;
                    }
                    if (!physicalNotificationMovement()) {
                        translationX += dotWidth * iconState.iconAppearAmount;
                    }
                    mLastVisibleIconState = iconState;
                } else {
                    iconState.visibleState = StatusBarIconView.STATE_HIDDEN;
                    iconState.visibleState = isLastChild && physicalNotificationMovement() ?
                            StatusBarIconView.STATE_DOT:
                            StatusBarIconView.STATE_HIDDEN;
                }
            }
        } else if (childCount > 0) {