Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/NotificationIconContainerTest.kt +36 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -174,6 +181,7 @@ class NotificationIconContainerTest : SysuiTestCase() { } @Test @EnableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT) fun calculateIconXTranslations_givenWidthNotEnoughForFourIcons_atCorrectXWithOverflowDot() { iconContainer.setActualPaddingStart(0f) iconContainer.setActualPaddingEnd(0f) Loading @@ -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) Loading packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +2 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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)) Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +12 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/NotificationIconContainerTest.kt +36 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -174,6 +181,7 @@ class NotificationIconContainerTest : SysuiTestCase() { } @Test @EnableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT) fun calculateIconXTranslations_givenWidthNotEnoughForFourIcons_atCorrectXWithOverflowDot() { iconContainer.setActualPaddingStart(0f) iconContainer.setActualPaddingEnd(0f) Loading @@ -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) Loading
packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +2 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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)) Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +12 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading