From 165fdcda7aba52c1deb1d55ca9274450d3c59d03 Mon Sep 17 00:00:00 2001 From: Eugene Cheung Date: Fri, 1 Sep 2017 18:41:11 -0400 Subject: [PATCH] Add menu actions to playlist detail activity --- .../ui/activities/PlaylistDetailActivity.java | 37 +++++++++++++------ .../gramophone/util/PlaylistsUtil.java | 24 +++++++++++- .../main/res/menu/menu_playlist_detail.xml | 22 ++++++++--- app/src/main/res/values/strings.xml | 1 + 4 files changed, 65 insertions(+), 19 deletions(-) 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 00ba0454..df5b332e 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!]]>