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

Commit 24109ce0 authored by Julia Reynolds's avatar Julia Reynolds Committed by Android (Google) Code Review
Browse files

Merge changes Ib7ba44e3,Id1a5b8ec into main

* changes:
  Show summary in single line hybrid view
  Show summarized text, if any, in msg collapsed view
parents 70e09e95 4008c23c
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1772,6 +1772,11 @@ public class Notification implements Parcelable
     */
    public static final String EXTRA_FOREGROUND_APPS = "android.foregroundApps";
    /**
     * @hide
     */
    public static final String EXTRA_SUMMARIZED_CONTENT = "android.summarization";
    @UnsupportedAppUsage
    private Icon mSmallIcon;
    @UnsupportedAppUsage
+25 −4
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ public class ConversationLayout extends FrameLayout
    private ArrayList<MessagingGroup> mAddedGroups = new ArrayList<>();
    private Person mUser;
    private CharSequence mNameReplacement;
    private CharSequence mSummarizedContent;
    private boolean mIsCollapsed;
    private ImageResolver mImageResolver;
    private CachingIconView mConversationIconView;
@@ -397,7 +398,7 @@ public class ConversationLayout extends FrameLayout
     *
     * @param isCollapsed is it collapsed
     */
    @RemotableViewMethod
    @RemotableViewMethod(asyncImpl = "setIsCollapsedAsync")
    public void setIsCollapsed(boolean isCollapsed) {
        mIsCollapsed = isCollapsed;
        mMessagingLinearLayout.setMaxDisplayedLines(isCollapsed ? 1 : Integer.MAX_VALUE);
@@ -405,6 +406,15 @@ public class ConversationLayout extends FrameLayout
        updateContentEndPaddings();
    }

    /**
     * setDataAsync needs to do different stuff for the collapsed vs expanded view, so store the
     * collapsed state early.
     */
    public Runnable setIsCollapsedAsync(boolean isCollapsed) {
        mIsCollapsed = isCollapsed;
        return () -> setIsCollapsed(isCollapsed);
    }

    /**
     * Set conversation data
     *
@@ -439,8 +449,16 @@ public class ConversationLayout extends FrameLayout
                extras.getBoolean(Notification.EXTRA_SHOW_REMOTE_INPUT_SPINNER, false);
        int unreadCount = extras.getInt(Notification.EXTRA_CONVERSATION_UNREAD_MESSAGE_COUNT);

        final List<MessagingMessage> newMessagingMessages =
        List<MessagingMessage> newMessagingMessages;
        mSummarizedContent = extras.getCharSequence(Notification.EXTRA_SUMMARIZED_CONTENT);
        if (mSummarizedContent != null && mIsCollapsed) {
            Notification.MessagingStyle.Message summary =
                    new Notification.MessagingStyle.Message(mSummarizedContent,  0, "");
            newMessagingMessages = createMessages(List.of(summary), false, usePrecomputedText);
        } else {
            newMessagingMessages =
                    createMessages(newMessages, /* isHistoric= */false, usePrecomputedText);
        }
        final List<MessagingMessage> newHistoricMessagingMessages =
                createMessages(newHistoricMessages, /* isHistoric= */true, usePrecomputedText);

