diff --git a/Opus/Code/Api/PlaylistManager.cs b/Opus/Code/Api/PlaylistManager.cs
index b7fd6ec..2169e9c 100644
--- a/Opus/Code/Api/PlaylistManager.cs
+++ b/Opus/Code/Api/PlaylistManager.cs
@@ -551,21 +551,27 @@ namespace Opus.Api
/// A callback called when the user click ok in the dialog. You just need to remove the track from the UI, everything else is already handled.
/// A callback called when the user click cancel in the dialog
/// A callback called when the user click undo in the snackbar
- public static void RemoveTrackFromPlaylistDialog(PlaylistItem item, Song song, Action RemovedCallback, Action CancelledCallback, Action UndoCallback)
+ public async static void RemoveTrackFromPlaylistDialog(PlaylistItem item, Song song, Action RemovedCallback, Action CancelledCallback, Action UndoCallback)
{
+ if (!await MainActivity.instance.GetWritePermission())
+ return;
+
AlertDialog dialog = new AlertDialog.Builder(MainActivity.instance, MainActivity.dialogTheme)
.SetTitle(MainActivity.instance.GetString(Resource.String.remove_from_playlist, song.Title))
.SetPositiveButton(Resource.String.yes, async (sender, e) =>
{
- RemovedCallback?.Invoke();
+ if(item.LocalID != -1)
+ RemoveFromLocalPlaylist(song, item.LocalID);
if (item.YoutubeID != null)
{
if (song.TrackID == null)
song = await CompleteItem(song, item.YoutubeID);
}
- RemoveTrackFromPlaylistCallback callback = new RemoveTrackFromPlaylistCallback(song, item.LocalID);
+ RemovedCallback?.Invoke();
+
+ RemoveTrackFromPlaylistCallback callback = new RemoveTrackFromPlaylistCallback(song, item.LocalID);
Snackbar snackBar = Snackbar.Make(MainActivity.instance.FindViewById(Resource.Id.snackBar), (song.Title.Length > 20 ? song.Title.Substring(0, 17) + "..." : song.Title) + MainActivity.instance.GetString(Resource.String.removed_from_playlist), Snackbar.LengthLong)
.SetAction(MainActivity.instance.GetString(Resource.String.undo), (v) =>
{
@@ -626,7 +632,7 @@ namespace Opus.Api
CursorLoader cursorLoader = new CursorLoader(Application.Context, musicUri, null, null, null, null);
ICursor musicCursor = (ICursor)cursorLoader.LoadInBackground();
- playlists.Add(new PlaylistItem(name, id, musicCursor.Count));
+ playlists.Add(new PlaylistItem(name, id, musicCursor.Count) { HasWritePermission = true });
}
while (cursor.MoveToNext());
cursor.Close();
@@ -943,14 +949,20 @@ namespace Opus.Api
///
///
///
- public async static void RemoveFromLocalPlaylist(Song song, long LocalPlaylistID)
+ public /*async*/ static void RemoveFromLocalPlaylist(Song song, long LocalPlaylistID)
{
- await Task.Run(() =>
- {
+ Console.WriteLine("&Remove Track From Local Playlist Called");
+ Console.WriteLine("&Song localID: " + song.LocalID + " LocalPlaylistID: " + LocalPlaylistID);
+
+ //await Task.Run(() =>
+ //{
+ // if (Looper.MyLooper() == null)
+ // Looper.Prepare();
+
ContentResolver resolver = MainActivity.instance.ContentResolver;
- Uri uri = MediaStore.Audio.Playlists.Members.GetContentUri("external", LocalPlaylistID);
- resolver.Delete(uri, MediaStore.Audio.Playlists.Members.AudioId + "=?", new string[] { song.LocalID.ToString() });
- });
+ Uri uri = Playlists.Members.GetContentUri("external", LocalPlaylistID);
+ resolver.Delete(uri, Playlists.Members.Id + "=?", new string[] { song.LocalID.ToString() });
+ //});
}
#endregion
diff --git a/Opus/Code/MainActivity.cs b/Opus/Code/MainActivity.cs
index 3acbee4..4dd958c 100644
--- a/Opus/Code/MainActivity.cs
+++ b/Opus/Code/MainActivity.cs
@@ -411,7 +411,6 @@ namespace Opus
if (PlaylistTracks.instance != null)
{
- PlaylistTracks.instance.navigating = true;
SupportFragmentManager.BeginTransaction().Remove(PlaylistTracks.instance).Commit();
SupportFragmentManager.PopBackStack(null, Android.Support.V4.App.FragmentManager.PopBackStackInclusive);
}
diff --git a/Opus/Code/Others/RemoveTrackFromPlaylistCallback.cs b/Opus/Code/Others/RemoveTrackFromPlaylistCallback.cs
index 00ac1fb..0c9208a 100644
--- a/Opus/Code/Others/RemoveTrackFromPlaylistCallback.cs
+++ b/Opus/Code/Others/RemoveTrackFromPlaylistCallback.cs
@@ -25,10 +25,10 @@ namespace Opus.Others
{
PlaylistManager.RemoveFromYoutubePlaylist(song.TrackID);
}
- if (LocalPlaylistID != 0)
- {
- PlaylistManager.RemoveFromLocalPlaylist(song, LocalPlaylistID);
- }
+ }
+ else if (LocalPlaylistID != 0)
+ {
+ LocalManager.AddToPlaylist(new[] { song }, null, LocalPlaylistID);
}
}
diff --git a/Opus/Code/UI/Adapter/PlaylistTrackAdapter.cs b/Opus/Code/UI/Adapter/PlaylistTrackAdapter.cs
index f52b7fe..cf227de 100644
--- a/Opus/Code/UI/Adapter/PlaylistTrackAdapter.cs
+++ b/Opus/Code/UI/Adapter/PlaylistTrackAdapter.cs
@@ -53,6 +53,8 @@ namespace Opus.Adapter
public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position)
{
+ System.Console.WriteLine("&Binding, position: " + position + " BaseCount: " + BaseCount + " ItemCount: " + ItemCount);
+
if (position == ItemCount - 1 && !PlaylistTracks.instance.fullyLoadded)
{
int pad = MainActivity.instance.DpToPx(30);
@@ -90,6 +92,7 @@ namespace Opus.Adapter
else if (BaseCount == 0)
{
((TextView)viewHolder.ItemView).Text = MainActivity.instance.GetString(Resource.String.playlist_empty);
+ System.Console.WriteLine("&Binding empty view");
}
else if (tracks != null)
OnBindViewHolder(viewHolder, tracks[position - ItemBefore]);
@@ -218,7 +221,7 @@ namespace Opus.Adapter
public void ItemDismissed(int position)
{
- PlaylistTracks.instance.RemoveFromPlaylist(tracks[position], position);
+ PlaylistTracks.instance.RemoveFromPlaylist(tracks == null ? GetItem(position) : tracks[position], position);
}
}
}
\ No newline at end of file
diff --git a/Opus/Code/UI/Fragments/PlaylistTracks.cs b/Opus/Code/UI/Fragments/PlaylistTracks.cs
index be1efba..2557d2c 100644
--- a/Opus/Code/UI/Fragments/PlaylistTracks.cs
+++ b/Opus/Code/UI/Fragments/PlaylistTracks.cs
@@ -38,7 +38,6 @@ namespace Opus.Fragments
public bool fullyLoadded = true;
public bool lastVisible = false;
public bool useHeader = true;
- public bool navigating = false;
private bool isForked;
private bool loading = false;
@@ -349,7 +348,7 @@ namespace Opus.Fragments
{
adapter.SwapCursor((ICursor)data, false);
- if (item.LocalID != -1)
+ if (query == null && item.LocalID != -1 && adapter.BaseCount > 0)
{
Activity.FindViewById(Resource.Id.headerNumber).Text = item.Count.ToString() + " " + GetString(Resource.String.elements);
var songCover = Uri.Parse("content://media/external/audio/albumart");
@@ -542,13 +541,19 @@ namespace Opus.Fragments
{
PlaylistManager.RemoveTrackFromPlaylistDialog(this.item, item, () =>
{
- adapter.NotifyItemRemoved(position);
+ if (position == 0)
+ adapter.NotifyItemChanged(0);
+ else
+ adapter.NotifyItemRemoved(position);
}, () =>
{
adapter.NotifyItemChanged(position);
}, () =>
{
- adapter.NotifyItemInserted(position);
+ if (position == 0)
+ adapter.NotifyItemChanged(position);
+ else
+ adapter.NotifyItemInserted(position);
});
}