From 698fec921ff3a61488d4944bb8ff819266d603c2 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Fri, 27 Apr 2018 23:10:19 +0200 Subject: [PATCH] Redesigned album detail page --- .../ui/activities/AlbumDetailActivity.java | 95 ++++--- .../kabouzeid/gramophone/util/MusicUtil.java | 7 +- .../main/res/layout/activity_album_detail.xml | 234 ++++++++++++++---- app/src/main/res/values-land/dimens.xml | 2 +- app/src/main/res/values/dimens.xml | 2 +- 5 files changed, 246 insertions(+), 94 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index a133aa67..d13760cb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -2,6 +2,8 @@ package com.kabouzeid.gramophone.ui.activities; import android.content.Context; import android.content.Intent; +import android.graphics.Color; +import android.graphics.PorterDuff; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; @@ -13,6 +15,7 @@ import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.text.Html; import android.text.Spanned; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -27,6 +30,8 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView; +import com.kabouzeid.appthemehelper.ATH; +import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.kabouzeid.gramophone.R; @@ -51,6 +56,7 @@ import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity; import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity; +import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.PhonographColorUtil; import com.kabouzeid.gramophone.util.Util; @@ -84,19 +90,33 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements ImageView albumArtImageView; @BindView(R.id.toolbar) Toolbar toolbar; - @BindView(R.id.title) - TextView albumTitleView; - @BindView(R.id.list_background) - View songsBackgroundView; + @BindView(R.id.header) + View headerView; + @BindView(R.id.header_overlay) + View headerOverlay; + + @BindView(R.id.artist_icon) + ImageView artistIconImageView; + @BindView(R.id.duration_icon) + ImageView durationIconImageView; + @BindView(R.id.song_count_icon) + ImageView songCountIconImageView; + @BindView(R.id.album_year_icon) + ImageView albumYearIconImageView; + @BindView(R.id.artist_text) + TextView artistTextView; + @BindView(R.id.duration_text) + TextView durationTextView; + @BindView(R.id.song_count_text) + TextView songCountTextView; + @BindView(R.id.album_year_text) + TextView albumYearTextView; private AlbumSongAdapter adapter; private MaterialCab cab; - private int headerOffset; - private int titleViewHeight; - private int albumArtViewHeight; + private int headerViewHeight; private int toolbarColor; - private float toolbarAlpha; @Nullable private Spanned wiki; @@ -128,38 +148,21 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements private final SimpleObservableScrollViewCallbacks observableScrollViewCallbacks = new SimpleObservableScrollViewCallbacks() { @Override public void onScrollChanged(int scrollY, boolean b, boolean b2) { - scrollY += albumArtViewHeight + titleViewHeight; - float flexibleRange = albumArtViewHeight - headerOffset; - - // Translate album cover - albumArtImageView.setTranslationY(Math.max(-albumArtViewHeight, -scrollY / 2)); - - // Translate list background - songsBackgroundView.setTranslationY(Math.max(0, -scrollY + albumArtViewHeight)); + scrollY += headerViewHeight; // 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)); + float headerAlpha = Math.max(0, Math.min(1, (float) 2*scrollY/headerViewHeight)); + headerOverlay.setBackgroundColor(ColorUtil.withAlpha(toolbarColor, headerAlpha)); // Translate name text - int maxTitleTranslationY = albumArtViewHeight; - int titleTranslationY = maxTitleTranslationY - scrollY; - titleTranslationY = Math.max(headerOffset, titleTranslationY); - - albumTitleView.setTranslationY(titleTranslationY); + headerView.setTranslationY(Math.max(-scrollY, -headerViewHeight)); + headerOverlay.setTranslationY(Math.max(-scrollY, -headerViewHeight)); } }; private void setUpObservableListViewParams() { - albumArtViewHeight = 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.title_view_height); } private void setUpViews() { @@ -195,11 +198,23 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements private void setColors(int color) { toolbarColor = color; - albumTitleView.setBackgroundColor(color); - albumTitleView.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color))); + headerView.setBackgroundColor(color); setNavigationbarColor(color); setTaskDescriptionColor(color); + + toolbar.setBackgroundColor(color); + setStatusbarColor(color); + + int secondaryTextColor = MaterialValueHelper.getSecondaryTextColor(this, ColorUtil.isColorLight(color)); + artistIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + durationIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + songCountIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + albumYearIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + artistTextView.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color))); + durationTextView.setTextColor(secondaryTextColor); + songCountTextView.setTextColor(secondaryTextColor); + albumYearTextView.setTextColor(secondaryTextColor); } @Override @@ -212,8 +227,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements recyclerView.setScrollViewCallbacks(observableScrollViewCallbacks); final View contentView = getWindow().getDecorView().findViewById(android.R.id.content); contentView.post(() -> { - songsBackgroundView.getLayoutParams().height = contentView.getHeight(); - observableScrollViewCallbacks.onScrollChanged(-(albumArtViewHeight + titleViewHeight), false, false); + observableScrollViewCallbacks.onScrollChanged(-(headerViewHeight), false, false); // necessary to fix a bug recyclerView.scrollBy(0, 1); recyclerView.scrollBy(0, -1); @@ -221,7 +235,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements } private void setUpRecyclerViewPadding() { - recyclerView.setPadding(0, albumArtViewHeight + titleViewHeight, 0, 0); + recyclerView.setPadding(0, headerViewHeight, 0, 0); } private void setUpToolBar() { @@ -377,7 +391,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements .start(new MaterialCab.Callback() { @Override public boolean onCabCreated(MaterialCab materialCab, Menu menu) { - setStatusbarColor(ColorUtil.stripAlpha(toolbarColor)); return callback.onCabCreated(materialCab, menu); } @@ -388,7 +401,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements @Override public boolean onCabFinished(MaterialCab materialCab) { - setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha)); return callback.onCabFinished(materialCab); } }); @@ -424,7 +436,12 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements loadWiki(); } - albumTitleView.setText(album.getTitle()); + getSupportActionBar().setTitle(album.getTitle()); + artistTextView.setText(album.getArtistName()); + durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, album.songs))); + songCountTextView.setText(String.valueOf(album.getSongCount())); + albumYearTextView.setText(String.valueOf(album.getYear())); + adapter.swapDataSet(album.songs); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java index 869a3323..f4ddaa1b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -126,13 +126,16 @@ public class MusicUtil { public static String getPlaylistInfoString(@NonNull final Context context, @NonNull List songs) { final int songCount = songs.size(); final String songString = songCount == 1 ? context.getResources().getString(R.string.song) : context.getResources().getString(R.string.songs); + final long duration = getTotalDuration(context, songs); + return songCount + " " + songString + " • " + MusicUtil.getReadableDurationString(duration); + } + public static long getTotalDuration(@NonNull final Context context, @NonNull List songs) { long duration = 0; for (int i = 0; i < songs.size(); i++) { duration += songs.get(i).duration; } - - return songCount + " " + songString + " • " + MusicUtil.getReadableDurationString(duration); + return duration; } public static String getReadableDurationString(long songDurationMillis) { diff --git a/app/src/main/res/layout/activity_album_detail.xml b/app/src/main/res/layout/activity_album_detail.xml index 3b313d79..9b98faa8 100644 --- a/app/src/main/res/layout/activity_album_detail.xml +++ b/app/src/main/res/layout/activity_album_detail.xml @@ -1,60 +1,10 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml index 347dad54..b970a9ad 100644 --- a/app/src/main/res/values-land/dimens.xml +++ b/app/src/main/res/values-land/dimens.xml @@ -1,5 +1,5 @@ - 56dp + 0dp 180dp diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 25f0dda9..b3179870 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,7 +2,7 @@ 16dp - 72dp + 176dp 4dp 2dp