Support for Android Marshmallow's permission system

This commit is contained in:
Karim Abou Zeid 2015-08-18 23:47:23 +02:00
commit 6f3617650a
12 changed files with 305 additions and 176 deletions

View file

@ -77,29 +77,36 @@ public class AlbumLoader {
return new Album(id, albumName, artist, artistId, songCount, year);
}
@Nullable
public static Cursor makeAlbumCursor(@NonNull final Context context, final String selection, final String[] values) {
return makeAlbumCursor(context, selection, values, PreferenceUtil.getInstance(context).getAlbumSortOrder());
}
@Nullable
public static Cursor makeAlbumCursor(@NonNull final Context context, final String selection, final String[] values, final String sortOrder) {
return makeAlbumCursor(context, MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, selection, values, sortOrder);
}
@Nullable
public static Cursor makeAlbumCursor(@NonNull final Context context, @NonNull final Uri contentUri, final String selection, final String[] values, final String sortOrder) {
return context.getContentResolver().query(contentUri,
new String[]{
try {
return context.getContentResolver().query(contentUri,
new String[]{
/* 0 */
BaseColumns._ID,
BaseColumns._ID,
/* 1 */
AlbumColumns.ALBUM,
AlbumColumns.ALBUM,
/* 2 */
AlbumColumns.ARTIST,
AlbumColumns.ARTIST,
/* 3 */
AudioColumns.ARTIST_ID,
AudioColumns.ARTIST_ID,
/* 4 */
AlbumColumns.NUMBER_OF_SONGS,
AlbumColumns.NUMBER_OF_SONGS,
/* 5 */
AlbumColumns.FIRST_YEAR,
}, selection, values, sortOrder);
AlbumColumns.FIRST_YEAR,
}, selection, values, sortOrder);
} catch (SecurityException e) {
return null;
}
}
}

View file

@ -21,11 +21,15 @@ public class ArtistAlbumLoader {
}
public static Cursor makeArtistAlbumCursor(@NonNull final Context context, final int artistId) {
return AlbumLoader.makeAlbumCursor(context,
MediaStore.Audio.Artists.Albums.getContentUri("external", artistId),
null,
null,
PreferenceUtil.getInstance(context).getArtistAlbumSortOrder()
);
try {
return AlbumLoader.makeAlbumCursor(context,
MediaStore.Audio.Artists.Albums.getContentUri("external", artistId),
null,
null,
PreferenceUtil.getInstance(context).getArtistAlbumSortOrder()
);
} catch (SecurityException e) {
return null;
}
}
}

View file

@ -74,17 +74,22 @@ public class ArtistLoader {
return new Artist(id, artistName, albumCount, songCount);
}
@Nullable
public static Cursor makeArtistCursor(@NonNull final Context context, final String selection, final String[] values) {
return context.getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
new String[]{
try {
return context.getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
new String[]{
/* 0 */
BaseColumns._ID,
BaseColumns._ID,
/* 1 */
ArtistColumns.ARTIST,
ArtistColumns.ARTIST,
/* 2 */
ArtistColumns.NUMBER_OF_ALBUMS,
ArtistColumns.NUMBER_OF_ALBUMS,
/* 3 */
ArtistColumns.NUMBER_OF_TRACKS
}, selection, values, PreferenceUtil.getInstance(context).getArtistSortOrder());
ArtistColumns.NUMBER_OF_TRACKS
}, selection, values, PreferenceUtil.getInstance(context).getArtistSortOrder());
} catch (SecurityException e) {
return null;
}
}
}

View file

@ -21,13 +21,17 @@ public class ArtistSongLoader {
}
public static Cursor makeArtistSongCursor(@NonNull final Context context, final int artistId) {
return SongLoader.makeSongCursor(
context,
MediaStore.Audio.AudioColumns.ARTIST_ID + "=?",
new String[]{
String.valueOf(artistId)
},
PreferenceUtil.getInstance(context).getArtistSongSortOrder()
);
try {
return SongLoader.makeSongCursor(
context,
MediaStore.Audio.AudioColumns.ARTIST_ID + "=?",
new String[]{
String.valueOf(artistId)
},
PreferenceUtil.getInstance(context).getArtistSongSortOrder()
);
} catch (SecurityException e) {
return null;
}
}
}

