Search in sources :

Example 1 with Song

use of com.simplecity.amp_library.model.Song in project Shuttle by timusus.

the class DialogUtils method showBlacklistDialog.

public static void showBlacklistDialog(final Context context) {
    View view = LayoutInflater.from(context).inflate(R.layout.dialog_blacklist, null);
    final MaterialDialog.Builder builder = getBuilder(context).title(R.string.blacklist_title).customView(view, false).positiveText(R.string.close).negativeText(R.string.pref_title_clear_blacklist).onNegative((materialDialog, dialogAction) -> {
        BlacklistHelper.deleteAllSongs();
        Toast.makeText(context, R.string.blacklist_deleted, Toast.LENGTH_SHORT).show();
    });
    final Dialog dialog = builder.build();
    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(context));
    final BlacklistAdapter blacklistAdapter = new BlacklistAdapter();
    blacklistAdapter.setBlackListListener((v, position, song) -> {
        BlacklistHelper.deleteSong(song.id);
        if (blacklistAdapter.items.size() == 0) {
            dialog.dismiss();
        }
    });
    recyclerView.setAdapter(blacklistAdapter);
    Observable<List<Song>> songsObservable = SqlBriteUtils.createContinuousQuery(ShuttleApplication.getInstance(), Song::new, Song.getQuery()).first();
    Observable<List<BlacklistedSong>> blacklistObservable = BlacklistHelper.getBlacklistSongsObservable();
    Subscription subscription = Observable.combineLatest(songsObservable, blacklistObservable, (songs, blacklistedSongs) -> Stream.of(songs).filter(song -> Stream.of(blacklistedSongs).anyMatch(blacklistedSong -> blacklistedSong.songId == song.id)).sorted((a, b) -> ComparisonUtils.compare(a.albumArtistName, b.albumArtistName)).sorted((a, b) -> ComparisonUtils.compareInt(b.year, a.year)).sorted((a, b) -> ComparisonUtils.compareInt(a.track, b.track)).sorted((a, b) -> ComparisonUtils.compareInt(a.discNumber, b.discNumber)).sorted((a, b) -> ComparisonUtils.compare(a.albumName, b.albumName)).map(song -> (AdaptableItem) new BlacklistView(song)).collect(Collectors.toList())).observeOn(AndroidSchedulers.mainThread()).subscribe(blacklistViews -> {
        if (blacklistViews.size() == 0) {
            blacklistAdapter.addItem(0, new EmptyView(R.string.blacklist_empty));
        } else {
            blacklistAdapter.setItems(blacklistViews);
        }
    });
    dialog.setOnDismissListener(dialogInterface -> subscription.unsubscribe());
    dialog.show();
}
Also used : ContentProviderOperation(android.content.ContentProviderOperation) R(com.simplecity.amp_library.R) GridLayoutManager(android.support.v7.widget.GridLayoutManager) ProgressBar(android.widget.ProgressBar) AndroidSchedulers(rx.android.schedulers.AndroidSchedulers) PlayCountTable(com.simplecity.amp_library.sql.providers.PlayCountTable) Drawable(android.graphics.drawable.Drawable) FileProvider(android.support.v4.content.FileProvider) Song(com.simplecity.amp_library.model.Song) FileObject(com.simplecity.amp_library.model.FileObject) Schedulers(rx.schedulers.Schedulers) View(android.view.View) BlacklistView(com.simplecity.amp_library.ui.modelviews.BlacklistView) BlacklistAdapter(com.simplecity.amp_library.ui.adapters.BlacklistAdapter) SimpleTarget(com.bumptech.glide.request.target.SimpleTarget) WhitelistAdapter(com.simplecity.amp_library.ui.adapters.WhitelistAdapter) R.id.album(com.simplecity.amp_library.R.id.album) MainActivity(com.simplecity.amp_library.ui.activities.MainActivity) ColorView(com.simplecity.amp_library.ui.modelviews.ColorView) R.id.artist(com.simplecity.amp_library.R.id.artist) WhitelistHelper(com.simplecity.amp_library.sql.databases.WhitelistHelper) FileNotFoundException(java.io.FileNotFoundException) CustomColorPicker(com.simplecity.amp_library.ui.views.CustomColorPicker) List(java.util.List) TextView(android.widget.TextView) ColorAdapter(com.simplecity.amp_library.ui.adapters.ColorAdapter) Html(android.text.Html) LastFmArtist(com.simplecity.amp_library.lastfm.LastFmArtist) ListView(android.widget.ListView) AdaptableItem(com.simplecity.amp_library.model.AdaptableItem) Snackbar(android.support.design.widget.Snackbar) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) Call(retrofit2.Call) Subscription(rx.Subscription) NumberPicker(android.widget.NumberPicker) SettingsActivity(com.simplecity.amp_library.ui.activities.SettingsActivity) Context(android.content.Context) LastFmAlbum(com.simplecity.amp_library.lastfm.LastFmAlbum) Stream(com.annimon.stream.Stream) EmptyView(com.simplecity.amp_library.ui.modelviews.EmptyView) HttpClient(com.simplecity.amp_library.http.HttpClient) Dialog(android.app.Dialog) Intent(android.content.Intent) RemoteException(android.os.RemoteException) StringRes(android.support.annotation.StringRes) Response(retrofit2.Response) SettingsFragment(com.simplecity.amp_library.ui.fragments.SettingsFragment) ArrayList(java.util.ArrayList) Observable(rx.Observable) GlideAnimation(com.bumptech.glide.request.animation.GlideAnimation) WhitelistView(com.simplecity.amp_library.ui.modelviews.WhitelistView) Toast(android.widget.Toast) DiskCacheStrategy(com.bumptech.glide.load.engine.DiskCacheStrategy) BlacklistedSong(com.simplecity.amp_library.model.BlacklistedSong) SqlBriteUtils(com.simplecity.amp_library.sql.sqlbrite.SqlBriteUtils) Collectors(com.annimon.stream.Collectors) ComponentName(android.content.ComponentName) LayoutInflater(android.view.LayoutInflater) IntentCompat(android.support.v4.content.IntentCompat) FileOutputStream(java.io.FileOutputStream) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) IOException(java.io.IOException) File(java.io.File) OperationApplicationException(android.content.OperationApplicationException) Color(android.graphics.Color) RecyclerView(android.support.v7.widget.RecyclerView) ArrayAdapter(android.widget.ArrayAdapter) ShuttleApplication(com.simplecity.amp_library.ShuttleApplication) BlacklistHelper(com.simplecity.amp_library.sql.databases.BlacklistHelper) Glide(com.bumptech.glide.Glide) Callback(retrofit2.Callback) ScrollView(android.widget.ScrollView) Bitmap(android.graphics.Bitmap) Activity(android.app.Activity) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) View(android.view.View) BlacklistView(com.simplecity.amp_library.ui.modelviews.BlacklistView) ColorView(com.simplecity.amp_library.ui.modelviews.ColorView) TextView(android.widget.TextView) ListView(android.widget.ListView) EmptyView(com.simplecity.amp_library.ui.modelviews.EmptyView) WhitelistView(com.simplecity.amp_library.ui.modelviews.WhitelistView) RecyclerView(android.support.v7.widget.RecyclerView) ScrollView(android.widget.ScrollView) BlacklistAdapter(com.simplecity.amp_library.ui.adapters.BlacklistAdapter) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) Dialog(android.app.Dialog) RecyclerView(android.support.v7.widget.RecyclerView) List(java.util.List) ArrayList(java.util.ArrayList) BlacklistView(com.simplecity.amp_library.ui.modelviews.BlacklistView) Subscription(rx.Subscription) EmptyView(com.simplecity.amp_library.ui.modelviews.EmptyView)

