1. Added add/remove songs from Playlist 35/266535/1
authorshivamv <shivam.v2@samsung.com>
Mon, 15 Nov 2021 05:15:26 +0000 (10:45 +0530)
committershivamv <shivam.v2@samsung.com>
Mon, 15 Nov 2021 05:15:26 +0000 (10:45 +0530)
2. Added MiniPlayer

Change-Id: Ie89dbc7344cb2f25d9d08a2b68bf9237dd77a3e8
Signed-off-by: shivamv <shivam.v2@samsung.com>
16 files changed:
music-player/Core/PlaybackHelper.cs
music-player/Core/PlaylistManager.cs
music-player/MediaContent/PlaylistContents.cs
music-player/ViewModels/PlaylistDetailViewModel.cs
music-player/ViewModels/SelectorViewModel.cs
music-player/Views/BaseView.cs
music-player/Views/MiniPlayer.cs [new file with mode: 0755]
music-player/Views/PlayerView.cs
music-player/Views/PlaylistDetailView.cs
music-player/Views/PlaylistSelectorView.cs
music-player/Views/SearchView.cs
music-player/Views/SelectorView.cs
music-player/Views/ViewManager.cs
music-player/res/themes/dark.xaml
music-player/res/themes/light.xaml
packaging/org.tizen.MusicPlayer-1.0.0.tpk

index 6f9c4caf4fe27d36c86458cb8fe1fc33b131666e..f45431257aaade01a1e9f336c52a41866cf0e45f 100755 (executable)
@@ -4,6 +4,7 @@ using System.Text;
 using MusicPlayer.Views;
 using MusicPlayer.ViewModels;
 using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
 using MusicPlayer.Models;
 
 namespace MusicPlayer.Core
@@ -15,11 +16,13 @@ namespace MusicPlayer.Core
 
         private PlayerView playerView;
         private PlayerViewModel playerViewModel;
+        private readonly MiniPlayer miniPlayer;
 
         private PlaybackHelper()
         {
             playerViewModel = new PlayerViewModel();
             playerView = new PlayerView(playerViewModel);
+            miniPlayer = new MiniPlayer(playerViewModel);
             playerView.BackKeyPressed += OnBackKeyPressed;
             playerViewModel.ShowDetails += OnShowDetails;
         }
@@ -47,6 +50,21 @@ namespace MusicPlayer.Core
             playerView.HideView();
         }
 
+        public View GetMiniPlayer()
+        {
+            return miniPlayer;
+        }
+
+        public void ShowMiniPlayer()
+        {
+            miniPlayer.ShowView();
+        }
+
+        public void HideMiniPlayer()
+        {
+            miniPlayer.HideView();
+        }
+
         public void PlayAll(ListViewModel<Track> trackList, Track startingTrack)
         {
             ShowPlayer();
index 0757917ce3f54ee4f265fe7260e0d421a8bf4dc6..264132b659c8fbaa1c473c613dde81ae0e144fba 100755 (executable)
@@ -193,15 +193,24 @@ namespace MusicPlayer.Core
             return isTrackDeleted;
         }
 
-        public bool DeleteTrackList(int playlistId, List<int> memberList)
+        public bool DeleteTrackList(int playlistId, List<string> memberList)
         {
             if (memberList.Count <= 0)
             {
                 Tizen.Log.Error(AppConstants.LogTag, "Track list empty , can't remove anything from playlist");
                 return false;
             }
-            bool isTracksDeleted = Contents.DeletePlaylistMembers(playlistId, memberList);
-            if(isTracksDeleted)
+            bool isTracksDeleted=false;
+            int n = 0;
+            foreach(string member in memberList)
+            {
+                int mediaId = Contents.GetMemberId(playlistId, member);
+                isTracksDeleted = Contents.DeletePlaylistMember(playlistId, mediaId);
+                if (!isTracksDeleted)
+                    break;
+                n++;
+            }
+            if(n > 0)
             {
                 PostUpdate();
             }
index 9700a5cc31b2cc7a164a5a9d0b3d47f6baf16a44..e37c0269aa390cbeb4f0da4a6f34a7863771d710 100755 (executable)
@@ -36,9 +36,7 @@ namespace MusicPlayer.Media
 \r
         public static Playlist GetPlaylistById(int playlistId)\r
         {\r
-            Playlist list = null;\r
-            list = playlistInfo.Select(playlistId);\r
-            return list;\r
+            return playlistInfo.Select(playlistId);\r
         }\r
 \r
         public static Playlist CreatePlaylist(string name)\r
@@ -78,6 +76,11 @@ namespace MusicPlayer.Media
             return playlistInfo.CountMember(playlistId);\r
         }\r
 \r
