diff --git a/app/src/main/java/com/naman14/timber/adapters/SongsListAdapter.java b/app/src/main/java/com/naman14/timber/adapters/SongsListAdapter.java index a222e7854..d562f41aa 100644 --- a/app/src/main/java/com/naman14/timber/adapters/SongsListAdapter.java +++ b/app/src/main/java/com/naman14/timber/adapters/SongsListAdapter.java @@ -14,6 +14,7 @@ package com.naman14.timber.adapters; + import android.graphics.Color; import android.os.Handler; import android.support.v7.app.AppCompatActivity; @@ -28,10 +29,12 @@ import android.widget.PopupMenu; import android.widget.TextView; + import com.afollestad.appthemeengine.Config; import com.naman14.timber.MusicPlayer; import com.naman14.timber.R; import com.naman14.timber.dialogs.AddPlaylistDialog; + import com.naman14.timber.models.Song; import com.naman14.timber.utils.Helpers; import com.naman14.timber.utils.NavigationUtils; @@ -47,7 +50,7 @@ public class SongsListAdapter extends RecyclerView.Adapter implements BubbleTextGetter { public int currentlyPlayingPosition; - private List arraylist; + private static List arraylist; private AppCompatActivity mContext; private long[] songIDs; private boolean isPlaylist; @@ -139,6 +142,7 @@ public boolean onMenuItemClick(MenuItem item) { case R.id.popup_song_remove_playlist: TimberUtils.removeFromPlaylist(mContext, arraylist.get(position).id, playlistId); removeSongAt(position); + updateDataSet(arraylist); notifyItemRemoved(position); break; case R.id.popup_song_play: @@ -169,7 +173,18 @@ public boolean onMenuItemClick(MenuItem item) { case R.id.popup_song_delete: long[] deleteIds = {arraylist.get(position).id}; TimberUtils.showDeleteDialog(mContext,arraylist.get(position).title, deleteIds, SongsListAdapter.this, position); + removeSongAt(position); + updateDataSet(arraylist); + break; + case R.id.popup_song_delete_all: + + TimberUtils.deleteAll(mContext,arraylist); break; + case R.id.popup_song_change_name: + TimberUtils.showChangeNameDialog(mContext,arraylist.get(position).title, SongsListAdapter.this, position); + break; + + } return false; } @@ -182,6 +197,10 @@ public boolean onMenuItemClick(MenuItem item) { }); } + public static List getArrayList(){ + return arraylist; + } + public long[] getSongIds() { long[] ret = new long[getItemCount()]; for (int i = 0; i < getItemCount(); i++) { diff --git a/app/src/main/java/com/naman14/timber/models/Song.java b/app/src/main/java/com/naman14/timber/models/Song.java index fc0f532fa..8e79051d2 100644 --- a/app/src/main/java/com/naman14/timber/models/Song.java +++ b/app/src/main/java/com/naman14/timber/models/Song.java @@ -22,7 +22,7 @@ public class Song { public final String artistName; public final int duration; public final long id; - public final String title; + public String title; public final int trackNumber; public Song() { diff --git a/app/src/main/java/com/naman14/timber/utils/TimberUtils.java b/app/src/main/java/com/naman14/timber/utils/TimberUtils.java index 676e7b348..4041138b2 100644 --- a/app/src/main/java/com/naman14/timber/utils/TimberUtils.java +++ b/app/src/main/java/com/naman14/timber/utils/TimberUtils.java @@ -38,10 +38,15 @@ import com.afollestad.materialdialogs.MaterialDialog; import com.naman14.timber.MusicPlayer; import com.naman14.timber.R; +import com.naman14.timber.adapters.SongsListAdapter; +import com.naman14.timber.dataloaders.SongLoader; +import com.naman14.timber.fragments.PlaylistFragment; +import com.naman14.timber.models.Song; import com.naman14.timber.provider.RecentStore; import com.naman14.timber.provider.SongPlayCount; import java.io.File; +import java.util.List; public class TimberUtils { @@ -245,6 +250,49 @@ public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) } + + public static void showChangeNameDialog(final Context context, final String name, final RecyclerView.Adapter adapter, final int pos) { + new MaterialDialog.Builder(context) + .title("Change name?") + .content("Are you sure you want to change name of song " + name + " ?") + .negativeText("Cancel") + .input("Enter new song name", "", false, new MaterialDialog.InputCallback() { + @Override + public void onInput(@NonNull MaterialDialog dialog, CharSequence input) { + + + String newName = input.toString(); + SongsListAdapter.getArrayList().get(pos).title=newName; + adapter.notifyItemChanged(pos); + + + + + } + }).onNegative(new MaterialDialog.SingleButtonCallback() { + @Override + public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { + dialog.dismiss(); + } + }) + .show(); + + + + } + + + + + + public static void deleteAll(final Context context, final List arraylist){ + while(arraylist.get(0)!=null) { + long[] deleteId_ = {arraylist.remove(0).id}; + TimberUtils.deleteTracks(context, deleteId_); + } + } + + public static void deleteTracks(final Context context, final long[] list) { final String[] projection = new String[]{ BaseColumns._ID, MediaStore.MediaColumns.DATA, MediaStore.Audio.AudioColumns.ALBUM_ID @@ -269,8 +317,11 @@ public static void deleteTracks(final Context context, final long[] list) { // Remove from current playlist final long id = c.getLong(0); MusicPlayer.removeTrack(id); + + // Remove the track from the play count SongPlayCount.getInstance(context).removeItem(id); + // Remove any items in the recents database RecentStore.getInstance(context).removeItem(id); c.moveToNext(); @@ -306,6 +357,12 @@ public static void deleteTracks(final Context context, final long[] list) { MusicPlayer.refresh(); } + + + + + + public static void shareTrack(final Context context, long id) { final String[] projection = new String[]{ diff --git a/app/src/main/res/menu/popup_song.xml b/app/src/main/res/menu/popup_song.xml index 07f429e8c..e8ad5c3b7 100644 --- a/app/src/main/res/menu/popup_song.xml +++ b/app/src/main/res/menu/popup_song.xml @@ -38,4 +38,13 @@ android:id="@+id/popup_song_delete" android:title="Delete from device" /> + + + + + \ No newline at end of file