Merge "Use single line QQS when not playing media"

This commit is contained in:
Fabian Kozynski
2019-12-10 18:13:53 +00:00
committed by Android (Google) Code Review
3 changed files with 68 additions and 3 deletions

View File

@@ -250,6 +250,14 @@ public class QuickQSMediaPlayer {
return (state.getState() == PlaybackState.STATE_PLAYING);
}
/**
* Check whether this player has an attached media session.
* @return whether there is a controller with a current media session.
*/
public boolean hasMediaSession() {
return mController != null && mController.getPlaybackState() != null;
}
private void addAlbumArtBackground(MediaMetadata metadata, int bgColor) {
Bitmap albumArt = metadata.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART);
float radius = mContext.getResources().getDimension(R.dimen.qs_media_corner_radius);

View File

@@ -57,6 +57,12 @@ public class QuickQSPanel extends QSPanel {
private int mMaxTiles;
protected QSPanel mFullPanel;
private QuickQSMediaPlayer mMediaPlayer;
private boolean mUsingMediaPlayer;
private LinearLayout mHorizontalLinearLayout;
// Only used with media
private QSTileLayout mMediaTileLayout;
private QSTileLayout mRegularTileLayout;
@Inject
public QuickQSPanel(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
@@ -72,8 +78,9 @@ public class QuickQSPanel extends QSPanel {
removeView((View) mTileLayout);
}
if (Utils.useQsMediaPlayer(context)) {
LinearLayout mHorizontalLinearLayout = new LinearLayout(mContext);
mUsingMediaPlayer = Utils.useQsMediaPlayer(context);
if (mUsingMediaPlayer) {
mHorizontalLinearLayout = new LinearLayout(mContext);
mHorizontalLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
mHorizontalLinearLayout.setClipChildren(false);
mHorizontalLinearLayout.setClipToPadding(false);
@@ -81,6 +88,8 @@ public class QuickQSPanel extends QSPanel {
LayoutParams lp = new LayoutParams(0, LayoutParams.MATCH_PARENT, 1);
mTileLayout = new DoubleLineTileLayout(context);
mMediaTileLayout = mTileLayout;
mRegularTileLayout = new HeaderTileLayout(context);
lp.setMarginEnd(10);
lp.setMarginStart(0);
mHorizontalLinearLayout.addView((View) mTileLayout, lp);
@@ -95,6 +104,8 @@ public class QuickQSPanel extends QSPanel {
mTileLayout.setListening(mListening);
addView(mHorizontalLinearLayout, 0 /* Between brightness and footer */);
((View) mRegularTileLayout).setVisibility(View.GONE);
addView((View) mRegularTileLayout, 0);
super.setPadding(0, 0, 0, 0);
} else {
sDefaultMaxTiles = getResources().getInteger(R.integer.quick_qs_panel_max_columns);
@@ -130,6 +141,8 @@ public class QuickQSPanel extends QSPanel {
Dependency.get(TunerService.class).removeTunable(mNumTiles);
}
@Override
protected String getDumpableTag() {
return TAG;
@@ -152,6 +165,42 @@ public class QuickQSPanel extends QSPanel {
super.drawTile(r, state);
}
boolean switchTileLayout() {
if (!mUsingMediaPlayer) return false;
if (mMediaPlayer.hasMediaSession()
&& mHorizontalLinearLayout.getVisibility() == View.GONE) {
mHorizontalLinearLayout.setVisibility(View.VISIBLE);
((View) mRegularTileLayout).setVisibility(View.GONE);
mTileLayout.setListening(false);
for (TileRecord record : mRecords) {
mTileLayout.removeTile(record);
record.tile.removeCallback(record.callback);
}
mTileLayout = mMediaTileLayout;
setTiles(mHost.getTiles());
mTileLayout.setListening(mListening);
return true;
} else if (!mMediaPlayer.hasMediaSession()
&& mHorizontalLinearLayout.getVisibility() == View.VISIBLE) {
mHorizontalLinearLayout.setVisibility(View.GONE);
((View) mRegularTileLayout).setVisibility(View.VISIBLE);
mTileLayout.setListening(false);
for (TileRecord record : mRecords) {
mTileLayout.removeTile(record);
record.tile.removeCallback(record.callback);
}
mTileLayout = mRegularTileLayout;
setTiles(mHost.getTiles());
mTileLayout.setListening(mListening);
return true;
}
return false;
}
public boolean hasMediaPlayerSession() {
return mMediaPlayer.hasMediaSession();
}
@Override
public void setHost(QSTileHost host, QSCustomizer customizer) {
super.setHost(host, customizer);

View File

@@ -339,7 +339,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
if (mQsDisabled) {
lp.height = resources.getDimensionPixelSize(
com.android.internal.R.dimen.quick_qs_offset_height);
} else if (useQsMediaPlayer(mContext)) {
} else if (useQsMediaPlayer(mContext) && mHeaderQsPanel.hasMediaPlayerSession()) {
lp.height = Math.max(getMinimumHeight(),
resources.getDimensionPixelSize(
com.android.internal.R.dimen.quick_qs_total_height_with_media));
@@ -405,6 +405,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements
mHeaderTextContainerView.setVisibility(INVISIBLE);
}
}
if (expansionFraction < 1 && expansionFraction > 0.99) {
if (mHeaderQsPanel.switchTileLayout()) {
updateResources();
}
}
}
public void disable(int state1, int state2, boolean animate) {
@@ -453,6 +458,9 @@ public class QuickStatusBarHeader extends RelativeLayout implements
return;
}
mHeaderQsPanel.setListening(listening);
if (mHeaderQsPanel.switchTileLayout()) {
updateResources();
}
mListening = listening;
if (listening) {