@@ -463,7 +481,7 @@ public class ConversationLayout extends FrameLayout

        return new MessagingData(user, showSpinner, unreadCount,
                newHistoricMessagingMessages, newMessagingMessages, groups, senders,
                conversationHeaderData);
                conversationHeaderData, mSummarizedContent);
    }

    /**
@@ -1622,6 +1640,9 @@ public class ConversationLayout extends FrameLayout

    @Nullable
    public CharSequence getConversationText() {
        if (mSummarizedContent != null) {
            return mSummarizedContent;
        }
        if (mMessages.isEmpty()) {
            return null;
        }
+10 −3
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ final class MessagingData {
    private final List<List<MessagingMessage>> mGroups;
    private final List<Person> mSenders;
    private final int mUnreadCount;
    private final CharSequence mSummarization;

    private ConversationHeaderData mConversationHeaderData;

@@ -41,8 +42,7 @@ final class MessagingData {
            List<Person> senders) {
        this(user, showSpinner, /* unreadCount= */0,
                historicMessagingMessages, newMessagingMessages,
                groups,
                senders, null);
                groups, senders, null, null);
    }

    MessagingData(Person user, boolean showSpinner,
@@ -51,7 +51,8 @@ final class MessagingData {
            List<MessagingMessage> newMessagingMessages,
            List<List<MessagingMessage>> groups,
            List<Person> senders,
            @Nullable ConversationHeaderData conversationHeaderData) {
            @Nullable ConversationHeaderData conversationHeaderData,
            CharSequence summarization) {
        mUser = user;
        mShowSpinner = showSpinner;
        mUnreadCount = unreadCount;
@@ -60,6 +61,7 @@ final class MessagingData {
        mGroups = groups;
        mSenders = senders;
        mConversationHeaderData = conversationHeaderData;
        mSummarization = summarization;
    }

    public Person getUser() {
@@ -94,4 +96,9 @@ final class MessagingData {
    public ConversationHeaderData getConversationHeaderData() {
        return mConversationHeaderData;
    }

    @Nullable
    public CharSequence getSummarization() {
        return mSummarization;
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import java.util.ArrayList;
import java.util.Objects;

/**
 * A message of a {@link MessagingLayout}.
 * A message or summary of a {@link MessagingLayout}.
 */
public interface MessagingMessage extends MessagingLinearLayout.MessagingChild {

+39 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.NotificationLockscreenUserManager
import com.android.systemui.statusbar.NotificationLockscreenUserManager.REDACTION_TYPE_NONE
import com.android.systemui.statusbar.NotificationLockscreenUserManager.REDACTION_TYPE_PUBLIC
import com.android.systemui.statusbar.RankingBuilder
import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
@@ -242,4 +243,42 @@ class NotifUiAdjustmentProviderTest : SysuiTestCase() {
        // Then: need no re-inflation
        assertFalse(NotifUiAdjustment.needReinflate(oldAdjustment, newAdjustment))
    }

    @Test
    @EnableFlags(android.app.Flags.FLAG_NM_SUMMARIZATION_UI)
    fun changeIsSummarization_needReInflation_newlySummarized() {
        // Given: an Entry with no summarization
        val oldAdjustment = adjustmentProvider.calculateAdjustment(entry)
        assertThat(oldAdjustment.summarization).isNull()

        // When: the Entry now has a summarization
        val rb = RankingBuilder(entry.ranking)
        rb.setSummarization("summary!")
        entry.ranking = rb.build()
        val newAdjustment = adjustmentProvider.calculateAdjustment(entry)
        assertThat(newAdjustment).isNotEqualTo(oldAdjustment)

        // Then: Need re-inflation
        assertTrue(NotifUiAdjustment.needReinflate(oldAdjustment, newAdjustment))
    }

    @Test
    @EnableFlags(android.app.Flags.FLAG_NM_SUMMARIZATION_UI)
    fun changeIsSummarization_needReInflation_summarizationChanged() {
        // Given: an Entry with no summarization
        val rb = RankingBuilder(entry.ranking)
        rb.setSummarization("summary!")
        entry.ranking = rb.build()
        val oldAdjustment = adjustmentProvider.calculateAdjustment(entry)

        // When: the Entry now has a new summarization
        val rb2 = RankingBuilder(entry.ranking)
        rb2.setSummarization("summary new!")
        entry.ranking = rb2.build()
        val newAdjustment = adjustmentProvider.calculateAdjustment(entry)
        assertThat(newAdjustment).isNotEqualTo(oldAdjustment)

        // Then: Need re-inflation
        assertTrue(NotifUiAdjustment.needReinflate(oldAdjustment, newAdjustment))
    }
}
Loading