Adding maximum playlist restriction 06/265406/4
authoraman.jeph <aman.jeph@samsung.com>
Mon, 18 Oct 2021 14:32:27 +0000 (20:02 +0530)
committeraman.jeph <aman.jeph@samsung.com>
Tue, 19 Oct 2021 03:35:49 +0000 (09:05 +0530)
Adding maximum trackcount restriction

Change-Id: If0e7ae0ea3280398a4866b31bcd893eed4a2400d
Signed-off-by: aman.jeph <aman.jeph@samsung.com>
music-player/Common/AppConstants.cs
music-player/Common/PlayerCommon.cs
music-player/ViewModels/PlaylistSelectorViewModel.cs
music-player/ViewModels/PlaylistViewModel.cs
music-player/Views/PlaylistSelectorView.cs
music-player/Views/PlaylistView.cs
packaging/org.tizen.MusicPlayer-1.0.0.tpk

index 7ddc6c620d9b6490a2e73f4f4020b1ed41a0c65d..bea06b63daea297bccd891c658a38ffa095a6ce8 100755 (executable)
         public const string DarkPlatformThemeId = "org.tizen.default-dark-theme";
         public const string FavouritePlaylist = "Favourite";
         public const string RecentlyAddedPlaylist = "Recently Added";
+
+        /// <summary>
+        /// Maxcount 102 is including User playlist and System Playlist [Favourite, Recently Added].
+        /// User can create maximum 100 playlists.
+        /// </summary>
+        public const int MaxPlaylistCount = 102;
     }
 }
index b82aafdf9aba391af81a3a2972d8bf2d43025229..2b001c88d251d987305c55b3c9fdb59b3a1262bd 100755 (executable)
@@ -46,6 +46,9 @@ namespace MusicPlayer.Common
     {
         Added,
         Cancelled,
+        PlaylistCreationFailed,
+        MemberCountExceeded,
+        Failed,
     };
 
     public class PlayerEventArgs : EventArgs
index c44c67db16644bcc44ceee0ac25f59b1fce401ea..ce4ac293afc9daa989760cff578d7906ddb04fa2 100755 (executable)
@@ -8,6 +8,8 @@ namespace MusicPlayer.ViewModels
 {
     class PlaylistSelectorViewModel : PropertyNotifier
     {
+        private const int MaxPlaylistTrackCount = 1000;
+        private const int SystemPlaylistCount = 2;
         private List<string> addingTrackList;
         public PlaylistSelectorViewModel(List<string> trackList)
         {
@@ -18,6 +20,8 @@ namespace MusicPlayer.ViewModels
             {
                 listViewModel.CreateData(dataList);
             }
+            // Total playlist count is user playlist count + system playlist count [favourite, recently added]
+            UpdateCreatePlaylistState(dataList.Count + SystemPlaylistCount);
             int count = 0;
             string newName = "My playlist 000";
 
@@ -53,6 +57,14 @@ namespace MusicPlayer.ViewModels
             set => SetProperty(ref playlistSelectedItem, value);
         }
 
+        private bool canCreatePlaylist;
+
+        public bool CanCreatePlaylist
+        {
+            get => canCreatePlaylist;
+            set => SetProperty(ref canCreatePlaylist, value);
+        }
+
         public bool CreatePlaylist(string playlistName)
         {
             Playlist playlist = PlaylistManager.Instance.GetPlaylist(playlistName);
@@ -70,14 +82,20 @@ namespace MusicPlayer.ViewModels
             return false;
         }
 
-        public bool AddTracksToPlaylist(object selectedItemData)
+        public PlaylistMemberAddStatus AddTracksToPlaylist(object selectedItemData)
         {
             PlaylistModel playlistModel = (PlaylistModel)selectedItemData;
             if(addingTrackList == null || addingTrackList.Count <= 0)
             {
-                return false;
+                return PlaylistMemberAddStatus.PlaylistCreationFailed;
             }
-            return PlaylistManager.Instance.AddTracks(playlistModel.PlaylistId, addingTrackList);
+            int memberCount = PlaylistManager.Instance.PlaylistTrackCount(playlistModel.PlaylistId);
+            if(memberCount + addingTrackList.Count > MaxPlaylistTrackCount)
+            {
+                return PlaylistMemberAddStatus.MemberCountExceeded;
+            }
+            bool result = PlaylistManager.Instance.AddTracks(playlistModel.PlaylistId, addingTrackList);
+            return result ? PlaylistMemberAddStatus.Added : PlaylistMemberAddStatus.Failed;
         }
 
         public bool IsPlaylistExists(string playlistName)
@@ -125,5 +143,17 @@ namespace MusicPlayer.ViewModels
             }
             return length;
         }
+
+        private void UpdateCreatePlaylistState(int playlistCount)
+        {
+            if (playlistCount >= AppConstants.MaxPlaylistCount)
+            {
+                CanCreatePlaylist = false;
+            }
+            else
+            {
+                CanCreatePlaylist = true;
+            }
+        }
     }
 }
