diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java
index 641a63a1..20d3b021 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java
@@ -23,10 +23,11 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.song.PlaylistSongAdapter;
import com.kabouzeid.gramophone.adapter.song.OrderablePlaylistSongAdapter;
import com.kabouzeid.gramophone.adapter.song.SongAdapter;
-import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
+import com.kabouzeid.gramophone.helper.menu.PlaylistMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.interfaces.LoaderIds;
+import com.kabouzeid.gramophone.loader.PlaylistLoader;
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader;
import com.kabouzeid.gramophone.model.AbsCustomPlaylist;
@@ -34,7 +35,6 @@ import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.PlaylistSong;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
-import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.ViewUtil;
@@ -84,7 +84,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
setUpRecyclerView();
- setUpToolBar();
+ setUpToolbar();
getSupportLoaderManager().initLoader(LOADER_ID, null, this);
}
@@ -130,12 +130,17 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
});
}
- private void setUpToolBar() {
+ private void setUpToolbar() {
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar);
//noinspection ConstantConditions
- getSupportActionBar().setTitle(playlist.name);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ setToolbarTitle(playlist.name);
+ }
+
+ private void setToolbarTitle(String title) {
+ //noinspection ConstantConditions
+ getSupportActionBar().setTitle(title);
}
@Override
@@ -148,20 +153,14 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
switch (id) {
- case R.id.action_sleep_timer:
- new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER");
- return true;
case R.id.action_shuffle_playlist:
MusicPlayerRemote.openAndShuffleQueue(adapter.getDataSet(), true);
return true;
- case R.id.action_equalizer:
- NavigationUtil.openEqualizer(this);
- return true;
case android.R.id.home:
onBackPressed();
return true;
}
- return super.onOptionsItemSelected(item);
+ return PlaylistMenuHelper.handleMenuClick(this, playlist, item);
}
@NonNull
@@ -188,6 +187,20 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
+
+ // Playlist deleted
+ if (!PlaylistsUtil.doesPlaylistExist(this, playlist.id)) {
+ onBackPressed();
+ return;
+ }
+
+ // Playlist renamed
+ final String playlistName = PlaylistsUtil.getNameForPlaylist(this, playlist.id);
+ if (!playlistName.equals(playlist.name)) {
+ playlist = PlaylistLoader.getPlaylist(this, playlist.id);
+ setToolbarTitle(playlist.name);
+ }
+
getSupportLoaderManager().restartLoader(LOADER_ID, null, this);
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java
index 0e1f83f3..bb143f12 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java
@@ -30,6 +30,23 @@ import static android.provider.MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
*/
public class PlaylistsUtil {
+ public static boolean doesPlaylistExist(@NonNull final Context context, final int playlistId) {
+ if (playlistId == -1) {
+ return false;
+ }
+
+ Cursor cursor = context.getContentResolver().query(
+ MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId),
+ new String[]{}, null, null, null);
+
+ if (cursor == null || cursor.getCount() == 0) {
+ return false;
+ }
+
+ cursor.close();
+ return true;
+ }
+
public static int createPlaylist(@NonNull final Context context, @Nullable final String name) {
int id = -1;
if (name != null && name.length() > 0) {
@@ -50,8 +67,12 @@ public class PlaylistsUtil {
id = Integer.parseInt(uri.getLastPathSegment());
}
} else {
+ // Playlist exists
if (cursor.moveToFirst()) {
- id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Playlists._ID));
+ Toast.makeText(context, context.getResources().getString(
+ R.string.playlist_exists, name), Toast.LENGTH_SHORT).show();
+ cursor.close();
+ return -1;
}
}
if (cursor != null) {
@@ -79,6 +100,7 @@ public class PlaylistsUtil {
selection.append(")");
try {
context.getContentResolver().delete(EXTERNAL_CONTENT_URI, selection.toString(), null);
+ context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
} catch (SecurityException ignored) {
}
}
diff --git a/app/src/main/res/menu/menu_playlist_detail.xml b/app/src/main/res/menu/menu_playlist_detail.xml
index e74968f6..5f655d63 100644
--- a/app/src/main/res/menu/menu_playlist_detail.xml
+++ b/app/src/main/res/menu/menu_playlist_detail.xml
@@ -10,14 +10,24 @@
app:showAsAction="ifRoom" />
-
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3b30f72e..3968e48b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -71,6 +71,7 @@
Inserted %1$d songs into the playlist %2$s.
Created playlist %1$s.
Deleted %1$d songs.
+ Playlist %1$s already exists.
Couldn\u2019t create playlist.
%1$s?]]>
%1$s? This can\u2019t be undone!]]>