From 26c81a958899b5de8d150a650587e7af0765e113 Mon Sep 17 00:00:00 2001 From: Hyerim Kim Date: Mon, 5 Jun 2017 18:23:09 +0900 Subject: [PATCH 01/16] Fixed Coding rule check Change-Id: I814ab960b9b341f5a017132c5b9dd608b01f043c Signed-off-by: Hyerim Kim --- TVMediaHub/TVMediaHub.Tizen/Models/ContentProvider.cs | 3 ++- TVMediaHub/TVMediaHub.Tizen/Models/ImageProvider.cs | 1 + TVMediaHub/TVMediaHub.Tizen/Models/MusicProvider.cs | 1 + TVMediaHub/TVMediaHub.Tizen/Models/VideoProvider.cs | 1 + TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs | 3 ++- TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs | 7 +++++-- TVMediaHub/TVMediaHub.Tizen/Views/ImageGroup.xaml.cs | 1 + TVMediaHub/TVMediaHub.Tizen/Views/ImageItem.xaml.cs | 5 +++-- TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs | 2 ++ TVMediaHub/TVMediaHub.Tizen/Views/ImageViewer.xaml.cs | 4 ++-- TVMediaHub/TVMediaHub.Tizen/Views/SimpleImageViewer.xaml.cs | 1 + TVMediaHub/TVMediaHub.Tizen/Views/VideoGroup.xaml.cs | 3 ++- TVMediaHub/TVMediaHub.Tizen/Views/VideoItem.xaml.cs | 7 ++++--- TVMediaHub/TVMediaHub.Tizen/Views/VideoPlayer.xaml.cs | 4 +++- TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs | 8 ++++---- 15 files changed, 34 insertions(+), 17 deletions(-) mode change 100644 => 100755 TVMediaHub/TVMediaHub.Tizen/Views/SimpleImageViewer.xaml.cs diff --git a/TVMediaHub/TVMediaHub.Tizen/Models/ContentProvider.cs b/TVMediaHub/TVMediaHub.Tizen/Models/ContentProvider.cs index c15c604..672cfd0 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Models/ContentProvider.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Models/ContentProvider.cs @@ -52,6 +52,7 @@ namespace TVMediaHub.Tizen.Models /// /// An abstract method to determine the availability of the content. /// + /// A media content to be checked the availability abstract protected void CheckUnavailableContent(MediaInformationEx mediaContent); /// @@ -304,7 +305,7 @@ namespace TVMediaHub.Tizen.Models /// A method for making thumbnail of Media contents. /// /// A list of media contents - /// + /// A path of thumbnail public async Task CheckThumbnail(IEnumerable list) { foreach (var info in list) diff --git a/TVMediaHub/TVMediaHub.Tizen/Models/ImageProvider.cs b/TVMediaHub/TVMediaHub.Tizen/Models/ImageProvider.cs index 63f1f5f..7a0cd72 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Models/ImageProvider.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Models/ImageProvider.cs @@ -46,6 +46,7 @@ namespace TVMediaHub.Tizen.Models /// /// A method to determine the availability of the content. /// + /// A media content to be checked the availability protected override void CheckUnavailableContent(MediaInformationEx mediaContent) { if (mediaContent.MediaContentInformation.FilePath != null) diff --git a/TVMediaHub/TVMediaHub.Tizen/Models/MusicProvider.cs b/TVMediaHub/TVMediaHub.Tizen/Models/MusicProvider.cs index d874120..381a321 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Models/MusicProvider.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Models/MusicProvider.cs @@ -44,6 +44,7 @@ namespace TVMediaHub.Tizen.Models /// /// A method to determine the availability of the content. /// + /// A media content to be checked the availability protected override void CheckUnavailableContent(MediaInformationEx mediaContent) { // TODO : Add unsupported mime type here diff --git a/TVMediaHub/TVMediaHub.Tizen/Models/VideoProvider.cs b/TVMediaHub/TVMediaHub.Tizen/Models/VideoProvider.cs index 7417734..ed9ca1b 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Models/VideoProvider.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Models/VideoProvider.cs @@ -47,6 +47,7 @@ namespace TVMediaHub.Tizen.Models /// /// A method to determine the availability of the content. /// + /// A media content to be checked the availability protected override void CheckUnavailableContent(MediaInformationEx mediaContent) { // TODO : Add unsupported mime type here diff --git a/TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs b/TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs index b36e2e5..90c384f 100755 --- a/TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs +++ b/TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs @@ -466,13 +466,14 @@ namespace TVMediaHub.Tizen.ViewModels SelectedList.Clear(); SelectedList.Add(SelectedItem); } + foreach (var info in SelectedList) { try { File.Delete(info.MediaContentInformation.FilePath); } - catch(Exception exception) + catch (Exception exception) { // TODO: Handling exceptions DbgPort.E("Exception - " + exception.Message); diff --git a/TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs b/TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs index 749edca..372eb07 100755 --- a/TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs +++ b/TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs @@ -142,7 +142,8 @@ namespace TVMediaHub.Tizen.ViewModels public int CurrentVideoIndex { get; set; } public List PlayList { get; set; } - public bool IsLastVideo { + public bool IsLastVideo + { get { return (PlayList.Count - 1) == CurrentVideoIndex; @@ -255,13 +256,14 @@ namespace TVMediaHub.Tizen.ViewModels SelectedList.Clear(); SelectedList.Add(SelectedItem); } + foreach (var info in SelectedList) { try { File.Delete(info.MediaContentInformation.FilePath); } - catch(Exception exception) + catch (Exception exception) { // TODO: Handling exceptions DbgPort.E("Exception - " + exception.Message); @@ -434,6 +436,7 @@ namespace TVMediaHub.Tizen.ViewModels /// A method for reading video contents through VideoProvider and updating VideoList /// /// A current sort option + /// A storage id private async void ReadVideoList(SortOption option, string storageId = null) { VideoList.Clear(); diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/ImageGroup.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/ImageGroup.xaml.cs index 4a5fe66..f87f44f 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/ImageGroup.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/ImageGroup.xaml.cs @@ -363,6 +363,7 @@ namespace TVMediaHub.Tizen.Views focusedItem.ShowContextPopup(); return true; } + return false; } } diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/ImageItem.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/ImageItem.xaml.cs index 856e647..a3d7c88 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/ImageItem.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/ImageItem.xaml.cs @@ -419,6 +419,7 @@ namespace TVMediaHub.Tizen.Views IsLoaded = true; } } + public void ShowContextPopup() { if (!FocusArea.IsFocused) @@ -429,12 +430,12 @@ namespace TVMediaHub.Tizen.Views ContextPopup popup = new ContextPopup(); popup.Items.Add(new ContextPopupItem("FILE INFO")); popup.Items.Add(new ContextPopupItem("DELETE")); - popup.SelectedIndexChanged += selectedIndexChanged; + popup.SelectedIndexChanged += SelectedIndexChanged; popup.Show(this, this.Width / 2, this.Height + SizeUtils.GetHeightSize(72)); } - private void selectedIndexChanged(object sender, EventArgs e) + private void SelectedIndexChanged(object sender, EventArgs e) { var ctxPopup = sender as ContextPopup; switch (ctxPopup.SelectedIndex) diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs index 00c50de..731d840 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs @@ -676,6 +676,7 @@ namespace TVMediaHub.Tizen.Views App.MainWindow.KeyUp -= MenuKeyListener; App.MainWindow.KeyUngrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName); } + private void MenuKeyListener(object sender, ElmSharp.EvasKeyEventArgs e) { if (e.KeyName.Equals(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName)) @@ -719,6 +720,7 @@ namespace TVMediaHub.Tizen.Views { DeleteContentCommand?.Execute(item); } + break; } diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/ImageViewer.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/ImageViewer.xaml.cs index e0b854a..b858412 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/ImageViewer.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/ImageViewer.xaml.cs @@ -451,7 +451,7 @@ namespace TVMediaHub.Tizen.Views /// /// A method for getting visible image /// - /// + /// The image to be seen private Xamarin.Forms.Image GetVisibleImage() { Xamarin.Forms.Image visibleImage = null; @@ -477,7 +477,7 @@ namespace TVMediaHub.Tizen.Views /// /// A method for getting invisible image /// - /// + /// The image to be unseen private Xamarin.Forms.Image GetUnVisibleImage() { Xamarin.Forms.Image unVisibleImage = null; diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/SimpleImageViewer.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/SimpleImageViewer.xaml.cs old mode 100644 new mode 100755 index 27593f9..e404f83 --- a/TVMediaHub/TVMediaHub.Tizen/Views/SimpleImageViewer.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/SimpleImageViewer.xaml.cs @@ -711,6 +711,7 @@ namespace TVMediaHub.Tizen.Views /// e /// A method for hiding control area when timer is over /// + /// The status to be set private void HideControlAreaHandler(object state) { SetControlAreaState(ControlAreaState.HIDE); diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/VideoGroup.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/VideoGroup.xaml.cs index 444ff48..ebc6a72 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/VideoGroup.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/VideoGroup.xaml.cs @@ -395,11 +395,12 @@ namespace TVMediaHub.Tizen.Views /// If group has a focused video item, true; otherwise, false public bool NotifyMenuKeyPressedToFocusedItem() { - if(focusedItem != null) + if (focusedItem != null) { focusedItem.ShowContextPopup(); return true; } + return false; } } diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/VideoItem.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/VideoItem.xaml.cs index 88c1125..2318310 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/VideoItem.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/VideoItem.xaml.cs @@ -459,12 +459,12 @@ namespace TVMediaHub.Tizen.Views ContextPopup popup = new ContextPopup(); popup.Items.Add(new ContextPopupItem(" FILE INFO ")); popup.Items.Add(new ContextPopupItem("DELETE")); - popup.SelectedIndexChanged += selectedIndexChanged; - popup.Show(this, this.Width/2, this.Height + SizeUtils.GetHeightSize(72)); + popup.SelectedIndexChanged += SelectedIndexChanged; + popup.Show(this, this.Width / 2, this.Height + SizeUtils.GetHeightSize(72)); } - private void selectedIndexChanged(object sender, EventArgs e) + private void SelectedIndexChanged(object sender, EventArgs e) { var ctxPopup = sender as ContextPopup; switch (ctxPopup.SelectedIndex) @@ -476,6 +476,7 @@ namespace TVMediaHub.Tizen.Views ContextPopupItemSelectedHandler?.Invoke(VideoInfo, VideoContextPopupItem.Delete); break; } + ctxPopup.Dismiss(); } } diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/VideoPlayer.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/VideoPlayer.xaml.cs index 5ad9244..8ef7fe9 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/VideoPlayer.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/VideoPlayer.xaml.cs @@ -270,6 +270,7 @@ namespace TVMediaHub.Tizen.Views DbgPort.D(ex.Message); return; } + PrepareAsync(); } } @@ -499,7 +500,7 @@ namespace TVMediaHub.Tizen.Views /// /// Sets the play time on the control area /// - /// + /// A current playing time private void SetPlayTime(int time) { int second = (time / 1000) % 60; @@ -558,6 +559,7 @@ namespace TVMediaHub.Tizen.Views /// e /// A method for hiding control area when timer is over /// + /// The status to be set private void HideControlAreaHandler(object state) { SetControlAreaState(ControlAreaState.HIDE); diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs index 868e5e6..86b10dd 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs @@ -25,12 +25,10 @@ using TVMediaHub.Tizen.Utils; using TVMediaHub.Tizen.ViewModels; using Xamarin.Forms; using Xamarin.Forms.PlatformConfiguration.TizenSpecific; -using Tizen.Content.MediaContent; -using static TVMediaHub.Tizen.Views.VideoItem; -using Tizen.Xamarin.Forms.Extension; namespace TVMediaHub.Tizen.Views { + using static TVMediaHub.Tizen.Views.VideoItem; /// /// A custom ContentPage for displaying the video tab /// @@ -663,6 +661,7 @@ namespace TVMediaHub.Tizen.Views App.MainWindow.KeyUp -= MenuKeyListener; App.MainWindow.KeyUngrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName); } + private void MenuKeyListener(object sender, ElmSharp.EvasKeyEventArgs e) { if (e.KeyName.Equals(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName)) @@ -675,7 +674,7 @@ namespace TVMediaHub.Tizen.Views { if (VideoTabList.Children.Count > 0) { - foreach(VideoGroup group in VideoTabList.Children) + foreach (VideoGroup group in VideoTabList.Children) { if (group.NotifyMenuKeyPressedToFocusedItem()) { @@ -705,6 +704,7 @@ namespace TVMediaHub.Tizen.Views { DeleteContentCommand?.Execute(item); } + break; } } -- 2.7.4 From 241ef878bba9350dacd7a1234dc1e17c44d1e693 Mon Sep 17 00:00:00 2001 From: "Geunsun, Lee" Date: Wed, 7 Jun 2017 10:13:54 +0900 Subject: [PATCH 02/16] Add files for Music tab Change-Id: I4a69251d327825fd904e913f0066f02471e49ec8 --- TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj b/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj index b1cbfcd..ebf69fe 100755 --- a/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj +++ b/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj @@ -86,6 +86,7 @@ + @@ -105,6 +106,12 @@ ImageTab.xaml + + MusicGroup.xaml + + + MusicItem.xaml + SimpleImageViewer.xaml @@ -301,6 +308,18 @@ Designer + + + MSBuild:UpdateDesignTimeXaml + Designer + + + + + MSBuild:UpdateDesignTimeXaml + Designer + + @@ -13,6 +14,10 @@ RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=1}"> + /// A custom ContentPage for displaying Music tab /// public partial class MusicTab : ContentPageEx { + /// + /// The flag whether content is ready + /// + private bool IsContentReady = false; /// /// Identifies the ItemsSource bindable property @@ -61,6 +68,21 @@ namespace TVMediaHub.Tizen.Views get { return (ICommand)GetValue(ChangeSortOptionCommandProperty); } set { SetValue(ChangeSortOptionCommandProperty, value); } } + + /// + /// Identifies the GetInformationsCommand bindable property + /// + public static readonly BindableProperty GetInformationsCommandProperty = BindableProperty.Create("GetInformationsCommand", typeof(ICommand), typeof(MusicTab), default(ICommand)); + + /// + /// Gets or sets GetInformationsCommand + /// + public ICommand GetInformationsCommand + { + get { return (ICommand)GetValue(GetInformationsCommandProperty); } + set { SetValue(GetInformationsCommandProperty, value); } + } + /// /// A constructor /// Initializes the size of the items that are used in Music tab @@ -74,12 +96,8 @@ namespace TVMediaHub.Tizen.Views InitializeFooter(); ItemsSource.CollectionChanged += ItemsSourceCollectionChanged; - - MusicTabViewModelLocator.ViewModel.TestRead(); - // TODO : for the test } - /// /// A method for initializing the size of the items that are used in Music tab /// @@ -119,6 +137,11 @@ namespace TVMediaHub.Tizen.Views /// protected override void InitializePage() { + if (IsContentReady == false) + { + GetInformationsCommand?.Execute(""); + IsContentReady = true; + } } /// @@ -142,6 +165,7 @@ namespace TVMediaHub.Tizen.Views { } + /// /// Occurs when an item is added, removed, changed, moved, or the entire list is refreshed. /// @@ -149,7 +173,7 @@ namespace TVMediaHub.Tizen.Views /// Information about the event private void ItemsSourceCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { - if (e.Action.ToString().Equals("Add")) + if (e.Action.ToString().Equals(NotifyCollectionChangedAction.Add.ToString())) { if (MusicNoContents.IsVisible) { @@ -162,6 +186,15 @@ namespace TVMediaHub.Tizen.Views groupView.BindingContext = groupItem; MusicContentView.Children.Add(groupView); } + else if (e.Action.ToString().Equals(NotifyCollectionChangedAction.Reset.ToString())) + { + MusicContentView.Children.Clear(); + if (!MusicNoContents.IsVisible) + { + MusicTabScrollView.IsVisible = false; + MusicNoContents.IsVisible = true; + } + } } -- 2.7.4 From 3f1e3ed495078979b6f09ec0a184d6950d0b2ae8 Mon Sep 17 00:00:00 2001 From: Hyerim Kim Date: Thu, 8 Jun 2017 16:10:41 +0900 Subject: [PATCH 06/16] Modifies DeleteContentCommand in MediaHub Change-Id: I7566087bd10f6b620654963a726c3c753b9b2887 Signed-off-by: Hyerim Kim --- TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs | 2 +- TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs | 2 +- TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs | 5 +++-- TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs | 5 +++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs b/TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs index 90c384f..fff156c 100755 --- a/TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs +++ b/TVMediaHub/TVMediaHub.Tizen/ViewModels/ImageTabViewModel.cs @@ -461,7 +461,7 @@ namespace TVMediaHub.Tizen.ViewModels DeleteContentCommand = new Command((SelectedItem) => { - if (!SelectedItem.Equals("")) + if (SelectedItem != null) { SelectedList.Clear(); SelectedList.Add(SelectedItem); diff --git a/TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs b/TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs index 372eb07..5b75e26 100755 --- a/TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs +++ b/TVMediaHub/TVMediaHub.Tizen/ViewModels/VideoTabViewModel.cs @@ -251,7 +251,7 @@ namespace TVMediaHub.Tizen.ViewModels }); DeleteContentCommand = new Command((SelectedItem) => { - if (!SelectedItem.Equals("")) + if (SelectedItem != null) { SelectedList.Clear(); SelectedList.Add(SelectedItem); diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs index 8ae6b99..81b7d10 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/ImageTab.xaml.cs @@ -564,7 +564,7 @@ namespace TVMediaHub.Tizen.Views if (answer) { - DeleteContentCommand?.Execute(""); + DeleteContentCommand?.Execute(null); GetInformationsCommand?.Execute(""); } @@ -713,7 +713,8 @@ namespace TVMediaHub.Tizen.Views bool answer = await DisplayAlert("Delete", "Delete '" + info.MediaContentInformation.Title + "'?", "Yes", "No"); if (answer) { - DeleteContentCommand?.Execute(item); + DeleteContentCommand?.Execute(info); + GetInformationsCommand?.Execute(""); } break; diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs index 86b10dd..9f27157 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/VideoTab.xaml.cs @@ -560,7 +560,7 @@ namespace TVMediaHub.Tizen.Views if (answer) { - DeleteContentCommand?.Execute(""); + DeleteContentCommand?.Execute(null); GetInformationsCommand?.Execute(""); } @@ -702,7 +702,8 @@ namespace TVMediaHub.Tizen.Views bool answer = await DisplayAlert("Delete", "Delete '" + info.MediaContentInformation.Title + "'?", "Yes", "No"); if (answer) { - DeleteContentCommand?.Execute(item); + DeleteContentCommand?.Execute(info); + GetInformationsCommand?.Execute(""); } break; -- 2.7.4 From d0e482dd6aabc55b9fa77b161e28302de7b601ac Mon Sep 17 00:00:00 2001 From: "Geunsun, Lee" Date: Wed, 7 Jun 2017 19:26:16 +0900 Subject: [PATCH 07/16] Implement the music player for the music tab Change-Id: I89095aac77e014ae8ba0ad5a73c237468b7f18d3 --- .../TVMediaHub.Tizen/Models/ContentProvider.cs | 2 + TVMediaHub/TVMediaHub.Tizen/Models/MediaHubImpl.cs | 4 + .../TVMediaHub.Tizen/Models/MusicPlayerModel.cs | 260 +++++++++++++++++++++ .../TVMediaHub.Tizen/Models/MusicProvider.cs | 1 - .../TVMediaHub.Tizen/TVMediaHub.Tizen.csproj | 12 + .../TVMediaHub.Tizen/Utils/EasingFunction.cs | 21 ++ .../ViewModels/ImageTabViewModel.cs | 5 +- .../ViewModels/MusicPlayerViewModel.cs | 105 +++++++++ .../ViewModels/MusicPlayerViewModelLocator.cs | 40 ++++ .../ViewModels/MusicTabViewModel.cs | 26 ++- .../ViewModels/MusicTabViewModelLocator.cs | 1 + .../ViewModels/VideoTabViewModelLocator.cs | 1 + .../TVMediaHub.Tizen/Views/ImageItem.xaml.cs | 1 + .../TVMediaHub.Tizen/Views/ImageViewer.xaml.cs | 3 +- .../TVMediaHub.Tizen/Views/MusicGroup.xaml.cs | 4 +- TVMediaHub/TVMediaHub.Tizen/Views/MusicItem.xaml | 20 +- .../TVMediaHub.Tizen/Views/MusicItem.xaml.cs | 8 +- TVMediaHub/TVMediaHub.Tizen/Views/MusicPlayer.xaml | 18 ++ .../TVMediaHub.Tizen/Views/MusicPlayer.xaml.cs | 37 +++ TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml | 8 +- TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs | 1 + 21 files changed, 558 insertions(+), 20 deletions(-) create mode 100644 TVMediaHub/TVMediaHub.Tizen/Models/MusicPlayerModel.cs create mode 100644 TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicPlayerViewModel.cs create mode 100644 TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicPlayerViewModelLocator.cs create mode 100644 TVMediaHub/TVMediaHub.Tizen/Views/MusicPlayer.xaml create mode 100644 TVMediaHub/TVMediaHub.Tizen/Views/MusicPlayer.xaml.cs diff --git a/TVMediaHub/TVMediaHub.Tizen/Models/ContentProvider.cs b/TVMediaHub/TVMediaHub.Tizen/Models/ContentProvider.cs index 3d21b0b..3ffb646 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Models/ContentProvider.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Models/ContentProvider.cs @@ -162,6 +162,7 @@ namespace TVMediaHub.Tizen.Models newGroupFlag = true; newTitle = mediaInformationEx.MediaContentInformation.MediaType.ToString(); } + break; case SortOption.Album: if (lastGroupItem == null || lastGroupItem.Title != (mediaInformationEx.MediaContentInformation as AudioInformation).Album) @@ -169,6 +170,7 @@ namespace TVMediaHub.Tizen.Models newGroupFlag = true; newTitle = (mediaInformationEx.MediaContentInformation as AudioInformation).Album.ToString(); } + break; case SortOption.Artist: if (lastGroupItem == null || lastGroupItem.Title != (mediaInformationEx.MediaContentInformation as AudioInformation).Artist) diff --git a/TVMediaHub/TVMediaHub.Tizen/Models/MediaHubImpl.cs b/TVMediaHub/TVMediaHub.Tizen/Models/MediaHubImpl.cs index 4e89dcc..4d4a51d 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Models/MediaHubImpl.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Models/MediaHubImpl.cs @@ -26,6 +26,7 @@ namespace TVMediaHub.Tizen.Models /// An instance of the MediaHubImpl /// private static readonly MediaHubImpl instance = new MediaHubImpl(); + /// /// Gets an instance of the MediaHubImpl /// @@ -56,6 +57,7 @@ namespace TVMediaHub.Tizen.Models /// An instance of the MusicProvider /// private static readonly MusicProvider musicProviderInstance = new MusicProvider(); + /// /// Gets an instance of the MusicProvider /// @@ -71,6 +73,7 @@ namespace TVMediaHub.Tizen.Models /// An instance of the MusicProvider /// private static readonly VideoProvider videoProviderInstance = new VideoProvider(); + /// /// Gets an instance of the MusicProvider /// @@ -86,6 +89,7 @@ namespace TVMediaHub.Tizen.Models /// An instance of the StorageProvider /// private static readonly StorageProvider storageProviderInstance = new StorageProvider(); + /// /// Gets an instance of the StorageProvider /// diff --git a/TVMediaHub/TVMediaHub.Tizen/Models/MusicPlayerModel.cs b/TVMediaHub/TVMediaHub.Tizen/Models/MusicPlayerModel.cs new file mode 100644 index 0000000..74c1294 --- /dev/null +++ b/TVMediaHub/TVMediaHub.Tizen/Models/MusicPlayerModel.cs @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Threading; +using System.Threading.Tasks; +using Tizen.Content.MediaContent; +using Tizen.Multimedia; +using TVMediaHub.Tizen.DataModels; +using TVMediaHub.Tizen.Utils; + +namespace TVMediaHub.Tizen.Models +{ + /// + /// A custom EventArgs with string fields + /// + public class MusicPlayerInfoEventArgs : EventArgs + { + public string Title; + public string Artist; + public string AlbumCover; + } + + /// + /// A custom EventArgs with double field + /// + public class MusicPlayerProgressEventArgs : EventArgs + { + public double Progress; + } + + /// + /// An instance of the MusicPlayerModel + /// + public class MusicPlayerModel + { + /// + /// A main instance class of the music player model instance + /// + private static readonly MusicPlayerModel instance = new MusicPlayerModel(); + + /// + /// An instance of the player + /// + private Player playerInstance; + + /// + /// An timer for the progressbar + /// + private Timer progressbarTimer; + + /// + /// The period of the timer + /// + private int timerPeriod = 1000; + + /// + /// An event handler for handling the current music information + /// + private EventHandler MusicPlayerInfoListener; + + /// + /// An event handler for handling the percentage of the progressbar + /// + private EventHandler MusicPlayerProgressListener; + + /// + /// The information of the current music + /// + public MediaInformationEx currentMusic; + + /// + /// Gets or sets the current music + /// + public MediaInformationEx CurrentMusic + { + get + { + return currentMusic; + } + + set + { + if (currentMusic != value) + { + currentMusic = value; + + /// 1. Stop the player + if (playerInstance.State == PlayerState.Playing) + { + StopPlayer(); + } + + /// 2. Play the current music + StartPlayerAsync((currentMusic.MediaContentInformation as AudioInformation).FilePath); + + /// 3. Update the information of the current music + MusicPlayerInfoListener?.Invoke(this, new MusicPlayerInfoEventArgs() + { + Title = (currentMusic.MediaContentInformation as AudioInformation).Title, + Artist = (currentMusic.MediaContentInformation as AudioInformation).Artist, + AlbumCover = ((currentMusic.MediaContentInformation as AudioInformation).ThumbnailPath.Length != 0) ? (currentMusic.MediaContentInformation as AudioInformation).ThumbnailPath : "img_media_no_contents.png", + }); + + /// 4. Update the progressbar of the current music + MusicPlayerProgressListener?.Invoke(this, new MusicPlayerProgressEventArgs() + { + Progress = (playerInstance.State == PlayerState.Idle || playerInstance.State == PlayerState.Preparing) ? 0 : Convert.ToDouble(playerInstance.GetPlayPosition()) / (currentMusic.MediaContentInformation as AudioInformation).Duration, + }); + } + } + } + + /// + /// Gets an instance of the music player model + /// + public static MusicPlayerModel Instance + { + get + { + return instance; + } + } + + /// + /// A constructor + /// + public MusicPlayerModel() + { + InitializePlayer(); + InitializeProgressbarTimer(); + } + + /// + /// Initialize the player instance + /// Register event handler for the player + /// + private void InitializePlayer() + { + playerInstance = new Player(); + + playerInstance.PlaybackCompleted += ((s, e) => + { + StopPlayer(); + }); + + playerInstance.PlaybackInterrupted += ((s, e) => + { + DbgPort.E("Error : " + Enum.GetName(typeof(PlayerError), e.Reason)); + + StopPlayer(); + }); + + playerInstance.ErrorOccurred += ((s, e) => + { + DbgPort.E("Error : " + Enum.GetName(typeof(PlayerError), e.Error)); + + StopPlayer(); + }); + } + + /// + /// Initialize the timer for the progressbar + /// + private void InitializeProgressbarTimer() + { + progressbarTimer = new Timer((object o) => + { + MusicPlayerProgressListener?.Invoke(this, new MusicPlayerProgressEventArgs() + { + Progress = (playerInstance.State == PlayerState.Idle || playerInstance.State == PlayerState.Preparing) ? 0 : Convert.ToDouble(playerInstance.GetPlayPosition()) / (currentMusic.MediaContentInformation as AudioInformation).Duration, + }); + }, null, Timeout.Infinite, Timeout.Infinite); + } + + /// + /// Starts the timer for the progressbar + /// + private void StartProgressbarTimer() + { + progressbarTimer.Change(0, timerPeriod); + } + + /// + /// Stops the timer for the porgressbar + /// + private void StopProgressbarTimer() + { + progressbarTimer.Change(Timeout.Infinite, Timeout.Infinite); + } + + /// + /// Plays the current music + /// + /// The file path of the media source + public void StartPlayerAsync(string filePath) + { + MediaSource source = new MediaUriSource(filePath); + playerInstance.SetSource(source); + + Task.Run(async () => + { + await playerInstance.PrepareAsync(); + + playerInstance.Start(); + + StartProgressbarTimer(); + }); + } + + /// + /// Stops the current music + /// + public void StopPlayer() + { + StopProgressbarTimer(); + + try + { + playerInstance.Stop(); + playerInstance.Unprepare(); + } + catch (Exception e) + { + DbgPort.E("Error : " + e.Message); + } + } + + /// + /// A method adds EventHandler to SetCurrentMusicInfoListener + /// + /// The EventHandler for adding + public void SetCurrentMusicInfoListener(EventHandler listener) + { + MusicPlayerInfoListener += listener; + } + + /// + /// A method adds EventHandler to SetCurrentMusicProgressListener + /// + /// The EventHandler for adding + public void SetCurrentMusicProgressListener(EventHandler listener) + { + MusicPlayerProgressListener += listener; + } + } +} diff --git a/TVMediaHub/TVMediaHub.Tizen/Models/MusicProvider.cs b/TVMediaHub/TVMediaHub.Tizen/Models/MusicProvider.cs index 381a321..95a5540 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Models/MusicProvider.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Models/MusicProvider.cs @@ -15,7 +15,6 @@ */ using System; -using Tizen.Content.MediaContent; using TVMediaHub.Tizen.DataModels; namespace TVMediaHub.Tizen.Models diff --git a/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj b/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj index 6b66f2b..0666f86 100755 --- a/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj +++ b/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj @@ -65,6 +65,7 @@ + @@ -85,7 +86,9 @@ + + @@ -136,6 +139,9 @@ VideoItem.xaml + + MusicPlayer.xaml + VideoPlayer.xaml @@ -323,6 +329,12 @@ Designer + + + MSBuild:UpdateDesignTimeXaml + Designer + + diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs index 7c5956e..c89ba88 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs @@ -84,6 +84,20 @@ namespace TVMediaHub.Tizen.Views } /// + /// Identifies the ChangeSourceCommand bindable property + /// + public static readonly BindableProperty ChangeSourceCommandProperty = BindableProperty.Create("ChangeSourceCommand", typeof(ICommand), typeof(MusicTab), default(ICommand)); + + /// + /// Gets or sets ChangeSourceCommand Command + /// + public ICommand ChangeSourceCommand + { + get { return (ICommand)GetValue(ChangeSourceCommandProperty); } + set { SetValue(ChangeSourceCommandProperty, value); } + } + + /// /// A constructor /// Initializes the size of the items that are used in Music tab /// @@ -208,7 +222,11 @@ namespace TVMediaHub.Tizen.Views /// A SelectedItemChanged event's argument private void OnSourceChanged(object sender, SelectedItemChangedEventArgs e) { - // TODO : Source Change + String storageName = e.SelectedItem as String; + + //BottomButtonList.Clear(); + ChangeSourceCommand?.Execute(storageName); + //SetFooterFocusChain(ImageTabScrollView.ScrollX); } /// -- 2.7.4 From f0b854e90857c29f8b83a6f6fbbd4e2e641a5c1f Mon Sep 17 00:00:00 2001 From: jjie Date: Fri, 30 Jun 2017 12:55:20 +0900 Subject: [PATCH 13/16] Implement mediahub music list gui Change-Id: Id966973933b2334ae481eacdc2aa1d88fe90b768 Signed-off-by: jjie --- TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml | 6 +- .../TVMediaHub.Tizen/Views/MusicGroup.xaml.cs | 7 +- TVMediaHub/TVMediaHub.Tizen/Views/MusicItem.xaml | 15 ++- .../TVMediaHub.Tizen/Views/MusicItem.xaml.cs | 130 ++++++++++++++++++--- TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml | 6 +- 5 files changed, 132 insertions(+), 32 deletions(-) diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml b/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml index 41301b1..1b9dbad 100644 --- a/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml +++ b/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml @@ -4,13 +4,13 @@ x:Class="TVMediaHub.Tizen.Views.MusicGroup" ItemsSource="{Binding Contents}"> + public EventHandler OnFocusedEventHandler; + /// + /// An EventHandler for unfocus event of the item + /// + public EventHandler OnUnfocusedEventHandler; + + /// + /// Bounds for TextArea when item is unfocused + /// + private Rectangle TextAreaNormalBounds; + /// + /// Bounds for TextArea when item is focused + /// + private Rectangle TextAreaFocusedBounds; /// /// A constructor @@ -64,35 +82,69 @@ namespace TVMediaHub.Tizen.Views { InitializeComponent(); InitializeSize(); + InitializeLabel(); PropertyChanged += MusicItemPropertyChanged; } /// + /// A method for initializing font and slide effect + /// + public void InitializeLabel() + { + SongTitle.On().SetFontWeight(FontWeight.Normal); + Artist.On().SetFontWeight(FontWeight.Normal); + AlbumTitle.On().SetFontWeight(FontWeight.Light); + + SlideEffect.SetSlideDuration(SongTitle, 15000); + SlideEffect.SetSlideMode(SongTitle, SlideMode.Auto); + + SlideEffect.SetSlideDuration(Artist, 15000); + SlideEffect.SetSlideMode(Artist, SlideMode.Auto); + + SlideEffect.SetSlideDuration(AlbumTitle, 15000); + SlideEffect.SetSlideMode(AlbumTitle, SlideMode.Auto); + } + + /// /// A method for initializing size of the items that are used in this class /// private void InitializeSize() { + int h28 = SizeUtils.GetHeightSize(28); + int h32 = SizeUtils.GetHeightSize(32); + int w32 = SizeUtils.GetWidthSize(32); + int h134 = SizeUtils.GetHeightSize(134); + int w134 = SizeUtils.GetWidthSize(134); + int w382 = SizeUtils.GetWidthSize(382); + int w446 = SizeUtils.GetWidthSize(446); + WidthRequest = SizeUtils.GetWidthSize(716); HeightRequest = SizeUtils.GetHeightSize(270); - AlbumCover.WidthRequest = SizeUtils.GetWidthSize(134); - AlbumCover.HeightRequest = SizeUtils.GetHeightSize(134); - TextArea.WidthRequest = SizeUtils.GetWidthSize(446); - TextArea.HeightRequest = SizeUtils.GetHeightSize(134); - SongTitle.WidthRequest = SizeUtils.GetWidthSize(382); - SongTitle.HeightRequest = SizeUtils.GetHeightSize(32); + + TextAreaNormalBounds = new Rectangle(SizeUtils.GetWidthSize(202), SizeUtils.GetHeightSize(68), w446, SizeUtils.GetHeightSize(134)); + TextAreaFocusedBounds = new Rectangle(SizeUtils.GetWidthSize(206), SizeUtils.GetHeightSize(64), w446, SizeUtils.GetHeightSize(142)); + + AlbumCover.WidthRequest = w134; + AlbumCover.HeightRequest = h134; + + TextArea.WidthRequest = w446; + TextArea.HeightRequest = h134; + + SongTitle.WidthRequest = w382; + SongTitle.HeightRequest = h32; SongTitle.FontSize = SizeUtils.GetFontSize(28); - SongTitle.Margin = new Thickness(SizeUtils.GetWidthSize(32), SizeUtils.GetHeightSize(18), SizeUtils.GetWidthSize(32), 0); - SongTitle.On().SetFontWeight(FontWeight.Normal); - Artist.WidthRequest = SizeUtils.GetWidthSize(382); - Artist.HeightRequest = SizeUtils.GetHeightSize(32); - Artist.Margin = new Thickness(SizeUtils.GetWidthSize(32), SizeUtils.GetHeightSize(12), SizeUtils.GetWidthSize(32), 0); - Artist.FontSize = SizeUtils.GetFontSize(28); - Artist.On().SetFontWeight(FontWeight.Normal); - AlbumTitle.WidthRequest = SizeUtils.GetWidthSize(382); - AlbumTitle.HeightRequest = SizeUtils.GetHeightSize(28); - AlbumTitle.Margin = new Thickness(SizeUtils.GetWidthSize(32), SizeUtils.GetHeightSize(4), SizeUtils.GetWidthSize(32), 0); + SongTitle.Margin = new Thickness(w32, SizeUtils.GetHeightSize(18), w32, 0); + + Artist.WidthRequest = w382; + Artist.HeightRequest = h28; + Artist.Margin = new Thickness(w32, SizeUtils.GetHeightSize(12), w32, 0); + Artist.FontSize = SizeUtils.GetFontSize(24); + + AlbumTitle.WidthRequest = w382; + AlbumTitle.HeightRequest = h28; + AlbumTitle.Margin = new Thickness(w32, SizeUtils.GetHeightSize(4), w32, 0); AlbumTitle.FontSize = SizeUtils.GetFontSize(24); - AlbumTitle.On().SetFontWeight(FontWeight.Light); + } /// @@ -114,7 +166,28 @@ namespace TVMediaHub.Tizen.Views /// A Focus event's argument private void OnItemFocused(object sender, FocusEventArgs e) { - DbgPort.D("MusicItem is focused : " + (MusicInfo.MediaContentInformation as AudioInformation).Title); + Easing easing = new Easing(EasingFunction.EasyIn1); + TextArea.LayoutTo(TextAreaFocusedBounds, 300, easing); + + AlbumCover.ScaleTo(1.0597, 300, easing); + TextArea.BackgroundColor = Color.FromHex("ffffff"); + + SongTitle.On().SetFontWeight(FontWeight.Medium); + SongTitle.TextColor = Color.FromHex("000000"); + SlideEffect.SetHasSlide(SongTitle, true); + + + Artist.On().SetFontWeight(FontWeight.Medium); + Artist.Opacity = 0.8; + Artist.TextColor = Color.FromHex("000000"); + SlideEffect.SetHasSlide(Artist, true); + + AlbumTitle.On().SetFontWeight(FontWeight.Normal); + AlbumTitle.Opacity = 0.7; + AlbumTitle.TextColor = Color.FromHex("000000"); + SlideEffect.SetHasSlide(AlbumTitle, true); + + OnFocusedEventHandler?.Invoke(sender, e); } /// @@ -124,7 +197,25 @@ namespace TVMediaHub.Tizen.Views /// A Focus event's argument private void OnItemUnfocused(object sender, FocusEventArgs e) { - DbgPort.D("MusicItem is unfocused : " + (MusicInfo.MediaContentInformation as AudioInformation).Title); + Easing easing = new Easing(EasingFunction.EasyIn2); + TextArea.LayoutTo(TextAreaNormalBounds, 300, easing); + + AlbumCover.ScaleTo(1.0, 300, easing); + TextArea.BackgroundColor = Color.FromHex("171717"); + + SongTitle.On().SetFontWeight(FontWeight.Normal); + SongTitle.TextColor = Color.FromHex("ffffff"); + SlideEffect.SetHasSlide(SongTitle, false); + + Artist.On().SetFontWeight(FontWeight.Normal); + Artist.Opacity = 0.6; + Artist.TextColor = Color.FromHex("ffffff"); + SlideEffect.SetHasSlide(Artist, false); + + AlbumTitle.On().SetFontWeight(FontWeight.Light); + AlbumTitle.Opacity = 0.5; + AlbumTitle.TextColor = Color.FromHex("ffffff"); + SlideEffect.SetHasSlide(AlbumTitle, false); } /// @@ -144,5 +235,6 @@ namespace TVMediaHub.Tizen.Views AlbumTitle.Text = info.Album; } } + } } \ No newline at end of file diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml b/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml index de3b73f..445a45d 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml +++ b/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml @@ -33,9 +33,9 @@ RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=0.0}"> Date: Mon, 3 Jul 2017 17:57:54 +0900 Subject: [PATCH 14/16] Implement mediahub music player gui Change-Id: If969abca91b1759ffcbb16203c0df6908b306c05 Signed-off-by: hjjang --- .../TVMediaHub.Tizen/Models/MusicPlayerModel.cs | 36 ++++++++- .../TVMediaHub.Tizen/TVMediaHub.Tizen.csproj | 5 +- .../ViewModels/MusicPlayerViewModel.cs | 17 +++++ TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml | 4 +- TVMediaHub/TVMediaHub.Tizen/Views/MusicPlayer.xaml | 32 +++++--- .../TVMediaHub.Tizen/Views/MusicPlayer.xaml.cs | 82 ++++++++++++++++++++- TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml | 56 ++++++++------ TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs | 7 +- .../TVMediaHub.Tizen/res/btn_music_info_pause.png | Bin 0 -> 2712 bytes .../TVMediaHub.Tizen/res/btn_music_info_play.png | Bin 0 -> 3555 bytes .../res/img_music_list_focused_shadow.9.png | Bin 0 -> 8225 bytes 11 files changed, 192 insertions(+), 47 deletions(-) mode change 100755 => 100644 TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml create mode 100644 TVMediaHub/TVMediaHub.Tizen/res/btn_music_info_pause.png create mode 100644 TVMediaHub/TVMediaHub.Tizen/res/btn_music_info_play.png create mode 100644 TVMediaHub/TVMediaHub.Tizen/res/img_music_list_focused_shadow.9.png diff --git a/TVMediaHub/TVMediaHub.Tizen/Models/MusicPlayerModel.cs b/TVMediaHub/TVMediaHub.Tizen/Models/MusicPlayerModel.cs index 74c1294..b38b31e 100644 --- a/TVMediaHub/TVMediaHub.Tizen/Models/MusicPlayerModel.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Models/MusicPlayerModel.cs @@ -32,6 +32,7 @@ namespace TVMediaHub.Tizen.Models public string Title; public string Artist; public string AlbumCover; + public string AlbumName; } /// @@ -99,7 +100,7 @@ namespace TVMediaHub.Tizen.Models currentMusic = value; /// 1. Stop the player - if (playerInstance.State == PlayerState.Playing) + if (playerInstance.State == PlayerState.Playing || playerInstance.State == PlayerState.Paused) { StopPlayer(); } @@ -113,6 +114,7 @@ namespace TVMediaHub.Tizen.Models Title = (currentMusic.MediaContentInformation as AudioInformation).Title, Artist = (currentMusic.MediaContentInformation as AudioInformation).Artist, AlbumCover = ((currentMusic.MediaContentInformation as AudioInformation).ThumbnailPath.Length != 0) ? (currentMusic.MediaContentInformation as AudioInformation).ThumbnailPath : "img_media_no_contents.png", + AlbumName = (currentMusic.MediaContentInformation as AudioInformation).Album }); /// 4. Update the progressbar of the current music @@ -151,7 +153,6 @@ namespace TVMediaHub.Tizen.Models private void InitializePlayer() { playerInstance = new Player(); - playerInstance.PlaybackCompleted += ((s, e) => { StopPlayer(); @@ -222,6 +223,37 @@ namespace TVMediaHub.Tizen.Models } /// + /// Toggles pause and play the current music + /// + public void TogglePausePlay() + { + if (playerInstance.State == PlayerState.Playing) + { + try + { + playerInstance.Pause(); + } + catch (Exception e) + { + DbgPort.E("Error : " + e.Message); + } + StopProgressbarTimer(); + } + else if (playerInstance.State == PlayerState.Paused) + { + try + { + playerInstance.Start(); + } + catch (Exception e) + { + DbgPort.E("Error : " + e.Message); + } + StartProgressbarTimer(); + } + } + + /// /// Stops the current music /// public void StopPlayer() diff --git a/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj b/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj index 3f8a617..edff850 100755 --- a/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj +++ b/TVMediaHub/TVMediaHub.Tizen/TVMediaHub.Tizen.csproj @@ -184,6 +184,8 @@ + + @@ -228,6 +230,7 @@ + @@ -365,4 +368,4 @@ - + \ No newline at end of file diff --git a/TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicPlayerViewModel.cs b/TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicPlayerViewModel.cs index b4d39d9..ee9d2d6 100644 --- a/TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicPlayerViewModel.cs +++ b/TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicPlayerViewModel.cs @@ -16,6 +16,7 @@ using System.ComponentModel; using TVMediaHub.Tizen.Models; +using Xamarin.Forms; namespace TVMediaHub.Tizen.ViewModels { @@ -40,10 +41,17 @@ namespace TVMediaHub.Tizen.ViewModels public string AlbumArtist { get; private set; } /// + /// The album name to be shown + /// + public string AlbumName { get; private set; } + + /// /// The album cover to be shown /// public string AlbumCover { get; private set; } + public Command MusicPlayerButtonClickCommand { get; private set; } + /// /// An event that is occurred when property of ViewModel is changed /// @@ -71,6 +79,12 @@ namespace TVMediaHub.Tizen.ViewModels AlbumTitle = "Title"; AlbumArtist = "Artist"; AlbumCover = "img_media_no_contents.png"; + AlbumName = "Album"; + + MusicPlayerButtonClickCommand = new Command(() => + { + MusicPlayerModel.Instance.TogglePausePlay(); + }); MusicPlayerModel.Instance.SetCurrentMusicInfoListener((e, args) => { @@ -87,6 +101,9 @@ namespace TVMediaHub.Tizen.ViewModels AlbumCover = args.AlbumCover; OnPropertyChanged("AlbumCover"); + + AlbumName = args.AlbumName; + OnPropertyChanged("AlbumName"); }); MusicPlayerModel.Instance.SetCurrentMusicProgressListener((e, arg) => diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml b/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml index 1b9dbad..34277cc 100644 --- a/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml +++ b/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml @@ -11,6 +11,6 @@ - + RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.0737}"> + \ No newline at end of file diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/MusicPlayer.xaml b/TVMediaHub/TVMediaHub.Tizen/Views/MusicPlayer.xaml index 3667788..ca8f177 100644 --- a/TVMediaHub/TVMediaHub.Tizen/Views/MusicPlayer.xaml +++ b/TVMediaHub/TVMediaHub.Tizen/Views/MusicPlayer.xaml @@ -1,18 +1,26 @@  - + + + Source="{Binding AlbumCover}" /> + +