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

Commit b2181a83 authored by Ioana Alexandru's avatar Ioana Alexandru
Browse files

Make AppIconProvider&NotifIconStyleProvider dumpable

Example dump output:
```
    AppIconProviderImpl:
    ----------------------------------------------------------------------------
    cache information:
      NotifCollectionCache(retainCount = 1, purgeTimeoutMillis = 1000)
      	keys present in cache: 4
      		com.google.android.apps.photos
      		com.google.android.calendar
      		com.google.android.gm
      		com.google.android.googlequicksearchbox
      	cache hit ratio = 88.2353% (30 hits, 4 misses)
    icon factory information:
      fullResIconDpi = 360
      iconSize = 108

    NORMAL dump took 1ms -- AppIconProviderImpl

    NotificationIconStyleProviderImpl:
    ----------------------------------------------------------------------------
    cache information:
      NotifCollectionCache(retainCount = 1, purgeTimeoutMillis = 1000)
      	keys present in cache: 5
      		android
      		com.google.android.apps.photos
      		com.google.android.calendar
      		com.google.android.gm
      		com.google.android.googlequicksearchbox
      	cache hit ratio = 86.84211% (33 hits, 5 misses)

    NORMAL dump took 1ms -- NotificationIconStyleProviderImpl

    Dump took 5ms
```

Bug: 371174789
Test: adb shell dumpsys activity service com.android.systemui/.SystemUIService AppIconProviderImpl NotificationIconStyleProviderImpl
Flag: android.app.notifications_redesign_app_icons
Change-Id: Ia9f98af84026440c5483bf100bee4352924f37af
parent 1c7b6944
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -28,10 +28,15 @@ import android.graphics.drawable.Drawable
import android.util.Log
import com.android.internal.R
import com.android.launcher3.icons.BaseIconFactory
import com.android.systemui.Dumpable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.notification.collection.NotifCollectionCache
import com.android.systemui.util.asIndenting
import com.android.systemui.util.withIncreasedIndent
import dagger.Module
import dagger.Provides
import java.io.PrintWriter
import javax.inject.Inject
import javax.inject.Provider

@@ -54,7 +59,14 @@ interface AppIconProvider {
}

