package com.architjn.acjmusicplayer.utils; import android.content.Context; import android.database.Cursor; import android.provider.MediaStore; import com.architjn.acjmusicplayer.utils.items.Album; import com.architjn.acjmusicplayer.utils.items.Artist; import com.architjn.acjmusicplayer.utils.items.Search; import com.architjn.acjmusicplayer.utils.items.Song; import java.util.ArrayList; /** * Created by architjn on 11/12/15. */ public class ListSongs { public static ArrayList<Album> getAlbumList(Context context) { final ArrayList<Album> albumList = new ArrayList<>(); System.gc(); final String orderBy = MediaStore.Audio.Albums.ALBUM; Cursor musicCursor = context.getContentResolver(). query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, null, null, orderBy); if (musicCursor != null && musicCursor.moveToFirst()) { //get columns int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ALBUM); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ARTIST); int numOfSongsColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.NUMBER_OF_SONGS); int albumArtColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ALBUM_ART); //add albums to list do { albumList.add(new Album(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getString(artistColumn), false, musicCursor.getString(albumArtColumn), musicCursor.getInt(numOfSongsColumn))); } while (musicCursor.moveToNext()); } return albumList; } public static Album getLastAddedAlbum(Context context) { System.gc(); final String where = MediaStore.Audio.Media.IS_MUSIC + "=1"; final String orderBy = MediaStore.Audio.Media.DATE_ADDED + " DESC LIMIT 1"; Cursor musicCursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, where, null, orderBy); if (musicCursor != null && musicCursor.moveToFirst()) { int albumColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM_ID); long albumId = musicCursor.getLong(albumColumn); return getAlbumFromId(context, albumId); } return null; } public static Album getAlbumFromId(Context context, long albumId) { System.gc(); final String where = MediaStore.Audio.Albums._ID + "='" + albumId + "'"; Cursor musicCursor = context.getContentResolver(). query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, where, null, null); if (musicCursor != null && musicCursor.moveToFirst()) { //get columns int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ALBUM); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ARTIST); int numOfSongsColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.NUMBER_OF_SONGS); int albumArtColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ALBUM_ART); //add albums to list return new Album(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getString(artistColumn), false, musicCursor.getString(albumArtColumn), musicCursor.getInt(numOfSongsColumn)); } return null; } public static ArrayList<Artist> getArtistList(Context context) { ArrayList<Artist> albumList = new ArrayList<>(); System.gc(); final String orderBy = MediaStore.Audio.Artists.ARTIST; Cursor musicCursor = context.getContentResolver(). query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, null, null, null, orderBy); if (musicCursor != null && musicCursor.moveToFirst()) { //get columns int titleColumn = musicCursor.getColumnIndex (MediaStore.Audio.Artists.ARTIST); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Artists._ID); int numOfAlbumsColumn = musicCursor.getColumnIndex (MediaStore.Audio.Artists.NUMBER_OF_ALBUMS); int numOfTracksColumn = musicCursor.getColumnIndex (MediaStore.Audio.Artists.NUMBER_OF_TRACKS); //add albums to list do { albumList.add(new Artist(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getInt(numOfAlbumsColumn), musicCursor.getInt(numOfTracksColumn))); } while (musicCursor.moveToNext()); } return albumList; } public static long getArtistIdFromName(Context context, String name) { System.gc(); String where = MediaStore.Audio.Artists.ARTIST + "='" + name + "'"; Cursor musicCursor = context.getContentResolver(). query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, null, where, null, null); if (musicCursor != null && musicCursor.moveToFirst()) { int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Artists._ID); return musicCursor.getLong(idColumn); } return 0; } public static ArrayList<Song> getSongList(Context context) { ArrayList<Song> songList = new ArrayList<>(); System.gc(); final String where = MediaStore.Audio.Media.IS_MUSIC + "=1"; final String orderBy = MediaStore.Audio.Media.TITLE; Cursor musicCursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, where, null, orderBy); if (musicCursor != null && musicCursor.moveToFirst()) { int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.TITLE); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.ARTIST); int pathColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATA); int albumIdColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM_ID); int albumColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM); int addedDateColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATE_ADDED); int songDurationColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATE_ADDED); do { songList.add(new Song(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getString(artistColumn), musicCursor.getString(pathColumn), false, musicCursor.getLong(albumIdColumn), musicCursor.getString(albumColumn), musicCursor.getLong(addedDateColumn), musicCursor.getLong(songDurationColumn))); } while (musicCursor.moveToNext()); } return songList; } public static Song getSong(Context context, long songId) { System.gc(); final String where = MediaStore.Audio.Media.IS_MUSIC + "=1 AND " + MediaStore.Audio.Media._ID + "='" + songId + "'"; Cursor musicCursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, where, null, null); if (musicCursor != null && musicCursor.moveToFirst()) { int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.TITLE); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.ARTIST); int pathColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATA); int albumIdColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM_ID); int albumColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM); int addedDateColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATE_ADDED); int songDurationColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATE_ADDED); return new Song(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getString(artistColumn), musicCursor.getString(pathColumn), false, musicCursor.getLong(albumIdColumn), musicCursor.getString(albumColumn), musicCursor.getLong(addedDateColumn), musicCursor.getLong(songDurationColumn)); } return null; } public static ArrayList<Album> getAlbumListOfArtist(Context context, long artistId) { final ArrayList<Album> albumList = new ArrayList<>(); System.gc(); Cursor musicCursor = context.getContentResolver(). query(MediaStore.Audio.Artists.Albums.getContentUri("external", artistId), null, null, null, MediaStore.Audio.Albums.DEFAULT_SORT_ORDER); if (musicCursor != null && musicCursor.moveToFirst()) { //get columns int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Artists.Albums.ALBUM); int idColumn = musicCursor.getColumnIndex (MediaStore.Audio.Artists._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Artists.Albums.ARTIST); int numOfSongsColumn = musicCursor.getColumnIndex (MediaStore.Audio.Albums.NUMBER_OF_SONGS_FOR_ARTIST); int albumArtColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ALBUM_ART); //add albums to list do { albumList.add(new Album(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getString(artistColumn), false, musicCursor.getString(albumArtColumn), musicCursor.getInt(numOfSongsColumn))); } while (musicCursor.moveToNext()); } musicCursor.close(); return albumList; } public static ArrayList<Song> getSongsListOfArtist(Context context, String artistName) { ArrayList<Song> songList = new ArrayList<>(); System.gc(); final String where = MediaStore.Audio.Media.IS_MUSIC + "=1 AND " + MediaStore.Audio.Media.ARTIST + "='" + artistName.replace("'", "''") + "'"; final String orderBy = MediaStore.Audio.Media.TITLE; Cursor musicCursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, where, null, orderBy); if (musicCursor != null && musicCursor.moveToFirst()) { int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.TITLE); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.ARTIST); int pathColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATA); int albumIdColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM_ID); int albumColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM); int addedDateColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATE_ADDED); int songDurationColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DURATION); do { songList.add(new Song(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getString(artistColumn), musicCursor.getString(pathColumn), false, musicCursor.getLong(albumIdColumn), musicCursor.getString(albumColumn), musicCursor.getLong(addedDateColumn), musicCursor.getLong(songDurationColumn))); } while (musicCursor.moveToNext()); } musicCursor.close(); return songList; } public static Search getSearchResults(Context context, String sQuery) { System.gc(); ArrayList<Song> songList = searchSong(context, sQuery); ArrayList<Album> albumList = searchAlbum(context, sQuery); ArrayList<Artist> artistList = searchArtist(context, sQuery); return new Search(songList, albumList, artistList); } private static ArrayList<Song> searchSong(Context context, String sQuery) { ArrayList<Song> songList = new ArrayList<>(); final String where = MediaStore.Audio.Media.IS_MUSIC + "=1 AND " + MediaStore.Audio.Media.TITLE + " LIKE '%" + sQuery.replace("'", "''") + "%'"; final String orderBy = MediaStore.Audio.Media.TITLE; Cursor musicCursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, where, null, orderBy); if (musicCursor != null && musicCursor.moveToFirst()) { int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.TITLE); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.ARTIST); int pathColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATA); int albumIdColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM_ID); int albumColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM); int addedDateColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATE_ADDED); int songDurationColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DURATION); do { songList.add(new Song(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getString(artistColumn), musicCursor.getString(pathColumn), false, musicCursor.getLong(albumIdColumn), musicCursor.getString(albumColumn), musicCursor.getLong(addedDateColumn), musicCursor.getLong(songDurationColumn))); } while (musicCursor.moveToNext()); } return songList; } private static ArrayList<Album> searchAlbum(Context context, String sQuery) { ArrayList<Album> albumList = new ArrayList<>(); final String where = MediaStore.Audio.Albums.ALBUM + " LIKE '%" + sQuery.replace("'", "''") + "%'"; Cursor musicCursor = context.getContentResolver(). query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, where, null, null); if (musicCursor != null && musicCursor.moveToFirst()) { //get columns int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ALBUM); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ARTIST); int numOfSongsColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.NUMBER_OF_SONGS); int albumArtColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Albums.ALBUM_ART); //add albums to list do { albumList.add(new Album(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getString(artistColumn), false, musicCursor.getString(albumArtColumn), musicCursor.getInt(numOfSongsColumn))); } while (musicCursor.moveToNext()); } return albumList; } private static ArrayList<Artist> searchArtist(Context context, String sQuery) { ArrayList<Artist> artistList = new ArrayList<>(); final String where = MediaStore.Audio.Artists.ARTIST + " LIKE '%" + sQuery.replace("'", "''") + "%'"; Cursor musicCursor = context.getContentResolver(). query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, null, where, null, null); if (musicCursor != null && musicCursor.moveToFirst()) { //get columns int titleColumn = musicCursor.getColumnIndex (MediaStore.Audio.Artists.ARTIST); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Artists._ID); int numOfAlbumsColumn = musicCursor.getColumnIndex (MediaStore.Audio.Artists.NUMBER_OF_ALBUMS); int numOfTracksColumn = musicCursor.getColumnIndex (MediaStore.Audio.Artists.NUMBER_OF_TRACKS); //add albums to list do { artistList.add(new Artist(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getInt(numOfAlbumsColumn), musicCursor.getInt(numOfTracksColumn))); } while (musicCursor.moveToNext()); } return artistList; } public static ArrayList<Song> getAlbumSongList(Context context, long albumId) { System.gc(); Cursor musicCursor; ArrayList<Song> songs = new ArrayList<>(); String where = MediaStore.Audio.Media.ALBUM_ID + "=?"; String whereVal[] = {String.valueOf(albumId)}; String orderBy = MediaStore.Audio.Media._ID; musicCursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, where, whereVal, orderBy); if (musicCursor != null && musicCursor.moveToFirst()) { int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.TITLE); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.ARTIST); int pathColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATA); int albumIdColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM_ID); int albumColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.ALBUM); int addedDateColumn = musicCursor.getColumnIndex (MediaStore.Audio.Media.DATE_ADDED); int albumSongDuration = musicCursor.getColumnIndex (MediaStore.Audio.Media.DURATION); do { songs.add(new Song(musicCursor.getLong(idColumn), musicCursor.getString(titleColumn), musicCursor.getString(artistColumn), musicCursor.getString(pathColumn), false, musicCursor.getLong(albumIdColumn), musicCursor.getString(albumColumn), musicCursor.getLong(addedDateColumn), musicCursor.getLong(albumSongDuration))); } while (musicCursor.moveToNext()); } return songs; } public static String getAlbumArt(Context context, long albumdId) { Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART}, MediaStore.Audio.Albums._ID + "=?", new String[]{String.valueOf(albumdId)}, null); String imagePath = ""; if (cursor != null && cursor.moveToFirst()) { imagePath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)); } return imagePath; } }