View file

@ -75,13 +75,18 @@ public class PlaylistLoader {
return new Playlist(id, name);
}
@Nullable
public static Cursor makePlaylistCursor(@NonNull final Context context, final String selection, final String[] values) {
return context.getContentResolver().query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,
new String[]{
try {
return context.getContentResolver().query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,
new String[]{
/* 0 */
BaseColumns._ID,
BaseColumns._ID,
/* 1 */
PlaylistsColumns.NAME
}, selection, values, MediaStore.Audio.Playlists.DEFAULT_SORT_ORDER);
PlaylistsColumns.NAME
}, selection, values, MediaStore.Audio.Playlists.DEFAULT_SORT_ORDER);
} catch (SecurityException e) {
return null;
}
}
}

View file

@ -45,30 +45,34 @@ public class PlaylistSongLoader {
}
public static Cursor makePlaylistSongCursor(@NonNull final Context context, final int playlistId) {
return context.getContentResolver().query(
MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId),
new String[]{
try {
return context.getContentResolver().query(
MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId),
new String[]{
/* 0 */
MediaStore.Audio.Playlists.Members.AUDIO_ID,
MediaStore.Audio.Playlists.Members.AUDIO_ID,
/* 1 */
AudioColumns.TITLE,
AudioColumns.TITLE,
/* 2 */
AudioColumns.ARTIST,
AudioColumns.ARTIST,
/* 3 */
AudioColumns.ALBUM,
AudioColumns.ALBUM,
/* 4 */
AudioColumns.DURATION,
AudioColumns.DURATION,
/* 5 */
AudioColumns.TRACK,
AudioColumns.TRACK,
/* 6 */
AudioColumns.ALBUM_ID,
AudioColumns.ALBUM_ID,
/* 7 */
AudioColumns.ARTIST_ID,
AudioColumns.ARTIST_ID,
/* 8 */
AudioColumns.DATA,
AudioColumns.DATA,
/* 9 */
MediaStore.Audio.Playlists.Members._ID
}, SongLoader.BASE_SELECTION, null,
MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER);
MediaStore.Audio.Playlists.Members._ID
}, SongLoader.BASE_SELECTION, null,
MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER);
} catch (SecurityException e) {
return null;
}
}
}

View file

@ -13,6 +13,8 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
import java.util.ArrayList;
import hugo.weaving.DebugLog;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
@ -77,36 +79,43 @@ public class SongLoader {
return new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, data);
}
@Nullable
public static Cursor makeSongCursor(@NonNull final Context context, final String selection, final String[] values) {
return makeSongCursor(context, selection, values, PreferenceUtil.getInstance(context).getSongSortOrder());
}
@DebugLog
@Nullable
public static Cursor makeSongCursor(@NonNull final Context context, @Nullable final String selection, final String[] values, final String sortOrder) {
String baseSelection = BASE_SELECTION;
if (selection != null && !selection.trim().equals("")) {
baseSelection += " AND " + selection;
}
return context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
try {
return context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
/* 0 */
BaseColumns._ID,
BaseColumns._ID,
/* 1 */
AudioColumns.TITLE,
AudioColumns.TITLE,
/* 2 */
AudioColumns.ARTIST,
AudioColumns.ARTIST,
/* 3 */
AudioColumns.ALBUM,
AudioColumns.ALBUM,
/* 4 */
AudioColumns.DURATION,
AudioColumns.DURATION,
/* 5 */
AudioColumns.TRACK,
AudioColumns.TRACK,
/* 6 */
AudioColumns.ARTIST_ID,
AudioColumns.ARTIST_ID,
/* 7 */
AudioColumns.ALBUM_ID,
AudioColumns.ALBUM_ID,
/* 8 */
AudioColumns.DATA
}, baseSelection, values, sortOrder);
AudioColumns.DATA
}, baseSelection, values, sortOrder);
} catch (SecurityException e) {
return null;
}
}
}