[Output Switcher] Get Appicon from Notification's small icon

Test: verified on device
Bug: 240309538
Change-Id: I812481da3a1cc6f53e35f4a86eda7af53ee8ae84
This commit is contained in:
shaoweishen
2022-08-11 12:48:35 +00:00
committed by Shaowei Shen
parent 30acb76f6f
commit 2d7ea1445d
5 changed files with 41 additions and 24 deletions

View File

@@ -296,27 +296,17 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
mMediaOutputController.setRefreshing(true); mMediaOutputController.setRefreshing(true);
// Update header icon // Update header icon
final int iconRes = getHeaderIconRes(); final int iconRes = getHeaderIconRes();
final IconCompat iconCompat = getHeaderIcon(); final IconCompat headerIcon = getHeaderIcon();
final Drawable appSourceDrawable = getAppSourceIcon(); final IconCompat appSourceIcon = getAppSourceIcon();
boolean colorSetUpdated = false; boolean colorSetUpdated = false;
mCastAppLayout.setVisibility( mCastAppLayout.setVisibility(
mMediaOutputController.shouldShowLaunchSection() mMediaOutputController.shouldShowLaunchSection()
? View.VISIBLE : View.GONE); ? 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) { if (iconRes != 0) {
mHeaderIcon.setVisibility(View.VISIBLE); mHeaderIcon.setVisibility(View.VISIBLE);
mHeaderIcon.setImageResource(iconRes); mHeaderIcon.setImageResource(iconRes);
} else if (iconCompat != null) { } else if (headerIcon != null) {
Icon icon = iconCompat.toIcon(mContext); Icon icon = headerIcon.toIcon(mContext);
if (icon.getType() != Icon.TYPE_BITMAP && icon.getType() != Icon.TYPE_ADAPTIVE_BITMAP) { if (icon.getType() != Icon.TYPE_BITMAP && icon.getType() != Icon.TYPE_ADAPTIVE_BITMAP) {
// icon doesn't support getBitmap, use default value for color scheme // icon doesn't support getBitmap, use default value for color scheme
updateButtonBackgroundColorFilter(); updateButtonBackgroundColorFilter();
@@ -336,6 +326,18 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
} else { } else {
mHeaderIcon.setVisibility(View.GONE); 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) { if (mHeaderIcon.getVisibility() == View.VISIBLE) {
final int size = getHeaderIconSize(); final int size = getHeaderIconSize();
final int padding = mContext.getResources().getDimensionPixelSize( 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(); abstract int getHeaderIconRes();

View File

@@ -19,7 +19,6 @@ package com.android.systemui.media.dialog;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.text.method.HideReturnsTransformationMethod; import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod; import android.text.method.PasswordTransformationMethod;
@@ -116,8 +115,8 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog {
} }
@Override @Override
Drawable getAppSourceIcon() { IconCompat getAppSourceIcon() {
return mMediaOutputController.getAppSourceIcon(); return mMediaOutputController.getNotificationSmallIcon();
} }
@Override @Override

View File

@@ -314,7 +314,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
} }
} }
Drawable getAppSourceIcon() { Drawable getAppSourceIconFromPackage() {
if (mPackageName.isEmpty()) { if (mPackageName.isEmpty()) {
return null; return null;
} }
@@ -425,6 +425,24 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|| isSelectedDeviceInGroup; || 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() { IconCompat getNotificationIcon() {
if (TextUtils.isEmpty(mPackageName)) { if (TextUtils.isEmpty(mPackageName)) {
return null; return null;

View File

@@ -17,7 +17,6 @@
package com.android.systemui.media.dialog; package com.android.systemui.media.dialog;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
@@ -81,8 +80,8 @@ public class MediaOutputDialog extends MediaOutputBaseDialog {
} }
@Override @Override
Drawable getAppSourceIcon() { IconCompat getAppSourceIcon() {
return mMediaOutputController.getAppSourceIcon(); return mMediaOutputController.getNotificationSmallIcon();
} }
@Override @Override

View File

@@ -27,7 +27,6 @@ import static org.mockito.Mockito.when;
import android.app.KeyguardManager; import android.app.KeyguardManager;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.media.AudioManager; import android.media.AudioManager;
import android.media.session.MediaController; import android.media.session.MediaController;
import android.media.session.MediaSessionManager; import android.media.session.MediaSessionManager;
@@ -296,7 +295,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
} }
@Override @Override
Drawable getAppSourceIcon() { IconCompat getAppSourceIcon() {
return null; return null;
} }