From bd9c75787d69463765a9ea9bb44553e62dad23bb Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sat, 16 Dec 2017 17:44:15 +0100 Subject: [PATCH] Fix crash related to genre tab --- .../gramophone/loader/GenreLoader.java | 52 ++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/GenreLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/GenreLoader.java index 4c552761..6477c399 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/GenreLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/GenreLoader.java @@ -19,20 +19,7 @@ public class GenreLoader { @NonNull public static ArrayList getAllGenres(@NonNull final Context context) { - final String[] projection = new String[]{ - Genres._ID, - Genres.NAME - }; - // Genres that actually have songs - final String selection = Genres._ID + " IN" + - " (SELECT " + Genres.Members.GENRE_ID + " FROM audio_genres_map WHERE " + Genres.Members.AUDIO_ID + " IN" + - " (SELECT " + Genres._ID + " FROM audio_meta WHERE " + SongLoader.BASE_SELECTION + "))"; - - final Cursor cursor = context.getContentResolver().query( - Genres.EXTERNAL_CONTENT_URI, - projection, selection, null, PreferenceUtil.getInstance(context).getGenreSortOrder()); - - return getGenresFromCursor(context, cursor); + return getGenresFromCursor(context, makeGenreCursor(context)); } @NonNull @@ -43,11 +30,7 @@ public class GenreLoader { return getSongsWithNoGenre(context); } - final Cursor cursor = context.getContentResolver().query( - Genres.Members.getContentUri("external", genreId), - SongLoader.BASE_PROJECTION, SongLoader.BASE_SELECTION, null, null); - - return SongLoader.getSongs(cursor); + return SongLoader.getSongs(makeGenreSongCursor(context, genreId)); } @NonNull @@ -107,4 +90,35 @@ public class GenreLoader { return null; } } + + @Nullable + private static Cursor makeGenreSongCursor(@NonNull final Context context, int genreId) { + try { + return context.getContentResolver().query( + Genres.Members.getContentUri("external", genreId), + SongLoader.BASE_PROJECTION, SongLoader.BASE_SELECTION, null, PreferenceUtil.getInstance(context).getSongSortOrder()); + } catch (SecurityException e) { + return null; + } + } + + @Nullable + private static Cursor makeGenreCursor(@NonNull final Context context) { + final String[] projection = new String[]{ + Genres._ID, + Genres.NAME + }; + // Genres that actually have songs + final String selection = Genres._ID + " IN" + + " (SELECT " + Genres.Members.GENRE_ID + " FROM audio_genres_map WHERE " + Genres.Members.AUDIO_ID + " IN" + + " (SELECT " + Genres._ID + " FROM audio_meta WHERE " + SongLoader.BASE_SELECTION + "))"; + + try { + return context.getContentResolver().query( + Genres.EXTERNAL_CONTENT_URI, + projection, selection, null, PreferenceUtil.getInstance(context).getGenreSortOrder()); + } catch (SecurityException e) { + return null; + } + } }