Example 2 with Song

use of com.simplecity.amp_library.model.Song in project Shuttle by timusus.

the class ShuttleUtils method setRingtone.

/**
     * Method setRingtone.
     *
     * @param context context
     * @param song    Song
     */
public static void setRingtone(final Context context, final Song song) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (!Settings.System.canWrite(context)) {
            new AlertDialog.Builder(context).setTitle(R.string.dialog_title_set_ringtone).setMessage(R.string.dialog_message_set_ringtone).setPositiveButton(R.string.button_ok, (dialog, which) -> {
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                intent.setData(Uri.parse("package:" + ShuttleApplication.getInstance().getPackageName()));
                context.startActivity(intent);
            }).setNegativeButton(R.string.cancel, null).show();
            return;
        }
    }
    Observable.fromCallable(() -> {
        boolean success = false;
        final ContentResolver resolver = context.getContentResolver();
        // Set the flag in the database to mark this as a ringtone
        final Uri ringUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, song.id);
        try {
            final ContentValues values = new ContentValues(2);
            values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, "1");
            values.put(MediaStore.Audio.AudioColumns.IS_ALARM, "1");
            if (ringUri != null) {
                resolver.update(ringUri, values, null, null);
            }
        } catch (final UnsupportedOperationException ex) {
            // most likely the card just got unmounted
            Log.e(TAG, "couldn't set ringtone flag for song " + song);
            return false;
        }
        Query query = new Query.Builder().uri(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI).projection(new String[] { BaseColumns._ID, MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.TITLE }).selection(BaseColumns._ID + "=" + song.id).build();
        final Cursor cursor = SqlUtils.createQuery(context, query);
        try {
            if (cursor != null && cursor.getCount() == 1) {
                // Set the system setting to make this the current ringtone
                cursor.moveToFirst();
                if (ringUri != null) {
                    Settings.System.putString(resolver, Settings.System.RINGTONE, ringUri.toString());
                }
                success = true;
            }
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
        return success;
    }).map(success -> success ? context.getString(R.string.ringtone_set, song.name) : context.getString(R.string.ringtone_set_failed)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(message -> Toast.makeText(context, message, Toast.LENGTH_SHORT).show());
}
Also used : AlertDialog(android.app.AlertDialog) ContentValues(android.content.ContentValues) R(com.simplecity.amp_library.R) Context(android.content.Context) Stream(com.annimon.stream.Stream) Uri(android.net.Uri) AndroidSchedulers(rx.android.schedulers.AndroidSchedulers) Intent(android.content.Intent) PlayCountTable(com.simplecity.amp_library.sql.providers.PlayCountTable) Observable(rx.Observable) Song(com.simplecity.amp_library.model.Song) SuppressLint(android.annotation.SuppressLint) ContentResolver(android.content.ContentResolver) MediaStore(android.provider.MediaStore) Toast(android.widget.Toast) BaseFileObject(com.simplecity.amp_library.model.BaseFileObject) Schedulers(rx.schedulers.Schedulers) Settings(android.provider.Settings) Build(android.os.Build) PreferenceManager(android.preference.PreferenceManager) Log(android.util.Log) Cursor(android.database.Cursor) ConnectivityManager(android.net.ConnectivityManager) Collectors(com.annimon.stream.Collectors) AsyncTask(android.os.AsyncTask) BaseColumns(android.provider.BaseColumns) NetworkInfo(android.net.NetworkInfo) BuildConfig(com.simplecity.amp_library.BuildConfig) File(java.io.File) AlertDialog(android.app.AlertDialog) Query(com.simplecity.amp_library.model.Query) WifiManager(android.net.wifi.WifiManager) ShuttleApplication(com.simplecity.amp_library.ShuttleApplication) List(java.util.List) Config(com.simplecity.amp_library.constants.Config) SharedPreferences(android.content.SharedPreferences) Configuration(android.content.res.Configuration) ContentValues(android.content.ContentValues) SqlUtils(com.simplecity.amp_library.sql.SqlUtils) Activity(android.app.Activity) ContentUris(android.content.ContentUris) Query(com.simplecity.amp_library.model.Query) Intent(android.content.Intent) Cursor(android.database.Cursor) Uri(android.net.Uri) ContentResolver(android.content.ContentResolver)

