diff --git a/app/src/main/java/com/simplecity/amp_library/utils/DataManager.java b/app/src/main/java/com/simplecity/amp_library/utils/DataManager.java index 57c793f61..c1ac89e20 100644 --- a/app/src/main/java/com/simplecity/amp_library/utils/DataManager.java +++ b/app/src/main/java/com/simplecity/amp_library/utils/DataManager.java @@ -1,5 +1,11 @@ package com.simplecity.amp_library.utils; +import android.annotation.SuppressLint; +import android.database.ContentObserver; +import android.net.Uri; +import android.os.Handler; +import android.os.Looper; +import android.provider.MediaStore; import com.annimon.stream.Optional; import com.annimon.stream.Stream; import com.annimon.stream.function.Predicate; @@ -17,6 +23,8 @@ import com.squareup.sqlbrite2.SqlBrite; import io.reactivex.Observable; import io.reactivex.ObservableTransformer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.Nullable; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import java.util.ArrayList; @@ -67,6 +75,26 @@ public static DataManager getInstance() { private DataManager() { + ShuttleApplication.getInstance() + .getContentResolver() + .registerContentObserver(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, true, new ContentObserver(new Handler(Looper.getMainLooper())) { + @Override + public void onChange(boolean selfChange) { + onChange(selfChange, null); + } + + @SuppressLint("CheckResult") + @Override + public void onChange(boolean selfChange, @Nullable Uri uri) { + SqlBriteUtils.createObservableList(ShuttleApplication.getInstance(), Playlist::new, Playlist.getQuery()) + .first(Collections.emptyList()) + .subscribeOn(AndroidSchedulers.mainThread()) + .subscribe( + playlists -> playlistsRelay.accept(playlists), + throwable -> LogUtils.logException(TAG, "Failed to update playlist relay", throwable) + ); + } + }); } public Observable> getAllSongsRelay() { diff --git a/app/src/main/java/com/simplecity/amp_library/utils/PlaylistUtils.java b/app/src/main/java/com/simplecity/amp_library/utils/PlaylistUtils.java index 2ee0c7055..e15b3a287 100644 --- a/app/src/main/java/com/simplecity/amp_library/utils/PlaylistUtils.java +++ b/app/src/main/java/com/simplecity/amp_library/utils/PlaylistUtils.java @@ -237,12 +237,14 @@ private static Completable createPlaylistMenu(SubMenu subMenu, boolean autoUpdat .getPlaylistsRelay() .take(autoUpdate ? Long.MAX_VALUE : 1) .doOnNext(playlists -> { - subMenu.clear(); - subMenu.add(0, MediaManager.Defs.NEW_PLAYLIST, 0, R.string.new_playlist); - for (Playlist playlist : playlists) { - final Intent intent = new Intent(); - intent.putExtra(ARG_PLAYLIST, playlist); - subMenu.add(0, MediaManager.Defs.PLAYLIST_SELECTED, 0, playlist.name).setIntent(intent); + if (subMenu != null) { + subMenu.clear(); + subMenu.add(0, MediaManager.Defs.NEW_PLAYLIST, 0, R.string.new_playlist); + for (Playlist playlist : playlists) { + final Intent intent = new Intent(); + intent.putExtra(ARG_PLAYLIST, playlist); + subMenu.add(0, MediaManager.Defs.PLAYLIST_SELECTED, 0, playlist.name).setIntent(intent); + } } }) .ignoreElements()