From 90cc5eb4e3cc768551b4f78dd59be82ab452df05 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Thu, 19 Mar 2015 16:06:26 +0100 Subject: [PATCH] Option to rename playlists --- .../adapter/PlayingQueueAdapter.java | 2 +- .../gramophone/adapter/PlaylistAdapter.java | 60 +++++++++---------- .../adapter/songadapter/AlbumSongAdapter.java | 3 +- .../songadapter/ArtistSongAdapter.java | 2 +- .../songadapter/PlaylistSongAdapter.java | 5 +- .../adapter/songadapter/SongAdapter.java | 2 +- .../helper/CreatePlaylistDialogHelper.java | 2 +- .../helper/DeletePlaylistDialogHelper.java | 33 ++++++++++ .../helper/RenamePlaylistDialogHelper.java | 50 ++++++++++++++++ .../activities/MusicControllerActivity.java | 2 +- .../gramophone/util/PlaylistsUtil.java | 10 ++++ ...te_playlist.xml => dialog_empty_frame.xml} | 0 .../main/res/layout/item_list_playlist.xml | 12 +++- ...g.xml => menu_item_playing_queue_song.xml} | 0 app/src/main/res/menu/menu_item_playlist.xml | 10 ++++ ...t_song.xml => menu_item_playlist_song.xml} | 0 .../{menu_song.xml => menu_item_song.xml} | 0 ...tle_playing.xml => menu_music_playing.xml} | 0 .../main/res/menu/menu_playlist_detail.xml | 30 +++++----- app/src/main/res/menu/menu_tab_test.xml | 9 --- app/src/main/res/values/strings.xml | 1 + 21 files changed, 165 insertions(+), 68 deletions(-) create mode 100644 app/src/main/java/com/kabouzeid/gramophone/helper/DeletePlaylistDialogHelper.java create mode 100644 app/src/main/java/com/kabouzeid/gramophone/helper/RenamePlaylistDialogHelper.java rename app/src/main/res/layout/{dialog_create_playlist.xml => dialog_empty_frame.xml} (100%) rename app/src/main/res/menu/{menu_playing_queue_song.xml => menu_item_playing_queue_song.xml} (100%) create mode 100644 app/src/main/res/menu/menu_item_playlist.xml rename app/src/main/res/menu/{menu_playlist_song.xml => menu_item_playlist_song.xml} (100%) rename app/src/main/res/menu/{menu_song.xml => menu_item_song.xml} (100%) rename app/src/main/res/menu/{menu_title_playing.xml => menu_music_playing.xml} (100%) delete mode 100644 app/src/main/res/menu/menu_tab_test.xml diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java index 3b198a18..e5bd506f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java @@ -59,7 +59,7 @@ public class PlayingQueueAdapter extends ArrayAdapter { @Override public void onClick(final View v) { PopupMenu popupMenu = new PopupMenu(activity, v); - popupMenu.inflate(R.menu.menu_playing_queue_song); + popupMenu.inflate(R.menu.menu_item_playing_queue_song); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java index ccfd5fc5..fd2d03c4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java @@ -4,18 +4,19 @@ import android.app.Activity; import android.support.v4.util.Pair; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.PopupMenu; import android.widget.TextView; -import com.afollestad.materialdialogs.MaterialDialog; -import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.model.DataBaseChangedEvent; +import com.kabouzeid.gramophone.helper.DeletePlaylistDialogHelper; +import com.kabouzeid.gramophone.helper.RenamePlaylistDialogHelper; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; import com.kabouzeid.gramophone.util.NavigationUtil; -import com.kabouzeid.gramophone.util.PlaylistsUtil; import java.util.List; @@ -48,14 +49,37 @@ public class PlaylistAdapter extends RecyclerView.Adapter { @Override public void onClick(View v) { PopupMenu popupMenu = new PopupMenu(activity, v); - popupMenu.inflate(R.menu.menu_song); + popupMenu.inflate(R.menu.menu_item_song); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java index 6a46a03c..c25e8c4d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java @@ -19,8 +19,6 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.SongDetailDialogHelper; import com.kabouzeid.gramophone.loader.SongFilePathLoader; import com.kabouzeid.gramophone.misc.AppKeys; -import com.kabouzeid.gramophone.misc.DragSortRecycler; -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.AbsFabActivity; @@ -31,7 +29,6 @@ import com.kabouzeid.gramophone.util.PlaylistsUtil; import com.squareup.picasso.Picasso; import java.io.File; -import java.util.ArrayList; import java.util.List; /** @@ -95,7 +92,7 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter { @Override public void onClick(View v) { PopupMenu popupMenu = new PopupMenu(activity, v); - popupMenu.inflate(R.menu.menu_song); + popupMenu.inflate(R.menu.menu_item_song); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/CreatePlaylistDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/CreatePlaylistDialogHelper.java index a96ae0df..7b0dcd7b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/CreatePlaylistDialogHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/CreatePlaylistDialogHelper.java @@ -26,7 +26,7 @@ public class CreatePlaylistDialogHelper { public static MaterialDialog getDialog(final Context context, final List songs) { final EditText editText = new EditText(context); - ViewGroup layout = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.dialog_create_playlist, null); + ViewGroup layout = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.dialog_empty_frame, null); if (editText.getParent() != null) {((ViewGroup) editText.getParent()).removeView(editText);} layout.addView(editText, new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/DeletePlaylistDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/DeletePlaylistDialogHelper.java new file mode 100644 index 00000000..46a03d5d --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/DeletePlaylistDialogHelper.java @@ -0,0 +1,33 @@ +package com.kabouzeid.gramophone.helper; + +import android.content.Context; + +import com.afollestad.materialdialogs.MaterialDialog; +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.util.PlaylistsUtil; + +/** + * Created by karim on 19.03.15. + */ +public class DeletePlaylistDialogHelper { + public static MaterialDialog getDialog(final Context context, final int playlistId){ + return new MaterialDialog.Builder(context) + .title(context.getResources().getString(R.string.delete_playlist) + PlaylistsUtil.getNameForPlaylist(context, playlistId)) + .positiveText(context.getResources().getString(R.string.ok)) + .negativeText(context.getResources().getString(R.string.cancel)) + .callback(new MaterialDialog.ButtonCallback() { + @Override + public void onPositive(MaterialDialog dialog) { + super.onPositive(dialog); + dialog.dismiss(); + PlaylistsUtil.deletePlaylist(context, playlistId); + } + + @Override + public void onNegative(MaterialDialog dialog) { + super.onNegative(dialog); + dialog.dismiss(); + } + }).build(); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/RenamePlaylistDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/RenamePlaylistDialogHelper.java new file mode 100644 index 00000000..28ef06c9 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/RenamePlaylistDialogHelper.java @@ -0,0 +1,50 @@ +package com.kabouzeid.gramophone.helper; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.LinearLayout; + +import com.afollestad.materialdialogs.MaterialDialog; +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.util.PlaylistsUtil; + +/** + * Created by karim on 19.03.15. + */ +public class RenamePlaylistDialogHelper { + public static MaterialDialog getDialog(final Context context, final int playlistId) { + final EditText editText = new EditText(context); + ViewGroup layout = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.dialog_empty_frame, null); + if (editText.getParent() != null) { + ((ViewGroup) editText.getParent()).removeView(editText); + } + editText.setText(PlaylistsUtil.getNameForPlaylist(context, playlistId)); + layout.addView(editText, new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); + return new MaterialDialog.Builder(context) + .title(context.getResources().getString(R.string.rename_playlist)) + .customView(layout, false) + .positiveText(context.getResources().getString(R.string.ok)) + .negativeText(context.getResources().getString(R.string.cancel)) + .callback(new MaterialDialog.ButtonCallback() { + @Override + public void onPositive(MaterialDialog dialog) { + super.onPositive(dialog); + final String playlistName = editText.getText().toString(); + if (!playlistName.trim().equals("")) { + PlaylistsUtil.renamePlaylist(context, playlistId, playlistName); + } + } + + @Override + public void onNegative(MaterialDialog dialog) { + super.onNegative(dialog); + dialog.dismiss(); + } + } + ) + .build(); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java index 4a528957..21a857f7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java @@ -379,7 +379,7 @@ public class MusicControllerActivity extends AbsFabActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_title_playing, menu); + getMenuInflater().inflate(R.menu.menu_music_playing, menu); return true; } 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 54210edb..d82caef4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java @@ -165,6 +165,16 @@ public class PlaylistsUtil { playlistId, from, to); } + public static void renamePlaylist(final Context context, final int id, final String newName) { + ContentValues contentValues = new ContentValues(); + contentValues.put(MediaStore.Audio.PlaylistsColumns.NAME, newName); + context.getContentResolver().update(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, + contentValues, + MediaStore.Audio.Playlists._ID + "=?", + new String[]{ String.valueOf(id) }); + App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); + } + public static String getNameForPlaylist(final Context context, final int id) { Cursor cursor = context.getContentResolver().query( MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, diff --git a/app/src/main/res/layout/dialog_create_playlist.xml b/app/src/main/res/layout/dialog_empty_frame.xml similarity index 100% rename from app/src/main/res/layout/dialog_create_playlist.xml rename to app/src/main/res/layout/dialog_empty_frame.xml diff --git a/app/src/main/res/layout/item_list_playlist.xml b/app/src/main/res/layout/item_list_playlist.xml index fa26b08a..dcca1f98 100644 --- a/app/src/main/res/layout/item_list_playlist.xml +++ b/app/src/main/res/layout/item_list_playlist.xml @@ -5,8 +5,7 @@ android:layout_height="64dp" android:background="?rect_selector" android:orientation="horizontal" - android:paddingLeft="16dp" - android:paddingRight="16dp"> + android:paddingLeft="16dp"> + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_playing_queue_song.xml b/app/src/main/res/menu/menu_item_playing_queue_song.xml similarity index 100% rename from app/src/main/res/menu/menu_playing_queue_song.xml rename to app/src/main/res/menu/menu_item_playing_queue_song.xml diff --git a/app/src/main/res/menu/menu_item_playlist.xml b/app/src/main/res/menu/menu_item_playlist.xml new file mode 100644 index 00000000..dce20360 --- /dev/null +++ b/app/src/main/res/menu/menu_item_playlist.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_playlist_song.xml b/app/src/main/res/menu/menu_item_playlist_song.xml similarity index 100% rename from app/src/main/res/menu/menu_playlist_song.xml rename to app/src/main/res/menu/menu_item_playlist_song.xml diff --git a/app/src/main/res/menu/menu_song.xml b/app/src/main/res/menu/menu_item_song.xml similarity index 100% rename from app/src/main/res/menu/menu_song.xml rename to app/src/main/res/menu/menu_item_song.xml diff --git a/app/src/main/res/menu/menu_title_playing.xml b/app/src/main/res/menu/menu_music_playing.xml similarity index 100% rename from app/src/main/res/menu/menu_title_playing.xml rename to app/src/main/res/menu/menu_music_playing.xml diff --git a/app/src/main/res/menu/menu_playlist_detail.xml b/app/src/main/res/menu/menu_playlist_detail.xml index 41708f2c..f7caa816 100644 --- a/app/src/main/res/menu/menu_playlist_detail.xml +++ b/app/src/main/res/menu/menu_playlist_detail.xml @@ -2,19 +2,19 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity"> - - - - + + + diff --git a/app/src/main/res/menu/menu_tab_test.xml b/app/src/main/res/menu/menu_tab_test.xml deleted file mode 100644 index c4575efc..00000000 --- a/app/src/main/res/menu/menu_tab_test.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bb9ae8d7..a185220d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -84,5 +84,6 @@ Deleted playlist\u0020 Could not create playlist\u0020 Delete playlist\u0020 + Rename playlist\u0020