diff options
author | Heonjae.Jang <Heonjae.Jang@samsung.com> | 2017-09-22 17:54:12 +0900 |
---|---|---|
committer | Heonjae.Jang <Heonjae.Jang@samsung.com> | 2017-09-22 17:54:12 +0900 |
commit | edc8b6a706d870ba22fcdce929445e2a8f88c165 (patch) | |
tree | d6336a2530385917e44fb668fa8bdd8751bafbb5 | |
parent | 0d6a206db8ddd26550a1e1ca16fccb5fd1da5656 (diff) | |
download | mediahub-edc8b6a706d870ba22fcdce929445e2a8f88c165.tar.gz mediahub-edc8b6a706d870ba22fcdce929445e2a8f88c165.tar.bz2 mediahub-edc8b6a706d870ba22fcdce929445e2a8f88c165.zip |
Fix Issues [TNEXT-3687]
Change-Id: Ia13e7563ec2332b359808636ae0c1fef31df5d5c
Signed-off-by: Heonjae.Jang <Heonjae.Jang@samsung.com>
-rwxr-xr-x | TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicTabViewModel.cs | 2 | ||||
-rwxr-xr-x | TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml.cs | 15 | ||||
-rwxr-xr-x | TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs | 158 |
3 files changed, 165 insertions, 10 deletions
diff --git a/TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicTabViewModel.cs b/TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicTabViewModel.cs index a953a38..230d29f 100755 --- a/TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicTabViewModel.cs +++ b/TVMediaHub/TVMediaHub.Tizen/ViewModels/MusicTabViewModel.cs @@ -20,6 +20,7 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.IO; using System.Threading; +using System.Threading.Tasks; using System.Windows.Input; using TVMediaHub.Tizen.DataModels; using TVMediaHub.Tizen.Models; @@ -220,6 +221,7 @@ namespace TVMediaHub.Tizen.ViewModels foreach (var group in templist) { + await Task.Delay(1); MusicList.Add(group); foreach(var item in group.Contents) { diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml.cs index 5da3d7b..b71f2f3 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml.cs @@ -14,6 +14,7 @@ * limitations under the License. */ +using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Input; @@ -79,6 +80,10 @@ namespace TVMediaHub.Tizen.Views /// right side items for focus chain /// </summary> public List<Button> RightFocusList { get; protected set; } + /// <summary> + /// @TODO:Comment + /// </summary> + public List<KeyValuePair<double, Button>> BottomFocusList { get; protected set; } /// <summary> /// A delegate will be executed when the context popup item selected @@ -98,6 +103,8 @@ namespace TVMediaHub.Tizen.Views /// </summary> private MusicItem focusedItem; + public EventHandler<GroupItemFocusEventArgs> GroupItemFocused; + /// <summary> /// A constructor /// </summary> @@ -117,6 +124,7 @@ namespace TVMediaHub.Tizen.Views ChildrenFocusList = new List<Button>(); LeftFocusList = new List<Button>(); RightFocusList = new List<Button>(); + BottomFocusList = new List<KeyValuePair<double, Button>>(); MusicItemList = new List<MusicItem>(); GroupTitle.TextColor = Color.FromRgba(255, 255, 255, 31); GroupTitle.FontFamily = "BreezSans"; @@ -164,10 +172,12 @@ namespace TVMediaHub.Tizen.Views foreach (var item in ItemsSource) { var itemView = new MusicItem(); + ChildrenFocusList.Add(itemView.GetFocusArea()); itemView.BindingContext = item; MusicItemList.Add(itemView); itemView.OnFocusedEventHandler += (se, ev) => { + GroupItemFocused?.Invoke(itemView, new GroupItemFocusEventArgs(X + itemView.X)); GroupContentArea.RaiseChild(itemView); focusedItem = itemView; }; @@ -185,7 +195,6 @@ namespace TVMediaHub.Tizen.Views }; GroupContentArea.Children.Add(itemView, index / 4, index % 4); - ChildrenFocusList.Add(itemView.GetFocusArea()); index++; } @@ -261,8 +270,8 @@ namespace TVMediaHub.Tizen.Views else { target.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusDownView(target); - //var targetX = column * SizeUtils.GetWidthSize(322); - //BottomFocusList.Add(new KeyValuePair<double, Button>(targetX, target)); + var targetX = column * SizeUtils.GetWidthSize(580); + BottomFocusList.Add(new KeyValuePair<double, Button>(targetX, target)); } } } diff --git a/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs b/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs index 6136520..1e7bf59 100755 --- a/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs +++ b/TVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs @@ -28,6 +28,7 @@ using TVMediaHub.Tizen.ViewModels; using Xamarin.Forms; using Xamarin.Forms.PlatformConfiguration.TizenSpecific; using static TVMediaHub.Tizen.Views.MusicItem; +using TizenVisualElement = Xamarin.Forms.PlatformConfiguration.TizenSpecific.VisualElement; namespace TVMediaHub.Tizen.Views { @@ -195,6 +196,11 @@ namespace TVMediaHub.Tizen.Views } /// <summary> + /// A list of bottom buttons + /// </summary> + private List<KeyValuePair<double, Button>> BottomButtonList; + + /// <summary> /// A constructor /// Initializes the size of the items that are used in Music tab /// </summary> @@ -205,10 +211,84 @@ namespace TVMediaHub.Tizen.Views InitializeSize(); InitializeFonts(); InitializeFooter(); - + InitializeData(); + PropertyChanged += MusicTabPropertyChanged; ItemsSource.CollectionChanged += ItemsSourceCollectionChanged; } + private void InitializeData() + { + BottomButtonList = new List<KeyValuePair<double, Button>>(); + } + + private void MusicTabPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + if (e.PropertyName.Equals("ImageTabStatus")) + { + SetFooterFocusChain(MusicTabScrollView.ScrollX); + } + } + + private void SetFooterFocusChain(double scrollX) + { + FooterNormal.SetFocusChain(); + FooterDelete.SetFocusChain(); + + var Padding = SizeUtils.GetWidthSize(60); + var ItemWidth = SizeUtils.GetWidthSize(580); + + var FocusableBoundFrom = scrollX; + var FocusableBoundTo = scrollX + MusicTabScrollView.Width - ItemWidth; + + var list = BottomButtonList.FindAll((pair) => + { + return (pair.Key >= FocusableBoundFrom && pair.Key <= FocusableBoundTo); + }); + + if (MusicTabStatus == TabStatus.Delete) + { + TizenVisualElement.SetNextFocusDownView(MusicPlayer.GetFocusArea(), FooterDelete.GetSelectAllButton()); + TizenVisualElement.SetNextFocusUpView(FooterDelete.GetSelectAllButton(), MusicPlayer.GetFocusArea()); + } + else + { + TizenVisualElement.SetNextFocusDownView(MusicPlayer.GetFocusArea(), FooterNormal.DropdownSource); + TizenVisualElement.SetNextFocusUpView(FooterNormal.DropdownSource, MusicPlayer.GetFocusArea()); + } + + for (var buttonIndex = 0; buttonIndex < list.Count; buttonIndex++) + { + var btn = list[buttonIndex].Value; + + if (buttonIndex == list.Count - 1) + { + if (MusicTabStatus == TabStatus.Delete) + { + TizenVisualElement.SetNextFocusDownView(btn, FooterDelete.GetCancelButton()); + TizenVisualElement.SetNextFocusUpView(FooterDelete.GetCancelButton(), btn); + } + else + { + TizenVisualElement.SetNextFocusDownView(btn, FooterNormal.ButtonOption); + TizenVisualElement.SetNextFocusUpView(FooterNormal.ButtonOption, btn); + } + } + else + { + if (MusicTabStatus == TabStatus.Delete) + { + TizenVisualElement.SetNextFocusDownView(btn, FooterDelete.GetOkButton()); + TizenVisualElement.SetNextFocusUpView(FooterDelete.GetOkButton(), btn); + } + else + { + TizenVisualElement.SetNextFocusDownView(btn, FooterNormal.DropdownSort); + TizenVisualElement.SetNextFocusUpView(FooterNormal.DropdownSort, btn); + } + } + } + } + /// <summary> /// A method for initializing the size of the items that are used in Music tab /// </summary> @@ -296,17 +376,44 @@ namespace TVMediaHub.Tizen.Views FooterNormal.IsFooterEnabled = true; } + var groupItem = e.NewItems[0]; MusicGroup groupView = new MusicGroup(); + groupView.PropertyChanged += (se, ev) => + { + if (ev.PropertyName.Equals("ItemsSource")) + { + if (groupView.X >= 0) + { + groupView.BottomFocusList.ForEach((item) => + { + var key = groupView.X + item.Key; + BottomButtonList.Add(new KeyValuePair<double, Button>(key, item.Value)); + }); + + SetFooterFocusChain(0); + } + } + }; - var groupItem = e.NewItems[0]; - MusicContentView.Children.Add(groupView); - groupView.BindingContext = groupItem; groupView.SetClickCommand(OnClickCommand); groupView.ContextPopupItemSelectedHandler += (info, item) => { ShowPopup(info, item); }; + groupView.GetTitleFocusArea().Focused += (se, ev) => + { + ScrollToTarget(groupView.X, SizeUtils.GetWidthSize(580), SizeUtils.GetWidthSize(100)); + }; + + groupView.GroupItemFocused += (se, ev) => + { + ScrollToTarget(ev.PositionX, SizeUtils.GetWidthSize(580), SizeUtils.GetWidthSize(100)); + }; + + MusicContentView.Children.Add(groupView); + groupView.BindingContext = groupItem; + if (MusicContentView.Children.Count > 1) { var leftGroup = MusicContentView.Children[MusicContentView.Children.Count - 2] as MusicGroup; @@ -370,7 +477,6 @@ namespace TVMediaHub.Tizen.Views FooterNormal.IsFooterEnabled = false; } } - } /// <summary> @@ -382,9 +488,9 @@ namespace TVMediaHub.Tizen.Views { string storageName = e.SelectedItem as string; - // BottomButtonList.Clear(); + BottomButtonList.Clear(); ChangeSourceCommand?.Execute(storageName); - // FocusChain(ImageTabScrollView.ScrollX); + SetFooterFocusChain(MusicTabScrollView.ScrollX); } /// <summary> @@ -394,7 +500,9 @@ namespace TVMediaHub.Tizen.Views /// <param name="e">A SelectedItemChanged event's argument</param> private void OnSortOptionChanged(object sender, SelectedItemChangedEventArgs e) { + BottomButtonList.Clear(); ChangeSortOptionCommand?.Execute(e.SelectedItem); + SetFooterFocusChain(MusicTabScrollView.ScrollX); } /// <summary> @@ -410,6 +518,7 @@ namespace TVMediaHub.Tizen.Views ChangeTabStatusCommand?.Execute(""); FooterNormal.IsVisible = false; FooterDelete.IsVisible = true; + SetFooterFocusChain(MusicTabScrollView.ScrollX); } else if (label.Equals("detail info")) { @@ -427,6 +536,7 @@ namespace TVMediaHub.Tizen.Views ChangeTabStatusCommand?.Execute(""); FooterNormal.IsVisible = true; FooterDelete.IsVisible = false; + SetFooterFocusChain(MusicTabScrollView.ScrollX); } /// <summary> @@ -474,6 +584,7 @@ namespace TVMediaHub.Tizen.Views ChangeTabStatusCommand?.Execute(""); FooterNormal.IsVisible = true; FooterDelete.IsVisible = false; + SetFooterFocusChain(MusicTabScrollView.ScrollX); } /// <summary> @@ -558,5 +669,38 @@ namespace TVMediaHub.Tizen.Views } } + + /// <summary> + /// Moves the scroller to the given target + /// </summary> + /// <param name="targetX">The given target</param> + /// <param name="targetWidth">The width of the given target</param> + /// <param name="padding">The padding of the given target</param> + private void ScrollToTarget(double targetX, int targetWidth, int padding) + { + var ScrollX = MusicTabScrollView.ScrollX; + + var ScrollBoundFrom = targetX - (MusicTabScrollView.Width - targetWidth - padding); + ScrollBoundFrom = ScrollBoundFrom > 0 ? ScrollBoundFrom : 0; + var ScrollBoundTo = targetX - padding; + ScrollBoundTo = ScrollBoundTo > 0 ? ScrollBoundTo : 0; + DbgPort.D("TEST"); + // Is Focusable. + if (ScrollX >= ScrollBoundFrom && ScrollX <= ScrollBoundTo) + { + return; + } + + if (Math.Abs(ScrollX - ScrollBoundFrom) > Math.Abs(ScrollX - ScrollBoundTo)) + { + Device.BeginInvokeOnMainThread(() => MusicTabScrollView.ScrollToAsync(ScrollBoundTo, 0, true)); + SetFooterFocusChain(ScrollBoundTo); + } + else + { + Device.BeginInvokeOnMainThread(() => MusicTabScrollView.ScrollToAsync(ScrollBoundFrom, 0, true)); + SetFooterFocusChain(ScrollBoundFrom); + } + } } }
\ No newline at end of file |