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();
+ }
}