index ecfefbe3241573bc1719a2b0b7896f5d604f8480..b4f6498370471045a4d2a01a38284c61cb00db89 100755 (executable)
@@ -17,6 +17,7 @@ namespace MusicPlayer.ViewModels
             listViewModel = new ListViewModel<PlaylistModel>();
             UpdatePlaylistData();
             PlaylistCount = listViewModel.Count.ToString();
+            UpdateCreatePlaylistState(ListViewModel.Count);
             ListViewModel.CollectionChanged += OnCollectionChanged;
         }
 
@@ -55,6 +56,14 @@ namespace MusicPlayer.ViewModels
             }
         }
 
+        private bool canCreatePlaylist;
+
+        public bool CanCreatePlaylist
+        {
+            get => canCreatePlaylist;
+            set => SetProperty(ref canCreatePlaylist, value);
+        }
+
         private Playlist CreateDefaultPlaylist(string name, string thumbPath)
         {
             Playlist playlist = PlaylistManager.Instance.GetPlaylist(name);
@@ -141,6 +150,7 @@ namespace MusicPlayer.ViewModels
         private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
         {
             PlaylistCount = ListViewModel.Count.ToString();
+            UpdateCreatePlaylistState(ListViewModel.Count);
         }
 
         private ListViewModel<PlaylistModel> CreateUserPlayListViewModel()
@@ -155,5 +165,16 @@ namespace MusicPlayer.ViewModels
             return userListViewModel;
         }
 
+        private void UpdateCreatePlaylistState(int playlistCount)
+        {
+            if(playlistCount >= AppConstants.MaxPlaylistCount)
+            {
+                CanCreatePlaylist = false;
+            }
+            else
+            {
+                CanCreatePlaylist = true;
+            }
+        }
     }
 }
index 7e94ed0621370f16b79a04ee31c49d09e09c80a0..7d745392fb3f32eb3dc53acb40fa79fd52a48091 100755 (executable)
@@ -111,10 +111,11 @@ namespace MusicPlayer.Views
                 HeightSpecification = 108,
                 TextAlignment = HorizontalAlignment.Begin,
                 Padding = new Extents(64, 64, 0, 0),
-                IsEnabled = true,
                 IsSelectable = false,
                 ItemAlignment = LinearLayout.Alignment.CenterVertical,
             };
+            createNewPlaylistButton.BindingContext = viewModel;
+            createNewPlaylistButton.SetBinding(Button.IsEnabledProperty, "CanCreatePlaylist");
             selectPlaylistContentArea.Add(createNewPlaylistButton);
             View itemSeperator = new View()
             {
@@ -193,8 +194,14 @@ namespace MusicPlayer.Views
                 Tizen.Log.Error(AppConstants.LogTag, "Selected item is null");
                 return;
             }
-            bool isAdded = viewModel.AddTracksToPlaylist(item);
-            if(isAdded == false)
+            PlaylistMemberAddStatus status = viewModel.AddTracksToPlaylist(item);
+            if(status == PlaylistMemberAddStatus.MemberCountExceeded)
+            {
+                ShowInfoMessage("Can't add more than 1000 tracks to a playlist");
+                collectionView.SelectedItem = null;
+                return;
+            }
+            else
             {
                 Tizen.Log.Error(AppConstants.LogTag, "Failed to add track to playlist");
             }
@@ -397,7 +404,7 @@ namespace MusicPlayer.Views
 
         private void ShowInfoMessage(string message)
         {
-            Notification.MakeToast(message, Notification.ToastCenter).Post(Notification.ToastShort);
+            Notification.MakeToast(message, Notification.ToastBottom).Post(Notification.ToastShort);
         }
 
         private void CreatePlaylistCreateButtonClicked(object sender, ClickedEventArgs e)
index 7058165c68d46debd51f792a7dbbb50174423c55..d674a6fd8592b6e41b42177435e2c55cb36b93ea 100755 (executable)
@@ -58,6 +58,8 @@ namespace MusicPlayer.Views
                 ThemeChangeSensitive = true,
                 Margin = new Extents(40, 0, 0, 0),
             };
+            playlistCreateButton.BindingContext = viewModel;
+            playlistCreateButton.SetBinding(Button.IsEnabledProperty, "CanCreatePlaylist");
             titleView.Add(playlistCreateButton);
             RelativeLayout.SetLeftRelativeOffset(playlistCreateButton, 1.0f);
             RelativeLayout.SetRightRelativeOffset(playlistCreateButton, 1.0f);
index 0a218496467660f6936886e0034bdb05afe380c2..9762b3b5ecff68f32160f122eaed84a7df4a37fc 100755 (executable)
Binary files a/packaging/org.tizen.MusicPlayer-1.0.0.tpk and b/packaging/org.tizen.MusicPlayer-1.0.0.tpk differ