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

Commit 78ba7b47 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Fix AppIcon loading for notifications posted as USER_ALL

Fixes: 423778160
Test: presubmit
Flag: android.app.notifications_redesign_app_icons
Change-Id: Ic8de11f89cb15df12c47b0745c5bac3e3e3e3a53
parent 81423bfe
Loading
Loading
Loading
Loading
+6 −25
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.app.NotificationChannel.RECS_ID
import android.app.NotificationChannel.SOCIAL_MEDIA_ID
import android.os.Build
import android.os.SystemProperties
import android.os.UserHandle
import androidx.annotation.VisibleForTesting
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.notifications.ui.composable.row.BundleHeader
@@ -55,7 +56,6 @@ import com.android.systemui.statusbar.notification.stack.BUCKET_SOCIAL
import com.android.systemui.util.time.SystemClock
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch

/** Coordinator for sections derived from NotificationAssistantService classification. */
@@ -256,22 +256,6 @@ constructor(
        updateEntryList(entries, /* currentBundleKey */ null)
    }

    private fun getAppDataForListEntry(listEntry: ListEntry): AppData? {
        if (listEntry.representativeEntry == null) {
            error(
                "getAppDataForListEntry BundleEntry child (key: ${listEntry.key})" +
                    "has no representativeEntry"
            )
        }
        val representative = listEntry.representativeEntry!!
        val time = representative.timeAddedToBundle.second
        return if (time > 0L) {
            AppData(representative.sbn.packageName, representative.sbn.user, time)
        } else {
            error("getAppDataForListEntry not in bundle (key: ${listEntry.key})")
        }
    }

    /**
     * For each BundleEntry, populate its bundleRepository.appDataList with unique AppData (package
     * name, UserHandle, latest timeAddedToBundle) by recursively checking all NotificationEntry
@@ -289,18 +273,12 @@ constructor(
                    for (listEntry in listEntries) {
                        when (listEntry) {
                            is NotificationEntry -> {
                                val time = listEntry.timeAddedToBundle.second
                                appDataList.add(
                                    AppData(listEntry.sbn.packageName, listEntry.sbn.user, time)
                                )
                                appDataList.add(listEntry.toAppData())
                            }

                            is GroupEntry -> {
                                listEntry.representativeEntry?.let { summary ->
                                    val time = summary.timeAddedToBundle.second
                                    appDataList.add(
                                        AppData(summary.sbn.packageName, summary.sbn.user, time)
                                    )
                                    appDataList.add(summary.toAppData())
                                }
                                collectAppData(listEntry.children)
                            }
@@ -385,3 +363,6 @@ constructor(
        }
    }
}

private fun NotificationEntry.toAppData(): AppData =
    AppData(sbn.packageName, UserHandle.of(sbn.normalizedUserId), timeAddedToBundle.second)
+3 −1
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.app.Notification.ProgressStyle
import android.app.Person
import android.content.Context
import android.graphics.drawable.Icon
import android.os.UserHandle
import android.service.notification.StatusBarNotification
import android.view.LayoutInflater
import androidx.compose.ui.util.trace
@@ -324,7 +325,8 @@ constructor(
    private fun StatusBarNotification.skeletonAppIcon(packageContext: Context): NotifIcon.AppIcon? {
        if (!android.app.Flags.notificationsRedesignAppIcons()) return null
        if (!notificationIconStyleProvider.shouldShowAppIcon(this, packageContext)) return null
        return NotifIcon.AppIcon(appIconProvider.getOrFetchSkeletonAppIcon(packageName, user))
        val userHandle = UserHandle.of(normalizedUserId)
        return NotifIcon.AppIcon(appIconProvider.getOrFetchSkeletonAppIcon(packageName, userHandle))
    }

    private fun Notification.title(): CharSequence? = getCharSequenceExtraUnlessEmpty(EXTRA_TITLE)
+2 −1
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import android.graphics.drawable.Drawable;
import android.metrics.LogMaker;
import android.os.Handler;
import android.os.RemoteException;
import android.os.UserHandle;
import android.service.notification.NotificationAssistantService;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
@@ -340,7 +341,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
                    mAppName = String.valueOf(mPm.getApplicationLabel(info));
                    // The app icon is likely already in the cache, so let's use it
                    mPkgIcon = mAppIconProvider.getOrFetchAppIcon(info.packageName,
                            mSbn.getUser(), /* instanceKey= */ "LEGACY");
                            UserHandle.of(mSbn.getNormalizedUserId()), /* instanceKey= */ "LEGACY");
                } catch (Exception ignored) {
                }
            }
+4 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.app.ActivityManager
import android.app.Flags
import android.app.Flags.notificationsRedesignThemedAppIcons
import android.content.Context
import android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES
import android.content.pm.PackageManager.NameNotFoundException
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
@@ -207,7 +208,9 @@ constructor(
    ): BitmapInfo {
        val pm = sysuiContext.packageManager
        val userId = userHandle.identifier
        val icon = pm.getApplicationInfoAsUser(packageName, 0, userId).loadUnbadgedIcon(pm)
        val icon =
            pm.getApplicationInfoAsUser(packageName, MATCH_UNINSTALLED_PACKAGES, userId)
                .loadUnbadgedIcon(pm)
        val options = iconOptions(userHandle, allowProfileBadge = allowProfileBadge)
        return iconFactory.createBadgedIconBitmap(icon, options)
    }
+1 −1
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ constructor(
            override fun getAppIcon(): Drawable {
                return appIconProvider.getOrFetchAppIcon(
                    packageName = sbn.packageName,
                    userHandle = sbn.user,
                    userHandle = context.user,
                    instanceKey = "LEGACY",
                )
            }