Support for Android Marshmallow's permission system
This commit is contained in:
parent
193f716029
commit
6f3617650a
12 changed files with 305 additions and 176 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue