diff options
author | Hugh Chen <hughchen@google.com> | 2020-12-08 06:30:56 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-12-08 06:30:56 +0000 |
commit | a06d339f9156fc947759262d406cb9f2788e9e70 (patch) | |
tree | eada1cfe80afb2c7cdca49c4dc416139097a8756 /packages/SystemUI/src | |
parent | c73db6328e107a0b21b707c756b6cf53e851c69b (diff) | |
parent | c2dd4429734dbb1af115253ab5a52503939af58e (diff) |
Fix output switcher didn't show album art am: c2dd442973
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13118156
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I8c65d2bcaa7b2bf37f65a213d0bbf0e2c8c7a00f
Diffstat (limited to 'packages/SystemUI/src')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java | 35 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt | 6 |
2 files changed, 18 insertions, 23 deletions
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 b9fa87252125..80928d6da978 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -18,10 +18,7 @@ package com.android.systemui.media.dialog; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.media.MediaMetadata; import android.media.MediaRoute2Info; @@ -49,6 +46,8 @@ import com.android.settingslib.media.MediaOutputSliceConstants; import com.android.settingslib.utils.ThreadUtils; import com.android.systemui.R; import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.statusbar.notification.NotificationEntryManager; +import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.phone.ShadeController; import java.util.ArrayList; @@ -61,7 +60,7 @@ import javax.inject.Inject; /** * Controller for media output dialog */ -public class MediaOutputController implements LocalMediaManager.DeviceCallback{ +public class MediaOutputController implements LocalMediaManager.DeviceCallback { private static final String TAG = "MediaOutputController"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @@ -73,6 +72,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback{ private final ActivityStarter mActivityStarter; private final List<MediaDevice> mGroupMediaDevices = new CopyOnWriteArrayList<>(); private final boolean mAboveStatusbar; + private final NotificationEntryManager mNotificationEntryManager; @VisibleForTesting final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>(); @@ -85,13 +85,15 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback{ @Inject public MediaOutputController(@NonNull Context context, String packageName, boolean aboveStatusbar, MediaSessionManager mediaSessionManager, LocalBluetoothManager - lbm, ShadeController shadeController, ActivityStarter starter) { + lbm, ShadeController shadeController, ActivityStarter starter, + NotificationEntryManager notificationEntryManager) { mContext = context; mPackageName = packageName; mMediaSessionManager = mediaSessionManager; mShadeController = shadeController; mActivityStarter = starter; mAboveStatusbar = aboveStatusbar; + mNotificationEntryManager = notificationEntryManager; InfoMediaManager imm = new InfoMediaManager(mContext, packageName, null, lbm); mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName); } @@ -197,7 +199,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback{ if (DEBUG) { Log.d(TAG, "Media meta data does not contain icon information"); } - return getPackageIcon(); + return getNotificationIcon(); } IconCompat getDeviceIconCompat(MediaDevice device) { @@ -213,24 +215,15 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback{ return BluetoothUtils.createIconWithDrawable(drawable); } - private IconCompat getPackageIcon() { + IconCompat getNotificationIcon() { if (TextUtils.isEmpty(mPackageName)) { return null; } - try { - final Drawable drawable = mContext.getPackageManager().getApplicationIcon(mPackageName); - if (drawable instanceof BitmapDrawable) { - return IconCompat.createWithBitmap(((BitmapDrawable) drawable).getBitmap()); - } - final Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), - drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); - final Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - drawable.draw(canvas); - return IconCompat.createWithBitmap(bitmap); - } catch (PackageManager.NameNotFoundException e) { - if (DEBUG) { - Log.e(TAG, "Package is not found. Unable to get package icon."); + for (NotificationEntry entry + : mNotificationEntryManager.getActiveNotificationsForCurrentUser()) { + if (entry.getSbn().getNotification().hasMediaSession() + && TextUtils.equals(entry.getSbn().getPackageName(), mPackageName)) { + return IconCompat.createFromIcon(entry.getSbn().getNotification().getLargeIcon()); } } return null; diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt index e912b7d1b08f..7d1a7ced7472 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt @@ -20,6 +20,7 @@ import android.content.Context import android.media.session.MediaSessionManager import com.android.settingslib.bluetooth.LocalBluetoothManager import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.statusbar.notification.NotificationEntryManager import com.android.systemui.statusbar.phone.ShadeController import javax.inject.Inject @@ -31,7 +32,8 @@ class MediaOutputDialogFactory @Inject constructor( private val mediaSessionManager: MediaSessionManager, private val lbm: LocalBluetoothManager?, private val shadeController: ShadeController, - private val starter: ActivityStarter + private val starter: ActivityStarter, + private val notificationEntryManager: NotificationEntryManager ) { companion object { var mediaOutputDialog: MediaOutputDialog? = null @@ -41,7 +43,7 @@ class MediaOutputDialogFactory @Inject constructor( fun create(packageName: String, aboveStatusBar: Boolean) { mediaOutputDialog?.dismiss() mediaOutputDialog = MediaOutputController(context, packageName, aboveStatusBar, - mediaSessionManager, lbm, shadeController, starter).run { + mediaSessionManager, lbm, shadeController, starter, notificationEntryManager).run { MediaOutputDialog(context, aboveStatusBar, this) } } |