Add missing divider height before notification shelf

The mismatch between computed height and actual height required
caused the notification right before the shelf to be
slightly clipped, pushing its icon slightly into the shelf
and messing up icon overflow calculations.

Bug: 227361193
Test: manually inspect shelf icon placement
	=> see that notification before shelf
	   is no longer incorrectly clipped
Change-Id: Icb787f5b141b7df3b3ae801a2d89925d99924034
This commit is contained in:
Lyn Han
2022-04-07 18:11:38 -04:00
parent d73fe9b586
commit 4778c487d1

View File

@@ -52,7 +52,7 @@ constructor(
private var maxKeyguardNotifications by notNull<Int>()
/**
* Minimum space between two notifications. There might be more space, see [calculateGapHeight].
* Minimum space between two notifications, see [calculateGapAndDividerHeight].
*/
private var dividerHeight by notNull<Int>()
@@ -84,16 +84,20 @@ constructor(
val onLockscreen = true
val showableRows = children.filter { it.isShowable(onLockscreen) }
val showableRowsCount = showableRows.count()
log { "\tshowableRowsCount=$showableRowsCount "}
showableRows.forEachIndexed { i, current ->
val spaceNeeded = current.spaceNeeded(count, previous, stack, onLockscreen)
val spaceAfter = remainingSpace - spaceNeeded
previous = current
log { "\ti=$i spaceNeeded=$spaceNeeded remainingSpace=$remainingSpace" }
log { "\ti=$i spaceNeeded=$spaceNeeded remainingSpace=$remainingSpace " +
"spaceAfter=$spaceAfter" }
if (remainingSpace - spaceNeeded >= 0 && count < maxKeyguardNotifications) {
count += 1
remainingSpace -= spaceNeeded
} else if (remainingSpace - spaceNeeded > -shelfHeight && i == showableRowsCount - 1) {
log { "Showing all notifications. Shelf is not be needed." }
log { "Show all notifications. Shelf not needed." }
// If this is the last one, and it fits using the space shelf would use, then we can
// display it, as the shelf will not be needed (as all notifications are shown).
return count + 1
@@ -139,8 +143,7 @@ constructor(
height += spaceNeeded
count += 1
} else {
val gapBeforeFirstViewInShelf = current.calculateGapHeight(stack, previous, count)
height += gapBeforeFirstViewInShelf
height += current.calculateGapAndDividerHeight(stack, previous, count)
height += shelfHeight
log { "returning height with shelf -> $height" }
return height
@@ -177,12 +180,7 @@ constructor(
} else {
intrinsicHeight.toFloat()
}
if (visibleIndex != 0) {
size += dividerHeight
}
val gapHeight = calculateGapHeight(stack, previousView, visibleIndex)
log { "\ti=$visibleIndex gapHeight=$gapHeight"}
size += gapHeight
size += calculateGapAndDividerHeight(stack, previousView, visibleIndex)
return size
}
@@ -202,11 +200,17 @@ constructor(
return true
}
private fun ExpandableView.calculateGapHeight(
private fun ExpandableView.calculateGapAndDividerHeight(
stack: NotificationStackScrollLayout,
previous: ExpandableView?,
visibleIndex: Int
) = stack.calculateGapHeight(previous, /* current= */ this, visibleIndex)
) : Float {
var height = stack.calculateGapHeight(previous, /* current= */ this, visibleIndex)
if (visibleIndex != 0) {
height += dividerHeight
}
return height
}
/**
* Can a view be shown on the lockscreen when calculating the number of allowed notifications to