Loading core/java/android/app/Notification.java +22 −4 Original line number Diff line number Diff line Loading @@ -4570,12 +4570,21 @@ public class Notification implements Parcelable : mConversationTitle; boolean hasTitle = !TextUtils.isEmpty(title); if (!hasTitle && mMessages.size() == 1) { CharSequence sender = mMessages.get(0).mSender; CharSequence text = mMessages.get(0).mText; if (mMessages.size() == 1) { // Special case for a single message: Use the big text style // so the collapsed and expanded versions match nicely. CharSequence bigTitle; CharSequence text; if (hasTitle) { bigTitle = title; text = makeMessageLine(mMessages.get(0)); } else { bigTitle = mMessages.get(0).mSender; text = mMessages.get(0).mText; } RemoteViews contentView = mBuilder.applyStandardTemplateWithActions( mBuilder.getBigTextLayoutResource(), false /* progress */, sender, null /* text */); false /* progress */, bigTitle, null /* text */); BigTextStyle.applyBigTextContentView(mBuilder, contentView, text); return contentView; } Loading @@ -4601,6 +4610,8 @@ public class Notification implements Parcelable contentView.setInt(R.id.notification_messaging, "setNumIndentLines", mBuilder.mN.mLargeIcon == null ? 0 : (hasTitle ? 1 : 2)); int contractedChildId = View.NO_ID; Message contractedMessage = findLatestIncomingMessage(); int firstMessage = Math.max(0, mMessages.size() - rowIds.length); while (firstMessage + i < mMessages.size() && i < rowIds.length) { Message m = mMessages.get(firstMessage + i); Loading @@ -4609,8 +4620,15 @@ public class Notification implements Parcelable contentView.setViewVisibility(rowId, View.VISIBLE); contentView.setTextViewText(rowId, makeMessageLine(m)); if (contractedMessage == m) { contractedChildId = rowId; } i++; } // Record this here to allow transformation between the contracted and expanded views. contentView.setInt(R.id.notification_messaging, "setContractedChildId", contractedChildId); return contentView; } Loading core/java/com/android/internal/widget/MessagingLinearLayout.java +21 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,11 @@ public class MessagingLinearLayout extends ViewGroup { private int mIndentLines; /** * Id of the child that's also visible in the contracted layout. */ private int mContractedChildId; public MessagingLinearLayout(Context context, @Nullable AttributeSet attrs) { super(context, attrs); Loading Loading @@ -255,14 +260,29 @@ public class MessagingLinearLayout extends ViewGroup { return copy; } @RemotableViewMethod /** * Sets how many lines should be indented to avoid a floating image. */ @RemotableViewMethod public void setNumIndentLines(int numberLines) { mIndentLines = numberLines; } /** * Set id of the child that's also visible in the contracted layout. */ @RemotableViewMethod public void setContractedChildId(int contractedChildId) { mContractedChildId = contractedChildId; } /** * Get id of the child that's also visible in the contracted layout. */ public int getContractedChildId() { return mContractedChildId; } public static class LayoutParams extends MarginLayoutParams { boolean hide = false; Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationMessagingTemplateViewWrapper.java 0 → 100644 +73 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.systemui.statusbar.notification; import com.android.internal.widget.MessagingLinearLayout; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.TransformableView; import android.content.Context; import android.service.notification.StatusBarNotification; import android.view.View; /** * Wraps a notification containing a messaging template */ public class NotificationMessagingTemplateViewWrapper extends NotificationTemplateViewWrapper { private View mContractedMessage; protected NotificationMessagingTemplateViewWrapper(Context ctx, View view, ExpandableNotificationRow row) { super(ctx, view, row); } private void resolveViews() { mContractedMessage = null; View container = mView.findViewById(com.android.internal.R.id.notification_messaging); if (container instanceof MessagingLinearLayout && ((MessagingLinearLayout) container).getChildCount() > 0) { MessagingLinearLayout messagingContainer = (MessagingLinearLayout) container; // Only consider the first child - transforming to a position other than the first // looks bad because we have to move across other messages that are fading in. View child = messagingContainer.getChildAt(0); if (child.getId() == messagingContainer.getContractedChildId()) { mContractedMessage = child; } } } @Override public void notifyContentUpdated(StatusBarNotification notification) { // 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(); super.notifyContentUpdated(notification); } @Override protected void updateTransformedTypes() { // This also clears the existing types super.updateTransformedTypes(); if (mContractedMessage != null) { mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_TEXT, mContractedMessage); } } } packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java +2 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,8 @@ public abstract class NotificationViewWrapper implements TransformableView { return new NotificationBigTextTemplateViewWrapper(ctx, v, row); } else if ("media".equals(v.getTag()) || "bigMediaNarrow".equals(v.getTag())) { return new NotificationMediaTemplateViewWrapper(ctx, v, row); } else if ("messaging".equals(v.getTag())) { return new NotificationMessagingTemplateViewWrapper(ctx, v, row); } return new NotificationTemplateViewWrapper(ctx, v, row); } else if (v instanceof NotificationHeaderView) { Loading Loading
core/java/android/app/Notification.java +22 −4 Original line number Diff line number Diff line Loading @@ -4570,12 +4570,21 @@ public class Notification implements Parcelable : mConversationTitle; boolean hasTitle = !TextUtils.isEmpty(title); if (!hasTitle && mMessages.size() == 1) { CharSequence sender = mMessages.get(0).mSender; CharSequence text = mMessages.get(0).mText; if (mMessages.size() == 1) { // Special case for a single message: Use the big text style // so the collapsed and expanded versions match nicely. CharSequence bigTitle; CharSequence text; if (hasTitle) { bigTitle = title; text = makeMessageLine(mMessages.get(0)); } else { bigTitle = mMessages.get(0).mSender; text = mMessages.get(0).mText; } RemoteViews contentView = mBuilder.applyStandardTemplateWithActions( mBuilder.getBigTextLayoutResource(), false /* progress */, sender, null /* text */); false /* progress */, bigTitle, null /* text */); BigTextStyle.applyBigTextContentView(mBuilder, contentView, text); return contentView; } Loading @@ -4601,6 +4610,8 @@ public class Notification implements Parcelable contentView.setInt(R.id.notification_messaging, "setNumIndentLines", mBuilder.mN.mLargeIcon == null ? 0 : (hasTitle ? 1 : 2)); int contractedChildId = View.NO_ID; Message contractedMessage = findLatestIncomingMessage(); int firstMessage = Math.max(0, mMessages.size() - rowIds.length); while (firstMessage + i < mMessages.size() && i < rowIds.length) { Message m = mMessages.get(firstMessage + i); Loading @@ -4609,8 +4620,15 @@ public class Notification implements Parcelable contentView.setViewVisibility(rowId, View.VISIBLE); contentView.setTextViewText(rowId, makeMessageLine(m)); if (contractedMessage == m) { contractedChildId = rowId; } i++; } // Record this here to allow transformation between the contracted and expanded views. contentView.setInt(R.id.notification_messaging, "setContractedChildId", contractedChildId); return contentView; } Loading
core/java/com/android/internal/widget/MessagingLinearLayout.java +21 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,11 @@ public class MessagingLinearLayout extends ViewGroup { private int mIndentLines; /** * Id of the child that's also visible in the contracted layout. */ private int mContractedChildId; public MessagingLinearLayout(Context context, @Nullable AttributeSet attrs) { super(context, attrs); Loading Loading @@ -255,14 +260,29 @@ public class MessagingLinearLayout extends ViewGroup { return copy; } @RemotableViewMethod /** * Sets how many lines should be indented to avoid a floating image. */ @RemotableViewMethod public void setNumIndentLines(int numberLines) { mIndentLines = numberLines; } /** * Set id of the child that's also visible in the contracted layout. */ @RemotableViewMethod public void setContractedChildId(int contractedChildId) { mContractedChildId = contractedChildId; } /** * Get id of the child that's also visible in the contracted layout. */ public int getContractedChildId() { return mContractedChildId; } public static class LayoutParams extends MarginLayoutParams { boolean hide = false; Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationMessagingTemplateViewWrapper.java 0 → 100644 +73 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.systemui.statusbar.notification; import com.android.internal.widget.MessagingLinearLayout; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.TransformableView; import android.content.Context; import android.service.notification.StatusBarNotification; import android.view.View; /** * Wraps a notification containing a messaging template */ public class NotificationMessagingTemplateViewWrapper extends NotificationTemplateViewWrapper { private View mContractedMessage; protected NotificationMessagingTemplateViewWrapper(Context ctx, View view, ExpandableNotificationRow row) { super(ctx, view, row); } private void resolveViews() { mContractedMessage = null; View container = mView.findViewById(com.android.internal.R.id.notification_messaging); if (container instanceof MessagingLinearLayout && ((MessagingLinearLayout) container).getChildCount() > 0) { MessagingLinearLayout messagingContainer = (MessagingLinearLayout) container; // Only consider the first child - transforming to a position other than the first // looks bad because we have to move across other messages that are fading in. View child = messagingContainer.getChildAt(0); if (child.getId() == messagingContainer.getContractedChildId()) { mContractedMessage = child; } } } @Override public void notifyContentUpdated(StatusBarNotification notification) { // 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(); super.notifyContentUpdated(notification); } @Override protected void updateTransformedTypes() { // This also clears the existing types super.updateTransformedTypes(); if (mContractedMessage != null) { mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_TEXT, mContractedMessage); } } }
packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java +2 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,8 @@ public abstract class NotificationViewWrapper implements TransformableView { return new NotificationBigTextTemplateViewWrapper(ctx, v, row); } else if ("media".equals(v.getTag()) || "bigMediaNarrow".equals(v.getTag())) { return new NotificationMediaTemplateViewWrapper(ctx, v, row); } else if ("messaging".equals(v.getTag())) { return new NotificationMessagingTemplateViewWrapper(ctx, v, row); } return new NotificationTemplateViewWrapper(ctx, v, row); } else if (v instanceof NotificationHeaderView) { Loading