Revert "Do not retain album art in NotificationMediaManager if unused"

This reverts commit 4f6344bab4311d559050911167542c9b1a26718b.

Reason for revert: Droidfood locking bug: b/278672382
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:b20d1951620813e1e361b4436c1d5763f4521ee3)
Merged-In: I9ef9dfeeac4d493c75bdf6cd5d58f344323c60d7
Change-Id: I9ef9dfeeac4d493c75bdf6cd5d58f344323c60d7
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
index 1714f48..72ae16e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
@@ -71,8 +71,6 @@
 import com.android.systemui.util.Utils;
 import com.android.systemui.util.concurrency.DelayableExecutor;
 
-import dagger.Lazy;
-
 import java.io.PrintWriter;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -82,6 +80,8 @@
 import java.util.Optional;
 import java.util.Set;
 
+import dagger.Lazy;
+
 /**
  * Handles tasks and state related to media notifications. For example, there is a 'current' media
  * notification, which this class keeps track of.
@@ -161,49 +161,12 @@
                 Log.v(TAG, "DEBUG_MEDIA: onMetadataChanged: " + metadata);
             }
             mMediaArtworkProcessor.clearCache();
-            mMediaMetadata = cleanMetadata(metadata);
+            mMediaMetadata = metadata;
             dispatchUpdateMediaMetaData(true /* changed */, true /* allowAnimation */);
         }
     };
 
     /**
-     * If this build is not configured for lockscreen artwork, clear artwork references from the
-     * metadata to avoid excess memory usage. Otherwise, return as is.
-     * @param data Original metadata
-     * @return a copy without artwork data, or original
-     */
-    private MediaMetadata cleanMetadata(MediaMetadata data) {
-        if (SHOW_LOCKSCREEN_MEDIA_ARTWORK) {
-            return data;
-        }
-        if (data == null) {
-            return null;
-        }
-        if (DEBUG_MEDIA) {
-            String[] artKeys = new String[] {
-                MediaMetadata.METADATA_KEY_ART,
-                MediaMetadata.METADATA_KEY_ALBUM_ART,
-                MediaMetadata.METADATA_KEY_DISPLAY_ICON,
-                MediaMetadata.METADATA_KEY_ALBUM_ART_URI,
-                MediaMetadata.METADATA_KEY_ART_URI,
-                MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI
-            };
-            Log.v(TAG, "DEBUG_MEDIA: removing artwork from metadata");
-            for (String key: artKeys) {
-                Log.v(TAG, "  " + key + ": " + data.containsKey(key));
-            }
-        }
-        return new MediaMetadata.Builder(data)
-                .putBitmap(MediaMetadata.METADATA_KEY_ART, null)
-                .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, null)
-                .putBitmap(MediaMetadata.METADATA_KEY_DISPLAY_ICON, null)
-                .putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, null)
-                .putString(MediaMetadata.METADATA_KEY_ART_URI, null)
-                .putString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI, null)
-                .build();
-    }
-
-    /**
      * Injected constructor. See {@link CentralSurfacesModule}.
      */
     public NotificationMediaManager(
@@ -350,7 +313,6 @@
         return mMediaNotificationKey;
     }
 
-    @VisibleForTesting
     public MediaMetadata getMediaMetadata() {
         return mMediaMetadata;
     }
@@ -388,7 +350,7 @@
      * update this manager's internal state.
      * @return whether the current MediaMetadata changed (and needs to be announced to listeners).
      */
