diff --git a/app/build.gradle b/app/build.gradle index 34a91caa..53ea0994 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,8 +51,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId 'com.kabouzeid.gramophone' - versionCode 155 - versionName '0.16.9' + versionCode 157 + versionName '1.0.0 BETA 2' } buildTypes { release { diff --git a/app/src/main/assets/phonograph-changelog.html b/app/src/main/assets/phonograph-changelog.html index ced146cf..72c330ef 100644 --- a/app/src/main/assets/phonograph-changelog.html +++ b/app/src/main/assets/phonograph-changelog.html @@ -26,6 +26,18 @@

You can view the changelog dialog again at any time from the about section.

+

We are coming closer to the first final release!

+ +

Version 1.0.0 BETA 2

+
    +
  1. NEW: Artist page redesign
  2. +
  3. IMPROVEMENT: Improved the look of the new album page
  4. +
+ +

Version 1.0.0 BETA 1

+
    +
  1. NEW: Album page redesign
  2. +

Version 0.16.9

    diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java index 02d4944f..990717aa 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java @@ -56,6 +56,9 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen private static String EUGENE_CHEUNG_GITHUB = "https://github.com/arkon"; private static String EUGENE_CHEUNG_WEBSITE = "https://echeung.me/"; + private static String ADRIAN_TWITTER = "https://twitter.com/froschgames"; + private static String ADRIAN_WEBSITE = "https://froschgames.com/"; + @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.app_version) @@ -102,6 +105,10 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen AppCompatButton eugeneCheungGitHub; @BindView(R.id.eugene_cheung_website) AppCompatButton eugeneCheungWebsite; + @BindView(R.id.adrian_twitter) + AppCompatButton adrianTwitter; + @BindView(R.id.adrian_website) + AppCompatButton adrianWebsite; @Override protected void onCreate(Bundle savedInstanceState) { @@ -156,6 +163,8 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen aleksandarTesicGooglePlus.setOnClickListener(this); eugeneCheungGitHub.setOnClickListener(this); eugeneCheungWebsite.setOnClickListener(this); + adrianTwitter.setOnClickListener(this); + adrianWebsite.setOnClickListener(this); } @Override @@ -228,6 +237,10 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen openUrl(EUGENE_CHEUNG_GITHUB); } else if (v == eugeneCheungWebsite) { openUrl(EUGENE_CHEUNG_WEBSITE); + } else if (v == adrianTwitter) { + openUrl(ADRIAN_TWITTER); + } else if (v == adrianWebsite) { + openUrl(ADRIAN_WEBSITE); } } 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..1bbc1ea2 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,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; @@ -24,8 +24,6 @@ import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.util.DialogUtils; 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.util.ColorUtil; import com.kabouzeid.appthemehelper.util.MaterialValueHelper; @@ -36,7 +34,6 @@ import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.glide.PhonographColoredTarget; import com.kabouzeid.gramophone.glide.SongGlideRequest; -import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.LoaderIds; @@ -51,13 +48,13 @@ 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; -import java.util.Locale; - import java.util.ArrayList; +import java.util.Locale; import butterknife.BindView; import butterknife.ButterKnife; @@ -84,19 +81,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; @@ -109,8 +120,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements setDrawUnderStatusbar(true); ButterKnife.bind(this); - supportPostponeEnterTransition(); - lastFMRestClient = new LastFMRestClient(this); setUpObservableListViewParams(); @@ -128,43 +137,32 @@ 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)); + albumArtImageView.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.detail_header_height); } private void setUpViews() { setUpRecyclerView(); setUpSongsAdapter(); + artistTextView.setOnClickListener(v -> { + if (album != null) { + NavigationUtil.goToArtist(AlbumDetailActivity.this, album.getArtistId()); + } + }); + setColors(DialogUtils.resolveColor(this, R.attr.defaultFooterColor)); } private void loadAlbumCover() { @@ -172,19 +170,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements .checkIgnoreMediaStore(this) .generatePalette(this).build() .dontAnimate() - .listener(new RequestListener() { - @Override - public boolean onException(Exception e, Object model, Target target, boolean isFirstResource) { - supportStartPostponedEnterTransition(); - return false; - } - - @Override - public boolean onResourceReady(BitmapPaletteWrapper resource, Object model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - supportStartPostponedEnterTransition(); - return false; - } - }) .into(new PhonographColoredTarget(albumArtImageView) { @Override public void onColorReady(int color) { @@ -195,11 +180,24 @@ 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); + setSupportActionBar(toolbar); // needed to auto readjust the toolbar content 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 @@ -211,17 +209,11 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements setUpRecyclerViewPadding(); 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); - // necessary to fix a bug - recyclerView.scrollBy(0, 1); - recyclerView.scrollBy(0, -1); - }); + contentView.post(() -> observableScrollViewCallbacks.onScrollChanged(-headerViewHeight, false, false)); } private void setUpRecyclerViewPadding() { - recyclerView.setPadding(0, albumArtViewHeight + titleViewHeight, 0, 0); + recyclerView.setPadding(0, headerViewHeight, 0, 0); } private void setUpToolBar() { @@ -251,7 +243,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_album_detail, menu); - return true; + return super.onCreateOptionsMenu(menu); } private void loadWiki() { @@ -377,7 +369,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 +379,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements @Override public boolean onCabFinished(MaterialCab materialCab) { - setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha)); return callback.onCabFinished(materialCab); } }); @@ -424,7 +414,12 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements loadWiki(); } - albumTitleView.setText(album.getTitle()); + getSupportActionBar().setTitle(album.getTitle()); + artistTextView.setText(album.getArtistName()); + songCountTextView.setText(MusicUtil.getSongCountString(this, album.getSongCount())); + durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, album.songs))); + albumYearTextView.setText(String.valueOf(album.getYear())); + adapter.swapDataSet(album.songs); } @@ -440,7 +435,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements @Override public void onLoadFinished(Loader loader, Album data) { - supportStartPostponedEnterTransition(); setAlbum(data); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 3791917f..7d44e7a4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -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) { @@ -112,15 +137,13 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement setDrawUnderStatusbar(true); ButterKnife.bind(this); - supportPostponeEnterTransition(); - lastFMRestClient = new LastFMRestClient(this); usePalette = PreferenceUtil.getInstance(this).albumArtistColoredFooters(); initViews(); setUpObservableListViewParams(); - setUpViews(); setUpToolbar(); + setUpViews(); getSupportLoaderManager().initLoader(LOADER_ID, getIntent().getExtras(), this); } @@ -130,41 +153,10 @@ 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() { @@ -175,6 +167,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement private void setUpViews() { setUpSongListView(); setUpAlbumRecyclerView(); + setColors(DialogUtils.resolveColor(this, R.attr.defaultFooterColor)); } private void setUpSongListView() { @@ -186,14 +179,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 +291,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 +320,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 +397,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 +407,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement @Override public boolean onCabFinished(MaterialCab materialCab) { - setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha)); return callback.onCabFinished(materialCab); } }); @@ -442,7 +442,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); } @@ -459,7 +463,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement @Override public void onLoadFinished(Loader loader, Artist data) { - supportStartPostponedEnterTransition(); setArtist(data); } 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..03fc90e1 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -32,7 +32,6 @@ import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.tag.FieldKey; import java.io.File; -import java.io.FileFilter; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -124,15 +123,28 @@ public class MusicUtil { @NonNull 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 MusicUtil.getSongCountString(context, songs.size()) + " • " + MusicUtil.getReadableDurationString(duration); + } + @NonNull + public static String getSongCountString(@NonNull final Context context, int songCount) { + final String songString = songCount == 1 ? context.getResources().getString(R.string.song) : context.getResources().getString(R.string.songs); + 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 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/java/com/kabouzeid/gramophone/util/NavigationUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java index 66950c72..32a21763 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java @@ -29,7 +29,11 @@ public class NavigationUtil { intent.putExtra(ArtistDetailActivity.EXTRA_ARTIST_ID, artistId); //noinspection unchecked - activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); + if (sharedElements != null && sharedElements.length > 0) { + activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); + } else { + activity.startActivity(intent); + } } public static void goToAlbum(@NonNull final Activity activity, final int albumId, @Nullable Pair... sharedElements) { @@ -37,7 +41,11 @@ public class NavigationUtil { intent.putExtra(AlbumDetailActivity.EXTRA_ALBUM_ID, albumId); //noinspection unchecked - activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); + if (sharedElements != null && sharedElements.length > 0) { + activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); + } else { + activity.startActivity(intent); + } } public static void goToGenre(@NonNull final Activity activity, final Genre genre, @Nullable Pair... sharedElements) { diff --git a/app/src/main/res/drawable/ic_album_white_24dp.xml b/app/src/main/res/drawable/ic_album_white_24dp.xml new file mode 100644 index 00000000..6aa0cec6 --- /dev/null +++ b/app/src/main/res/drawable/ic_album_white_24dp.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/layout/activity_album_detail.xml b/app/src/main/res/layout/activity_album_detail.xml index 3b313d79..7f2d27c5 100644 --- a/app/src/main/res/layout/activity_album_detail.xml +++ b/app/src/main/res/layout/activity_album_detail.xml @@ -1,87 +1,218 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - + - + android:elevation="@dimen/toolbar_elevation" + tools:ignore="UnusedAttribute"> - - - - - - - - + - + - + android:layout_height="match_parent"> - + + android:orientation="vertical"> - - - + android:layout_height="@dimen/detail_header_height" + android:background="?attr/defaultFooterColor" + android:elevation="@dimen/toolbar_elevation" + android:orientation="horizontal" + tools:ignore="UnusedAttribute"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - \ No newline at end of file + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_artist_detail.xml b/app/src/main/res/layout/activity_artist_detail.xml index 4d1828c0..b9983983 100644 --- a/app/src/main/res/layout/activity_artist_detail.xml +++ b/app/src/main/res/layout/activity_artist_detail.xml @@ -1,86 +1,188 @@ - + + android:layout_height="match_parent" + android:orientation="vertical"> - + - + android:elevation="@dimen/toolbar_elevation" + tools:ignore="UnusedAttribute"> - - - - - - - - + - + - + android:layout_height="match_parent"> - + + android:orientation="vertical"> - - - + android:layout_height="@dimen/detail_header_height" + android:background="?attr/defaultFooterColor" + android:elevation="@dimen/toolbar_elevation" + android:orientation="horizontal" + tools:ignore="UnusedAttribute"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - \ No newline at end of file + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/card_special_thanks.xml b/app/src/main/res/layout/card_special_thanks.xml index 0136d4ac..179cabc1 100644 --- a/app/src/main/res/layout/card_special_thanks.xml +++ b/app/src/main/res/layout/card_special_thanks.xml @@ -299,6 +299,65 @@ + + + + + + + + + + + + + + + + + + + + + \ 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..c460f0bd 100644 --- a/app/src/main/res/values-land/dimens.xml +++ b/app/src/main/res/values-land/dimens.xml @@ -1,8 +1,8 @@ + 144dp + 112dp 56dp - 180dp - 72dp diff --git a/app/src/main/res/values-sw600dp-land/dimens.xml b/app/src/main/res/values-sw600dp-land/dimens.xml index a0a6d8b4..a6b3daec 100644 --- a/app/src/main/res/values-sw600dp-land/dimens.xml +++ b/app/src/main/res/values-sw600dp-land/dimens.xml @@ -1,4 +1,2 @@ - - 420dp - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml index 7eb140f2..355d33ff 100644 --- a/app/src/main/res/values-sw600dp/dimens.xml +++ b/app/src/main/res/values-sw600dp/dimens.xml @@ -1,3 +1,4 @@ - 600dp + 176dp + 144dp diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 25f0dda9..4e4c5da8 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,6 +2,8 @@ 16dp + 176dp + 144dp 72dp 4dp 2dp @@ -9,7 +11,6 @@ 168dp - 360dp 20dp 120dp 104dp diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 09f3d1e1..a589501a 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -8,11 +8,13 @@ Michael Cook (Cookicons) Aleksandar Tešić Eugene Cheung + Adrian Aachen, Germany Google Plus GitHub + Twitter Card Flat diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 08b52471..5b6dc6c5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -282,6 +282,7 @@ Restore No purchase found. For his contributions to the source code. + For creating the album page design. Add Blacklist Remove from blacklist