Merge "Hide the icon if didn't have media session or album art"
This commit is contained in:
committed by
Android (Google) Code Review
commit
34937eb21e
@@ -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"
|
||||
|
@@ -25,11 +25,7 @@ import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_SLICE
|
||||
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 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC
|
||||
@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 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
@@ -93,6 +93,7 @@ public class PanelFragment extends Fragment {
|
||||
private String mPanelClosedKey;
|
||||
private LinearLayout mPanelHeader;
|
||||
private ImageView mTitleIcon;
|
||||
private LinearLayout mTitleGroup;
|
||||
private TextView mHeaderTitle;
|
||||
private TextView mHeaderSubtitle;
|
||||
private int mMaxHeight;
|
||||
@@ -200,6 +201,7 @@ public class PanelFragment extends Fragment {
|
||||
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);
|
||||
@@ -237,26 +239,13 @@ public class PanelFragment extends Fragment {
|
||||
|
||||
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) {
|
||||
@@ -290,6 +279,29 @@ public class PanelFragment extends Fragment {
|
||||
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();
|
||||
@@ -486,7 +498,13 @@ public class PanelFragment extends Fragment {
|
||||
@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());
|
||||
});
|
||||
|
@@ -318,4 +318,20 @@ public class MediaOutputPanelTest {
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user