From c20262eb035c5cfdf09b2aaecc65297580664a2a Mon Sep 17 00:00:00 2001 From: Eugene Cheung Date: Thu, 1 Jun 2017 14:39:36 -0400 Subject: [PATCH 1/2] Add last added playlist interval preference (#107) --- .../gramophone/adapter/PlaylistAdapter.java | 8 +- .../gramophone/loader/LastAddedLoader.java | 7 +- .../smartplaylist/LastAddedPlaylist.java | 1 - .../ui/activities/SettingsActivity.java | 1 + .../gramophone/util/CalendarUtil.java | 100 ++++++++++++++++++ .../gramophone/util/PreferenceUtil.java | 37 +++++-- app/src/main/res/values/strings.xml | 7 ++ .../res/values/strings_activity_settings.xml | 16 +++ app/src/main/res/xml/pref_playlists.xml | 16 +++ 9 files changed, 175 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/com/kabouzeid/gramophone/util/CalendarUtil.java create mode 100644 app/src/main/res/xml/pref_playlists.xml 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 868f4448..9a9b73e1 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java @@ -26,6 +26,7 @@ import com.kabouzeid.gramophone.model.AbsCustomPlaylist; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; +import com.kabouzeid.gramophone.model.smartplaylist.LastAddedPlaylist; import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; @@ -192,13 +193,16 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter Calendar.JANUARY) { + final Calendar monthCal = new GregorianCalendar(calendar.get(Calendar.YEAR), month, 1); + final int daysInMonth = monthCal.getActualMaximum(Calendar.DAY_OF_MONTH); + + elapsed += daysInMonth * MS_PER_DAY; + + month--; + } + + return elapsed; + } +} 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 63deb986..ac251027 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java @@ -49,7 +49,7 @@ public final class PreferenceUtil { public static final String AUDIO_DUCKING = "audio_ducking"; public static final String GAPLESS_PLAYBACK = "gapless_playback"; - public static final String LAST_ADDED_CUTOFF_TIMESTAMP = "last_added_cutoff_timestamp"; + public static final String LAST_ADDED_CUTOFF = "last_added_interval"; public static final String ALBUM_ART_ON_LOCKSCREEN = "album_art_on_lockscreen"; public static final String BLURRED_ALBUM_ART = "blurred_album_art"; @@ -206,15 +206,34 @@ public final class PreferenceUtil { return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z); } - public long getLastAddedCutOffTimestamp() { - return mPreferences.getLong(LAST_ADDED_CUTOFF_TIMESTAMP, 0L); - } + public long getLastAddedCutoff() { + final CalendarUtil calendarUtil = new CalendarUtil(); + long interval; - @SuppressLint("CommitPrefEdits") - public void setLastAddedCutoffTimestamp(final long timestamp) { - final SharedPreferences.Editor editor = mPreferences.edit(); - editor.putLong(LAST_ADDED_CUTOFF_TIMESTAMP, timestamp); - editor.commit(); + switch (mPreferences.getString(LAST_ADDED_CUTOFF, "")) { + case "today": + interval = calendarUtil.getElapsedToday(); + break; + + case "this_week": + interval = calendarUtil.getElapsedWeek(); + break; + + case "past_three_months": + interval = calendarUtil.getElapsedMonths(3); + break; + + case "this_year": + interval = calendarUtil.getElapsedYear(); + break; + + case "this_month": + default: + interval = calendarUtil.getElapsedMonth(); + break; + } + + return (System.currentTimeMillis() - interval) / 1000; } public int getLastSleepTimerValue() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a515cb50..c62a79db 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -110,6 +110,11 @@ Always Only on Wi-Fi Never + Today + This week + This month + Past 3 months + This year Equalizer Colors Now playing @@ -118,6 +123,7 @@ General Images Lockscreen + Playlists Colored navigation bar Colored app shortcuts Start page @@ -135,6 +141,7 @@ Show card below playback controls Colored playback controls Reduce volume on focus loss + Last added playlist interval No equalizer found. "Play a song first, then try again." Delete diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml index 33eba14a..2f35d635 100644 --- a/app/src/main/res/values/strings_activity_settings.xml +++ b/app/src/main/res/values/strings_activity_settings.xml @@ -39,4 +39,20 @@ never + + @string/today + @string/this_week + @string/this_month + @string/past_three_months + @string/this_year + + + + today + this_week + this_month + past_three_months + this_year + + diff --git a/app/src/main/res/xml/pref_playlists.xml b/app/src/main/res/xml/pref_playlists.xml new file mode 100644 index 00000000..8ad96828 --- /dev/null +++ b/app/src/main/res/xml/pref_playlists.xml @@ -0,0 +1,16 @@ + + + + + + + + + From d0171abdee521f1b0ffd795b52900302fec0fcbb Mon Sep 17 00:00:00 2001 From: Eugene Cheung Date: Thu, 1 Jun 2017 20:04:41 -0400 Subject: [PATCH 2/2] Fix seconds/ms not being considered for today and negative amount of weekdays --- .../gramophone/util/CalendarUtil.java | 45 +++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/CalendarUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/CalendarUtil.java index 8428dbfb..136f686f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/CalendarUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/CalendarUtil.java @@ -17,13 +17,15 @@ public class CalendarUtil { } /** - * Returns the time elapsed so far today in seconds. + * Returns the time elapsed so far today in milliseconds. * - * @return Time elapsed today in seconds. + * @return Time elapsed today in milliseconds. */ public long getElapsedToday() { // Time elapsed so far today - return (calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)) * MS_PER_MINUTE; + return (calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)) * MS_PER_MINUTE + + calendar.get(Calendar.SECOND) * 1000 + + calendar.get(Calendar.MILLISECOND); } /** @@ -32,8 +34,15 @@ public class CalendarUtil { * @return Time elapsed this week in milliseconds. */ public long getElapsedWeek() { - // Today + days passed - return getElapsedToday() + ((calendar.get(Calendar.DAY_OF_WEEK) - 1 - calendar.getFirstDayOfWeek()) * MS_PER_DAY); + // Today + days passed this week + long elapsed = getElapsedToday(); + + final int passedWeekdays = calendar.get(Calendar.DAY_OF_WEEK) - 1 - calendar.getFirstDayOfWeek(); + if (passedWeekdays > 0) { + elapsed += passedWeekdays * MS_PER_DAY; + } + + return elapsed; } /** @@ -43,7 +52,8 @@ public class CalendarUtil { */ public long getElapsedMonth() { // Today + rest of this month - return getElapsedToday() + ((calendar.get(Calendar.DAY_OF_MONTH) - 1) * MS_PER_DAY); + return getElapsedToday() + + ((calendar.get(Calendar.DAY_OF_MONTH) - 1) * MS_PER_DAY); } /** @@ -67,10 +77,7 @@ public class CalendarUtil { year--; } - final Calendar monthCal = new GregorianCalendar(year, month, 1); - final int daysInMonth = monthCal.getActualMaximum(Calendar.DAY_OF_MONTH); - - elapsed += daysInMonth * MS_PER_DAY; + elapsed += getDaysInMonth(year, month) * MS_PER_DAY; } return elapsed; @@ -86,15 +93,25 @@ public class CalendarUtil { long elapsed = getElapsedMonth(); int month = calendar.get(Calendar.MONTH) - 1; + int year = calendar.get(Calendar.YEAR); while (month > Calendar.JANUARY) { - final Calendar monthCal = new GregorianCalendar(calendar.get(Calendar.YEAR), month, 1); - final int daysInMonth = monthCal.getActualMaximum(Calendar.DAY_OF_MONTH); - - elapsed += daysInMonth * MS_PER_DAY; + elapsed += getDaysInMonth(year, month) * MS_PER_DAY; month--; } return elapsed; } + + /** + * Gets the number of days for the given month in the given year. + * + * @param year The year. + * @param month The month (1 - 12). + * @return The days in that month/year. + */ + private int getDaysInMonth(int year, int month) { + final Calendar monthCal = new GregorianCalendar(calendar.get(Calendar.YEAR), month, 1); + return monthCal.getActualMaximum(Calendar.DAY_OF_MONTH); + } }