Hide the icon if there is no media session or album art.

- Before this CL, the output switch panel will show a default
  icon if there is no media session or album art.

  This CL will hide the icon if there is no media session
  or album art.
- Add test case

Bug: 161495909
Test: make -j42 RunSettingsRoboTests
Change-Id: I5f80158b12f89c8499fb97d0b203ebeffefbc18b
Merged-In: I5f80158b12f89c8499fb97d0b203ebeffefbc18b
(cherry picked from commit 30805af9defa1041ba90add3f00584b92dd9ef0e)
diff --git a/res/layout/panel_layout.xml b/res/layout/panel_layout.xml
index 895d09b..5f33c32 100644
--- a/res/layout/panel_layout.xml
+++ b/res/layout/panel_layout.xml
@@ -36,6 +36,7 @@
             android:visibility="gone">
 
             <LinearLayout
+                android:id="@+id/title_group"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal"
diff --git a/src/com/android/settings/panel/MediaOutputPanel.java b/src/com/android/settings/panel/MediaOutputPanel.java
index 6a296b7..7caf7dd 100644
--- a/src/com/android/settings/panel/MediaOutputPanel.java
+++ b/src/com/android/settings/panel/MediaOutputPanel.java
@@ -25,11 +25,7 @@
 import android.app.settings.SettingsEnums;
 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.session.MediaController;
 import android.media.session.MediaSessionManager;
@@ -109,8 +105,7 @@
     @Override
     public IconCompat getIcon() {
         if (mMediaController == null) {
-            return IconCompat.createWithResource(mContext, R.drawable.ic_media_stream).setTint(
-                    Utils.getColorAccentDefaultColor(mContext));
+            return null;
         }
         final MediaMetadata metadata = mMediaController.getMetadata();
         if (metadata != null) {
@@ -124,25 +119,6 @@
             }
         }
         Log.d(TAG, "Media meta data does not contain icon information");
-        return getPackageIcon();
-    }
-
-    private IconCompat getPackageIcon() {
-        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) {
-            Log.e(TAG, "Package is not found. Unable to get package icon.");
-        }
         return null;
     }
 
diff --git a/src/com/android/settings/panel/PanelFragment.java b/src/com/android/settings/panel/PanelFragment.java
index 9cb626d..dfbba66 100644
--- a/src/com/android/settings/panel/PanelFragment.java
+++ b/src/com/android/settings/panel/PanelFragment.java
@@ -93,6 +93,7 @@
     private String mPanelClosedKey;
     private LinearLayout mPanelHeader;
     private ImageView mTitleIcon;
+    private LinearLayout mTitleGroup;
     private TextView mHeaderTitle;
     private TextView mHeaderSubtitle;
     private int mMaxHeight;
@@ -186,6 +187,7 @@
         mTitleView = mLayoutView.findViewById(R.id.panel_title);
         mPanelHeader = mLayoutView.findViewById(R.id.panel_header);
         mTitleIcon = mLayoutView.findViewById(R.id.title_icon);
+        mTitleGroup = mLayoutView.findViewById(R.id.title_group);
         mHeaderTitle = mLayoutView.findViewById(R.id.header_title);
         mHeaderSubtitle = mLayoutView.findViewById(R.id.header_subtitle);
         mFooterDivider = mLayoutView.findViewById(R.id.footer_divider);
@@ -222,26 +224,13 @@
 
         final IconCompat icon = mPanel.getIcon();
         final CharSequence title = mPanel.getTitle();
-        if (icon == null) {
+
+        if (icon != null || mPanel.getViewType() == PanelContent.VIEW_TYPE_SLIDER_LARGE_ICON) {
+            enablePanelHeader(icon, title);
+        } else {
             mTitleView.setVisibility(View.VISIBLE);
             mPanelHeader.setVisibility(View.GONE);
             mTitleView.setText(title);
-        } else {
-            mTitleView.setVisibility(View.GONE);
-            mPanelHeader.setVisibility(View.VISIBLE);
-            mPanelHeader.setAccessibilityPaneTitle(title);
-            mTitleIcon.setImageIcon(icon.toIcon(getContext()));
-            mHeaderTitle.setText(title);
-            mHeaderSubtitle.setText(mPanel.getSubTitle());
-            if (mPanel.getHeaderIconIntent() != null) {
-                mTitleIcon.setOnClickListener(getHeaderIconListener());
-                mTitleIcon.setLayoutParams(new LinearLayout.LayoutParams(
-                        ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
-            } else {
-                final int size = getResources().getDimensionPixelSize(
-                        R.dimen.output_switcher_panel_icon_size);
-                mTitleIcon.setLayoutParams(new LinearLayout.LayoutParams(size, size));
-            }
         }
 
         if (mPanel.getViewType() == PanelContent.VIEW_TYPE_SLIDER_LARGE_ICON) {
@@ -275,6 +264,29 @@
                 0 /* value */);
     }
 
+    private void enablePanelHeader(IconCompat icon, CharSequence title) {
+        mTitleView.setVisibility(View.GONE);
+        mPanelHeader.setVisibility(View.VISIBLE);
+        mPanelHeader.setAccessibilityPaneTitle(title);
+        mHeaderTitle.setText(title);
+        mHeaderSubtitle.setText(mPanel.getSubTitle());
+        if (icon != null) {
+            mTitleGroup.setVisibility(View.VISIBLE);
+            mTitleIcon.setImageIcon(icon.toIcon(getContext()));
+            if (mPanel.getHeaderIconIntent() != null) {
+                mTitleIcon.setOnClickListener(getHeaderIconListener());
+                mTitleIcon.setLayoutParams(new LinearLayout.LayoutParams(
+                        ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+            } else {
+                final int size = getResources().getDimensionPixelSize(
+                        R.dimen.output_switcher_panel_icon_size);
+                mTitleIcon.setLayoutParams(new LinearLayout.LayoutParams(size, size));
+            }
+        } else {
+            mTitleGroup.setVisibility(View.GONE);
+        }
+    }
+
     private void loadAllSlices() {
         mSliceLiveData.clear();
         final List<Uri> sliceUris = mPanel.getSlices();
@@ -471,7 +483,13 @@
         @Override
         public void onHeaderChanged() {
             ThreadUtils.postOnMainThread(() -> {
-                mTitleIcon.setImageIcon(mPanel.getIcon().toIcon(getContext()));
+                final IconCompat icon = mPanel.getIcon();
+                if (icon != null) {
+                    mTitleIcon.setImageIcon(icon.toIcon(getContext()));
+                    mTitleGroup.setVisibility(View.VISIBLE);
+                } else {
+                    mTitleGroup.setVisibility(View.GONE);
+                }
                 mHeaderTitle.setText(mPanel.getTitle());
                 mHeaderSubtitle.setText(mPanel.getSubTitle());
             });
diff --git a/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java b/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java
index 2ab428d..207a644 100644
--- a/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java
+++ b/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java
@@ -317,4 +317,20 @@
     public void getViewType_checkType() {
         assertThat(mPanel.getViewType()).isEqualTo(PanelContent.VIEW_TYPE_SLIDER_LARGE_ICON);
     }
+
+    @Test
+    public void getIcon_mediaControllerIsNull_returnNull() {
+        mMediaControllers.clear();
+        mPanel.onStart();
+
+        assertThat(mPanel.getIcon()).isNull();
+    }
+
+    @Test
+    public void getIcon_mediaMetadataIsNull_returnNull() {
+        mPanel.onStart();
+        when(mMediaController.getMetadata()).thenReturn(null);
+
+        assertThat(mPanel.getIcon()).isNull();
+    }
 }