diff --git a/core/java/com/android/internal/widget/ConversationLayout.java b/core/java/com/android/internal/widget/ConversationLayout.java index 49cf3e099c55b..4e7ae8a235e78 100644 --- a/core/java/com/android/internal/widget/ConversationLayout.java +++ b/core/java/com/android/internal/widget/ConversationLayout.java @@ -469,6 +469,10 @@ public class ConversationLayout extends FrameLayout mAppName.setVisibility(mIsCollapsed ? GONE : VISIBLE); } + public boolean shouldHideAppName() { + return mIsCollapsed; + } + /** * update the icon position and sizing */ diff --git a/core/res/res/layout/notification_template_material_conversation.xml b/core/res/res/layout/notification_template_material_conversation.xml index 0c4be1a91a04f..0f895d68893fa 100644 --- a/core/res/res/layout/notification_template_material_conversation.xml +++ b/core/res/res/layout/notification_template_material_conversation.xml @@ -122,6 +122,7 @@ android:layout_height="wrap_content" android:orientation="horizontal" android:paddingTop="16dp" + android:layout_marginBottom="2dp" android:paddingStart="@dimen/conversation_content_start" > @@ -190,7 +191,6 @@ android:id="@+id/notification_messaging" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="2dp" android:spacing="@dimen/notification_messaging_spacing" android:clipToPadding="false" android:clipChildren="false" diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index abc969271c533..f2e25998e0aec 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -695,9 +695,9 @@ 20dp - 25dp + 26dp - 5dp + 12dp 38dp diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java index 164215befe796..b57b22fed8536 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java @@ -50,7 +50,9 @@ public class CrossFadeHelper { if (endRunnable != null) { endRunnable.run(); } - view.setVisibility(View.INVISIBLE); + if (view.getVisibility() != View.GONE) { + view.setVisibility(View.INVISIBLE); + } } }); if (view.hasOverlappingRendering()) { @@ -75,7 +77,7 @@ public class CrossFadeHelper { */ public static void fadeOut(View view, float fadeOutAmount, boolean remap) { view.animate().cancel(); - if (fadeOutAmount == 1.0f) { + if (fadeOutAmount == 1.0f && view.getVisibility() != View.GONE) { view.setVisibility(View.INVISIBLE); } else if (view.getVisibility() == View.INVISIBLE) { view.setVisibility(View.VISIBLE); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java index 4759d56099f3c..ba3db09374221 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java @@ -28,6 +28,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.internal.util.ContrastColorUtil; +import com.android.internal.widget.ConversationLayout; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.NotificationContentView; @@ -42,6 +43,7 @@ public class NotificationHeaderUtil { private static final TextViewComparator sTextViewComparator = new TextViewComparator(); private static final VisibilityApplicator sVisibilityApplicator = new VisibilityApplicator(); + private static final VisibilityApplicator sAppNameApplicator = new AppNameApplicator(); private static final DataExtractor sIconExtractor = new DataExtractor() { @Override public Object extractData(ExpandableNotificationRow row) { @@ -64,7 +66,7 @@ public class NotificationHeaderUtil { }; private final static ResultApplicator mGreyApplicator = new ResultApplicator() { @Override - public void apply(View view, boolean apply) { + public void apply(View parent, View view, boolean apply, boolean reset) { NotificationHeaderView header = (NotificationHeaderView) view; ImageView icon = (ImageView) view.findViewById( com.android.internal.R.id.icon); @@ -132,8 +134,12 @@ public class NotificationHeaderUtil { } }, sVisibilityApplicator)); - mComparators.add(HeaderProcessor.forTextView(mRow, - com.android.internal.R.id.app_name_text)); + mComparators.add(new HeaderProcessor( + mRow, + com.android.internal.R.id.app_name_text, + null, + sTextViewComparator, + sAppNameApplicator)); mComparators.add(HeaderProcessor.forTextView(mRow, com.android.internal.R.id.header_text)); mDividers.add(com.android.internal.R.id.header_text_divider); @@ -299,19 +305,19 @@ public class NotificationHeaderUtil { public void apply(ExpandableNotificationRow row, boolean reset) { boolean apply = mApply && !reset; if (row.isSummaryWithChildren()) { - applyToView(apply, row.getNotificationHeader()); + applyToView(apply, reset, row.getNotificationHeader()); return; } - applyToView(apply, row.getPrivateLayout().getContractedChild()); - applyToView(apply, row.getPrivateLayout().getHeadsUpChild()); - applyToView(apply, row.getPrivateLayout().getExpandedChild()); + applyToView(apply, reset, row.getPrivateLayout().getContractedChild()); + applyToView(apply, reset, row.getPrivateLayout().getHeadsUpChild()); + applyToView(apply, reset, row.getPrivateLayout().getExpandedChild()); } - private void applyToView(boolean apply, View parent) { + private void applyToView(boolean apply, boolean reset, View parent) { if (parent != null) { View view = parent.findViewById(mId); if (view != null && !mComparator.isEmpty(view)) { - mApplicator.apply(view, apply); + mApplicator.apply(parent, view, apply, reset); } } } @@ -375,14 +381,26 @@ public class NotificationHeaderUtil { } private interface ResultApplicator { - void apply(View view, boolean apply); + void apply(View parent, View view, boolean apply, boolean reset); } private static class VisibilityApplicator implements ResultApplicator { @Override - public void apply(View view, boolean apply) { + public void apply(View parent, View view, boolean apply, boolean reset) { view.setVisibility(apply ? View.GONE : View.VISIBLE); } } + + private static class AppNameApplicator extends VisibilityApplicator { + + @Override + public void apply(View parent, View view, boolean apply, boolean reset) { + if (reset && parent instanceof ConversationLayout) { + ConversationLayout layout = (ConversationLayout) parent; + apply = layout.shouldHideAppName(); + } + super.apply(parent, view, apply, reset); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingLayoutTransformState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingLayoutTransformState.java index 6f27ff30c5875..5ee4693a32bf0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingLayoutTransformState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingLayoutTransformState.java @@ -102,11 +102,11 @@ public class MessagingLayoutTransformState extends TransformState { MessagingGroup matchingGroup = pairs.get(ownGroup); if (!isGone(ownGroup)) { if (matchingGroup != null) { - transformGroups(ownGroup, matchingGroup, transformationAmount, to); + int totalTranslation = transformGroups(ownGroup, matchingGroup, + transformationAmount, to); if (lastPairedGroup == null) { lastPairedGroup = ownGroup; if (to){ - float totalTranslation = ownGroup.getTop() - matchingGroup.getTop(); currentTranslation = matchingGroup.getAvatar().getTranslationY() - totalTranslation; } else { @@ -229,14 +229,19 @@ public class MessagingLayoutTransformState extends TransformState { return result; } - private void transformGroups(MessagingGroup ownGroup, MessagingGroup otherGroup, + /** + * Transform two groups towards each other. + * + * @return the total transformation distance that the group goes through + */ + private int transformGroups(MessagingGroup ownGroup, MessagingGroup otherGroup, float transformationAmount, boolean to) { boolean useLinearTransformation = otherGroup.getIsolatedMessage() == null && !mTransformInfo.isAnimating(); transformView(transformationAmount, to, ownGroup.getSenderView(), otherGroup.getSenderView(), true /* sameAsAny */, useLinearTransformation); - transformView(transformationAmount, to, ownGroup.getAvatar(), otherGroup.getAvatar(), - true /* sameAsAny */, useLinearTransformation); + int totalAvatarTranslation = transformView(transformationAmount, to, ownGroup.getAvatar(), + otherGroup.getAvatar(), true /* sameAsAny */, useLinearTransformation); List ownMessages = ownGroup.getMessages(); List otherMessages = otherGroup.getMessages(); float previousTranslation = 0; @@ -284,6 +289,7 @@ public class MessagingLayoutTransformState extends TransformState { } } ownGroup.updateClipRect(); + return totalAvatarTranslation; } /**