Loading res/layout/panel_layout.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" Loading src/com/android/settings/panel/MediaOutputPanel.java +1 −25 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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; } Loading src/com/android/settings/panel/PanelFragment.java +36 −18 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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(); Loading Loading @@ -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()); }); Loading tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -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(); } } Loading
res/layout/panel_layout.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" Loading
src/com/android/settings/panel/MediaOutputPanel.java +1 −25 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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; } Loading
src/com/android/settings/panel/PanelFragment.java +36 −18 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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(); Loading Loading @@ -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()); }); Loading
tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -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(); } }