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

Commit 2881e73c authored by Julia Tuttle's avatar Julia Tuttle Committed by Ioana Alexandru
Browse files

[AOD RONs] Extract skeleton app icons

Bug: 402147021
Flag: android.app.ui_rich_ongoing
Test: manual
Change-Id: I508d3360cbb6b2f0014cf8d0e2084701eeaec89d
parent 2a011601
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -40,7 +40,6 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager.REDACTIO
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
import com.android.systemui.statusbar.notification.promoted.AutomaticPromotionCoordinator.Companion.EXTRA_WAS_AUTOMATICALLY_PROMOTED
import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUi
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel.Style
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel.When
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModels
@@ -669,7 +668,10 @@ class PromotedNotificationContentExtractorImplTest : SysuiTestCase() {
        if (notif.creationTime != 0L) {
            notif.creationTime = systemClock.currentTimeMillis()
        }
        return NotificationEntryBuilder().setNotification(notif).build()
        return NotificationEntryBuilder()
            .setPkg("com.android.systemui") // use a real package name, since we're fetching icons
            .setNotification(notif)
            .build()
    }

    companion object {
+22 −7
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.app.Notification.ProgressStyle
import android.app.Person
import android.content.Context
import android.graphics.drawable.Icon
import android.service.notification.StatusBarNotification
import com.android.systemui.Flags
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.shade.ShadeDisplayAware
@@ -47,10 +48,13 @@ import com.android.systemui.statusbar.notification.promoted.AutomaticPromotionCo
import com.android.systemui.statusbar.notification.promoted.AutomaticPromotionCoordinator.Companion.EXTRA_WAS_AUTOMATICALLY_PROMOTED
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel.Companion.isPromotedForStatusBarChip
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel.NotifIcon
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel.OldProgress
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel.Style
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel.When
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModels
import com.android.systemui.statusbar.notification.row.icon.AppIconProvider
import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider
import com.android.systemui.statusbar.notification.row.shared.ImageModel
import com.android.systemui.statusbar.notification.row.shared.ImageModelProvider
import com.android.systemui.statusbar.notification.row.shared.ImageModelProvider.ImageSizeClass.MediumSquare
@@ -73,6 +77,8 @@ class PromotedNotificationContentExtractorImpl
@Inject
constructor(
    @ShadeDisplayAware private val context: Context,
    private val notificationIconStyleProvider: NotificationIconStyleProvider,
    private val appIconProvider: AppIconProvider,
    private val skeletonImageTransform: SkeletonImageTransform,
    private val systemClock: SystemClock,
    private val logger: PromotedNotificationLogger,
@@ -109,7 +115,7 @@ constructor(
        val privateVersion =
            extractPrivateContent(
                key = entry.key,
                notification = notification,
                sbn = entry.sbn,
                recoveredBuilder = recoveredBuilder,
                lastAudiblyAlertedMs = entry.lastAudiblyAlertedMs,
                imageModelProvider = imageModelProvider,
@@ -189,11 +195,12 @@ constructor(

    private fun extractPrivateContent(
        key: String,
        notification: Notification,
        sbn: StatusBarNotification,
        recoveredBuilder: Notification.Builder,
        lastAudiblyAlertedMs: Long,
        imageModelProvider: ImageModelProvider,
    ): PromotedNotificationContentModel {
        val notification = sbn.notification

        val contentBuilder = PromotedNotificationContentModel.Builder(key)

@@ -202,10 +209,10 @@ constructor(

        contentBuilder.wasPromotedAutomatically =
            notification.extras.getBoolean(EXTRA_WAS_AUTOMATICALLY_PROMOTED, false)

        contentBuilder.skeletonNotifIcon =
            notification.smallIconModel(imageModelProvider)?.let {
                PromotedNotificationContentModel.NotifIcon.SmallIcon(it)
            }
            sbn.skeletonAppIcon() ?: notification.skeletonSmallIcon(imageModelProvider)

        contentBuilder.iconLevel = notification.iconLevel
        contentBuilder.appName = notification.loadHeaderAppName(context)
        contentBuilder.subText = notification.subText()
@@ -230,8 +237,16 @@ constructor(
        return contentBuilder.build()
    }

    private fun Notification.smallIconModel(imageModelProvider: ImageModelProvider): ImageModel? =
        imageModelProvider.getImageModel(smallIcon, SmallSquare)
    private fun Notification.skeletonSmallIcon(
        imageModelProvider: ImageModelProvider
    ): NotifIcon.SmallIcon? =
        imageModelProvider.getImageModel(smallIcon, SmallSquare)?.let { NotifIcon.SmallIcon(it) }

    private fun StatusBarNotification.skeletonAppIcon(): NotifIcon.AppIcon? {
        if (!android.app.Flags.notificationsRedesignAppIcons()) return null
        if (!notificationIconStyleProvider.shouldShowAppIcon(this, context)) return null
        return NotifIcon.AppIcon(appIconProvider.getOrFetchSkeletonAppIcon(packageName, context))
    }

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

+4 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import com.android.systemui.kosmos.Kosmos
import com.android.systemui.statusbar.NotificationLockscreenUserManager.REDACTION_TYPE_PUBLIC
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.row.RowImageInflater
import com.android.systemui.statusbar.notification.row.icon.appIconProvider
import com.android.systemui.statusbar.notification.row.icon.notificationIconStyleProvider
import com.android.systemui.statusbar.notification.row.shared.skeletonImageTransform
import com.android.systemui.util.time.systemClock

@@ -29,6 +31,8 @@ var Kosmos.promotedNotificationContentExtractor by
    Kosmos.Fixture {
        PromotedNotificationContentExtractorImpl(
            applicationContext,
            notificationIconStyleProvider,
            appIconProvider,
            skeletonImageTransform,
            systemClock,
            promotedNotificationLogger,
+5 −1
Original line number Diff line number Diff line
@@ -84,7 +84,9 @@ import com.android.systemui.statusbar.notification.row.NotificationRowContentBin
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag
import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProviderImpl
import com.android.systemui.statusbar.notification.row.icon.NotificationRowIconViewInflaterFactory
import com.android.systemui.statusbar.notification.row.icon.appIconProvider
import com.android.systemui.statusbar.notification.row.icon.mockAppIconProvider
import com.android.systemui.statusbar.notification.row.icon.notificationIconStyleProvider
import com.android.systemui.statusbar.notification.row.shared.NotificationRowContentBinderRefactor
import com.android.systemui.statusbar.notification.row.shared.SkeletonImageTransform
import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainerLogger
@@ -239,6 +241,8 @@ class ExpandableNotificationRowBuilder(
        val promotedNotificationContentExtractor =
            PromotedNotificationContentExtractorImpl(
                context,
                kosmos.notificationIconStyleProvider,
                kosmos.appIconProvider,
                SkeletonImageTransform(context),
                mFakeSystemClock,
                PromotedNotificationLogger(logcatLogBuffer("PromotedNotifLog")),