Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d7ea144 authored by shaoweishen's avatar shaoweishen Committed by Shaowei Shen
Browse files

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

Test: verified on device
Bug: 240309538
Change-Id: I812481da3a1cc6f53e35f4a86eda7af53ee8ae84
parent 30acb76f
Loading
Loading
Loading
Loading
+17 −15
Original line number Diff line number Diff line
@@ -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();

+2 −3
Original line number Diff line number Diff line
@@ -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
+19 −1
Original line number Diff line number Diff line
@@ -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;
+2 −3
Original line number Diff line number Diff line
@@ -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
+1 −2
Original line number Diff line number Diff line
@@ -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;
        }