New artist page (same as new album page)

This commit is contained in:
Karim Abou Zeid 2018-04-28 15:37:03 +02:00
commit 2de2cecd85
9 changed files with 244 additions and 134 deletions

View file

@ -158,9 +158,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
private void setUpObservableListViewParams() {
toolbarColor = DialogUtils.resolveColor(this, R.attr.defaultFooterColor);
headerViewHeight = getResources().getDimensionPixelSize(R.dimen.detail_header_height);
if (headerViewHeight == 0) {
albumArtImageView.setVisibility(View.GONE);
}
}
private void setUpViews() {
@ -230,12 +227,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
setUpRecyclerViewPadding();
recyclerView.setScrollViewCallbacks(observableScrollViewCallbacks);
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
contentView.post(() -> {
observableScrollViewCallbacks.onScrollChanged(-(headerViewHeight), false, false);
// necessary to fix a bug
recyclerView.scrollBy(0, 1);
recyclerView.scrollBy(0, -1);
});
contentView.post(() -> observableScrollViewCallbacks.onScrollChanged(-headerViewHeight, false, false));
}
private void setUpRecyclerViewPadding() {

View file

@ -2,7 +2,7 @@ package com.kabouzeid.gramophone.ui.activities;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@ -48,6 +48,7 @@ import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.CustomArtistImageUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
@ -73,27 +74,36 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
public static final String EXTRA_ARTIST_ID = "extra_artist_id";
@BindView(R.id.image)
ImageView artistImage;
@BindView(R.id.list_background)
View songListBackground;
@BindView(R.id.list)
ObservableListView songListView;
@BindView(R.id.title)
TextView artistName;
@BindView(R.id.image)
ImageView artistImage;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.header)
View headerView;
@BindView(R.id.header_overlay)
View headerOverlay;
@BindView(R.id.duration_icon)
ImageView durationIconImageView;
@BindView(R.id.song_count_icon)
ImageView songCountIconImageView;
@BindView(R.id.album_count_icon)
ImageView albumCountIconImageView;
@BindView(R.id.duration_text)
TextView durationTextView;
@BindView(R.id.song_count_text)
TextView songCountTextView;
@BindView(R.id.album_count_text)
TextView albumCountTextView;
View songListHeader;
RecyclerView albumRecyclerView;
private MaterialCab cab;
private int headerOffset;
private int titleViewHeight;
private int artistImageViewHeight;
private int headerViewHeight;
private int toolbarColor;
private float toolbarAlpha;
private boolean usePalette;
private Artist artist;
@Nullable
@ -105,6 +115,21 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private LastFMRestClient lastFMRestClient;
private boolean forceDownload;
private final SimpleObservableScrollViewCallbacks observableScrollViewCallbacks = new SimpleObservableScrollViewCallbacks() {
@Override
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
scrollY += headerViewHeight;
// Change alpha of overlay
float headerAlpha = Math.max(0, Math.min(1, (float) 2 * scrollY / headerViewHeight));
headerOverlay.setBackgroundColor(ColorUtil.withAlpha(toolbarColor, headerAlpha));
// Translate name text
headerView.setTranslationY(Math.max(-scrollY, -headerViewHeight));
headerOverlay.setTranslationY(Math.max(-scrollY, -headerViewHeight));
artistImage.setTranslationY(Math.max(-scrollY, -headerViewHeight));
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -130,41 +155,11 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
return wrapSlidingMusicPanel(R.layout.activity_artist_detail);
}
private final SimpleObservableScrollViewCallbacks observableScrollViewCallbacks = new SimpleObservableScrollViewCallbacks() {
@Override
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
scrollY += artistImageViewHeight + titleViewHeight;
float flexibleRange = artistImageViewHeight - headerOffset;
// Translate album cover
artistImage.setTranslationY(Math.max(-artistImageViewHeight, -scrollY / 2));
// Translate list background
songListBackground.setTranslationY(Math.max(0, -scrollY + artistImageViewHeight));
// Change alpha of overlay
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
toolbar.setBackgroundColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
setStatusbarColor(ColorUtil.withAlpha(toolbarColor, cab != null && cab.isActive() ? 1 : toolbarAlpha));
// Translate name text
int maxTitleTranslationY = artistImageViewHeight;
int titleTranslationY = maxTitleTranslationY - scrollY;
titleTranslationY = Math.max(headerOffset, titleTranslationY);
artistName.setTranslationY(titleTranslationY);
}
};
private boolean usePalette;
private void setUpObservableListViewParams() {
artistImageViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
toolbarColor = DialogUtils.resolveColor(this, R.attr.defaultFooterColor);
int toolbarHeight = Util.getActionBarSize(this);
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
headerOffset = toolbarHeight;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
headerOffset += getResources().getDimensionPixelSize(R.dimen.status_bar_padding);
}
headerViewHeight = getResources().getDimensionPixelSize(R.dimen.detail_header_height);
}
private void initViews() {
@ -186,14 +181,11 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
songListView.setAdapter(songAdapter);
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
contentView.post(() -> {
songListBackground.getLayoutParams().height = contentView.getHeight();
observableScrollViewCallbacks.onScrollChanged(-(artistImageViewHeight + titleViewHeight), false, false);
});
contentView.post(() -> observableScrollViewCallbacks.onScrollChanged(-headerViewHeight, false, false));
}
private void setUpSongListPadding() {
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, 0);
songListView.setPadding(0, headerViewHeight, 0, 0);
}
private void setUpAlbumRecyclerView() {
@ -301,10 +293,22 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private void setColors(int color) {
toolbarColor = color;
artistName.setBackgroundColor(color);
artistName.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color)));
headerView.setBackgroundColor(color);
setNavigationbarColor(color);
setTaskDescriptionColor(color);
toolbar.setBackgroundColor(color);
setSupportActionBar(toolbar); // needed to auto readjust the toolbar content color
setStatusbarColor(color);
int secondaryTextColor = MaterialValueHelper.getSecondaryTextColor(this, ColorUtil.isColorLight(color));
durationIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN);
songCountIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN);
albumCountIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN);
durationTextView.setTextColor(secondaryTextColor);
songCountTextView.setTextColor(secondaryTextColor);
albumCountTextView.setTextColor(secondaryTextColor);
}
private void setUpToolbar() {
@ -318,7 +322,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_artist_detail, menu);
menu.findItem(R.id.action_colored_footers).setChecked(usePalette);
return true;
return super.onCreateOptionsMenu(menu);
}
@Override
@ -395,7 +399,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
.start(new MaterialCab.Callback() {
@Override
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
setStatusbarColor(ColorUtil.stripAlpha(toolbarColor));
return callback.onCabCreated(materialCab, menu);
}
@ -406,7 +409,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override
public boolean onCabFinished(MaterialCab materialCab) {
setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
return callback.onCabFinished(materialCab);
}
});
@ -442,7 +444,11 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
loadBiography();
}
artistName.setText(artist.getName());
getSupportActionBar().setTitle(artist.getName());
songCountTextView.setText(MusicUtil.getSongCountString(this, artist.getSongCount()));
albumCountTextView.setText(MusicUtil.getAlbumCountString(this, artist.getAlbumCount()));
durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, artist.getSongs())));
songAdapter.swapDataSet(artist.getSongs());
albumAdapter.swapDataSet(artist.albums);
}

View file

@ -133,6 +133,12 @@ public class MusicUtil {
return songCount + " " + songString;
}
@NonNull
public static String getAlbumCountString(@NonNull final Context context, int albumCount) {
final String albumString = albumCount == 1 ? context.getResources().getString(R.string.album) : context.getResources().getString(R.string.albums);
return albumCount + " " + albumString;
}
public static long getTotalDuration(@NonNull final Context context, @NonNull List<Song> songs) {
long duration = 0;
for (int i = 0; i < songs.size(); i++) {