From: shivamv Date: Mon, 15 Nov 2021 05:15:26 +0000 (+0530) Subject: 1. Added add/remove songs from Playlist X-Git-Tag: submit/tizen/20211125.074930~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a1185234ec741f1b0743af523cb24300859d7877;p=profile%2Fiot%2Fapps%2Fdotnet%2Fmusic-player.git 1. Added add/remove songs from Playlist 2. Added MiniPlayer Change-Id: Ie89dbc7344cb2f25d9d08a2b68bf9237dd77a3e8 Signed-off-by: shivamv --- diff --git a/music-player/Core/PlaybackHelper.cs b/music-player/Core/PlaybackHelper.cs index 6f9c4ca..f454312 100755 --- a/music-player/Core/PlaybackHelper.cs +++ b/music-player/Core/PlaybackHelper.cs @@ -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 trackList, Track startingTrack) { ShowPlayer(); diff --git a/music-player/Core/PlaylistManager.cs b/music-player/Core/PlaylistManager.cs index 0757917..264132b 100755 --- a/music-player/Core/PlaylistManager.cs +++ b/music-player/Core/PlaylistManager.cs @@ -193,15 +193,24 @@ namespace MusicPlayer.Core return isTrackDeleted; } - public bool DeleteTrackList(int playlistId, List memberList) + public bool DeleteTrackList(int playlistId, List 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(); } diff --git a/music-player/MediaContent/PlaylistContents.cs b/music-player/MediaContent/PlaylistContents.cs index 9700a5c..e37c026 100755 --- a/music-player/MediaContent/PlaylistContents.cs +++ b/music-player/MediaContent/PlaylistContents.cs @@ -36,9 +36,7 @@ namespace MusicPlayer.Media public static Playlist GetPlaylistById(int playlistId) { - Playlist list = null; - list = playlistInfo.Select(playlistId); - return list; + return playlistInfo.Select(playlistId); } public static Playlist CreatePlaylist(string name) @@ -78,6 +76,11 @@ namespace MusicPlayer.Media return playlistInfo.CountMember(playlistId); } + public static int GetMemberId(int playlistId, string mediaId) + { + return playlistInfo.GetMemberId(playlistId, mediaId); + } + public static bool DeletePlaylist(int playlistId) { return playlistInfo.Delete(playlistId); diff --git a/music-player/ViewModels/PlaylistDetailViewModel.cs b/music-player/ViewModels/PlaylistDetailViewModel.cs index c4677d0..dbb9b96 100755 --- a/music-player/ViewModels/PlaylistDetailViewModel.cs +++ b/music-player/ViewModels/PlaylistDetailViewModel.cs @@ -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 listViewModel; + public int PlaylistId { get; internal set; } + + private readonly ListViewModel listViewModel; public ListViewModel ListViewModel { diff --git a/music-player/ViewModels/SelectorViewModel.cs b/music-player/ViewModels/SelectorViewModel.cs index 3e91a0c..c0753ab 100755 --- a/music-player/ViewModels/SelectorViewModel.cs +++ b/music-player/ViewModels/SelectorViewModel.cs @@ -1,18 +1,21 @@ using System.Collections.Generic; using MusicPlayer.Models; using MusicPlayer.Common; +using MusicPlayer.Core; namespace MusicPlayer.ViewModels { class SelectorViewModel : PropertyNotifier where T : new() { PlaylistSelectorViewModel playlistSelectorViewModel; + readonly object callerViewModel; - public SelectorViewModel(ListViewModel viewModel) + public SelectorViewModel(ListViewModel viewModel, object callerViewModel = null) { listViewModel = viewModel; SelectedCount = "0"; TotalCount = ListViewModel.Count; + this.callerViewModel = callerViewModel; } private readonly ListViewModel listViewModel; @@ -41,9 +44,23 @@ namespace MusicPlayer.ViewModels return tracksShared; } + public bool AddMediaToPlaylist(List mediaList) + { + PlaylistDetailViewModel playlistDetailViewModel = (PlaylistDetailViewModel)callerViewModel; + bool tracksAdded = PlaylistManager.Instance.AddTracks(playlistDetailViewModel.PlaylistId, mediaList); + return tracksAdded; + } + + public bool RemoveMediaFromPlaylist(List mediaList) + { + PlaylistDetailViewModel playlistDetailViewModel = (PlaylistDetailViewModel)callerViewModel; + bool tracksRemoved = PlaylistManager.Instance.DeleteTrackList(playlistDetailViewModel.PlaylistId, mediaList); + return tracksRemoved; + } + public PlaylistSelectorViewModel GetPlaylistSelectorViewModel(List addedTrackList) { - return playlistSelectorViewModel ?? new PlaylistSelectorViewModel(addedTrackList); + return playlistSelectorViewModel ??= new PlaylistSelectorViewModel(addedTrackList); } } } diff --git a/music-player/Views/BaseView.cs b/music-player/Views/BaseView.cs index 452f79a..b1e87be 100755 --- a/music-player/Views/BaseView.cs +++ b/music-player/Views/BaseView.cs @@ -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 index 0000000..36e9b98 --- /dev/null +++ b/music-player/Views/MiniPlayer.cs @@ -0,0 +1,324 @@ +using Tizen.NUI; +using Tizen.NUI.Components; +using Tizen.NUI.BaseComponents; +using Tizen.NUI.Binding; +using MusicPlayer.Common; +using MusicPlayer.ViewModels; +using MusicPlayer.Views.Utils; +using System.Collections.Generic; +using MusicPlayer.Core; + +namespace MusicPlayer.Views +{ + class MiniPlayer : View + { + private ImageView thumbnail; + private View trackInfo; + private TextLabel titleLabel; + private TextLabel artistLabel; + + private View controlsView; + private View sliderView; + private MultiStateButton playButton; + private Button prevButton; + private Button nextButton; + private Slider playbackSlider; + private TextLabel currentTime; + private TextLabel totalTime; + + private readonly PlayerViewModel viewModel; + + public MiniPlayer(PlayerViewModel viewModel) : base() + { + this.viewModel = viewModel; + BindingContext = viewModel.playerModel; + StyleName = "MiniPlayer"; + ThemeChangeSensitive = true; + WidthSpecification = LayoutParamPolicies.MatchParent; + HeightSpecification = 124; + Layout = new FlexLayout() + { + Direction = FlexLayout.FlexDirection.Row, + Padding = new Extents(64, 64, 24, 19), + }; + AddTrackDetails(); + AddControlElements(); + AddSliderElements(); + } + + private void AddTrackDetails() + { + AddThumbnail(); + trackInfo = new View() + { + WidthSpecification = 666, + Layout = new FlexLayout() + { + Direction = FlexLayout.FlexDirection.Column, + Padding = new Extents(30, 120, 0, 0), + Margin = new Extents(0, 0, 0, 5), + } + }; + base.Add(trackInfo); + AddTrackName(); + AddArtistName(); + } + + private void AddThumbnail() + { + thumbnail = new ImageView() + { + BackgroundColor = UIColors.HEXEEEFF1, + Size2D = new Size2D(76, 76), + Margin = new Extents(0, 0, 0, 5), + }; + thumbnail.SetBinding(ImageView.ResourceUrlProperty, "ThumbnailPath"); + thumbnail.TouchEvent += (object source, TouchEventArgs e) => + { + PlaybackHelper.Instance.ShowPlayer(); + return true; + }; + base.Add(thumbnail); + } + + private void AddTrackName() + { + titleLabel = new TextLabel() + { + StyleName = "TitleText", + ThemeChangeSensitive = true, + Size2D = new Size2D(516, 48), + PixelSize = 36, + FontFamily = "BreezeSans", + HorizontalAlignment = HorizontalAlignment.Begin, + VerticalAlignment = VerticalAlignment.Center, + Ellipsis = true, + }; + titleLabel.SetBinding(TextLabel.TextProperty, "TrackName"); + trackInfo.Add(titleLabel); + } + + private void AddArtistName() + { + artistLabel = new TextLabel() + { + StyleName = "TitleText", + ThemeChangeSensitive = true, + Size2D = new Size2D(382, 28), + PixelSize = 22, + FontFamily = "BreezeSans", + HorizontalAlignment = HorizontalAlignment.Begin, + VerticalAlignment = VerticalAlignment.Center, + Ellipsis = true, + }; + artistLabel.SetBinding(TextLabel.TextProperty, "TrackArtist"); + trackInfo.Add(artistLabel); + } + private void AddControlElements() + { + controlsView = new View() + { + WidthSpecification = 304, + Layout = new LinearLayout() + { + CellPadding = new Size2D(80, 0), + LinearAlignment = LinearLayout.Alignment.CenterVertical, + LinearOrientation = LinearLayout.Orientation.Horizontal, + }, + Margin = new Extents(0, 120, 14, 19), + }; + base.Add(controlsView); + AddPreviousButton(); + AddPlayButton(); + AddNextButton(); + } + + private void AddPreviousButton() + { + prevButton = new Button("PrevButton") + { + ThemeChangeSensitive = true, + }; + prevButton.Clicked += (object sender, ClickedEventArgs e) => + { + viewModel.PrevButtonClicked(); + }; + prevButton.BindingContext = viewModel; + prevButton.SetBinding(Button.IsEnabledProperty, "HasPreviousTrack"); + controlsView.Add(prevButton); + } + + private void AddPlayButton() + { + playButton = new MultiStateButton() + { + Size2D = new Size2D(48, 48), + BackgroundColor = Color.Transparent, + IconResources = new Dictionary>() + { + { + ThemeType.Light, + new Dictionary() + { + { + "Play", + new StringSelector() + { + Normal = Resources.GetImagePath() + "light/play.png", + Pressed = Resources.GetImagePath() + "play_pressed.png", + Disabled = Resources.GetImagePath() + "play_disabled.png", + } + }, + { + "Pause", + new StringSelector() + { + Normal = Resources.GetImagePath() + "light/pause.png", + Pressed = Resources.GetImagePath() + "pause_pressed.png", + Disabled = Resources.GetImagePath() + "pause_disabled.png", + } + }, + } + }, + { + ThemeType.Dark, + new Dictionary() + { + { + "Play", + new StringSelector() + { + Normal = Resources.GetImagePath() + "dark/play.png", + Pressed = Resources.GetImagePath() + "play_pressed.png", + Disabled = Resources.GetImagePath() + "play_disabled.png", + } + }, + { + "Pause", + new StringSelector() + { + Normal = Resources.GetImagePath() + "dark/pause.png", + Pressed = Resources.GetImagePath() + "pause_pressed.png", + Disabled = Resources.GetImagePath() + "pause_disabled.png", + } + }, + } + } + }, + }; + playButton.BindingContext = viewModel; + playButton.SetBinding(MultiStateButton.CustomStateProperty, "PlayButtonState"); + controlsView.Add(playButton); + playButton.Clicked += (object sender, ClickedEventArgs e) => + { + viewModel.PlayingStatusChanged(); + }; + } + + private void AddNextButton() + { + nextButton = new Button("NextButton") + { + ThemeChangeSensitive = true, + }; + nextButton.Clicked += (object sender, ClickedEventArgs e) => + { + viewModel.NextButtonClicked(); + }; + nextButton.BindingContext = viewModel; + nextButton.SetBinding(Button.IsEnabledProperty, "HasNextTrack"); + controlsView.Add(nextButton); + } + + private void AddSliderElements() + { + sliderView = new View() + { + WidthSpecification = 626, + BackgroundColor = Color.Transparent, + Margin = new Extents(0, 0, 19, 0), + }; + base.Add(sliderView); + AddPlaybackSlider(); + AddCurrentTimeLabel(); + AddTotalTimeLabel(); + } + + private void AddPlaybackSliderEventHandler() + { + playbackSlider.SlidingStarted += (object sender, SliderSlidingStartedEventArgs e) => + { + viewModel.StopPlaybackTimer(); + }; + playbackSlider.ValueChanged += (object sender, SliderValueChangedEventArgs e) => + { + viewModel.SetElapsedTime(e.CurrentValue); + }; + playbackSlider.SlidingFinished += (object sender, SliderSlidingFinishedEventArgs e) => + { + viewModel.UpdatePlayerPosition(e.CurrentValue); + }; + } + + private void AddPlaybackSlider() + { + playbackSlider = new Slider("Slider") + { + ThemeChangeSensitive = true, + MinValue = 0.0f, + MaxValue = 1.0f, + WidthResizePolicy = ResizePolicyType.FillToParent, + SizeHeight = 38, + ThumbSize = new Tizen.NUI.Size(30, 30), + Direction = Slider.DirectionType.Horizontal, + }; + playbackSlider.SetBinding(Slider.CurrentValueProperty, "ElapsedTime"); + sliderView.Add(playbackSlider); + AddPlaybackSliderEventHandler(); + } + + private void AddCurrentTimeLabel() + { + currentTime = new TextLabel() + { + StyleName = "TitleText", + ThemeChangeSensitive = true, + Size2D = new Size2D(180, 24), + Position2D = new Position2D(0, 38), + PixelSize = 18, + FontFamily = "BreezeSans", + Text = "00::00:00", + HorizontalAlignment = HorizontalAlignment.Begin, + }; + currentTime.SetBinding(TextLabel.TextProperty, "PlayingTime"); + sliderView.Add(currentTime); + } + + private void AddTotalTimeLabel() + { + totalTime = new TextLabel() + { + StyleName = "TitleText", + ThemeChangeSensitive = true, + Size2D = new Size2D(180, 24), + Position2D = new Position2D(626 - 180, 38), + PixelSize = 18, + FontFamily = "BreezeSans", + HorizontalAlignment = HorizontalAlignment.End, + Text = "59:59:59", + }; + totalTime.SetBinding(TextLabel.TextProperty, "TrackLength"); + sliderView.Add(totalTime); + } + + public void ShowView() + { + Show(); + } + + public void HideView() + { + Hide(); + } + } +} diff --git a/music-player/Views/PlayerView.cs b/music-player/Views/PlayerView.cs index 4dace26..996ae4a 100755 --- a/music-player/Views/PlayerView.cs +++ b/music-player/Views/PlayerView.cs @@ -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) => { diff --git a/music-player/Views/PlaylistDetailView.cs b/music-player/Views/PlaylistDetailView.cs index 4185a8d..6085bac 100755 --- a/music-player/Views/PlaylistDetailView.cs +++ b/music-player/Views/PlaylistDetailView.cs @@ -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); } diff --git a/music-player/Views/PlaylistSelectorView.cs b/music-player/Views/PlaylistSelectorView.cs index bb56cb8..78b42af 100755 --- a/music-player/Views/PlaylistSelectorView.cs +++ b/music-player/Views/PlaylistSelectorView.cs @@ -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") { diff --git a/music-player/Views/SearchView.cs b/music-player/Views/SearchView.cs index 424483a..d4b1e0b 100755 --- a/music-player/Views/SearchView.cs +++ b/music-player/Views/SearchView.cs @@ -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; diff --git a/music-player/Views/SelectorView.cs b/music-player/Views/SelectorView.cs index d861212..cd79f85 100755 --- a/music-player/Views/SelectorView.cs +++ b/music-player/Views/SelectorView.cs @@ -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 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 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()); } diff --git a/music-player/Views/ViewManager.cs b/music-player/Views/ViewManager.cs index c7d5ffd..86ff41c 100755 --- a/music-player/Views/ViewManager.cs +++ b/music-player/Views/ViewManager.cs @@ -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); } diff --git a/music-player/res/themes/dark.xaml b/music-player/res/themes/dark.xaml index 580761c..d02b5cb 100755 --- a/music-player/res/themes/dark.xaml +++ b/music-player/res/themes/dark.xaml @@ -6,6 +6,7 @@ xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components" Id="DarkTheme"> + @@ -20,7 +21,7 @@ Id="DarkTheme"> - + @@ -30,7 +31,7 @@ Id="DarkTheme"> - + diff --git a/music-player/res/themes/light.xaml b/music-player/res/themes/light.xaml index d42a9c7..8b11e4a 100755 --- a/music-player/res/themes/light.xaml +++ b/music-player/res/themes/light.xaml @@ -6,6 +6,7 @@ xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components" Id="LightTheme"> + @@ -20,7 +21,7 @@ Id="LightTheme"> - + @@ -30,7 +31,7 @@ Id="LightTheme"> - + diff --git a/packaging/org.tizen.MusicPlayer-1.0.0.tpk b/packaging/org.tizen.MusicPlayer-1.0.0.tpk index 454cb85..c1781b3 100755 Binary files a/packaging/org.tizen.MusicPlayer-1.0.0.tpk and b/packaging/org.tizen.MusicPlayer-1.0.0.tpk differ