@SysUISingleton
class AppIconProviderImpl @Inject constructor(private val sysuiContext: Context) : AppIconProvider {
class AppIconProviderImpl
@Inject
constructor(private val sysuiContext: Context, dumpManager: DumpManager) :
    AppIconProvider, Dumpable {
    init {
        dumpManager.registerNormalDumpable(TAG, this)
    }

    private val iconFactory: BaseIconFactory
        get() {
            val isLowRam = ActivityManager.isLowRamDeviceStatic()
@@ -85,6 +97,24 @@ class AppIconProviderImpl @Inject constructor(private val sysuiContext: Context)
    override fun purgeCache(wantedPackages: Collection<String>) {
        cache.purge(wantedPackages)
    }

    override fun dump(pwOrig: PrintWriter, args: Array<out String>) {
        val pw = pwOrig.asIndenting()

        pw.println("cache information:")
        pw.withIncreasedIndent { cache.dump(pw, args) }

        val iconFactory = iconFactory
        pw.println("icon factory information:")
        pw.withIncreasedIndent {
            pw.println("fullResIconDpi = ${iconFactory.fullResIconDpi}")
            pw.println("iconSize = ${iconFactory.iconBitmapSize}")
        }
    }

    companion object {
        const val TAG = "AppIconProviderImpl"
    }
}

class NoOpIconProvider : AppIconProvider {
+21 −1
Original line number Diff line number Diff line
@@ -22,10 +22,15 @@ import android.content.Context
import android.content.pm.ApplicationInfo
import android.service.notification.StatusBarNotification
import android.util.Log
import com.android.systemui.Dumpable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.notification.collection.NotifCollectionCache
import com.android.systemui.util.asIndenting
import com.android.systemui.util.withIncreasedIndent
import dagger.Module
import dagger.Provides
import java.io.PrintWriter
import javax.inject.Inject
import javax.inject.Provider

@@ -50,7 +55,12 @@ interface NotificationIconStyleProvider {
}

@SysUISingleton
class NotificationIconStyleProviderImpl @Inject constructor() : NotificationIconStyleProvider {
class NotificationIconStyleProviderImpl @Inject constructor(dumpManager: DumpManager) :
    NotificationIconStyleProvider, Dumpable {
    init {
        dumpManager.registerNormalDumpable(TAG, this)
    }

    private val cache = NotifCollectionCache<Boolean>()

    override fun shouldShowAppIcon(notification: StatusBarNotification, context: Context): Boolean {
@@ -82,6 +92,16 @@ class NotificationIconStyleProviderImpl @Inject constructor() : NotificationIcon
    override fun purgeCache(wantedPackages: Collection<String>) {
        cache.purge(wantedPackages)
    }

    override fun dump(pwOrig: PrintWriter, args: Array<out String>) {
        val pw = pwOrig.asIndenting()
        pw.println("cache information:")
        pw.withIncreasedIndent { cache.dump(pw, args) }
    }

    companion object {
        const val TAG = "NotificationIconStyleProviderImpl"
    }
}

class NoOpIconStyleProvider : NotificationIconStyleProvider {
+4 −5
Original line number Diff line number Diff line
@@ -85,7 +85,6 @@ import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent
import com.android.systemui.util.Assert.runWithCurrentThreadAsMainThread
import com.android.systemui.util.DeviceConfigProxyFake
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.time.FakeSystemClock
import com.android.systemui.wmshell.BubblesManager
@@ -126,6 +125,7 @@ class ExpandableNotificationRowBuilder(
    private val mMainCoroutineContext = mTestScope.coroutineContext
    private val mFakeSystemClock = FakeSystemClock()
    private val mMainExecutor = FakeExecutor(mFakeSystemClock)
    private val mDumpManager = DumpManager()

    init {
        featureFlags.setDefault(Flags.ENABLE_NOTIFICATIONS_SIMULATE_SLOW_MEASURE)
@@ -142,8 +142,7 @@ class ExpandableNotificationRowBuilder(
        mGroupMembershipManager = GroupMembershipManagerImpl()
        mSmartReplyController = Mockito.mock(SmartReplyController::class.java, STUB_ONLY)

        val dumpManager = DumpManager()
        mGroupExpansionManager = GroupExpansionManagerImpl(dumpManager, mGroupMembershipManager)
        mGroupExpansionManager = GroupExpansionManagerImpl(mDumpManager, mGroupMembershipManager)
        mHeadsUpManager = Mockito.mock(HeadsUpManager::class.java, STUB_ONLY)
        mIconManager =
            IconManager(
@@ -289,8 +288,8 @@ class ExpandableNotificationRowBuilder(
            NotificationOptimizedLinearLayoutFactory(),
            { Mockito.mock(NotificationViewFlipperFactory::class.java) },
            NotificationRowIconViewInflaterFactory(
                AppIconProviderImpl(context),
                NotificationIconStyleProviderImpl(),
                AppIconProviderImpl(context, mDumpManager),
                NotificationIconStyleProviderImpl(mDumpManager),
            ),
        )
    }
+3 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.systemui.statusbar.notification.row.icon

import android.content.applicationContext
import com.android.systemui.dump.dumpManager
import com.android.systemui.kosmos.Kosmos

val Kosmos.appIconProvider by Kosmos.Fixture { AppIconProviderImpl(applicationContext) }
val Kosmos.appIconProvider by
    Kosmos.Fixture { AppIconProviderImpl(applicationContext, dumpManager) }
+3 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.systemui.statusbar.notification.row.icon

import com.android.systemui.dump.dumpManager
import com.android.systemui.kosmos.Kosmos

val Kosmos.notificationIconStyleProvider by Kosmos.Fixture { NotificationIconStyleProviderImpl() }
val Kosmos.notificationIconStyleProvider by
    Kosmos.Fixture { NotificationIconStyleProviderImpl(dumpManager) }