Example 3 with Song

use of com.simplecity.amp_library.model.Song in project Shuttle by timusus.

the class Operators method songsToAlbums.

public static List<Album> songsToAlbums(List<Song> songs) {
    HashMap<Pair<Long, String>, Album> albumMap = new HashMap<>();
    for (Song song : songs) {
        //Create an album representing the album this song belongs to
        Album album = song.getAlbum();
        // We need to use the album id AND the albumArtistName as the key, to determine whether
        // two albums are the same. This is because it's possible that the user doesn't have
        // correct album tags for their songs. In that case, Android falls back to using the folder
        // name for the album. So all songs with no album name, which share a folder will end up with
        // the same album id. By using the albumArtistName in the key, we ensure that songs with the
        // same album id but different albumArtistNames are not considered to be part of the same album.
        Pair<Long, String> key = new Pair<>(album.id, album.albumArtistName);
        //Now check if there's already an equivalent album in our albumMap
        Album oldAlbum = albumMap.get(key);
        if (oldAlbum != null) {
            //Increment the number of songs.
            oldAlbum.numSongs++;
            //The number of discs is just the largest disc number for songs
            oldAlbum.numDiscs = Math.max(song.discNumber, oldAlbum.numDiscs);
            oldAlbum.songPlayCount += song.playCount;
            //Add any new artists
            Stream.of(album.artists).filter(artist -> !oldAlbum.artists.contains(artist)).forEach(artist -> oldAlbum.artists.add(artist));
            //Add new paths
            Stream.of(album.paths).filter(path -> !oldAlbum.paths.contains(path)).forEach(path -> oldAlbum.paths.add(path));
        } else {
            //Couldn't find an existing entry for this album. Add a new one.
            albumMap.put(key, album);
        }
    }
    return new ArrayList<>(albumMap.values());
}
Also used : Song(com.simplecity.amp_library.model.Song) List(java.util.List) Album(com.simplecity.amp_library.model.Album) Stream(com.annimon.stream.Stream) Pair(android.util.Pair) AlbumArtist(com.simplecity.amp_library.model.AlbumArtist) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Song(com.simplecity.amp_library.model.Song) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Album(com.simplecity.amp_library.model.Album) Pair(android.util.Pair)

