summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeonjae.Jang <Heonjae.Jang@samsung.com>2017-09-22 17:54:12 +0900
committerHeonjae.Jang <Heonjae.Jang@samsung.com>2017-09-22 17:54:12 +0900
commitedc8b6a706d870ba22fcdce929445e2a8f88c165 (patch)
treed6336a2530385917e44fb668fa8bdd8751bafbb5
parent0d6a206db8ddd26550a1e1ca16fccb5fd1da5656 (diff)
downloadmediahub-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-xTVMediaHub/TVMediaHub.Tizen/ViewModels/MusicTabViewModel.cs2
-rwxr-xr-xTVMediaHub/TVMediaHub.Tizen/Views/MusicGroup.xaml.cs15
-rwxr-xr-xTVMediaHub/TVMediaHub.Tizen/Views/MusicTab.xaml.cs158
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