From d5f8ee4d4915a56318aad911a1e7727824e483c4 Mon Sep 17 00:00:00 2001 From: tomerf Date: Mon, 30 Jan 2017 21:03:16 +0200 Subject: [PATCH] Added option to sort by last played (#340) --- app/src/main/java/org/xbmc/kore/Settings.java | 3 ++- .../org/xbmc/kore/provider/MediaContract.java | 2 ++ .../org/xbmc/kore/provider/MediaDatabase.java | 12 +++++++++++- .../org/xbmc/kore/service/library/SyncUtils.java | 2 ++ .../ui/sections/video/MovieListFragment.java | 14 ++++++++++++++ .../ui/sections/video/TVShowListFragment.java | 16 +++++++++++++++- app/src/main/res/menu/movie_list.xml | 4 ++++ app/src/main/res/menu/tvshow_list.xml | 4 ++++ app/src/main/res/values/strings.xml | 1 + 9 files changed, 55 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/xbmc/kore/Settings.java b/app/src/main/java/org/xbmc/kore/Settings.java index e564696..5ca677b 100644 --- a/app/src/main/java/org/xbmc/kore/Settings.java +++ b/app/src/main/java/org/xbmc/kore/Settings.java @@ -48,7 +48,8 @@ public class Settings { SORT_BY_LENGTH = 4, SORT_BY_ALBUM = 5, SORT_BY_ARTIST = 6, - SORT_BY_ARTIST_YEAR = 7 ; + SORT_BY_ARTIST_YEAR = 7, + SORT_BY_LAST_PLAYED = 8; /** * Preferences keys. diff --git a/app/src/main/java/org/xbmc/kore/provider/MediaContract.java b/app/src/main/java/org/xbmc/kore/provider/MediaContract.java index 3b544fd..13b1ccf 100644 --- a/app/src/main/java/org/xbmc/kore/provider/MediaContract.java +++ b/app/src/main/java/org/xbmc/kore/provider/MediaContract.java @@ -145,6 +145,7 @@ public class MediaContract { String WRITERS = "writers"; String YEAR = "year"; String DATEADDED = "dateadded"; + String LASTPLAYED = "lastplayed"; } public static class Movies implements BaseColumns, SyncColumns, MoviesColumns { @@ -229,6 +230,7 @@ public class MediaContract { String PLAYCOUNT = "playcount"; String TITLE = "title"; String DATEADDED = "dateadded"; + String LASTPLAYED = "lastplayed"; String FILE = "file"; String PLOT = "plot"; String EPISODE = "episode"; diff --git a/app/src/main/java/org/xbmc/kore/provider/MediaDatabase.java b/app/src/main/java/org/xbmc/kore/provider/MediaDatabase.java index 51453b0..52d69b0 100644 --- a/app/src/main/java/org/xbmc/kore/provider/MediaDatabase.java +++ b/app/src/main/java/org/xbmc/kore/provider/MediaDatabase.java @@ -37,7 +37,8 @@ public class MediaDatabase extends SQLiteOpenHelper { DB_VERSION_PRE_SONG_DISC = 7, DB_VERSION_PRE_HOST_VERSION = 8, DB_VERSION_PRE_HOST_HTTPS = 9, - DB_VERSION = 10; + DB_VERSION_PRE_LAST_PLAYED = 10, + DB_VERSION = 11; /** * Tables exposed @@ -198,6 +199,7 @@ public class MediaDatabase extends SQLiteOpenHelper { MediaContract.MoviesColumns.WRITERS + " TEXT, " + MediaContract.MoviesColumns.YEAR + " INTEGER, " + MediaContract.MoviesColumns.DATEADDED + " TEXT, " + + MediaContract.MoviesColumns.LASTPLAYED + " TEXT, " + "UNIQUE (" + MediaContract.MoviesColumns.HOST_ID + ", " + MediaContract.MoviesColumns.MOVIEID + ") ON CONFLICT REPLACE)" ); @@ -229,6 +231,7 @@ public class MediaDatabase extends SQLiteOpenHelper { MediaContract.TVShowsColumns.PLAYCOUNT + " INTEGER, " + MediaContract.TVShowsColumns.TITLE + " TEXT, " + MediaContract.TVShowsColumns.DATEADDED + " TEXT, " + + MediaContract.TVShowsColumns.LASTPLAYED + " TEXT, " + MediaContract.TVShowsColumns.FILE + " TEXT, " + MediaContract.TVShowsColumns.PLOT + " TEXT, " + MediaContract.TVShowsColumns.EPISODE + " INTEGER, " + @@ -520,6 +523,13 @@ public class MediaDatabase extends SQLiteOpenHelper { db.execSQL("ALTER TABLE " + Tables.HOSTS + " ADD COLUMN " + MediaContract.HostsColumns.IS_HTTPS + " INTEGER DEFAULT 0;"); + case DB_VERSION_PRE_LAST_PLAYED: + db.execSQL("ALTER TABLE " + Tables.MOVIES + + " ADD COLUMN " + MediaContract.MoviesColumns.LASTPLAYED + + " TEXT;"); + db.execSQL("ALTER TABLE " + Tables.TVSHOWS + + " ADD COLUMN " + MediaContract.TVShowsColumns.LASTPLAYED + + " TEXT;"); } } diff --git a/app/src/main/java/org/xbmc/kore/service/library/SyncUtils.java b/app/src/main/java/org/xbmc/kore/service/library/SyncUtils.java index 1002bc8..ef12fa4 100644 --- a/app/src/main/java/org/xbmc/kore/service/library/SyncUtils.java +++ b/app/src/main/java/org/xbmc/kore/service/library/SyncUtils.java @@ -58,6 +58,7 @@ public class SyncUtils { movieValues.put(MediaContract.MoviesColumns.THUMBNAIL, movie.thumbnail); movieValues.put(MediaContract.MoviesColumns.PLAYCOUNT, movie.playcount); movieValues.put(MediaContract.MoviesColumns.DATEADDED, movie.dateadded); + movieValues.put(MediaContract.MoviesColumns.LASTPLAYED, movie.lastplayed); movieValues.put(MediaContract.MoviesColumns.TITLE, movie.title); movieValues.put(MediaContract.MoviesColumns.FILE, movie.file); movieValues.put(MediaContract.MoviesColumns.PLOT, movie.plot); @@ -156,6 +157,7 @@ public class SyncUtils { tvshowValues.put(MediaContract.TVShowsColumns.PLAYCOUNT, tvshow.playcount); tvshowValues.put(MediaContract.TVShowsColumns.TITLE, tvshow.title); tvshowValues.put(MediaContract.TVShowsColumns.DATEADDED, tvshow.dateadded); + tvshowValues.put(MediaContract.TVShowsColumns.LASTPLAYED, tvshow.lastplayed); tvshowValues.put(MediaContract.TVShowsColumns.FILE, tvshow.file); tvshowValues.put(MediaContract.TVShowsColumns.PLOT, tvshow.plot); tvshowValues.put(MediaContract.TVShowsColumns.EPISODE, tvshow.episode); diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieListFragment.java index 6dbebb7..f0a37c8 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieListFragment.java @@ -102,6 +102,8 @@ public class MovieListFragment extends AbstractCursorListFragment { int sortOrder = preferences.getInt(Settings.KEY_PREF_MOVIES_SORT_ORDER, Settings.DEFAULT_PREF_MOVIES_SORT_ORDER); if (sortOrder == Settings.SORT_BY_DATE_ADDED) { sortOrderStr = MovieListQuery.SORT_BY_DATE_ADDED; + } else if (sortOrder == Settings.SORT_BY_LAST_PLAYED) { + sortOrderStr = MovieListQuery.SORT_BY_LAST_PLAYED; } else if (sortOrder == Settings.SORT_BY_RATING) { sortOrderStr = MovieListQuery.SORT_BY_RATING; } else if (sortOrder == Settings.SORT_BY_YEAR) { @@ -155,6 +157,7 @@ public class MovieListFragment extends AbstractCursorListFragment { sortByYear = menu.findItem(R.id.action_sort_by_year), sortByRating = menu.findItem(R.id.action_sort_by_rating), sortByDateAdded = menu.findItem(R.id.action_sort_by_date_added), + sortByLastPlayed = menu.findItem(R.id.action_sort_by_last_played), sortByLength = menu.findItem(R.id.action_sort_by_length); @@ -173,6 +176,9 @@ public class MovieListFragment extends AbstractCursorListFragment { case Settings.SORT_BY_DATE_ADDED: sortByDateAdded.setChecked(true); break; + case Settings.SORT_BY_LAST_PLAYED: + sortByLastPlayed.setChecked(true); + break; case Settings.SORT_BY_LENGTH: sortByLength.setChecked(true); break; @@ -230,6 +236,13 @@ public class MovieListFragment extends AbstractCursorListFragment { .apply(); refreshList(); break; + case R.id.action_sort_by_last_played: + item.setChecked(true); + preferences.edit() + .putInt(Settings.KEY_PREF_MOVIES_SORT_ORDER, Settings.SORT_BY_LAST_PLAYED) + .apply(); + refreshList(); + break; case R.id.action_sort_by_length: item.setChecked(true); preferences.edit() @@ -265,6 +278,7 @@ public class MovieListFragment extends AbstractCursorListFragment { String SORT_BY_YEAR = MediaContract.Movies.YEAR + " ASC"; String SORT_BY_RATING = MediaContract.Movies.RATING + " DESC"; String SORT_BY_DATE_ADDED = MediaContract.Movies.DATEADDED + " DESC"; + String SORT_BY_LAST_PLAYED = MediaContract.Movies.LASTPLAYED + " DESC"; String SORT_BY_LENGTH = MediaContract.Movies.RUNTIME + " DESC"; String SORT_BY_NAME_IGNORE_ARTICLES = MediaDatabase.sortCommonTokens(MediaContract.Movies.TITLE) + " ASC"; diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowListFragment.java index 141e76f..ec3c8e5 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowListFragment.java @@ -108,6 +108,8 @@ public class TVShowListFragment extends AbstractCursorListFragment { sortOrderStr = TVShowListQuery.SORT_BY_YEAR; } else if (sortOrder == Settings.SORT_BY_RATING) { sortOrderStr = TVShowListQuery.SORT_BY_RATING; + } else if (sortOrder == Settings.SORT_BY_LAST_PLAYED) { + sortOrderStr = TVShowListQuery.SORT_BY_LAST_PLAYED; } else { // Sort by name if (preferences.getBoolean(Settings.KEY_PREF_TVSHOWS_IGNORE_PREFIXES, Settings.DEFAULT_PREF_TVSHOWS_IGNORE_PREFIXES)) { @@ -156,7 +158,8 @@ public class TVShowListFragment extends AbstractCursorListFragment { sortByName = menu.findItem(R.id.action_sort_by_name), sortByYear = menu.findItem(R.id.action_sort_by_year), sortByRating = menu.findItem(R.id.action_sort_by_rating), - sortByDateAdded = menu.findItem(R.id.action_sort_by_date_added); + sortByDateAdded = menu.findItem(R.id.action_sort_by_date_added), + sortByLastPlayed = menu.findItem(R.id.action_sort_by_last_played); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); hideWatched.setChecked(preferences.getBoolean(Settings.KEY_PREF_TVSHOWS_FILTER_HIDE_WATCHED, Settings.DEFAULT_PREF_TVSHOWS_FILTER_HIDE_WATCHED)); @@ -173,6 +176,9 @@ public class TVShowListFragment extends AbstractCursorListFragment { case Settings.SORT_BY_DATE_ADDED: sortByDateAdded.setChecked(true); break; + case Settings.SORT_BY_LAST_PLAYED: + sortByLastPlayed.setChecked(true); + break; default: sortByName.setChecked(true); break; @@ -227,6 +233,13 @@ public class TVShowListFragment extends AbstractCursorListFragment { .apply(); refreshList(); break; + case R.id.action_sort_by_last_played: + item.setChecked(true); + preferences.edit() + .putInt(Settings.KEY_PREF_TVSHOWS_SORT_ORDER, Settings.SORT_BY_LAST_PLAYED) + .apply(); + refreshList(); + break; default: break; } @@ -259,6 +272,7 @@ public class TVShowListFragment extends AbstractCursorListFragment { String SORT_BY_YEAR = MediaContract.TVShows.PREMIERED + " ASC"; String SORT_BY_RATING = MediaContract.TVShows.RATING + " DESC"; String SORT_BY_DATE_ADDED = MediaContract.TVShows.DATEADDED + " DESC"; + String SORT_BY_LAST_PLAYED = MediaContract.TVShows.LASTPLAYED + " DESC"; String SORT_BY_NAME_IGNORE_ARTICLES = MediaDatabase.sortCommonTokens(MediaContract.TVShows.TITLE) + " ASC"; final int ID = 0; diff --git a/app/src/main/res/menu/movie_list.xml b/app/src/main/res/menu/movie_list.xml index 1c99516..4ec0d00 100644 --- a/app/src/main/res/menu/movie_list.xml +++ b/app/src/main/res/menu/movie_list.xml @@ -39,6 +39,10 @@ android:id="@+id/action_sort_by_date_added" android:title="@string/sort_by_date_added" app:showAsAction="never"/> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 52f87d6..004aff2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -318,6 +318,7 @@ By rating By length By date added + By last played Ignore prefixes