Loading packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +5 −2 Original line number Diff line number Diff line Loading @@ -72,6 +72,9 @@ class LockscreenShadeTransitionController @Inject constructor( dumpManager: DumpManager ) : Dumpable { private var pulseHeight: Float = 0f @get:VisibleForTesting var fractionToShade: Float = 0f private set private var useSplitShade: Boolean = false private lateinit var nsslController: NotificationStackScrollLayoutController lateinit var notificationPanelController: NotificationPanelViewController Loading Loading @@ -405,9 +408,9 @@ class LockscreenShadeTransitionController @Inject constructor( if (field != value || forceApplyAmount) { field = value if (!nsslController.isInLockedDownShade() || field == 0f || forceApplyAmount) { val notificationShelfProgress = fractionToShade = MathUtils.saturate(dragDownAmount / notificationShelfTransitionDistance) nsslController.setTransitionToFullShadeAmount(notificationShelfProgress) nsslController.setTransitionToFullShadeAmount(fractionToShade) qSDragProgress = MathUtils.saturate(dragDownAmount / qsTransitionDistance) qS.setTransitionToFullShadeAmount(field, qSDragProgress) Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt +16 −7 Original line number Diff line number Diff line Loading @@ -19,9 +19,11 @@ package com.android.systemui.statusbar.notification.stack import android.content.res.Resources import android.util.Log import android.view.View.GONE import androidx.annotation.VisibleForTesting import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.StatusBarState.KEYGUARD import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow Loading @@ -41,6 +43,7 @@ class NotificationStackSizeCalculator @Inject constructor( private val statusBarStateController: SysuiStatusBarStateController, private val lockscreenShadeTransitionController: LockscreenShadeTransitionController, @Main private val resources: Resources ) { Loading Loading @@ -129,7 +132,7 @@ constructor( yield(dividerHeight + shelfIntrinsicHeight) // Only shelf. children.forEachIndexed { i, currentNotification -> height += currentNotification.spaceNeeded(i, previous, stack, onLockscreen) height += spaceNeeded(currentNotification, i, previous, stack, onLockscreen) previous = currentNotification val shelfHeight = Loading @@ -156,22 +159,28 @@ constructor( private val NotificationStackScrollLayout.childrenSequence: Sequence<ExpandableView> get() = children.map { it as ExpandableView } private fun onLockscreen() = statusBarStateController.state == KEYGUARD @VisibleForTesting fun onLockscreen() : Boolean { return statusBarStateController.state == KEYGUARD && lockscreenShadeTransitionController.fractionToShade == 0f } private fun ExpandableView.spaceNeeded( @VisibleForTesting fun spaceNeeded( view: ExpandableView, visibleIndex: Int, previousView: ExpandableView?, stack: NotificationStackScrollLayout, onLockscreen: Boolean ): Float { assert(isShowable(onLockscreen)) assert(view.isShowable(onLockscreen)) var size = if (onLockscreen) { getMinHeight(/* ignoreTemporaryStates= */ true).toFloat() view.getMinHeight(/* ignoreTemporaryStates= */ true).toFloat() } else { intrinsicHeight.toFloat() view.intrinsicHeight.toFloat() } size += calculateGapAndDividerHeight(stack, previousView, current = this, visibleIndex) size += calculateGapAndDividerHeight(stack, previousView, current = view, visibleIndex) return size } Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt +53 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.view.View.VISIBLE import androidx.test.filters.SmallTest import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow Loading @@ -44,7 +46,7 @@ import org.mockito.MockitoAnnotations class NotificationStackSizeCalculatorTest : SysuiTestCase() { @Mock private lateinit var sysuiStatusBarStateController: SysuiStatusBarStateController @Mock private lateinit var lockscreenShadeTransitionController: LockscreenShadeTransitionController @Mock private lateinit var stackLayout: NotificationStackScrollLayout private val testableResources = mContext.getOrCreateTestableResources() Loading @@ -63,6 +65,7 @@ class NotificationStackSizeCalculatorTest : SysuiTestCase() { sizeCalculator = NotificationStackSizeCalculator( statusBarStateController = sysuiStatusBarStateController, lockscreenShadeTransitionController = lockscreenShadeTransitionController, testableResources.resources) } Loading Loading @@ -155,6 +158,55 @@ class NotificationStackSizeCalculatorTest : SysuiTestCase() { assertThat(height).isAtMost(availableSpace) } @Test fun onLockscreen_onKeyguard_AndNotGoingToShade_returnsTrue() { whenever(sysuiStatusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(lockscreenShadeTransitionController.fractionToShade).thenReturn(0f) assertThat(sizeCalculator.onLockscreen()).isTrue() } @Test fun onLockscreen_goingToShade_returnsFalse() { whenever(sysuiStatusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(lockscreenShadeTransitionController.fractionToShade).thenReturn(0.5f) assertThat(sizeCalculator.onLockscreen()).isFalse() } @Test fun onLockscreen_notOnLockscreen_returnsFalse() { whenever(sysuiStatusBarStateController.state).thenReturn(StatusBarState.SHADE) whenever(lockscreenShadeTransitionController.fractionToShade).thenReturn(1f) assertThat(sizeCalculator.onLockscreen()).isFalse() } @Test fun spaceNeeded_onLockscreen_usesMinHeight() { setGapHeight(0f) // No divider height since we're testing one element where index = 0 val expandableView = createMockRow(rowHeight) whenever(expandableView.getMinHeight(any())).thenReturn(5) whenever(expandableView.intrinsicHeight).thenReturn(10) val space = sizeCalculator.spaceNeeded(expandableView, visibleIndex = 0, previousView = null, stack = stackLayout, onLockscreen = true) assertThat(space).isEqualTo(5) } @Test fun spaceNeeded_notOnLockscreen_usesIntrinsicHeight() { setGapHeight(0f) // No divider height since we're testing one element where index = 0 val expandableView = createMockRow(rowHeight) whenever(expandableView.getMinHeight(any())).thenReturn(5) whenever(expandableView.intrinsicHeight).thenReturn(10) val space = sizeCalculator.spaceNeeded(expandableView, visibleIndex = 0, previousView = null, stack = stackLayout, onLockscreen = false) assertThat(space).isEqualTo(10) } private fun computeMaxKeyguardNotifications( rows: List<ExpandableView>, availableSpace: Float, Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +5 −2 Original line number Diff line number Diff line Loading @@ -72,6 +72,9 @@ class LockscreenShadeTransitionController @Inject constructor( dumpManager: DumpManager ) : Dumpable { private var pulseHeight: Float = 0f @get:VisibleForTesting var fractionToShade: Float = 0f private set private var useSplitShade: Boolean = false private lateinit var nsslController: NotificationStackScrollLayoutController lateinit var notificationPanelController: NotificationPanelViewController Loading Loading @@ -405,9 +408,9 @@ class LockscreenShadeTransitionController @Inject constructor( if (field != value || forceApplyAmount) { field = value if (!nsslController.isInLockedDownShade() || field == 0f || forceApplyAmount) { val notificationShelfProgress = fractionToShade = MathUtils.saturate(dragDownAmount / notificationShelfTransitionDistance) nsslController.setTransitionToFullShadeAmount(notificationShelfProgress) nsslController.setTransitionToFullShadeAmount(fractionToShade) qSDragProgress = MathUtils.saturate(dragDownAmount / qsTransitionDistance) qS.setTransitionToFullShadeAmount(field, qSDragProgress) Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt +16 −7 Original line number Diff line number Diff line Loading @@ -19,9 +19,11 @@ package com.android.systemui.statusbar.notification.stack import android.content.res.Resources import android.util.Log import android.view.View.GONE import androidx.annotation.VisibleForTesting import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.StatusBarState.KEYGUARD import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow Loading @@ -41,6 +43,7 @@ class NotificationStackSizeCalculator @Inject constructor( private val statusBarStateController: SysuiStatusBarStateController, private val lockscreenShadeTransitionController: LockscreenShadeTransitionController, @Main private val resources: Resources ) { Loading Loading @@ -129,7 +132,7 @@ constructor( yield(dividerHeight + shelfIntrinsicHeight) // Only shelf. children.forEachIndexed { i, currentNotification -> height += currentNotification.spaceNeeded(i, previous, stack, onLockscreen) height += spaceNeeded(currentNotification, i, previous, stack, onLockscreen) previous = currentNotification val shelfHeight = Loading @@ -156,22 +159,28 @@ constructor( private val NotificationStackScrollLayout.childrenSequence: Sequence<ExpandableView> get() = children.map { it as ExpandableView } private fun onLockscreen() = statusBarStateController.state == KEYGUARD @VisibleForTesting fun onLockscreen() : Boolean { return statusBarStateController.state == KEYGUARD && lockscreenShadeTransitionController.fractionToShade == 0f } private fun ExpandableView.spaceNeeded( @VisibleForTesting fun spaceNeeded( view: ExpandableView, visibleIndex: Int, previousView: ExpandableView?, stack: NotificationStackScrollLayout, onLockscreen: Boolean ): Float { assert(isShowable(onLockscreen)) assert(view.isShowable(onLockscreen)) var size = if (onLockscreen) { getMinHeight(/* ignoreTemporaryStates= */ true).toFloat() view.getMinHeight(/* ignoreTemporaryStates= */ true).toFloat() } else { intrinsicHeight.toFloat() view.intrinsicHeight.toFloat() } size += calculateGapAndDividerHeight(stack, previousView, current = this, visibleIndex) size += calculateGapAndDividerHeight(stack, previousView, current = view, visibleIndex) return size } Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt +53 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.view.View.VISIBLE import androidx.test.filters.SmallTest import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow Loading @@ -44,7 +46,7 @@ import org.mockito.MockitoAnnotations class NotificationStackSizeCalculatorTest : SysuiTestCase() { @Mock private lateinit var sysuiStatusBarStateController: SysuiStatusBarStateController @Mock private lateinit var lockscreenShadeTransitionController: LockscreenShadeTransitionController @Mock private lateinit var stackLayout: NotificationStackScrollLayout private val testableResources = mContext.getOrCreateTestableResources() Loading @@ -63,6 +65,7 @@ class NotificationStackSizeCalculatorTest : SysuiTestCase() { sizeCalculator = NotificationStackSizeCalculator( statusBarStateController = sysuiStatusBarStateController, lockscreenShadeTransitionController = lockscreenShadeTransitionController, testableResources.resources) } Loading Loading @@ -155,6 +158,55 @@ class NotificationStackSizeCalculatorTest : SysuiTestCase() { assertThat(height).isAtMost(availableSpace) } @Test fun onLockscreen_onKeyguard_AndNotGoingToShade_returnsTrue() { whenever(sysuiStatusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(lockscreenShadeTransitionController.fractionToShade).thenReturn(0f) assertThat(sizeCalculator.onLockscreen()).isTrue() } @Test fun onLockscreen_goingToShade_returnsFalse() { whenever(sysuiStatusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(lockscreenShadeTransitionController.fractionToShade).thenReturn(0.5f) assertThat(sizeCalculator.onLockscreen()).isFalse() } @Test fun onLockscreen_notOnLockscreen_returnsFalse() { whenever(sysuiStatusBarStateController.state).thenReturn(StatusBarState.SHADE) whenever(lockscreenShadeTransitionController.fractionToShade).thenReturn(1f) assertThat(sizeCalculator.onLockscreen()).isFalse() } @Test fun spaceNeeded_onLockscreen_usesMinHeight() { setGapHeight(0f) // No divider height since we're testing one element where index = 0 val expandableView = createMockRow(rowHeight) whenever(expandableView.getMinHeight(any())).thenReturn(5) whenever(expandableView.intrinsicHeight).thenReturn(10) val space = sizeCalculator.spaceNeeded(expandableView, visibleIndex = 0, previousView = null, stack = stackLayout, onLockscreen = true) assertThat(space).isEqualTo(5) } @Test fun spaceNeeded_notOnLockscreen_usesIntrinsicHeight() { setGapHeight(0f) // No divider height since we're testing one element where index = 0 val expandableView = createMockRow(rowHeight) whenever(expandableView.getMinHeight(any())).thenReturn(5) whenever(expandableView.intrinsicHeight).thenReturn(10) val space = sizeCalculator.spaceNeeded(expandableView, visibleIndex = 0, previousView = null, stack = stackLayout, onLockscreen = false) assertThat(space).isEqualTo(10) } private fun computeMaxKeyguardNotifications( rows: List<ExpandableView>, availableSpace: Float, Loading