+        public static int GetMemberId(int playlistId, string mediaId)\r
+        {\r
+            return playlistInfo.GetMemberId(playlistId, mediaId);\r
+        }\r
+\r
         public static bool DeletePlaylist(int playlistId)\r
         {\r
             return playlistInfo.Delete(playlistId);\r
index c4677d00633d7b30a15d522c4f4470dab3d47af9..dbb9b96538753fd1cb6170e79fba4fb8ccf1a667 100755 (executable)
@@ -15,6 +15,7 @@ namespace MusicPlayer.ViewModels
         {
             PlaylistManager.Instance.PlaylistDataChanged += OnPlaylistDetailChanged;
             playlist = PlaylistManager.Instance.GetPlaylist(playlistId);
+            PlaylistId = playlistId;
             PlaylistName = playlist.Name;
             IsNotDefaultPlaylist = true;
             if(PlaylistName == AppConstants.RecentlyAddedPlaylist || PlaylistName == AppConstants.FavouritePlaylist)
@@ -29,7 +30,9 @@ namespace MusicPlayer.ViewModels
 
         public string PlaylistName { get; set; }
 
-        private ListViewModel<Track> listViewModel;
+        public int PlaylistId { get; internal set; }
+
+        private readonly ListViewModel<Track> listViewModel;
 
         public ListViewModel<Track> ListViewModel
         {
index 3e91a0cbcd0c64501e250fa33dcdbd90a0cc8119..c0753ab7cb812e13ad6da8dd57b363f42f6f72fb 100755 (executable)
@@ -1,18 +1,21 @@
 using System.Collections.Generic;
 using MusicPlayer.Models;
 using MusicPlayer.Common;
+using MusicPlayer.Core;
 
 namespace MusicPlayer.ViewModels
 {
     class SelectorViewModel<T> : PropertyNotifier where T : new()
     {
         PlaylistSelectorViewModel playlistSelectorViewModel;
+        readonly object callerViewModel;
 
-        public SelectorViewModel(ListViewModel<T> viewModel)
+        public SelectorViewModel(ListViewModel<T> viewModel, object callerViewModel = null)
         {
             listViewModel = viewModel;
             SelectedCount = "0";
             TotalCount = ListViewModel.Count;
+            this.callerViewModel = callerViewModel;
         }
 
         private readonly ListViewModel<T> listViewModel;
@@ -41,9 +44,23 @@ namespace MusicPlayer.ViewModels
             return tracksShared;
         }
 
+        public bool AddMediaToPlaylist(List<string> mediaList)
+        {
+            PlaylistDetailViewModel playlistDetailViewModel = (PlaylistDetailViewModel)callerViewModel;
+            bool tracksAdded = PlaylistManager.Instance.AddTracks(playlistDetailViewModel.PlaylistId, mediaList);
+            return tracksAdded;
+        }
+
+        public bool RemoveMediaFromPlaylist(List<string> mediaList)
+        {
+            PlaylistDetailViewModel playlistDetailViewModel = (PlaylistDetailViewModel)callerViewModel;
+            bool tracksRemoved = PlaylistManager.Instance.DeleteTrackList(playlistDetailViewModel.PlaylistId, mediaList);
+            return tracksRemoved;
+        }
+
         public PlaylistSelectorViewModel GetPlaylistSelectorViewModel(List<string> addedTrackList)
         {
-            return playlistSelectorViewModel ?? new PlaylistSelectorViewModel(addedTrackList);
+            return playlistSelectorViewModel ??= new PlaylistSelectorViewModel(addedTrackList);
         }
     }
 }
index 452f79aec2e3e75269d054dd920adec7496b246c..b1e87be436e66c3c01e1e49a621d2d03c6fa550b 100755 (executable)
@@ -10,7 +10,6 @@ namespace MusicPlayer.Views
     class BaseView : View
     {
         private View topView;
-        private View bottomView; // TODO Used this for MiniController UI
         private View contentView;
         private TextLabel titleLabel;
         private Button backButton;
@@ -76,7 +75,7 @@ namespace MusicPlayer.Views
             {
                 ThemeChangeSensitive = true,
                 WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = 876,
+                HeightResizePolicy = ResizePolicyType.FillToParent,
             };
             base.Add(contentView);
             FlexLayout.SetFlexGrow(contentView, 1);
@@ -288,10 +287,6 @@ namespace MusicPlayer.Views
                 base.Remove(tabs);
                 tabs?.Dispose();
                 tabs = null;
-
-                base.Remove(bottomView);
-                bottomView?.Dispose();
-                bottomView = null;
             }
 
             base.Dispose(type);
diff --git a/music-player/Views/MiniPlayer.cs b/music-player/Views/MiniPlayer.cs
new file mode 100755 (executable)
index 0000000..36e9b98
--- /dev/null
@@ -0,0 +1,324 @@
+using Tizen.NUI;\r
+using Tizen.NUI.Components;\r
+using Tizen.NUI.BaseComponents;\r
+using Tizen.NUI.Binding;\r
+using MusicPlayer.Common;\r
+using MusicPlayer.ViewModels;\r
+using MusicPlayer.Views.Utils;\r
+using System.Collections.Generic;\r
+using MusicPlayer.Core;\r
+\r
+namespace MusicPlayer.Views\r
+{\r
+    class MiniPlayer : View\r
+    {\r
+        private ImageView thumbnail;\r
+        private View trackInfo;\r
+        private TextLabel titleLabel;\r
+        private TextLabel artistLabel;\r
+\r
+        private View controlsView;\r
+        private View sliderView;\r
+        private MultiStateButton playButton;\r
+        private Button prevButton;\r
+        private Button nextButton;\r
+        private Slider playbackSlider;\r
+        private TextLabel currentTime;\r
+        private TextLabel totalTime;\r
+\r
+        private readonly PlayerViewModel viewModel;\r
+\r
+        public MiniPlayer(PlayerViewModel viewModel) : base()\r
+        {\r
+            this.viewModel = viewModel;\r
+            BindingContext = viewModel.playerModel;\r
+            StyleName = "MiniPlayer";\r
+            ThemeChangeSensitive = true;\r
+            WidthSpecification = LayoutParamPolicies.MatchParent;\r
+            HeightSpecification = 124;\r
+            Layout = new FlexLayout()\r
+            {\r
+                Direction = FlexLayout.FlexDirection.Row,\r
+                Padding = new Extents(64, 64, 24, 19),\r
+            };\r
+            AddTrackDetails();\r
+            AddControlElements();\r
+            AddSliderElements();\r
+        }\r
+\r
+        private void AddTrackDetails()\r
+        {\r
+            AddThumbnail();\r
+            trackInfo = new View()\r
+            {\r
+                WidthSpecification = 666,\r
+                Layout = new FlexLayout()\r
+                {\r
+                    Direction = FlexLayout.FlexDirection.Column,\r
+                    Padding = new Extents(30, 120, 0, 0),\r
+                    Margin = new Extents(0, 0, 0, 5),\r
+                }\r
+            };\r
+            base.Add(trackInfo);\r
+            AddTrackName();\r
+            AddArtistName();\r
+        }\r
+\r
+        private void AddThumbnail()\r
+        {\r
+            thumbnail = new ImageView()\r
+            {\r
+                BackgroundColor = UIColors.HEXEEEFF1,\r
+                Size2D = new Size2D(76, 76),\r
+                Margin = new Extents(0, 0, 0, 5),\r
+            };\r
+            thumbnail.SetBinding(ImageView.ResourceUrlProperty, "ThumbnailPath");\r
+            thumbnail.TouchEvent += (object source, TouchEventArgs e) =>\r
+            {\r
+                PlaybackHelper.Instance.ShowPlayer();\r
+                return true;\r
+            };\r
+            base.Add(thumbnail);\r
+        }\r
+\r
+        private void AddTrackName()\r
+        {\r
+            titleLabel = new TextLabel()\r
+            {\r
+                StyleName = "TitleText",\r
+                ThemeChangeSensitive = true,\r
+                Size2D = new Size2D(516, 48),\r
+                PixelSize = 36,\r
+                FontFamily = "BreezeSans",\r
+                HorizontalAlignment = HorizontalAlignment.Begin,\r
+                VerticalAlignment = VerticalAlignment.Center,\r
+                Ellipsis = true,\r
+            };\r
+            titleLabel.SetBinding(TextLabel.TextProperty, "TrackName");\r
+            trackInfo.Add(titleLabel);\r
+        }\r
+\r
+        private void AddArtistName()\r
+        {\r
+            artistLabel = new TextLabel()\r
+            {\r
+                StyleName = "TitleText",\r
+                ThemeChangeSensitive = true,\r
+                Size2D = new Size2D(382, 28),\r
+                PixelSize = 22,\r
+                FontFamily = "BreezeSans",\r
+                HorizontalAlignment = HorizontalAlignment.Begin,\r
+                VerticalAlignment = VerticalAlignment.Center,\r
+                Ellipsis = true,\r
+            };\r
+            artistLabel.SetBinding(TextLabel.TextProperty, "TrackArtist");\r
+            trackInfo.Add(artistLabel);\r
+        }\r
+        private void AddControlElements()\r
+        {\r
+            controlsView = new View()\r
+            {\r
+                WidthSpecification = 304,\r
+                Layout = new LinearLayout()\r
+                {\r
+                    CellPadding = new Size2D(80, 0),\r
+                    LinearAlignment = LinearLayout.Alignment.CenterVertical,\r
+                    LinearOrientation = LinearLayout.Orientation.Horizontal,\r
+                },\r
+                Margin = new Extents(0, 120, 14, 19),\r
+            };\r
+            base.Add(controlsView);\r
+            AddPreviousButton();\r
+            AddPlayButton();\r
+            AddNextButton();\r
+        }\r
+\r
+        private void AddPreviousButton()\r
+        {\r
+            prevButton = new Button("PrevButton")\r
+            {\r
+                ThemeChangeSensitive = true,\r
+            };\r
+            prevButton.Clicked += (object sender, ClickedEventArgs e) =>\r
+            {\r
+                viewModel.PrevButtonClicked();\r
+            };\r
+            prevButton.BindingContext = viewModel;\r
+            prevButton.SetBinding(Button.IsEnabledProperty, "HasPreviousTrack");\r
+            controlsView.Add(prevButton);\r
+        }\r
+\r
+        private void AddPlayButton()\r
+        {\r
+            playButton = new MultiStateButton()\r
+            {\r
+                Size2D = new Size2D(48, 48),\r
+                BackgroundColor = Color.Transparent,\r
+                IconResources = new Dictionary<ThemeType, Dictionary<string, StringSelector>>()\r
+                {\r
+                    {\r
+                        ThemeType.Light,\r
+                        new Dictionary<string, StringSelector>()\r
+                        {\r
+                            {\r
+                                "Play",\r
+                                new StringSelector()\r
+                                {\r
+                                    Normal = Resources.GetImagePath() + "light/play.png",\r
+                                    Pressed = Resources.GetImagePath() + "play_pressed.png",\r
+                                    Disabled = Resources.GetImagePath() + "play_disabled.png",\r
+                                }\r
+                            },\r
+                            {\r
+                                "Pause",\r
+                                new StringSelector()\r
+                                {\r
+                                    Normal = Resources.GetImagePath() + "light/pause.png",\r
+                                    Pressed = Resources.GetImagePath() + "pause_pressed.png",\r
+                                    Disabled = Resources.GetImagePath() + "pause_disabled.png",\r
+                                }\r
+                            },\r
+                        }\r
+                    },\r
+                    {\r
+                        ThemeType.Dark,\r
+                        new Dictionary<string, StringSelector>()\r
+                        {\r
+                            {\r
+                                "Play",\r
+                                new StringSelector()\r
+                                {\r
+                                    Normal = Resources.GetImagePath() + "dark/play.png",\r
+                                    Pressed = Resources.GetImagePath() + "play_pressed.png",\r
+                                    Disabled = Resources.GetImagePath() + "play_disabled.png",\r
+                                }\r
+                            },\r
+                            {\r
+                                "Pause",\r
+                                new StringSelector()\r
+                                {\r
+                                    Normal = Resources.GetImagePath() + "dark/pause.png",\r
+                                    Pressed = Resources.GetImagePath() + "pause_pressed.png",\r
+                                    Disabled = Resources.GetImagePath() + "pause_disabled.png",\r
+                                }\r
+                            },\r
+                        }\r
+                    }\r
+                },\r
+            };\r
+            playButton.BindingContext = viewModel;\r
+            playButton.SetBinding(MultiStateButton.CustomStateProperty, "PlayButtonState");\r
+            controlsView.Add(playButton);\r
+            playButton.Clicked += (object sender, ClickedEventArgs e) =>\r
+            {\r
+                viewModel.PlayingStatusChanged();\r
+            };\r
+        }\r
+\r
+        private void AddNextButton()\r
+        {\r
+            nextButton = new Button("NextButton")\r
+            {\r
+                ThemeChangeSensitive = true,\r
+            };\r
+            nextButton.Clicked += (object sender, ClickedEventArgs e) =>\r
+            {\r
+                viewModel.NextButtonClicked();\r
+            };\r
+            nextButton.BindingContext = viewModel;\r
+            nextButton.SetBinding(Button.IsEnabledProperty, "HasNextTrack");\r
+            controlsView.Add(nextButton);\r
+        }\r
+\r
+        private void AddSliderElements()\r
+        {\r
+            sliderView = new View()\r
+            {\r
+                WidthSpecification = 626,\r
+                BackgroundColor = Color.Transparent,\r
+                Margin = new Extents(0, 0, 19, 0),\r
+            };\r
+            base.Add(sliderView);\r
+            AddPlaybackSlider();\r
+            AddCurrentTimeLabel();\r
+            AddTotalTimeLabel();\r
+        }\r
+\r
+        private void AddPlaybackSliderEventHandler()\r
+        {\r
+            playbackSlider.SlidingStarted += (object sender, SliderSlidingStartedEventArgs e) =>\r
+            {\r
+                viewModel.StopPlaybackTimer();\r
+            };\r
+            playbackSlider.ValueChanged += (object sender, SliderValueChangedEventArgs e) =>\r
+            {\r
+                viewModel.SetElapsedTime(e.CurrentValue);\r
+            };\r
+            playbackSlider.SlidingFinished += (object sender, SliderSlidingFinishedEventArgs e) =>\r
+            {\r
+                viewModel.UpdatePlayerPosition(e.CurrentValue);\r
+            };\r
+        }\r
+\r
+        private void AddPlaybackSlider()\r
+        {\r
+            playbackSlider = new Slider("Slider")\r
+            {\r
+                ThemeChangeSensitive = true,\r
+                MinValue = 0.0f,\r
+                MaxValue = 1.0f,\r
+                WidthResizePolicy = ResizePolicyType.FillToParent,\r
+                SizeHeight = 38,\r
+                ThumbSize = new Tizen.NUI.Size(30, 30),\r
+                Direction = Slider.DirectionType.Horizontal,\r
+            };\r
+            playbackSlider.SetBinding(Slider.CurrentValueProperty, "ElapsedTime");\r
+            sliderView.Add(playbackSlider);\r
+            AddPlaybackSliderEventHandler();\r
+        }\r
+\r
+        private void AddCurrentTimeLabel()\r
+        {\r
+            currentTime = new TextLabel()\r
+            {\r
+                StyleName = "TitleText",\r
+                ThemeChangeSensitive = true,\r
+                Size2D = new Size2D(180, 24),\r
+                Position2D = new Position2D(0, 38),\r
+                PixelSize = 18,\r
+                FontFamily = "BreezeSans",\r
+                Text = "00::00:00",\r
+                HorizontalAlignment = HorizontalAlignment.Begin,\r
+            };\r
+            currentTime.SetBinding(TextLabel.TextProperty, "PlayingTime");\r
+            sliderView.Add(currentTime);\r
+        }\r
+\r
+        private void AddTotalTimeLabel()\r
+        {\r
+            totalTime = new TextLabel()\r
+            {\r
+                StyleName = "TitleText",\r
+                ThemeChangeSensitive = true,\r
+                Size2D = new Size2D(180, 24),\r
+                Position2D = new Position2D(626 - 180, 38),\r
+                PixelSize = 18,\r
+                FontFamily = "BreezeSans",\r
+                HorizontalAlignment = HorizontalAlignment.End,\r
+                Text = "59:59:59",\r
+            };\r
+            totalTime.SetBinding(TextLabel.TextProperty, "TrackLength");\r
+            sliderView.Add(totalTime);\r
+        }\r
+\r
+        public void ShowView()\r
+        {\r
+            Show();\r
+        }\r
+\r
+        public void HideView()\r
+        {\r
+            Hide();\r
+        }\r
+    }\r
+}\r
index 4dace262989f4bf2c2164f735ded926073562331..996ae4a7e08506db2b12319a0a2c8c845c3ca4d6 100755 (executable)
@@ -377,8 +377,11 @@ namespace MusicPlayer.Views
 
         private void AddPreviousButton()
         {
-            prevButton = new Button("PrevButton");
-            prevButton.ThemeChangeSensitive = true;
+            prevButton = new Button("PrevButton")
+            {
+                Position2D = new Position2D(168, 196),
+                ThemeChangeSensitive = true
+            };
             // TODO need to implement command instead
             prevButton.Clicked += (object sender, ClickedEventArgs e) =>
             {
@@ -460,8 +463,11 @@ namespace MusicPlayer.Views
 
         private void AddNextButton()
         {
-            nextButton = new Button("NextButton");
-            nextButton.ThemeChangeSensitive = true;
+            nextButton = new Button("NextButton")
+            {
+                Position2D = new Position2D(424, 196),
+                ThemeChangeSensitive = true
+            };
             // TODO need to implement command instead
             nextButton.Clicked += (object sender, ClickedEventArgs e) =>
             {
index 4185a8dd709f1b9c2aec5e34a12a0aec876e9c79..6085bac5569fbea6a7c2b801f07e8a81b4d0b8cc 100755 (executable)
@@ -46,7 +46,10 @@ namespace MusicPlayer.Views
 
             if (viewModel.IsNotDefaultPlaylist)
             {
-                var delete = new MenuItem { Text = "Delete" };
+                var add = new MenuItem { Text = "Add" };
+                add.Clicked += OnAddClick;
+                menuItemList.Add(add);
+                var delete = new MenuItem { Text = "Remove" };
                 delete.Clicked += OnDeleteClick;
                 menuItemList.Add(delete);
             }
@@ -54,6 +57,13 @@ namespace MusicPlayer.Views
             moreMenu.Items = menuItemList;
         }
 
+        private void OnAddClick(object sender, ClickedEventArgs e)
+        {
+            TrackViewModel trackViewModel = new TrackViewModel();
+            OperationViewAddEventArgs operationEventArgs = new OperationViewAddEventArgs(OperationViewType.AddToCurrentPlaylist, ContentViewType.Track, trackViewModel.ListViewModel, viewModel);
+            OnOperationViewAdd(operationEventArgs);
+        }
+
         protected override void OnPlayAllClicked()
         {
             Tizen.Log.Debug(AppConstants.LogTag, "PlaylistDetailView OnPlayAllClicked");
@@ -80,7 +90,7 @@ namespace MusicPlayer.Views
 
         private void OnDeleteClick(object sender, ClickedEventArgs e)
         {
-            OperationViewAddEventArgs operationEventArgs = new OperationViewAddEventArgs(OperationViewType.Delete, ContentViewType.Track, viewModel.ListViewModel);
+            OperationViewAddEventArgs operationEventArgs = new OperationViewAddEventArgs(OperationViewType.RemoveFromCurrentPlaylist, ContentViewType.Track, viewModel.ListViewModel, viewModel);
             OnOperationViewAdd(operationEventArgs);
         }
 
index bb56cb8957d0e4e9c1df86ae0d55ebfe0bbd91c2..78b42afc620e8140d35805bf38446d6f9880c833 100755 (executable)
@@ -91,19 +91,6 @@ namespace MusicPlayer.Views
 
         private void AddCreatePlayListButton()
         {
-            ButtonStyle buttonStyle = new ButtonStyle()
-            {
-                Text = new TextLabelStyle()
-                {
-                    Text = "+ Create new playlist",
-                    PixelSize = 32,
-                    FontFamily = "BreezeSans",
-                    TextColor = UIColors.HEX001447,
-                    HorizontalAlignment = HorizontalAlignment.Begin,
-                    VerticalAlignment = VerticalAlignment.Center,
-                },
-                IsSelectable = false,
-            };
 
             createNewPlaylistButton = new Button("PlaylistCreate")
             {
index 424483a49c165dd3f924c7732f9992e51a2db9ab..d4b1e0bbb5ecf3c092b783ed45b12784e29138d5 100755 (executable)
@@ -185,14 +185,16 @@ namespace MusicPlayer.Views
             {
                 ThemeChangeSensitive = true,
                 StyleName = "ListBackground",
-                Size2D = new Size2D(1792, 108),
+                WidthSpecification = LayoutParamPolicies.MatchParent,
                 Padding = new Extents(0, 0, 0, 0),
                 ItemsLayouter = new LinearLayouter(),
                 ItemTemplate = new DataTemplate(() =>
                 {
-                    ListItemLayout layout = new ListItemLayout();
-                    layout.Padding = new Extents(0, 0, 0, 0);
-                    layout.Margin = new Extents(0, 0, 0, 0);
+                    ListItemLayout layout = new ListItemLayout()
+                    {
+                        Padding = new Extents(0, 0, 0, 0),
+                        Margin = new Extents(0, 0, 0, 0)
+                    };
                     layout.Icon.SetBinding(ImageView.ResourceUrlProperty, "Thumbnail");
                     layout.TitleLabel.SetBinding(TextLabel.TextProperty, "Title");
                     layout.SubtitleLabel.SetBinding(TextLabel.TextProperty, "SubTitle");
@@ -200,10 +202,11 @@ namespace MusicPlayer.Views
                 }),
                 GroupHeaderTemplate = new DataTemplate(() =>
                 {
-                    DefaultTitleItem group = new DefaultTitleItem("DefaultTitle");
-                    group.WidthSpecification = 1792;
-                    group.Padding = new Extents(0, 0, 0, 0);
-                    group.Margin = new Extents(0, 0, 0, 0);
+                    DefaultTitleItem group = new DefaultTitleItem("DefaultTitle")
+                    {
+                        Padding = new Extents(0, 0, 0, 0),
+                        Margin = new Extents(0, 0, 0, 0)
+                    };
                     group.Label.FontStyle = UIFontStyles.AllNormal;
                     group.Label.SetBinding(TextLabel.TextProperty, "DataCount");
                     group.Label.HorizontalAlignment = HorizontalAlignment.Begin;
@@ -233,9 +236,8 @@ namespace MusicPlayer.Views
         private void OnItemSelection(object sender, SelectionChangedEventArgs e)
         {
             object selectedObject = collectionView.SelectedItem;
-            if (selectedObject is SearchModel)
+            if (selectedObject is SearchModel searchModel)
             {
-                SearchModel searchModel = (SearchModel)selectedObject;
                 if (searchModel.ItemType == 0)
                 {
                     Artist currentArtist = searchModel.ArtistDetail;
index d8612128544aa7efd1724b32e17eadcb2c20da7f..cd79f851d1505b4e05127a75b251c0cea4f6d465 100755 (executable)
@@ -180,6 +180,16 @@ namespace MusicPlayer.Views
                     }
                 };
             }
+            else if(currentViewType == OperationViewType.AddToCurrentPlaylist)
+            {
+                bool AddedItems = viewModel.AddMediaToPlaylist(SelectedItemList);
+                ClearSelectionAndRemove();
+            }
+            else if(currentViewType == OperationViewType.RemoveFromCurrentPlaylist)
+            {
+                bool RemovedItems = viewModel.RemoveMediaFromPlaylist(SelectedItemList);
+                ClearSelectionAndRemove();
+            }
         }
 
         private void ClearSelectionAndRemove()
@@ -356,15 +366,13 @@ namespace MusicPlayer.Views
                 if (item != null && !newSel.Contains(item))
                 {
                     itemCount--;
-                    if (item is Track)
+                    if (item is Track trackItem)
                     {
-                        Track trackItem = (Track)item;
                         trackItem.IsSelected = false;
                         selectedItemList.Remove(trackItem.Id);
                     }
-                    else if (item is Artist)
+                    else if (item is Artist artistItem)
                     {
-                        Artist artistItem = (Artist)item;
                         artistItem.IsSelected = false;
                         string text = artistItem.ArtistName;
                         if (text == "Unknown")
@@ -375,9 +383,8 @@ namespace MusicPlayer.Views
                             selectedItemList.Remove(track.Id);
                         }
                     }
-                    else if (item is MusicAlbum)
+                    else if (item is MusicAlbum albumItem)
                     {
-                        MusicAlbum albumItem = (MusicAlbum)item;
                         albumItem.IsSelected = false;
                         List<AudioInfo> albumTrackList = AlbumDataProvider.GetAlbumTrackList(albumItem.Id);
                         foreach (AudioInfo track in albumTrackList)
@@ -385,9 +392,8 @@ namespace MusicPlayer.Views
                             selectedItemList.Remove(track.Id);
                         }
                     }
-                    else if(item is PlaylistModel)
+                    else if (item is PlaylistModel playlistItem)
                     {
-                        PlaylistModel playlistItem = (PlaylistModel)item;
                         playlistItem.PlaylistIsSelected = false;
                         selectedItemList.Remove(playlistItem.PlaylistId.ToString());
                     }
@@ -399,15 +405,13 @@ namespace MusicPlayer.Views
                 if (item != null && !oldSel.Contains(item))
                 {
                     itemCount++;
-                    if (item is Track)
+                    if (item is Track trackItem)
                     {
-                        Track trackItem = (Track)item;
                         trackItem.IsSelected = true;
                         selectedItemList.Add(trackItem.Id);
                     }
-                    else if (item is Artist)
+                    else if (item is Artist artistItem)
                     {
-                        Artist artistItem = (Artist)item;
                         artistItem.IsSelected = true;
                         string text = artistItem.ArtistName;
                         if (text == "Unknown")
@@ -418,9 +422,8 @@ namespace MusicPlayer.Views
                             selectedItemList.Add(track.Id);
                         }
                     }
-                    else if (item is MusicAlbum)
+                    else if (item is MusicAlbum albumItem)
                     {
-                        MusicAlbum albumItem = (MusicAlbum)item;
                         albumItem.IsSelected = true;
                         List<AudioInfo> albumTrackList = AlbumDataProvider.GetAlbumTrackList(albumItem.Id);
                         foreach (AudioInfo track in albumTrackList)
@@ -428,9 +431,8 @@ namespace MusicPlayer.Views
                             selectedItemList.Add(track.Id);
                         }
                     }
-                    else if (item is PlaylistModel)
+                    else if (item is PlaylistModel playlistItem)
                     {
-                        PlaylistModel playlistItem = (PlaylistModel)item;
                         playlistItem.PlaylistIsSelected = true;
                         selectedItemList.Add(playlistItem.PlaylistId.ToString());
                     }
index c7d5ffd1d53669d3bebaa3bb8a4e480378e0792d..86ff41c1e9350ceb5e9f2126e3db2beaca082a86 100755 (executable)
@@ -7,7 +7,7 @@ using Tizen.NUI.Components;
 using Tizen.NUI.BaseComponents;
 using MusicPlayer.Views.Utils;
 using MusicPlayer.Common;
-
+using MusicPlayer.Core;
 
 namespace MusicPlayer.Views
 {
@@ -16,7 +16,8 @@ namespace MusicPlayer.Views
         private Window window;
         private ViewLibrary viewLibrary;
         private View rootView;
-        private  BaseView baseView;
+        private BaseView baseView;
+        private View miniPlayer;
         private static string[] TabNames = new string[]
         {
             "Playlists",
@@ -126,6 +127,15 @@ namespace MusicPlayer.Views
             baseView.Tabs.ItemChangedEvent += OnTabItemSelect;
             baseView.GetSearchButton().Clicked += OnSearchIconClicked;
             SetTabItem(-1, (int)ContentViewType.Playlist);
+            miniPlayer = PlaybackHelper.Instance.GetMiniPlayer();
+            View separator = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = 1,
+                StyleName = "InputLine",
+            };
+            rootview.Add(separator);
+            rootView.Add(miniPlayer);
         }
 
         private void OnSearchIconClicked(object sender, ClickedEventArgs e)
@@ -143,9 +153,9 @@ namespace MusicPlayer.Views
             baseView.AddSubViewContent(subViewAddEventArgs.TitleText, baseSubContentView);
         }
 
-        private void OnOpeationViewAdded(object sender, OperationViewAddEventArgs e)
+        private void OnOperationViewAdded(object sender, OperationViewAddEventArgs e)
         {
-            viewLibrary.AddOperationView(e.OperationViewType, e.ContentViewType, e.ViewModelData);
+            viewLibrary.AddOperationView(e.OperationViewType, e.ContentViewType, e.ViewModelData, e.CallerViewModel);
         }
 
         private void SetTabItem(int previousIndex, int currentIndex)
@@ -159,7 +169,7 @@ namespace MusicPlayer.Views
                 if(previousContentView != null)
                 {
                     previousContentView.SubContentViewAdded -= OnSubViewAdded;
-                    previousContentView.OperationViewAdded -= OnOpeationViewAdded;
+                    previousContentView.OperationViewAdded -= OnOperationViewAdded;
                 }
                 Tizen.Log.Error(AppConstants.LogTag, "Removing " + previousContentView.Name);
             }
@@ -172,7 +182,7 @@ namespace MusicPlayer.Views
                 if (currentContentView != null)
                 {
                     currentContentView.SubContentViewAdded += OnSubViewAdded;
-                    currentContentView.OperationViewAdded += OnOpeationViewAdded;
+                    currentContentView.OperationViewAdded += OnOperationViewAdded;
                 }
                 Tizen.Log.Error(AppConstants.LogTag, "Adding " + currentContentView.Name);
             }
index 580761c3bcb9e00c585f6343821b6b2502306b5d..d02b5cb060f4ad7104e265acca81557a224a04a2 100755 (executable)
@@ -6,6 +6,7 @@ xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components"
 Id="DarkTheme">
 
   <ViewStyle x:Key="AppBackground" BackgroundColor="#0E1017" />
+  <ViewStyle x:Key="MiniPlayer" BackgroundColor="#0E1017" />
   <ViewStyle x:Key="InputLine" BackgroundColor="#FFFFFF" />
   <ViewStyle x:Key="SearchBox" BackgroundImage="*Resource*/images/dark/search_box_bg.png" />
   <ViewStyle x:Key="SelectAllBg" BackgroundImage="*Resource*/images/dark/selectall_bg.png" />
@@ -20,7 +21,7 @@ Id="DarkTheme">
     </c:DefaultTitleItemStyle.Label>
   </c:DefaultTitleItemStyle>
 
-  <c:ButtonStyle x:Key="PrevButton" Size="48, 48" Position="168, 196" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
+  <c:ButtonStyle x:Key="PrevButton" Size="48, 48" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
     <c:ButtonStyle.Icon>
       <ImageViewStyle>
         <ImageViewStyle.ResourceUrl>
@@ -30,7 +31,7 @@ Id="DarkTheme">
     </c:ButtonStyle.Icon>
   </c:ButtonStyle>
 
-  <c:ButtonStyle x:Key="NextButton" Size="48, 48" Position="424, 196" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
+  <c:ButtonStyle x:Key="NextButton" Size="48, 48" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
     <c:ButtonStyle.Icon>
       <ImageViewStyle>
         <ImageViewStyle.ResourceUrl>
index d42a9c7cd0c800b33d66635cc9525de861608d6d..8b11e4a3b27525a0f74166d22a6108154287c94a 100755 (executable)
@@ -6,6 +6,7 @@ xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components"
 Id="LightTheme">
 
   <ViewStyle x:Key="AppBackground" BackgroundColor="#EEEFF1" />
+  <ViewStyle x:Key="MiniPlayer" BackgroundColor="#FFFFFF" />
   <ViewStyle x:Key="InputLine" BackgroundColor="#0A0E4A" />
   <ViewStyle x:Key="SearchBox" BackgroundImage="*Resource*/images/light/search_box_bg.png" />
   <ViewStyle x:Key="SelectAllBg" BackgroundImage="*Resource*/images/light/selectall_bg.png" />
@@ -20,7 +21,7 @@ Id="LightTheme">
     </c:DefaultTitleItemStyle.Label>
   </c:DefaultTitleItemStyle>
 
-  <c:ButtonStyle x:Key="PrevButton" Size="48, 48" Position="168, 196" BackgroundColor="Transparent">
+  <c:ButtonStyle x:Key="PrevButton" Size="48, 48" BackgroundColor="Transparent" >
     <c:ButtonStyle.Icon>
       <ImageViewStyle>
         <ImageViewStyle.ResourceUrl>
@@ -30,7 +31,7 @@ Id="LightTheme">
     </c:ButtonStyle.Icon>
   </c:ButtonStyle>
 
-  <c:ButtonStyle x:Key="NextButton" Size="48, 48" Position="424, 196" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+  <c:ButtonStyle x:Key="NextButton" Size="48, 48" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
     <c:ButtonStyle.Icon>
       <ImageViewStyle>
         <ImageViewStyle.ResourceUrl>
index 454cb85650dc893152a719b45962db1688d63d5e..c1781b3fc06dddeea8e10832610eebf857c74219 100755 (executable)
Binary files a/packaging/org.tizen.MusicPlayer-1.0.0.tpk and b/packaging/org.tizen.MusicPlayer-1.0.0.tpk differ