From e461f44ff01a967546af115ec9c3f79104e917b8 Mon Sep 17 00:00:00 2001 From: soncaokim Date: Sat, 29 Dec 2018 18:28:44 +0100 Subject: [PATCH] Smart playlist decoration (#619) * Show smart playlist threshold and number of tracks in addition to the playlist title (#4) * Remove todo tags (#5) * Indentation * Code review --- .../gramophone/adapter/PlaylistAdapter.java | 14 ++++++- .../adapter/song/PlayingQueueAdapter.java | 1 + .../gramophone/model/AbsCustomPlaylist.java | 18 +++++++++ .../kabouzeid/gramophone/model/Playlist.java | 7 ++++ .../model/smartplaylist/HistoryPlaylist.java | 13 ++++++- .../smartplaylist/LastAddedPlaylist.java | 13 ++++++- .../NotRecentlyPlayedPlaylist.java | 13 ++++++- .../gramophone/util/PreferenceUtil.java | 32 ++++++++++++++++ .../main/res/layout/item_list_single_row.xml | 38 +++++++++++++------ 9 files changed, 134 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java index 98cf2dd2..36e54523 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java @@ -83,6 +83,15 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter getSongs(Context context); + + @NonNull + @Override + public String getInfoString(@NonNull Context context) { + String baseInfo = super.getInfoString(context); + + int songCount = getSongs(context).size(); + String songCountText = (songCount == 0) ? + context.getString(R.string.no_songs) : + String.valueOf(songCount) + " " + context.getString(R.string.songs); + + if (baseInfo.isEmpty()) {return songCountText;} + return songCountText + INFO_STRING_SEPARATOR + baseInfo; + } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java b/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java index bb42f4b2..0eea7fb4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java @@ -1,7 +1,9 @@ package com.kabouzeid.gramophone.model; +import android.content.Context; import android.os.Parcel; import android.os.Parcelable; +import android.support.annotation.NonNull; /** * @author Karim Abou Zeid (kabouzeid) @@ -20,6 +22,11 @@ public class Playlist implements Parcelable { this.name = ""; } + @NonNull + public String getInfoString(@NonNull Context context) { + return ""; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/HistoryPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/HistoryPlaylist.java index 69fef602..c9562b8e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/HistoryPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/HistoryPlaylist.java @@ -4,10 +4,11 @@ import android.content.Context; import android.os.Parcel; import android.support.annotation.NonNull; -import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.loader.TopAndRecentlyPlayedTracksLoader; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.provider.HistoryStore; +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.util.PreferenceUtil; import java.util.ArrayList; @@ -20,6 +21,16 @@ public class HistoryPlaylist extends AbsSmartPlaylist { super(context.getString(R.string.history), R.drawable.ic_access_time_white_24dp); } + @NonNull + @Override + public String getInfoString(@NonNull Context context) { + String baseInfo = super.getInfoString(context); + String cutoff = PreferenceUtil.getInstance(context).getRecentlyPlayedCutoffText(context); + + if (baseInfo.isEmpty()) {return cutoff;} + return cutoff + INFO_STRING_SEPARATOR + baseInfo; + } + @NonNull @Override public ArrayList getSongs(@NonNull Context context) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java index cd142a85..82372dc8 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java @@ -4,9 +4,10 @@ import android.content.Context; import android.os.Parcel; import android.support.annotation.NonNull; -import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.loader.LastAddedLoader; import com.kabouzeid.gramophone.model.Song; +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.util.PreferenceUtil; import java.util.ArrayList; @@ -19,6 +20,16 @@ public class LastAddedPlaylist extends AbsSmartPlaylist { super(context.getString(R.string.last_added), R.drawable.ic_library_add_white_24dp); } + @NonNull + @Override + public String getInfoString(@NonNull Context context) { + String baseInfo = super.getInfoString(context); + String cutoff = PreferenceUtil.getInstance(context).getLastAddedCutoffText(context); + + if (baseInfo.isEmpty()) {return cutoff;} + return cutoff + INFO_STRING_SEPARATOR + baseInfo; + } + @NonNull @Override public ArrayList getSongs(@NonNull Context context) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/NotRecentlyPlayedPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/NotRecentlyPlayedPlaylist.java index 1ef4fab2..7070a16b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/NotRecentlyPlayedPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/NotRecentlyPlayedPlaylist.java @@ -4,10 +4,11 @@ import android.content.Context; import android.os.Parcel; import android.support.annotation.NonNull; -import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.loader.TopAndRecentlyPlayedTracksLoader; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.provider.HistoryStore; +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.util.PreferenceUtil; import java.util.ArrayList; @@ -20,6 +21,16 @@ public class NotRecentlyPlayedPlaylist extends AbsSmartPlaylist { super(context.getString(R.string.not_recently_played), R.drawable.ic_watch_later_white_24dp); } + @NonNull + @Override + public String getInfoString(@NonNull Context context) { + String baseInfo = super.getInfoString(context); + String cutoff = PreferenceUtil.getInstance(context).getRecentlyPlayedCutoffText(context); + + if (baseInfo.isEmpty()) {return cutoff;} + return cutoff + INFO_STRING_SEPARATOR + baseInfo; + } + @NonNull @Override public ArrayList getSongs(@NonNull Context context) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java index f0a2074a..85225201 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java @@ -10,6 +10,7 @@ import android.support.annotation.StyleRes; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; + import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.helper.SortOrder; import com.kabouzeid.gramophone.model.CategoryInfo; @@ -311,6 +312,37 @@ public final class PreferenceUtil { return (System.currentTimeMillis() - interval); } + public String getLastAddedCutoffText(Context context) { + return getCutoffText(LAST_ADDED_CUTOFF, context); + } + + public String getRecentlyPlayedCutoffText(Context context) { + return getCutoffText(LAST_PLAYED_CUTOFF, context); + } + + private String getCutoffText(final String cutoff, Context context) { + switch (mPreferences.getString(cutoff, "")) { + case "today": + return context.getString(R.string.today); + + case "this_week": + return context.getString(R.string.this_week); + + case "past_seven_days": + return context.getString(R.string.past_seven_days); + + case "past_three_months": + return context.getString(R.string.past_three_months); + + case "this_year": + return context.getString(R.string.this_year); + + case "this_month": + default: + return context.getString(R.string.this_month); + } + } + public int getLastSleepTimerValue() { return mPreferences.getInt(LAST_SLEEP_TIMER_VALUE, 30); } diff --git a/app/src/main/res/layout/item_list_single_row.xml b/app/src/main/res/layout/item_list_single_row.xml index 1a6ed7cb..ee6bad8a 100644 --- a/app/src/main/res/layout/item_list_single_row.xml +++ b/app/src/main/res/layout/item_list_single_row.xml @@ -54,19 +54,35 @@ - + android:orientation="vertical" + android:paddingEnd="0dp" + android:paddingLeft="16dp" + android:paddingRight="0dp" + android:paddingStart="16dp"> + + + + + + - \ No newline at end of file +