Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70cfa162 authored by Android Build Merger (Role)'s avatar Android Build Merger (Role) Committed by Android (Google) Code Review
Browse files

Merge "Merge \\"Add MessagingStyle transitions\\" into nyc-dev am: a5e2aa99...

Merge "Merge \\"Add MessagingStyle transitions\\" into nyc-dev am: a5e2aa99 am: 0a91c8dd" into nyc-mr1-dev-plus-aosp
parents 341f4c13 4c9e82db
Loading
Loading
Loading
Loading
+22 −4
Original line number Diff line number Diff line
@@ -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;
            }
@@ -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);
@@ -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;
        }

+21 −1
Original line number Diff line number Diff line
@@ -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);

@@ -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;
+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);
        }
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -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) {