From 3132e78aa5c5461e456edfcfc5dc4b7f606c89f1 Mon Sep 17 00:00:00 2001
From: Tristan Roux
Date: Sun, 3 Feb 2019 22:47:09 +0100
Subject: [PATCH] Solving critical bugs with empty playlists.
---
MusicApp/MainActivity.cs | 2 ++
MusicApp/MusicApp.csproj | 3 +++
.../Portable Class/ItemTouchCallback.cs | 3 +--
MusicApp/Resources/Portable Class/Playlist.cs | 8 ++++++-
.../Portable Class/PlaylistTrackAdapter.cs | 10 ++++-----
.../Portable Class/PlaylistTracks.cs | 4 +++-
.../Resources/Portable Class/YoutubeEngine.cs | 3 +++
MusicApp/Resources/Resource.Designer.cs | 21 +++++++++++--------
MusicApp/Resources/layout/SmallEmptyView.xml | 9 ++++++++
9 files changed, 45 insertions(+), 18 deletions(-)
create mode 100644 MusicApp/Resources/layout/SmallEmptyView.xml
diff --git a/MusicApp/MainActivity.cs b/MusicApp/MainActivity.cs
index 1128516..b293ac8 100644
--- a/MusicApp/MainActivity.cs
+++ b/MusicApp/MainActivity.cs
@@ -526,6 +526,8 @@ namespace MusicApp
searchView.Iconified = true;
searchView.SetQuery("", false);
SupportActionBar.SetDisplayHomeAsUpEnabled(false);
+
+ SupportFragmentManager.PopBackStack(null, Android.Support.V4.App.FragmentManager.PopBackStackInclusive);
}
if (PlaylistTracks.instance != null)
diff --git a/MusicApp/MusicApp.csproj b/MusicApp/MusicApp.csproj
index 72cc767..bcd136c 100644
--- a/MusicApp/MusicApp.csproj
+++ b/MusicApp/MusicApp.csproj
@@ -860,6 +860,9 @@
Designer
+
+
+
diff --git a/MusicApp/Resources/Portable Class/ItemTouchCallback.cs b/MusicApp/Resources/Portable Class/ItemTouchCallback.cs
index 4db36b5..7527191 100644
--- a/MusicApp/Resources/Portable Class/ItemTouchCallback.cs
+++ b/MusicApp/Resources/Portable Class/ItemTouchCallback.cs
@@ -2,7 +2,6 @@
using Android.Graphics.Drawables;
using Android.Support.V7.Widget;
using Android.Support.V7.Widget.Helper;
-using Android.Widget;
namespace MusicApp.Resources.Portable_Class
{
@@ -17,7 +16,7 @@ namespace MusicApp.Resources.Portable_Class
{
get
{
- if (PlaylistTracks.instance != null && !PlaylistTracks.instance.hasWriteAcess)
+ if (PlaylistTracks.instance != null && (!PlaylistTracks.instance.hasWriteAcess || ((PlaylistTrackAdapter)adapter).IsEmpty))
return false;
return true;
}
diff --git a/MusicApp/Resources/Portable Class/Playlist.cs b/MusicApp/Resources/Portable Class/Playlist.cs
index 0fd76ed..92925ee 100644
--- a/MusicApp/Resources/Portable Class/Playlist.cs
+++ b/MusicApp/Resources/Portable Class/Playlist.cs
@@ -660,6 +660,9 @@ namespace MusicApp.Resources.Portable_Class
nextPageToken = ytPlaylist.NextPageToken;
}
+ if (songs.Count == 0)
+ return;
+
if (MusicPlayer.isRunning)
MusicPlayer.queue?.Clear();
@@ -701,6 +704,9 @@ namespace MusicApp.Resources.Portable_Class
musicCursor.Close();
}
+ if (tracksPath.Count == 0)
+ return;
+
Intent intent = new Intent(Android.App.Application.Context, typeof(MusicPlayer));
intent.PutStringArrayListExtra("files", tracksPath);
intent.SetAction("RandomPlay");
@@ -1004,7 +1010,7 @@ namespace MusicApp.Resources.Portable_Class
void Unfork(int position, string playlistID)
{
AlertDialog dialog = new AlertDialog.Builder(MainActivity.instance, MainActivity.dialogTheme)
- .SetTitle(GetString(Resource.String.unfork_playlist, YoutubePlaylists[position].Name))
+ .SetTitle(GetString(Resource.String.unfork_playlist, YoutubePlaylists[position - LocalPlaylists.Count].Name))
.SetPositiveButton(Resource.String.yes, async (sender, e) =>
{
try
diff --git a/MusicApp/Resources/Portable Class/PlaylistTrackAdapter.cs b/MusicApp/Resources/Portable Class/PlaylistTrackAdapter.cs
index 424c84a..be566d4 100644
--- a/MusicApp/Resources/Portable Class/PlaylistTrackAdapter.cs
+++ b/MusicApp/Resources/Portable Class/PlaylistTrackAdapter.cs
@@ -19,7 +19,7 @@ namespace MusicApp.Resources.Portable_Class
public event EventHandler ItemClick;
public event EventHandler ItemLongClick;
public int listPadding;
- private bool empty = false;
+ public bool IsEmpty = false;
public PlaylistTrackAdapter(List songList)
{
@@ -53,7 +53,7 @@ namespace MusicApp.Resources.Portable_Class
int count = songList.Count + (PlaylistTracks.instance.fullyLoadded ? 0 : 1) + (PlaylistTracks.instance.useHeader ? 0 : 1);
if (count == 0 || (count == 1 && !PlaylistTracks.instance.useHeader))
{
- empty = true;
+ IsEmpty = true;
count++;
}
@@ -63,7 +63,7 @@ namespace MusicApp.Resources.Portable_Class
public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position)
{
- if(empty && position + 1 == ItemCount)
+ if(IsEmpty && position + 1 == ItemCount)
{
((TextView)viewHolder.ItemView).Text = MainActivity.instance.GetString(Resource.String.playlist_empty);
return;
@@ -186,14 +186,14 @@ namespace MusicApp.Resources.Portable_Class
}
else
{
- View itemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.EmptyView, parent, false);
+ View itemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.SmallEmptyView, parent, false);
return new EmptyHolder(itemView);
}
}
public override int GetItemViewType(int position)
{
- if (empty && position + 1 == ItemCount)
+ if (IsEmpty && position + 1 == ItemCount)
return 3;
if (position == 0 && !PlaylistTracks.instance.useHeader)
diff --git a/MusicApp/Resources/Portable Class/PlaylistTracks.cs b/MusicApp/Resources/Portable Class/PlaylistTracks.cs
index 124eb16..b3e549f 100644
--- a/MusicApp/Resources/Portable Class/PlaylistTracks.cs
+++ b/MusicApp/Resources/Portable Class/PlaylistTracks.cs
@@ -41,7 +41,6 @@ namespace MusicApp.Resources.Portable_Class
private bool forked;
private string nextPageToken = null;
public bool fullyLoadded = true;
- public bool isEmpty = false;
public bool lastVisible = false;
public bool useHeader = true;
public bool navigating = false;
@@ -766,6 +765,9 @@ namespace MusicApp.Resources.Portable_Class
public async void PlayInOrder(int fromPosition, bool useTransition)
{
+ if (tracks.Count < fromPosition)
+ return;
+
if (YoutubeID != null && !Synced)
{
if (result != null && result.Count > fromPosition)
diff --git a/MusicApp/Resources/Portable Class/YoutubeEngine.cs b/MusicApp/Resources/Portable Class/YoutubeEngine.cs
index fa62387..98aa3e5 100644
--- a/MusicApp/Resources/Portable Class/YoutubeEngine.cs
+++ b/MusicApp/Resources/Portable Class/YoutubeEngine.cs
@@ -881,6 +881,9 @@ namespace MusicApp.Resources.Portable_Class
nextPageToken = ytPlaylist.NextPageToken;
}
+ if (tracks.Count == 0)
+ return;
+
Random r = new Random();
tracks = tracks.OrderBy(x => r.Next()).ToList();
PlayFiles(tracks.ToArray());
diff --git a/MusicApp/Resources/Resource.Designer.cs b/MusicApp/Resources/Resource.Designer.cs
index 78958dc..d4c10f0 100644
--- a/MusicApp/Resources/Resource.Designer.cs
+++ b/MusicApp/Resources/Resource.Designer.cs
@@ -6966,31 +6966,34 @@ namespace MusicApp
public const int select_dialog_singlechoice_material = 2130903191;
// aapt resource value: 0x7f030098
- public const int smallLoading = 2130903192;
+ public const int SmallEmptyView = 2130903192;
// aapt resource value: 0x7f030099
- public const int SongList = 2130903193;
+ public const int smallLoading = 2130903193;
// aapt resource value: 0x7f03009a
- public const int SuggestionLayout = 2130903194;
+ public const int SongList = 2130903194;
// aapt resource value: 0x7f03009b
- public const int support_simple_spinner_dropdown_item = 2130903195;
+ public const int SuggestionLayout = 2130903195;
// aapt resource value: 0x7f03009c
- public const int tabs = 2130903196;
+ public const int support_simple_spinner_dropdown_item = 2130903196;
// aapt resource value: 0x7f03009d
- public const int TimerLayout = 2130903197;
+ public const int tabs = 2130903197;
// aapt resource value: 0x7f03009e
- public const int TwoLineLayout = 2130903198;
+ public const int TimerLayout = 2130903198;
// aapt resource value: 0x7f03009f
- public const int ViewPager = 2130903199;
+ public const int TwoLineLayout = 2130903199;
// aapt resource value: 0x7f0300a0
- public const int YtList = 2130903200;
+ public const int ViewPager = 2130903200;
+
+ // aapt resource value: 0x7f0300a1
+ public const int YtList = 2130903201;
static Layout()
{
diff --git a/MusicApp/Resources/layout/SmallEmptyView.xml b/MusicApp/Resources/layout/SmallEmptyView.xml
new file mode 100644
index 0000000..833488f
--- /dev/null
+++ b/MusicApp/Resources/layout/SmallEmptyView.xml
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file