diff options
| author | 2022-08-11 12:48:35 +0000 | |
|---|---|---|
| committer | 2022-08-19 14:19:15 +0000 | |
| commit | 2d7ea1445dafae751b747f702956e54525fa582b (patch) | |
| tree | 6e9f58d19af00021502fdf86cafaae28409373bf | |
| parent | 30acb76f6fadd709de1a074c0bd078aa8957cdbb (diff) | |
[Output Switcher] Get Appicon from Notification's small icon
Test: verified on device
Bug: 240309538
Change-Id: I812481da3a1cc6f53e35f4a86eda7af53ee8ae84
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;          } |