Fix NPE when notification icon is empty

-Check notification icon before using

Bug: 162998388
Test: atest MediaOutputControllerTest
Merged-In: Ie3db32f3e6387f338c77faa741b2df54473a3675
Change-Id: Ie3db32f3e6387f338c77faa741b2df54473a3675
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
index 80928d6..451bd42 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
@@ -16,10 +16,12 @@
 
 package com.android.systemui.media.dialog;
 
+import android.app.Notification;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
 import android.media.MediaMetadata;
 import android.media.MediaRoute2Info;
 import android.media.RoutingSessionInfo;
@@ -221,9 +223,14 @@
         }
         for (NotificationEntry entry
                 : mNotificationEntryManager.getActiveNotificationsForCurrentUser()) {
-            if (entry.getSbn().getNotification().hasMediaSession()
+            final Notification notification = entry.getSbn().getNotification();
+            if (notification.hasMediaSession()
                     && TextUtils.equals(entry.getSbn().getPackageName(), mPackageName)) {
-                return IconCompat.createFromIcon(entry.getSbn().getNotification().getLargeIcon());
+                final Icon icon = notification.getLargeIcon();
+                if (icon == null) {
+                    break;
+                }
+                return IconCompat.createFromIcon(icon);
             }
         }
         return null;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
index 6ceac13..0d352c1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
@@ -447,6 +447,25 @@
     }
 
     @Test
+    public void getNotificationLargeIcon_withoutLargeIcon_returnsNull() {
+        final List<NotificationEntry> entryList = new ArrayList<>();
+        final NotificationEntry entry = mock(NotificationEntry.class);
+        final StatusBarNotification sbn = mock(StatusBarNotification.class);
+        final Notification notification = mock(Notification.class);
+        entryList.add(entry);
+
+        when(mNotificationEntryManager.getActiveNotificationsForCurrentUser())
+                .thenReturn(entryList);
+        when(entry.getSbn()).thenReturn(sbn);
+        when(sbn.getNotification()).thenReturn(notification);
+        when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(notification.hasMediaSession()).thenReturn(true);
+        when(notification.getLargeIcon()).thenReturn(null);
+
+        assertThat(mMediaOutputController.getNotificationIcon()).isNull();
+    }
+
+    @Test
     public void getNotificationLargeIcon_withPackageNameAndMediaSession_returnsIconCompat() {
         final List<NotificationEntry> entryList = new ArrayList<>();
         final NotificationEntry entry = mock(NotificationEntry.class);