diff --git a/core/java/com/android/internal/widget/ConversationLayout.java b/core/java/com/android/internal/widget/ConversationLayout.java
index ea0f704829c8f..4e96ae7f79034 100644
--- a/core/java/com/android/internal/widget/ConversationLayout.java
+++ b/core/java/com/android/internal/widget/ConversationLayout.java
@@ -128,6 +128,8 @@ public class ConversationLayout extends FrameLayout
private CharSequence mFallbackChatName;
private CharSequence mFallbackGroupChatName;
private CharSequence mConversationTitle;
+ private int mMessageSpacingStandard;
+ private int mMessageSpacingGroup;
private int mNotificationHeaderExpandedPadding;
private View mConversationHeader;
private View mContentContainer;
@@ -241,6 +243,10 @@ public class ConversationLayout extends FrameLayout
mContentContainer = findViewById(R.id.notification_action_list_margin_target);
mExpandButtonAndContentContainer = findViewById(R.id.expand_button_and_content_container);
mExpandButton = findViewById(R.id.expand_button);
+ mMessageSpacingStandard = getResources().getDimensionPixelSize(
+ R.dimen.notification_messaging_spacing);
+ mMessageSpacingGroup = getResources().getDimensionPixelSize(
+ R.dimen.notification_messaging_spacing_conversation_group);
mNotificationHeaderExpandedPadding = getResources().getDimensionPixelSize(
R.dimen.conversation_header_expanded_padding_end);
mContentMarginEnd = getResources().getDimensionPixelSize(
@@ -699,6 +705,10 @@ public class ConversationLayout extends FrameLayout
}
private void updatePaddingsBasedOnContentAvailability() {
+ // groups have avatars that need more spacing
+ mMessagingLinearLayout.setSpacing(
+ mIsOneToOne ? mMessageSpacingStandard : mMessageSpacingGroup);
+
int messagingPadding = mIsOneToOne || mIsCollapsed
? 0
// Add some extra padding to the messages, since otherwise it will overlap with the
diff --git a/core/java/com/android/internal/widget/MessagingLinearLayout.java b/core/java/com/android/internal/widget/MessagingLinearLayout.java
index 7cfd46c880fce..cb1d387dbd073 100644
--- a/core/java/com/android/internal/widget/MessagingLinearLayout.java
+++ b/core/java/com/android/internal/widget/MessagingLinearLayout.java
@@ -17,6 +17,7 @@
package com.android.internal.widget;
import android.annotation.Nullable;
+import android.annotation.Px;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
@@ -251,6 +252,16 @@ public class MessagingLinearLayout extends ViewGroup {
return super.drawChild(canvas, child, drawingTime);
}
+ /**
+ * Set the spacing to be applied between views.
+ */
+ public void setSpacing(@Px int spacing) {
+ if (mSpacing != spacing) {
+ mSpacing = spacing;
+ requestLayout();
+ }
+ }
+
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
return new LayoutParams(mContext, attrs);
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 43c0ec979281b..fc3ed637e2b13 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -367,6 +367,9 @@
6dp
+
+ 24dp
+
4dp
@@ -760,7 +763,7 @@
256dp
- 36dp
+ 48dp
48dp
28dp
@@ -779,17 +782,17 @@
32dp
- 25dp
+ @dimen/conversation_face_pile_avatar_size
- 22dp
+ @dimen/conversation_badge_side_margin
- 18dp
+ @dimen/conversation_badge_side_margin
2dp
- 1dp
+ @dimen/conversation_face_pile_protection_width
- 17dp
+ 32dp
2dp
@@ -801,7 +804,7 @@
20dp
- 9dp
+ 8dp
38dp
diff --git a/core/res/res/values/styles_device_defaults.xml b/core/res/res/values/styles_device_defaults.xml
index 439ae48ebc549..ad0d0e07be1e0 100644
--- a/core/res/res/values/styles_device_defaults.xml
+++ b/core/res/res/values/styles_device_defaults.xml
@@ -302,10 +302,6 @@ easier.
-
diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml
index 3c4a5d4aab73c..eec6ae3fb521f 100644
--- a/core/res/res/values/styles_material.xml
+++ b/core/res/res/values/styles_material.xml
@@ -497,10 +497,6 @@ please see styles_device_defaults.xml.
-
-
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 9ac9e8e0ffa7a..d62f2bc1b9b73 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3083,6 +3083,7 @@
+
@@ -4090,7 +4091,6 @@
-
diff --git a/packages/SystemUI/res/layout/hybrid_conversation_notification.xml b/packages/SystemUI/res/layout/hybrid_conversation_notification.xml
index 214c44a41c5cd..335e0a464665c 100644
--- a/packages/SystemUI/res/layout/hybrid_conversation_notification.xml
+++ b/packages/SystemUI/res/layout/hybrid_conversation_notification.xml
@@ -26,21 +26,22 @@
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 0c19283ab97da..f7578cbd16d03 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -696,8 +696,11 @@
25dp
+
+ 17dp
+
- 20dp
+ 24dp
1dp
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java
index 9e70f0ac29d57..caba3ac7e17b2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java
@@ -37,8 +37,9 @@ public class HybridConversationNotificationView extends HybridNotificationView {
private ImageView mConversationIconView;
private TextView mConversationSenderName;
private View mConversationFacePile;
- private int mConversationIconSize;
+ private int mSingleAvatarSize;
private int mFacePileSize;
+ private int mFacePileAvatarSize;
private int mFacePileProtectionWidth;
public HybridConversationNotificationView(Context context) {
@@ -67,7 +68,9 @@ public class HybridConversationNotificationView extends HybridNotificationView {
mConversationSenderName = requireViewById(R.id.conversation_notification_sender);
mFacePileSize = getResources()
.getDimensionPixelSize(R.dimen.conversation_single_line_face_pile_size);
- mConversationIconSize = getResources()
+ mFacePileAvatarSize = getResources()
+ .getDimensionPixelSize(R.dimen.conversation_single_line_face_pile_avatar_size);
+ mSingleAvatarSize = getResources()
.getDimensionPixelSize(R.dimen.conversation_single_line_avatar_size);
mFacePileProtectionWidth = getResources().getDimensionPixelSize(
R.dimen.conversation_single_line_face_pile_protection_width);
@@ -89,6 +92,7 @@ public class HybridConversationNotificationView extends HybridNotificationView {
mConversationFacePile.setVisibility(GONE);
mConversationIconView.setVisibility(VISIBLE);
mConversationIconView.setImageIcon(conversationIcon);
+ setSize(mConversationIconView, mSingleAvatarSize);
} else {
// If there isn't an icon, generate a "face pile" based on the sender avatars
mConversationIconView.setVisibility(GONE);
@@ -104,9 +108,9 @@ public class HybridConversationNotificationView extends HybridNotificationView {
com.android.internal.R.id.conversation_face_pile_top);
conversationLayout.bindFacePile(facePileBottomBg, facePileBottom, facePileTop);
setSize(mConversationFacePile, mFacePileSize);
- setSize(facePileBottom, mConversationIconSize);
- setSize(facePileTop, mConversationIconSize);
- setSize(facePileBottomBg, mConversationIconSize + 2 * mFacePileProtectionWidth);
+ setSize(facePileBottom, mFacePileAvatarSize);
+ setSize(facePileTop, mFacePileAvatarSize);
+ setSize(facePileBottomBg, mFacePileAvatarSize + 2 * mFacePileProtectionWidth);
mTransformationHelper.addViewTransformingToSimilar(facePileTop);
mTransformationHelper.addViewTransformingToSimilar(facePileBottom);
mTransformationHelper.addViewTransformingToSimilar(facePileBottomBg);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
index 15ca24edc996c..8ee91342daed0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
@@ -20,14 +20,12 @@ import static com.android.systemui.statusbar.notification.TransformState.TRANSFO
import android.app.Notification;
import android.content.Context;
-import android.content.res.ColorStateList;
import android.util.ArraySet;
import android.util.Pair;
import android.view.NotificationHeaderView;
import android.view.NotificationTopLineView;
import android.view.View;
import android.view.ViewGroup;
-import android.view.ViewGroup.MarginLayoutParams;
import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;
import android.widget.ImageButton;
@@ -168,53 +166,6 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper {
}
}
- public void applyConversationSkin() {
- if (mAppNameText != null) {
- final ColorStateList colors = mAppNameText.getTextColors();
- mAppNameText.setTextAppearance(
- com.android.internal.R.style
- .TextAppearance_DeviceDefault_Notification_Conversation_AppName);
- mAppNameText.setTextColor(colors);
- MarginLayoutParams layoutParams = (MarginLayoutParams) mAppNameText.getLayoutParams();
- layoutParams.setMarginStart(0);
- }
- if (mNotificationTopLine != null) {
- int paddingStart = mNotificationTopLine.getResources().getDimensionPixelSize(
- com.android.internal.R.dimen.conversation_content_start);
- mNotificationTopLine.setPaddingStart(paddingStart);
- }
- if (mIcon != null) {
- MarginLayoutParams layoutParams = (MarginLayoutParams) mIcon.getLayoutParams();
- int marginStart = mIcon.getResources().getDimensionPixelSize(
- com.android.internal.R.dimen.conversation_icon_circle_start);
- layoutParams.setMarginStart(marginStart);
- }
- }
-
- public void clearConversationSkin() {
- if (mAppNameText != null) {
- final ColorStateList colors = mAppNameText.getTextColors();
- mAppNameText.setTextAppearance(
- com.android.internal.R.style.TextAppearance_DeviceDefault_Notification_Info);
- mAppNameText.setTextColor(colors);
- MarginLayoutParams layoutParams = (MarginLayoutParams) mAppNameText.getLayoutParams();
- final int marginStart = mAppNameText.getResources().getDimensionPixelSize(
- com.android.internal.R.dimen.notification_header_app_name_margin_start);
- layoutParams.setMarginStart(marginStart);
- }
- if (mNotificationTopLine != null) {
- int paddingStart = mNotificationTopLine.getResources().getDimensionPixelSize(
- com.android.internal.R.dimen.notification_content_margin_start);
- mNotificationTopLine.setPaddingStart(paddingStart);
- }
- if (mIcon != null) {
- MarginLayoutParams layoutParams = (MarginLayoutParams) mIcon.getLayoutParams();
- int marginStart = mIcon.getResources().getDimensionPixelSize(
- com.android.internal.R.dimen.notification_icon_circle_start);
- layoutParams.setMarginStart(marginStart);
- }
- }
-
/**
* Adds the remaining TransformTypes to the TransformHelper. This is done to make sure that each
* child is faded automatically and doesn't have to be manually added.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
index 5f3933b827c47..99fe541d01353 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
@@ -43,7 +43,6 @@ import com.android.systemui.statusbar.notification.collection.legacy.VisualStabi
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.HybridGroupManager;
import com.android.systemui.statusbar.notification.row.HybridNotificationView;
-import com.android.systemui.statusbar.notification.row.wrapper.NotificationHeaderViewWrapper;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
import java.util.ArrayList;
@@ -336,15 +335,6 @@ public class NotificationChildrenContainer extends ViewGroup {
}
mNotificationHeaderWrapper.setExpanded(mChildrenExpanded);
mNotificationHeaderWrapper.onContentUpdated(mContainingNotification);
- if (mNotificationHeaderWrapper instanceof NotificationHeaderViewWrapper) {
- NotificationHeaderViewWrapper headerWrapper =
- (NotificationHeaderViewWrapper) mNotificationHeaderWrapper;
- if (isConversation) {
- headerWrapper.applyConversationSkin();
- } else {
- headerWrapper.clearConversationSkin();
- }
- }
recreateLowPriorityHeader(builder, isConversation);
updateHeaderVisibility(false /* animate */);
updateChildrenAppearance();
@@ -378,15 +368,6 @@ public class NotificationChildrenContainer extends ViewGroup {
header.reapply(getContext(), mNotificationHeaderLowPriority);
}
mNotificationHeaderWrapperLowPriority.onContentUpdated(mContainingNotification);
- if (mNotificationHeaderWrapper instanceof NotificationHeaderViewWrapper) {
- NotificationHeaderViewWrapper headerWrapper =
- (NotificationHeaderViewWrapper) mNotificationHeaderWrapper;
- if (isConversation) {
- headerWrapper.applyConversationSkin();
- } else {
- headerWrapper.clearConversationSkin();
- }
- }
resetHeaderVisibilityIfNeeded(mNotificationHeaderLowPriority, calculateDesiredHeader());
} else {
removeView(mNotificationHeaderLowPriority);