-    private boolean findPlayingMediaNotification(
+    boolean findPlayingMediaNotification(
             @NonNull Collection<NotificationEntry> allNotifications) {
         boolean metaDataChanged = false;
         // Promote the media notification with a controller in 'playing' state, if any.
@@ -421,7 +383,7 @@
             clearCurrentMediaNotificationSession();
             mMediaController = controller;
             mMediaController.registerCallback(mMediaListener);
-            mMediaMetadata = cleanMetadata(mMediaController.getMetadata());
+            mMediaMetadata = mMediaController.getMetadata();
             if (DEBUG_MEDIA) {
                 Log.v(TAG, "DEBUG_MEDIA: insert listener, found new controller: "
                         + mMediaController + ", receive metadata: " + mMediaMetadata);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
index b15d241..f579d30 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
@@ -75,7 +75,7 @@
     boolean DEBUG_WAKEUP_DELAY = Compile.IS_DEBUG;
     // additional instrumentation for testing purposes; intended to be left on during development
     boolean CHATTY = DEBUG;
-    boolean SHOW_LOCKSCREEN_MEDIA_ARTWORK = false;
+    boolean SHOW_LOCKSCREEN_MEDIA_ARTWORK = true;
     String ACTION_FAKE_ARTWORK = "fake_artwork";
     int FADE_KEYGUARD_START_DELAY = 100;
     int FADE_KEYGUARD_DURATION = 300;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMediaManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMediaManagerTest.kt
index b997f64..9d6ea85 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMediaManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMediaManagerTest.kt
@@ -16,34 +16,11 @@
 
 package com.android.systemui.statusbar
 
-import android.app.Notification
-import android.app.WallpaperManager
-import android.graphics.Bitmap
-import android.media.MediaMetadata
-import android.media.session.MediaSession
-import android.media.session.PlaybackState
 import android.testing.AndroidTestingRunner
-import android.testing.TestableLooper.RunWithLooper
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
-import com.android.systemui.colorextraction.SysuiColorExtractor
-import com.android.systemui.dump.DumpManager
-import com.android.systemui.media.controls.pipeline.MediaDataManager
-import com.android.systemui.plugins.statusbar.StatusBarStateController
-import com.android.systemui.statusbar.notification.collection.NotifCollection
-import com.android.systemui.statusbar.notification.collection.NotifPipeline
-import com.android.systemui.statusbar.notification.collection.NotificationEntry
-import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider
-import com.android.systemui.statusbar.phone.CentralSurfaces
-import com.android.systemui.statusbar.phone.KeyguardBypassController
-import com.android.systemui.statusbar.policy.KeyguardStateController
-import com.android.systemui.util.concurrency.DelayableExecutor
-import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.mockito.whenever
-import com.android.systemui.util.time.FakeSystemClock
-import com.google.common.truth.Truth.assertThat
-import dagger.Lazy
-import java.util.Optional
+import org.junit.After
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -55,121 +32,39 @@
 import org.mockito.Mockito.verify
 import org.mockito.MockitoAnnotations
 
+/**
+ * Temporary test for the lock screen live wallpaper project.
+ *
+ * TODO(b/273443374): remove this test
+ */
 @RunWith(AndroidTestingRunner::class)
 @SmallTest
-@RunWithLooper
 class NotificationMediaManagerTest : SysuiTestCase() {
 
-    @Mock private lateinit var centralSurfaces: CentralSurfaces
-    @Mock private lateinit var notificationShadeWindowController: NotificationShadeWindowController
-    @Mock private lateinit var visibilityProvider: NotificationVisibilityProvider
-    @Mock private lateinit var mediaArtworkProcessor: MediaArtworkProcessor
-    @Mock private lateinit var keyguardBypassController: KeyguardBypassController
-    @Mock private lateinit var notifPipeline: NotifPipeline
-    @Mock private lateinit var notifCollection: NotifCollection
-    @Mock private lateinit var mediaDataManager: MediaDataManager
-    @Mock private lateinit var statusBarStateController: StatusBarStateController
-    @Mock private lateinit var colorExtractor: SysuiColorExtractor
-    @Mock private lateinit var keyguardStateController: KeyguardStateController
-    @Mock private lateinit var dumpManager: DumpManager
-    @Mock private lateinit var wallpaperManager: WallpaperManager
+    @Mock private lateinit var notificationMediaManager: NotificationMediaManager
 
-    @Mock private lateinit var notificationEntry: NotificationEntry
-
-    lateinit var manager: NotificationMediaManager
-    val clock = FakeSystemClock()
-    val mainExecutor: DelayableExecutor = FakeExecutor(clock)
-
-    @Mock private lateinit var mockManager: NotificationMediaManager
     @Mock private lateinit var mockBackDropView: BackDropView
 
     @Before
     fun setUp() {
         MockitoAnnotations.initMocks(this)
-        doCallRealMethod().whenever(mockManager).updateMediaMetaData(anyBoolean(), anyBoolean())
-        doReturn(mockBackDropView).whenever(mockManager).backDropView
-
-        manager =
-            NotificationMediaManager(
-                context,
-                Lazy { Optional.of(centralSurfaces) },
-                Lazy { notificationShadeWindowController },
-                visibilityProvider,
-                mediaArtworkProcessor,
-                keyguardBypassController,
-                notifPipeline,
-                notifCollection,
-                mainExecutor,
-                mediaDataManager,
-                statusBarStateController,
-                colorExtractor,
-                keyguardStateController,
-                dumpManager,
-                wallpaperManager,
-            )
+        doCallRealMethod()
+            .whenever(notificationMediaManager)
+            .updateMediaMetaData(anyBoolean(), anyBoolean())
+        doReturn(mockBackDropView).whenever(notificationMediaManager).backDropView
     }
 
-    /**
-     * Check that updateMediaMetaData is a no-op with mIsLockscreenLiveWallpaperEnabled = true
-     * Temporary test for the lock screen live wallpaper project.
-     *
-     * TODO(b/273443374): remove this test
-     */
+    @After fun tearDown() {}
+
+    /** Check that updateMediaMetaData is a no-op with mIsLockscreenLiveWallpaperEnabled = true */
     @Test
     fun testUpdateMediaMetaDataDisabled() {
-        mockManager.mIsLockscreenLiveWallpaperEnabled = true
+        notificationMediaManager.mIsLockscreenLiveWallpaperEnabled = true
         for (metaDataChanged in listOf(true, false)) {
             for (allowEnterAnimation in listOf(true, false)) {
-                mockManager.updateMediaMetaData(metaDataChanged, allowEnterAnimation)
-                verify(mockManager, never()).mediaMetadata
+                notificationMediaManager.updateMediaMetaData(metaDataChanged, allowEnterAnimation)
+                verify(notificationMediaManager, never()).mediaMetadata
             }
         }
     }
-
-    @Test
-    fun testMetadataUpdated_doesNotRetainArtwork() {
-        val artBmp = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)
-        val artUri = "content://example"
-        val inputMetadata =
-            MediaMetadata.Builder()
-                .putBitmap(MediaMetadata.METADATA_KEY_ART, artBmp)
-                .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, artBmp)
-                .putBitmap(MediaMetadata.METADATA_KEY_DISPLAY_ICON, artBmp)
-                .putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, artUri)
-                .putString(MediaMetadata.METADATA_KEY_ART_URI, artUri)
-                .putString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI, artUri)
-                .build()
-
-        // Create a playing media notification
-        val state = PlaybackState.Builder().setState(PlaybackState.STATE_PLAYING, 0L, 1f).build()
-        val session = MediaSession(context, "NotificationMediaManagerTest")
-        session.setMetadata(inputMetadata)
-        session.setPlaybackState(state)
-        val sbn =
-            SbnBuilder().run {
-                modifyNotification(context).also {
-                    it.setSmallIcon(android.R.drawable.ic_media_play)
-                    it.setStyle(
-                        Notification.MediaStyle().apply { setMediaSession(session.sessionToken) }
-                    )
-                }
-                build()
-            }
-        whenever(notificationEntry.sbn).thenReturn(sbn)
-        val collection = ArrayList<NotificationEntry>()
-        collection.add(notificationEntry)
-        whenever(notifPipeline.allNotifs).thenReturn(collection)
-
-        // Trigger update in NotificationMediaManager
-        manager.findAndUpdateMediaNotifications()
-
-        // Verify that there is no artwork data retained
-        val metadata = manager.mediaMetadata
-        assertThat(metadata.getBitmap(MediaMetadata.METADATA_KEY_ART)).isNull()
-        assertThat(metadata.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART)).isNull()
-        assertThat(metadata.getBitmap(MediaMetadata.METADATA_KEY_DISPLAY_ICON)).isNull()
-        assertThat(metadata.getString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI)).isNull()
-        assertThat(metadata.getString(MediaMetadata.METADATA_KEY_ART_URI)).isNull()
-        assertThat(metadata.getString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI)).isNull()
-    }
 }