From: aman.jeph Date: Mon, 18 Oct 2021 14:32:27 +0000 (+0530) Subject: Adding maximum playlist restriction X-Git-Tag: submit/tizen/20211109.094344~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=42572bc7c8df3dbf4ea9da3ac7bbe54cbdcc2c13;p=profile%2Fiot%2Fapps%2Fdotnet%2Fmusic-player.git Adding maximum playlist restriction Adding maximum trackcount restriction Change-Id: If0e7ae0ea3280398a4866b31bcd893eed4a2400d Signed-off-by: aman.jeph --- diff --git a/music-player/Common/AppConstants.cs b/music-player/Common/AppConstants.cs index 7ddc6c6..bea06b6 100755 --- a/music-player/Common/AppConstants.cs +++ b/music-player/Common/AppConstants.cs @@ -14,5 +14,11 @@ public const string DarkPlatformThemeId = "org.tizen.default-dark-theme"; public const string FavouritePlaylist = "Favourite"; public const string RecentlyAddedPlaylist = "Recently Added"; + + /// + /// Maxcount 102 is including User playlist and System Playlist [Favourite, Recently Added]. + /// User can create maximum 100 playlists. + /// + public const int MaxPlaylistCount = 102; } } diff --git a/music-player/Common/PlayerCommon.cs b/music-player/Common/PlayerCommon.cs index b82aafd..2b001c8 100755 --- a/music-player/Common/PlayerCommon.cs +++ b/music-player/Common/PlayerCommon.cs @@ -46,6 +46,9 @@ namespace MusicPlayer.Common { Added, Cancelled, + PlaylistCreationFailed, + MemberCountExceeded, + Failed, }; public class PlayerEventArgs : EventArgs diff --git a/music-player/ViewModels/PlaylistSelectorViewModel.cs b/music-player/ViewModels/PlaylistSelectorViewModel.cs index c44c67d..ce4ac29 100755 --- a/music-player/ViewModels/PlaylistSelectorViewModel.cs +++ b/music-player/ViewModels/PlaylistSelectorViewModel.cs @@ -8,6 +8,8 @@ namespace MusicPlayer.ViewModels { class PlaylistSelectorViewModel : PropertyNotifier { + private const int MaxPlaylistTrackCount = 1000; + private const int SystemPlaylistCount = 2; private List addingTrackList; public PlaylistSelectorViewModel(List 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; + } + } } } diff --git a/music-player/ViewModels/PlaylistViewModel.cs b/music-player/ViewModels/PlaylistViewModel.cs index ecfefbe..b4f6498 100755 --- a/music-player/ViewModels/PlaylistViewModel.cs +++ b/music-player/ViewModels/PlaylistViewModel.cs @@ -17,6 +17,7 @@ namespace MusicPlayer.ViewModels listViewModel = new ListViewModel(); 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 CreateUserPlayListViewModel() @@ -155,5 +165,16 @@ namespace MusicPlayer.ViewModels return userListViewModel; } + private void UpdateCreatePlaylistState(int playlistCount) + { + if(playlistCount >= AppConstants.MaxPlaylistCount) + { + CanCreatePlaylist = false; + } + else + { + CanCreatePlaylist = true; + } + } } } diff --git a/music-player/Views/PlaylistSelectorView.cs b/music-player/Views/PlaylistSelectorView.cs index 7e94ed0..7d74539 100755 --- a/music-player/Views/PlaylistSelectorView.cs +++ b/music-player/Views/PlaylistSelectorView.cs @@ -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) diff --git a/music-player/Views/PlaylistView.cs b/music-player/Views/PlaylistView.cs index 7058165..d674a6f 100755 --- a/music-player/Views/PlaylistView.cs +++ b/music-player/Views/PlaylistView.cs @@ -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); diff --git a/packaging/org.tizen.MusicPlayer-1.0.0.tpk b/packaging/org.tizen.MusicPlayer-1.0.0.tpk index 0a21849..9762b3b 100755 Binary files a/packaging/org.tizen.MusicPlayer-1.0.0.tpk and b/packaging/org.tizen.MusicPlayer-1.0.0.tpk differ