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

Commit db0aa654 authored by Hugh Chen's avatar Hugh Chen
Browse files

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 30805af9)
parent f537a702
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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"
+1 −25
Original line number Diff line number Diff line
@@ -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;
    }

+36 −18
Original line number Diff line number Diff line
@@ -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;
@@ -186,6 +187,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);
@@ -222,26 +224,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) {
@@ -275,6 +264,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();
@@ -471,7 +483,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());
            });
+16 −0
Original line number Diff line number Diff line
@@ -317,4 +317,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();
    }
}