diff options
| author | 2024-10-09 15:19:09 +0200 | |
|---|---|---|
| committer | 2024-10-18 16:31:23 +0200 | |
| commit | d4ca0f536133517db83c74eb86d13c3fb4d7dc32 (patch) | |
| tree | 125417fda1abc38e5f41f6705c89e9ecd12dffcf | |
| parent | 08ff158a5b847b2e3aef87f463eb88027fbe8847 (diff) | |
Notif redesign: reduce conversation icon margin
Bug: 371174789
Test: visually checked that the notification has the smaller margin
Flag: android.app.notifications_redesign_app_icons
Change-Id: I50e9806abba4da17cf6c4021a73cffb2e525d873
2 files changed, 58 insertions, 48 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapperTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapperTest.kt index 9d990b1d7edf..9a6a6997b96f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapperTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapperTest.kt @@ -26,6 +26,7 @@ import com.android.internal.widget.ConversationLayout import com.android.internal.widget.MessagingGroup import com.android.internal.widget.MessagingImageMessage import com.android.internal.widget.MessagingLinearLayout +import com.android.internal.widget.NotificationRowIconView import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.NotificationTestHelper @@ -90,7 +91,7 @@ class NotificationConversationTemplateViewWrapperTest : SysuiTestCase() { private fun fakeConversationLayout( mockDrawableGroupMessage: AnimatedImageDrawable, - mockDrawableImageMessage: AnimatedImageDrawable + mockDrawableImageMessage: AnimatedImageDrawable, ): View { val mockMessagingImageMessage: MessagingImageMessage = mock<MessagingImageMessage>().apply { @@ -126,6 +127,7 @@ class NotificationConversationTemplateViewWrapperTest : SysuiTestCase() { whenever(requireViewById<CachingIconView>(R.id.conversation_icon)) .thenReturn(mock()) whenever(findViewById<CachingIconView>(R.id.icon)).thenReturn(mock()) + whenever(requireViewById<NotificationRowIconView>(R.id.icon)).thenReturn(mock()) whenever(requireViewById<View>(R.id.conversation_icon_badge_bg)).thenReturn(mock()) whenever(requireViewById<View>(R.id.expand_button)).thenReturn(mock()) whenever(requireViewById<View>(R.id.expand_button_container)).thenReturn(mock()) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt index b4411f1a33a5..f8aff69f0531 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt @@ -16,15 +16,18 @@ package com.android.systemui.statusbar.notification.row.wrapper +import android.app.Flags import android.content.Context import android.graphics.drawable.AnimatedImageDrawable import android.view.View import android.view.ViewGroup +import android.view.ViewGroup.MarginLayoutParams import com.android.internal.widget.CachingIconView import com.android.internal.widget.ConversationLayout import com.android.internal.widget.MessagingGroup import com.android.internal.widget.MessagingImageMessage import com.android.internal.widget.MessagingLinearLayout +import com.android.internal.widget.NotificationRowIconView import com.android.systemui.res.R import com.android.systemui.statusbar.notification.NotificationFadeAware import com.android.systemui.statusbar.notification.NotificationUtils @@ -32,23 +35,23 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.wrapper.NotificationMessagingTemplateViewWrapper.setCustomImageMessageTransform import com.android.systemui.util.children -/** - * Wraps a notification containing a conversation template - */ -class NotificationConversationTemplateViewWrapper constructor( +/** Wraps a notification containing a conversation template */ +class NotificationConversationTemplateViewWrapper( ctx: Context, view: View, - row: ExpandableNotificationRow + row: ExpandableNotificationRow, ) : NotificationTemplateViewWrapper(ctx, view, row) { - private val minHeightWithActions: Int = NotificationUtils.getFontScaledHeight( + private val minHeightWithActions: Int = + NotificationUtils.getFontScaledHeight( ctx, - R.dimen.notification_messaging_actions_min_height - ) + R.dimen.notification_messaging_actions_min_height, + ) private val conversationLayout: ConversationLayout = view as ConversationLayout private lateinit var conversationIconContainer: View private lateinit var conversationIconView: CachingIconView + private lateinit var badgeIconView: NotificationRowIconView private lateinit var conversationBadgeBg: View private lateinit var expandBtn: View private lateinit var expandBtnContainer: View @@ -68,10 +71,13 @@ class NotificationConversationTemplateViewWrapper constructor( messageContainers = conversationLayout.messagingGroups with(conversationLayout) { conversationIconContainer = - requireViewById(com.android.internal.R.id.conversation_icon_container) + requireViewById(com.android.internal.R.id.conversation_icon_container) conversationIconView = requireViewById(com.android.internal.R.id.conversation_icon) + if (Flags.notificationsRedesignAppIcons()) { + badgeIconView = requireViewById(com.android.internal.R.id.icon) + } conversationBadgeBg = - requireViewById(com.android.internal.R.id.conversation_icon_badge_bg) + requireViewById(com.android.internal.R.id.conversation_icon_badge_bg) expandBtn = requireViewById(com.android.internal.R.id.expand_button) expandBtnContainer = requireViewById(com.android.internal.R.id.expand_button_container) importanceRing = requireViewById(com.android.internal.R.id.conversation_icon_badge_ring) @@ -80,7 +86,7 @@ class NotificationConversationTemplateViewWrapper constructor( facePileTop = findViewById(com.android.internal.R.id.conversation_face_pile_top) facePileBottom = findViewById(com.android.internal.R.id.conversation_face_pile_bottom) facePileBottomBg = - findViewById(com.android.internal.R.id.conversation_face_pile_bottom_background) + findViewById(com.android.internal.R.id.conversation_face_pile_bottom_background) } } @@ -88,6 +94,13 @@ class NotificationConversationTemplateViewWrapper constructor( // Reinspect the notification. Before the super call, because the super call also updates // the transformation types and we need to have our values set by then. resolveViews() + if (Flags.notificationsRedesignAppIcons() && row.isShowingAppIcon) { + // Override the margins to be 2dp instead of 4dp according to the new design if we're + // showing the app icon. + val lp = badgeIconView.layoutParams as MarginLayoutParams + lp.setMargins(2, 2, 2, 2) + badgeIconView.layoutParams = lp + } super.onContentUpdated(row) } @@ -96,56 +109,50 @@ class NotificationConversationTemplateViewWrapper constructor( super.updateTransformedTypes() mTransformationHelper.addTransformedView(TRANSFORMING_VIEW_TITLE, conversationTitleView) - addTransformedViews( - messagingLinearLayout, - appName - ) + addTransformedViews(messagingLinearLayout, appName) setCustomImageMessageTransform(mTransformationHelper, imageMessageContainer) addViewsTransformingToSimilar( - conversationIconView, - conversationBadgeBg, - expandBtn, - importanceRing, - facePileTop, - facePileBottom, - facePileBottomBg + conversationIconView, + conversationBadgeBg, + expandBtn, + importanceRing, + facePileTop, + facePileBottom, + facePileBottomBg, ) } override fun getShelfTransformationTarget(): View? = - if (conversationLayout.isImportantConversation) - if (conversationIconView.visibility != View.GONE) - conversationIconView - else - // A notification with a fallback icon was set to important. Currently - // the transformation doesn't work for these and needs to be fixed. - // In the meantime those are using the icon. - super.getShelfTransformationTarget() + if (conversationLayout.isImportantConversation) + if (conversationIconView.visibility != View.GONE) conversationIconView else - super.getShelfTransformationTarget() + // A notification with a fallback icon was set to important. Currently + // the transformation doesn't work for these and needs to be fixed. + // In the meantime those are using the icon. + super.getShelfTransformationTarget() + else super.getShelfTransformationTarget() override fun setRemoteInputVisible(visible: Boolean) = - conversationLayout.showHistoricMessages(visible) + conversationLayout.showHistoricMessages(visible) override fun updateExpandability( expandable: Boolean, onClickListener: View.OnClickListener, - requestLayout: Boolean + requestLayout: Boolean, ) = conversationLayout.updateExpandability(expandable, onClickListener) override fun disallowSingleClick(x: Float, y: Float): Boolean { - val isOnExpandButton = expandBtnContainer.visibility == View.VISIBLE && - isOnView(expandBtnContainer, x, y) + val isOnExpandButton = + expandBtnContainer.visibility == View.VISIBLE && isOnView(expandBtnContainer, x, y) return isOnExpandButton || super.disallowSingleClick(x, y) } override fun getMinLayoutHeight(): Int = - if (mActionsContainer != null && mActionsContainer.visibility != View.GONE) - minHeightWithActions - else - super.getMinLayoutHeight() + if (mActionsContainer != null && mActionsContainer.visibility != View.GONE) + minHeightWithActions + else super.getMinLayoutHeight() override fun setNotificationFaded(faded: Boolean) { // Do not call super @@ -157,16 +164,17 @@ class NotificationConversationTemplateViewWrapper constructor( override fun setAnimationsRunning(running: Boolean) { // We apply to both the child message containers in a conversation group, // and the top level image message container. - val containers = messageContainers.asSequence().map { it.messageContainer } + + val containers = + messageContainers.asSequence().map { it.messageContainer } + sequenceOf(imageMessageContainer) val drawables = - containers - .flatMap { it.children } - .mapNotNull { child -> - (child as? MessagingImageMessage)?.let { imageMessage -> - imageMessage.drawable as? AnimatedImageDrawable - } - } + containers + .flatMap { it.children } + .mapNotNull { child -> + (child as? MessagingImageMessage)?.let { imageMessage -> + imageMessage.drawable as? AnimatedImageDrawable + } + } drawables.toSet().forEach { when { running -> it.start() |