Option to rename playlists

This commit is contained in:
Karim Abou Zeid 2015-03-19 16:06:26 +01:00
commit 90cc5eb4e3
21 changed files with 165 additions and 68 deletions

View file

@ -59,7 +59,7 @@ public class PlayingQueueAdapter extends ArrayAdapter<Song> {
@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) {

View file

@ -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<PlaylistAdapter.ViewHo
return dataSet.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView playlistName;
private ImageView menu;
public ViewHolder(View itemView) {
super(itemView);
playlistName = (TextView) itemView.findViewById(R.id.playlist_name);
menu = (ImageView) itemView.findViewById(R.id.menu);
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(activity, view);
popupMenu.inflate(R.menu.menu_item_playlist);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_rename_playlist:
RenamePlaylistDialogHelper.getDialog(activity, dataSet.get(getAdapterPosition()).id).show();
return true;
case R.id.action_delete_playlist:
DeletePlaylistDialogHelper.getDialog(activity, dataSet.get(getAdapterPosition()).id).show();
return true;
}
return false;
}
});
popupMenu.show();
}
});
}
@Override
@ -65,29 +89,5 @@ public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ViewHo
sharedViews = ((AbsFabActivity) activity).getSharedViewsWithFab(sharedViews);
NavigationUtil.goToPlaylist(activity, dataSet.get(getAdapterPosition()).id, sharedViews);
}
@Override
public boolean onLongClick(View view) {
final Playlist playlist = dataSet.get(getAdapterPosition());
new MaterialDialog.Builder(activity)
.title(activity.getResources().getString(R.string.delete_playlist) + playlist.name)
.positiveText(activity.getResources().getString(R.string.ok))
.negativeText(activity.getResources().getString(R.string.cancel))
.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
super.onPositive(dialog);
dialog.dismiss();
PlaylistsUtil.deletePlaylist(activity, playlist.id);
}
@Override
public void onNegative(MaterialDialog dialog) {
super.onNegative(dialog);
dialog.dismiss();
}
}).show();
return true;
}
}
}

View file

@ -24,7 +24,6 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import java.io.File;
import java.util.List;
@ -86,7 +85,7 @@ public class AlbumSongAdapter extends RecyclerView.Adapter<AlbumSongAdapter.View
@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) {

View file

@ -64,7 +64,7 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> {
@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) {

View file

@ -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<PlaylistSongAdapte
@Override
public void onClick(View v) {
PopupMenu popupMenu = new PopupMenu(activity, v);
popupMenu.inflate(R.menu.menu_playlist_song);
popupMenu.inflate(R.menu.menu_item_playlist_song);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {

View file

@ -90,7 +90,7 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
@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) {

View file

@ -26,7 +26,7 @@ public class CreatePlaylistDialogHelper {
public static MaterialDialog getDialog(final Context context, final List<Song> 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));

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -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;
}

View file

@ -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,