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

Commit 4768e239 authored by Julia Tuttle's avatar Julia Tuttle
Browse files

Extract big title and text from BigTextStyle AOD RONs

Bug: 369151941
Flag: com.android.systemui.aod_ui_rich_ongoing
Test: manual
Change-Id: Icf37e3488bdc7cec82d61f45a2ddfc7f64783a81
parent fb75ed92
Loading
Loading
Loading
Loading
+60 −1
Original line number Diff line number Diff line
@@ -376,12 +376,67 @@ class PromotedNotificationContentExtractorImplTest : SysuiTestCase() {
    @Test
    @EnableFlags(PromotedNotificationUi.FLAG_NAME, StatusBarNotifChips.FLAG_NAME)
    fun extractContent_fromBigTextStyle() {
        val entry = createEntry { setStyle(BigTextStyle()) }
        val entry = createEntry {
            setContentTitle(TEST_CONTENT_TITLE)
            setContentText(TEST_CONTENT_TEXT)
            setStyle(
                BigTextStyle()
                    .bigText(TEST_BIG_TEXT)
                    .setBigContentTitle(TEST_BIG_CONTENT_TITLE)
                    .setSummaryText(TEST_SUMMARY_TEXT)
            )
        }

        val content = extractContent(entry)

        assertThat(content).isNotNull()
        assertThat(content?.style).isEqualTo(Style.BigText)
        assertThat(content?.title).isEqualTo(TEST_BIG_CONTENT_TITLE)
        assertThat(content?.text).isEqualTo(TEST_BIG_TEXT)
    }

    @Test
    @EnableFlags(PromotedNotificationUi.FLAG_NAME, StatusBarNotifChips.FLAG_NAME)
    fun extractContent_fromBigTextStyle_fallbackToContentTitle() {
        val entry = createEntry {
            setContentTitle(TEST_CONTENT_TITLE)
            setContentText(TEST_CONTENT_TEXT)
            setStyle(
                BigTextStyle()
                    .bigText(TEST_BIG_TEXT)
                    // bigContentTitle unset
                    .setSummaryText(TEST_SUMMARY_TEXT)
            )
        }

        val content = extractContent(entry)

        assertThat(content).isNotNull()
        assertThat(content?.style).isEqualTo(Style.BigText)
        assertThat(content?.title).isEqualTo(TEST_CONTENT_TITLE)
        assertThat(content?.text).isEqualTo(TEST_BIG_TEXT)
    }

    @Test
    @EnableFlags(PromotedNotificationUi.FLAG_NAME, StatusBarNotifChips.FLAG_NAME)
    fun extractContent_fromBigTextStyle_fallbackToContentText() {
        val entry = createEntry {
            setContentTitle(TEST_CONTENT_TITLE)
            setContentText(TEST_CONTENT_TEXT)
            setStyle(
                BigTextStyle()
                    // bigText unset
                    .setBigContentTitle(TEST_BIG_CONTENT_TITLE)
                    .setSummaryText(TEST_SUMMARY_TEXT)
            )
        }

        val content = extractContent(entry)

        assertThat(content).isNotNull()
        assertThat(content?.style).isEqualTo(Style.BigText)
        assertThat(content?.title).isEqualTo(TEST_BIG_CONTENT_TITLE)
        assertThat(content?.text).isEqualTo(TEST_CONTENT_TEXT)
    }

    @Test
@@ -498,6 +553,10 @@ class PromotedNotificationContentExtractorImplTest : SysuiTestCase() {
        private const val TEST_CONTENT_TEXT = "content text"
        private const val TEST_SHORT_CRITICAL_TEXT = "short"

        private const val TEST_BIG_CONTENT_TITLE = "big content title"
        private const val TEST_BIG_TEXT = "big text"
        private const val TEST_SUMMARY_TEXT = "summary text"

        private const val TEST_PROGRESS = 50
        private const val TEST_PROGRESS_MAX = 100

+38 −4
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.app.Notification
import android.app.Notification.BigPictureStyle
import android.app.Notification.BigTextStyle
import android.app.Notification.CallStyle
import android.app.Notification.EXTRA_BIG_TEXT
import android.app.Notification.EXTRA_CHRONOMETER_COUNT_DOWN
import android.app.Notification.EXTRA_PROGRESS
import android.app.Notification.EXTRA_PROGRESS_INDETERMINATE
@@ -27,8 +28,10 @@ import android.app.Notification.EXTRA_PROGRESS_MAX
import android.app.Notification.EXTRA_SUB_TEXT
import android.app.Notification.EXTRA_TEXT
import android.app.Notification.EXTRA_TITLE
import android.app.Notification.EXTRA_TITLE_BIG
import android.app.Notification.EXTRA_VERIFICATION_ICON
import android.app.Notification.EXTRA_VERIFICATION_TEXT
import android.app.Notification.InboxStyle
import android.app.Notification.ProgressStyle
import android.content.Context
import android.graphics.drawable.Icon
@@ -105,8 +108,8 @@ constructor(
        contentBuilder.shortCriticalText = notification.shortCriticalText()
        contentBuilder.lastAudiblyAlertedMs = entry.lastAudiblyAlertedMs
        contentBuilder.profileBadgeResId = null // TODO
        contentBuilder.title = notification.title()
        contentBuilder.text = notification.text()
        contentBuilder.title = notification.resolveTitle(recoveredBuilder.style)
        contentBuilder.text = notification.resolveText(recoveredBuilder.style)
        contentBuilder.skeletonLargeIcon = notification.skeletonLargeIcon(imageModelProvider)
        contentBuilder.oldProgress = notification.oldProgress()

@@ -127,8 +130,39 @@ constructor(

    private fun Notification.title(): CharSequence? = extras?.getCharSequence(EXTRA_TITLE)

    private fun Notification.bigTitle(): CharSequence? = extras?.getCharSequence(EXTRA_TITLE_BIG)

    private fun Notification.Style.bigTitleOverridesTitle(): Boolean {
        return when (this) {
            is BigTextStyle,
            is BigPictureStyle,
            is InboxStyle -> true
            else -> false
        }
    }

    private fun Notification.resolveTitle(style: Notification.Style?): CharSequence? {
        return if (style?.bigTitleOverridesTitle() == true) {
            bigTitle()
        } else {
            null
        } ?: title()
    }

    private fun Notification.text(): CharSequence? = extras?.getCharSequence(EXTRA_TEXT)

    private fun Notification.bigText(): CharSequence? = extras?.getCharSequence(EXTRA_BIG_TEXT)

    private fun Notification.Style.bigTextOverridesText(): Boolean = this is BigTextStyle

    private fun Notification.resolveText(style: Notification.Style?): CharSequence? {
        return if (style?.bigTextOverridesText() == true) {
            bigText()
        } else {
            null
        } ?: text()
    }

    private fun Notification.subText(): String? = extras?.getString(EXTRA_SUB_TEXT)

    private fun Notification.shortCriticalText(): String? {
@@ -233,13 +267,13 @@ constructor(
    private fun BigPictureStyle.extractContent(
        contentBuilder: PromotedNotificationContentModel.Builder
    ) {
        // TODO?
        // Big title is handled in resolveTitle, and big picture is unsupported.
    }

    private fun BigTextStyle.extractContent(
        contentBuilder: PromotedNotificationContentModel.Builder
    ) {
        // TODO?
        // Big title and big text are handled in resolveTitle and resolveText.
    }

    private fun CallStyle.extractContent(