From 2d7ea1445dafae751b747f702956e54525fa582b Mon Sep 17 00:00:00 2001 From: shaoweishen Date: Thu, 11 Aug 2022 12:48:35 +0000 Subject: [Output Switcher] Get Appicon from Notification's small icon Test: verified on device Bug: 240309538 Change-Id: I812481da3a1cc6f53e35f4a86eda7af53ee8ae84 --- .../media/dialog/MediaOutputBaseDialog.java | 32 ++++++++++++---------- .../media/dialog/MediaOutputBroadcastDialog.java | 5 ++-- .../media/dialog/MediaOutputController.java | 20 +++++++++++++- .../systemui/media/dialog/MediaOutputDialog.java | 5 ++-- .../media/dialog/MediaOutputBaseDialogTest.java | 3 +- 5 files changed, 41 insertions(+), 24 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java index 4ef98cf13a00..bec130b75b61 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java @@ -296,27 +296,17 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements mMediaOutputController.setRefreshing(true); // Update header icon final int iconRes = getHeaderIconRes(); - final IconCompat iconCompat = getHeaderIcon(); - final Drawable appSourceDrawable = getAppSourceIcon(); + final IconCompat headerIcon = getHeaderIcon(); + final IconCompat appSourceIcon = getAppSourceIcon(); boolean colorSetUpdated = false; mCastAppLayout.setVisibility( mMediaOutputController.shouldShowLaunchSection() ? View.VISIBLE : View.GONE); - if (appSourceDrawable != null) { - mAppResourceIcon.setImageDrawable(appSourceDrawable); - mAppButton.setCompoundDrawablesWithIntrinsicBounds(resizeDrawable(appSourceDrawable, - mContext.getResources().getDimensionPixelSize( - R.dimen.media_output_dialog_app_tier_icon_size - )), - null, null, null); - } else { - mAppResourceIcon.setVisibility(View.GONE); - } if (iconRes != 0) { mHeaderIcon.setVisibility(View.VISIBLE); mHeaderIcon.setImageResource(iconRes); - } else if (iconCompat != null) { - Icon icon = iconCompat.toIcon(mContext); + } else if (headerIcon != null) { + Icon icon = headerIcon.toIcon(mContext); if (icon.getType() != Icon.TYPE_BITMAP && icon.getType() != Icon.TYPE_ADAPTIVE_BITMAP) { // icon doesn't support getBitmap, use default value for color scheme updateButtonBackgroundColorFilter(); @@ -336,6 +326,18 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements } else { mHeaderIcon.setVisibility(View.GONE); } + if (appSourceIcon != null) { + Icon appIcon = appSourceIcon.toIcon(mContext); + mAppResourceIcon.setColorFilter(mMediaOutputController.getColorItemContent()); + mAppResourceIcon.setImageIcon(appIcon); + } else { + Drawable appIconDrawable = mMediaOutputController.getAppSourceIconFromPackage(); + if (appIconDrawable != null) { + mAppResourceIcon.setImageDrawable(appIconDrawable); + } else { + mAppResourceIcon.setVisibility(View.GONE); + } + } if (mHeaderIcon.getVisibility() == View.VISIBLE) { final int size = getHeaderIconSize(); final int padding = mContext.getResources().getDimensionPixelSize( @@ -480,7 +482,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements } } - abstract Drawable getAppSourceIcon(); + abstract IconCompat getAppSourceIcon(); abstract int getHeaderIconRes(); diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java index 310469dd5415..35baf0131b9d 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java @@ -19,7 +19,6 @@ package com.android.systemui.media.dialog; import android.app.AlertDialog; import android.content.Context; import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; @@ -116,8 +115,8 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog { } @Override - Drawable getAppSourceIcon() { - return mMediaOutputController.getAppSourceIcon(); + IconCompat getAppSourceIcon() { + return mMediaOutputController.getNotificationSmallIcon(); } @Override 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 3222b3b344c7..dad6544a87ba 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -314,7 +314,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, } } - Drawable getAppSourceIcon() { + Drawable getAppSourceIconFromPackage() { if (mPackageName.isEmpty()) { return null; } @@ -425,6 +425,24 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, || isSelectedDeviceInGroup; } + IconCompat getNotificationSmallIcon() { + if (TextUtils.isEmpty(mPackageName)) { + return null; + } + for (NotificationEntry entry : mNotifCollection.getAllNotifs()) { + final Notification notification = entry.getSbn().getNotification(); + if (notification.isMediaNotification() + && TextUtils.equals(entry.getSbn().getPackageName(), mPackageName)) { + final Icon icon = notification.getSmallIcon(); + if (icon == null) { + break; + } + return IconCompat.createFromIcon(icon); + } + } + return null; + } + IconCompat getNotificationIcon() { if (TextUtils.isEmpty(mPackageName)) { return null; diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java index fc4773d3c6dd..fbd0079f8dc0 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java @@ -17,7 +17,6 @@ package com.android.systemui.media.dialog; import android.content.Context; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.view.WindowManager; @@ -81,8 +80,8 @@ public class MediaOutputDialog extends MediaOutputBaseDialog { } @Override - Drawable getAppSourceIcon() { - return mMediaOutputController.getAppSourceIcon(); + IconCompat getAppSourceIcon() { + return mMediaOutputController.getNotificationSmallIcon(); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java index 9b322a22299e..1131a7eb379a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java @@ -27,7 +27,6 @@ import static org.mockito.Mockito.when; import android.app.KeyguardManager; import android.content.Context; import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.session.MediaController; import android.media.session.MediaSessionManager; @@ -296,7 +295,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { } @Override - Drawable getAppSourceIcon() { + IconCompat getAppSourceIcon() { return null; } -- cgit v1.2.3-59-g8ed1b