using TVMediaHub.Tizen.Utils;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
+using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
namespace TVMediaHub.Tizen.Views
{
private ICommand ItemClickCommand;
/// <summary>
+ /// A list of children's button objects of group
+ /// </summary>
+ private List<Button> ChildrenFocusList;
+
+ /// <summary>
+ /// Gets TitleFocusArea for focus chain
+ /// </summary>
+ public Button GetTitleFocusArea()
+ {
+ return TitleFocusArea;
+ }
+
+ /// <summary>
+ /// left side items for focus chain
+ /// </summary>
+ public List<Button> LeftFocusList { get; protected set; }
+
+ /// <summary>
+ /// right side items for focus chain
+ /// </summary>
+ public List<Button> RightFocusList { get; protected set; }
+
+ /// <summary>
/// A constructor
/// </summary>
public MusicGroup()
/// </summary>
private void Init()
{
+ ChildrenFocusList = new List<Button>();
+ LeftFocusList = new List<Button>();
+ RightFocusList = new List<Button>();
MusicItemList = new List<MusicItem>();
}
};
GroupContentArea.Children.Add(itemView, index / 4, index % 4);
+ ChildrenFocusList.Add(itemView.GetFocusArea());
index++;
}
+
+ SetFocusChain();
+ }
+ }
+
+ /// <summary>
+ /// A method for making focus chain among items
+ /// </summary>
+ private void SetFocusChain()
+ {
+ if (ChildrenFocusList.Count < 1)
+ {
+ return;
+ }
+
+ var lastColumn = (ChildrenFocusList.Count - 1) / 4;
+ SetFocusList();
+
+ TitleFocusArea.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusDownView(ChildrenFocusList[0]);
+ TitleFocusArea.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusLeftView(TitleFocusArea);
+ TitleFocusArea.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusRightView(TitleFocusArea);
+
+ for (var i = 0; i < ChildrenFocusList.Count; i++)
+ {
+ var target = ChildrenFocusList[i];
+ var row = i % 4;
+ var column = i / 4;
+
+ // Left
+ if (column != 0)
+ {
+ target.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusLeftView(ChildrenFocusList[i - 4]);
+ }
+ else
+ {
+ target.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusLeftView(target);
+ }
+
+ // Right
+ if (column != lastColumn && (i + 4) < ChildrenFocusList.Count)
+ {
+ target.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusRightView(ChildrenFocusList[i + 4]);
+ }
+ else
+ {
+ target.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusRightView(target);
+ }
+
+ // Up
+ if (row != 0)
+ {
+ target.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusUpView(ChildrenFocusList[i - 1]);
+ }
+ else
+ {
+ target.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusUpView(TitleFocusArea);
+ }
+
+ // Down
+ if (row != 3 && (i + 1) < ChildrenFocusList.Count)
+ {
+ target.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusDownView(ChildrenFocusList[i + 1]);
+ }
+ else
+ {
+ target.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusDownView(target);
+ //var targetX = column * SizeUtils.GetWidthSize(322);
+ //BottomFocusList.Add(new KeyValuePair<double, Button>(targetX, target));
+ }
+ }
+ }
+ private void SetFocusList()
+ {
+ var totalCount = ChildrenFocusList.Count - 1;
+ var lastItemColumn = totalCount / 4;
+ var lastItemRow = totalCount % 4;
+
+ var leftFocusFrom = 0;
+ var leftFocusTo = lastItemColumn > 0 ? 3 : lastItemRow;
+
+ var rightFocusFrom = lastItemColumn * 4;
+ var rightFocusTo = rightFocusFrom + lastItemRow;
+
+ for (var i = leftFocusFrom; i <= leftFocusTo; i++)
+ {
+ LeftFocusList.Add(ChildrenFocusList[i]);
+ }
+
+ for (var i = rightFocusFrom; i <= rightFocusTo; i++)
+ {
+ RightFocusList.Add(ChildrenFocusList[i]);
+ }
+
+ if (lastItemColumn != 0 && lastItemRow != 3)
+ {
+ var tempFrom = (lastItemColumn - 1) * 4 + lastItemRow + 1;
+ var tempTo = (lastItemColumn - 1) * 4 + 4;
+ for (var i = tempFrom; i <= tempTo; i++)
+ {
+ RightFocusList.Add(ChildrenFocusList[i]);
+ }
}
}
}
MusicGroup groupView = new MusicGroup();
var groupItem = e.NewItems[0];
+ MusicContentView.Children.Add(groupView);
groupView.BindingContext = groupItem;
groupView.SetClickCommand(OnClickCommand);
- MusicContentView.Children.Add(groupView);
+
+ if (MusicContentView.Children.Count > 1)
+ {
+ var leftGroup = MusicContentView.Children[MusicContentView.Children.Count - 2] as MusicGroup;
+
+ leftGroup.GetTitleFocusArea().On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusRightView(groupView.GetTitleFocusArea());
+ groupView.GetTitleFocusArea().On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusLeftView(leftGroup.GetTitleFocusArea());
+
+ leftGroup.GetTitleFocusArea().Clicked += (se, ev) =>
+ {
+ leftGroup.GetTitleFocusArea().On<Xamarin.Forms.PlatformConfiguration.Tizen>().MoveFocusRight();
+ };
+
+ var leftList = leftGroup.RightFocusList;
+ var rightList = groupView.LeftFocusList;
+ var minCount = leftList.Count > rightList.Count ? rightList.Count : leftList.Count;
+
+ for (var i = 0; i < minCount; i++)
+ {
+ leftList[i].On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusRightView(rightList[i]);
+ rightList[i].On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusLeftView(leftList[i]);
+ }
+ }
+ else
+ {
+ groupView.GetTitleFocusArea().On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusLeftView(MusicPlayer.GetFocusArea());
+ MusicPlayer.GetFocusArea().On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusRightView(groupView.GetTitleFocusArea());
+
+ foreach (var item in groupView.LeftFocusList)
+ {
+ item.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetNextFocusLeftView(MusicPlayer.GetFocusArea());
+ }
+
+ }
}
else if (e.Action.ToString().Equals(NotifyCollectionChangedAction.Reset.ToString()))
{
FooterDelete.IsVisible = false;
}
}
-}
+}
\ No newline at end of file