Example 4 with Song

use of com.simplecity.amp_library.model.Song in project Shuttle by timusus.

the class PlaylistUtils method removeFromFavorites.

public static void removeFromFavorites(Context context) {
    Song song = MusicUtils.getSong();
    if (song == null) {
        return;
    }
    Observable.fromCallable(() -> {
        Playlist favoritesPlaylist = Playlist.favoritesPlaylist();
        if (favoritesPlaylist.id >= 0) {
            final Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", favoritesPlaylist.id);
            return context.getContentResolver().delete(uri, MediaStore.Audio.Playlists.Members.AUDIO_ID + "=" + song.id, null);
        }
        return 0;
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(numTracksAdded -> {
        if (numTracksAdded > 0) {
            Toast.makeText(context, context.getResources().getString(R.string.song_removed_from_favourites, song.name), Toast.LENGTH_SHORT).show();
            LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(MusicService.InternalIntents.FAVORITE_CHANGED));
        }
    });
}
Also used : Song(com.simplecity.amp_library.model.Song) Playlist(com.simplecity.amp_library.model.Playlist) Intent(android.content.Intent) Uri(android.net.Uri)

Example 5 with Song

use of com.simplecity.amp_library.model.Song in project Shuttle by timusus.

the class SearchActivity method refreshAdapterItems.

private void refreshAdapterItems() {
    subscriptions.add(DataManager.getInstance().getSongsRelay().first().map(songs -> {
        char[] prefix = filterString.toUpperCase().toCharArray();
        List<Album> albums = Operators.songsToAlbums(songs);
        Collections.sort(albums, Album::compareTo);
        List<AlbumArtist> albumArtists = Operators.albumsToAlbumArtists(albums);
        Collections.sort(albumArtists, AlbumArtist::compareTo);
        List<AdaptableItem> adaptableItems = Stream.of(albumArtists).filter(album -> album.name != null).map(albumArtist -> new SearchUtils.JaroWinklerObject<>(albumArtist, filterString, albumArtist.name)).filter(jaroWinklerObject -> jaroWinklerObject.score > SCORE_THRESHOLD || TextUtils.isEmpty(filterString)).sorted((a, b) -> a.object.compareTo(b.object)).sorted((a, b) -> Double.compare(b.score, a.score)).map(jaroWinklerObject -> jaroWinklerObject.object).map(albumArtist -> {
            AlbumArtistView albumArtistView = new AlbumArtistView(albumArtist, ViewType.ARTIST_LIST, requestManager);
            albumArtistView.setPrefix(prefixHighlighter, prefix);
            return (AdaptableItem) albumArtistView;
        }).collect(Collectors.toList());
        if (!adaptableItems.isEmpty()) {
            adaptableItems.add(0, artistsHeader);
        }
        List<AdaptableItem> albumItems = Stream.of(albums).filter(album -> album.name != null).map(album -> new SearchUtils.JaroWinklerObject<>(album, filterString, album.name, album.albumArtistName)).filter(jaroWinklerObject -> jaroWinklerObject.score > SCORE_THRESHOLD || TextUtils.isEmpty(filterString)).sorted((a, b) -> a.object.compareTo(b.object)).sorted((a, b) -> Double.compare(b.score, a.score)).map(jaroWinklerObject -> jaroWinklerObject.object).map(album -> {
            AlbumView albumView = new AlbumView(album, ViewType.ALBUM_LIST, requestManager);
            albumView.setPrefix(prefixHighlighter, prefix);
            return albumView;
        }).collect(Collectors.toList());
        if (!albumItems.isEmpty()) {
            albumItems.add(0, albumsHeader);
        }
        adaptableItems.addAll(albumItems);
        songs = Stream.of(songs).filter(song -> song.name != null).map(song -> new SearchUtils.JaroWinklerObject<>(song, filterString, song.name, song.albumName, song.artistName, song.albumArtistName)).filter(jaroWinklerObject -> jaroWinklerObject.score > SCORE_THRESHOLD || TextUtils.isEmpty(filterString)).sorted((a, b) -> a.object.compareTo(b.object)).sorted((a, b) -> Double.compare(b.score, a.score)).map(jaroWinklerObject -> jaroWinklerObject.object).collect(Collectors.toList());
        List<AdaptableItem> songItems = Stream.of(songs).map(song -> {
            SongView songView = new SongView(song, dummySelector, requestManager);
            songView.setPrefix(prefixHighlighter, prefix);
            return songView;
        }).collect(Collectors.toList());
        if (!songItems.isEmpty()) {
            songItems.add(0, songsHeader);
        }
        adaptableItems.addAll(songItems);
        return adaptableItems;
    }).observeOn(AndroidSchedulers.mainThread()).subscribe(adaptableItems -> {
        if (setItemsSubscription != null) {
            setItemsSubscription.unsubscribe();
        }
        setItemsSubscription = adapter.setItems(adaptableItems);
        recyclerView.scrollToPosition(0);
    }));
}
Also used : R(com.simplecity.amp_library.R) Bundle(android.os.Bundle) SongView(com.simplecity.amp_library.ui.modelviews.SongView) SearchView(android.support.v7.widget.SearchView) PlaylistUtils(com.simplecity.amp_library.utils.PlaylistUtils) WindowManager(android.view.WindowManager) AndroidSchedulers(rx.android.schedulers.AndroidSchedulers) Song(com.simplecity.amp_library.model.Song) RequestManager(com.bumptech.glide.RequestManager) Schedulers(rx.schedulers.Schedulers) View(android.view.View) SearchAdapter(com.simplecity.amp_library.ui.adapters.SearchAdapter) Header(com.simplecity.amp_library.model.Header) Playlist(com.simplecity.amp_library.model.Playlist) MenuItemCompat(android.support.v4.view.MenuItemCompat) SearchableInfo(android.app.SearchableInfo) PopupMenu(android.support.v7.widget.PopupMenu) SubMenu(android.view.SubMenu) SettingsManager(com.simplecity.amp_library.utils.SettingsManager) Serializable(java.io.Serializable) MusicUtils(com.simplecity.amp_library.utils.MusicUtils) List(java.util.List) AdaptableItem(com.simplecity.amp_library.model.AdaptableItem) SearchManager(android.app.SearchManager) Subscription(rx.Subscription) Context(android.content.Context) Album(com.simplecity.amp_library.model.Album) Stream(com.annimon.stream.Stream) Intent(android.content.Intent) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) Observable(rx.Observable) AlbumArtistView(com.simplecity.amp_library.ui.modelviews.AlbumArtistView) SuppressLint(android.annotation.SuppressLint) PrefixHighlighter(com.simplecity.amp_library.format.PrefixHighlighter) ThemeUtils(com.simplecity.amp_library.utils.ThemeUtils) ColorUtils(com.simplecity.amp_library.utils.ColorUtils) Toast(android.widget.Toast) Menu(android.view.Menu) SystemBarTintManager(com.readystatesoftware.systembartint.SystemBarTintManager) ActionBar(android.support.v7.app.ActionBar) ShuttleUtils(com.simplecity.amp_library.utils.ShuttleUtils) FastScrollRecyclerView(com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView) TaggerDialog(com.simplecity.amp_library.tagger.TaggerDialog) ViewType(com.simplecity.amp_library.ui.modelviews.ViewType) Collectors(com.annimon.stream.Collectors) SearchUtils(com.simplecity.amp_library.utils.SearchUtils) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) TextUtils(android.text.TextUtils) AlbumView(com.simplecity.amp_library.ui.modelviews.AlbumView) FLAG_TRANSLUCENT_STATUS(android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) DialogUtils(com.simplecity.amp_library.utils.DialogUtils) TimeUnit(java.util.concurrent.TimeUnit) CompositeSubscription(rx.subscriptions.CompositeSubscription) RecyclerView(android.support.v7.widget.RecyclerView) Glide(com.bumptech.glide.Glide) Toolbar(android.support.v7.widget.Toolbar) MultiSelector(com.bignerdranch.android.multiselector.MultiSelector) DataManager(com.simplecity.amp_library.utils.DataManager) RxSearchView(com.jakewharton.rxbinding.support.v7.widget.RxSearchView) AlbumArtist(com.simplecity.amp_library.model.AlbumArtist) SearchHeaderView(com.simplecity.amp_library.ui.modelviews.SearchHeaderView) Operators(com.simplecity.amp_library.utils.Operators) Activity(android.app.Activity) Collections(java.util.Collections) SongView(com.simplecity.amp_library.ui.modelviews.SongView) AlbumArtistView(com.simplecity.amp_library.ui.modelviews.AlbumArtistView) AlbumView(com.simplecity.amp_library.ui.modelviews.AlbumView) AdaptableItem(com.simplecity.amp_library.model.AdaptableItem) List(java.util.List) ArrayList(java.util.ArrayList)

Aggregations

Song (com.simplecity.amp_library.model.Song)26 List (java.util.List)14 Intent (android.content.Intent)13 Stream (com.annimon.stream.Stream)12 Album (com.simplecity.amp_library.model.Album)12 Context (android.content.Context)11 ArrayList (java.util.ArrayList)11 Observable (rx.Observable)11 Toast (android.widget.Toast)10 Collectors (com.annimon.stream.Collectors)10 R (com.simplecity.amp_library.R)10 AndroidSchedulers (rx.android.schedulers.AndroidSchedulers)10 Schedulers (rx.schedulers.Schedulers)10 Uri (android.net.Uri)9 AlbumArtist (com.simplecity.amp_library.model.AlbumArtist)9 Playlist (com.simplecity.amp_library.model.Playlist)9 ContentUris (android.content.ContentUris)7 MediaStore (android.provider.MediaStore)7 View (android.view.View)7 Glide (com.bumptech.glide.Glide)7