1 /* Copyright (c) 2020 Samsung Electronics Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
17 using Tizen.NUI.BaseComponents;
18 using Tizen.NUI.Components;
19 using System.ComponentModel;
21 namespace Tizen.NUI.Wearable
24 /// [Draft] This class provides a list view styled by wearable ux.
25 /// List will lay out all items with Fish-Eye layout manager.
27 /// This may be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
28 [EditorBrowsable(EditorBrowsableState.Never)]
29 public class WearableList : RecyclerView
31 private RecycleItem FocusedItem = null;
34 /// Default constructor.
36 /// <param name="adapter">Recycle adapter of List.</param>
37 /// <since_tizen> 8 </since_tizen>
38 /// This may be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API
39 [EditorBrowsable(EditorBrowsableState.Never)]
40 public WearableList(RecycleAdapter adapter) : base(adapter, new FishEyeLayoutManager())
42 ScrollingDirection = ScrollableBase.Direction.Vertical;
44 ScrollDragStartEvent += OnScrollDragStart;
45 ScrollAnimationEndEvent += OnAnimationEnd;
47 foreach (View child in mContainer.Children)
49 child.PositionUsesPivotPoint = true;
50 child.ParentOrigin = Tizen.NUI.ParentOrigin.TopCenter;
53 mContainer.PositionUsesPivotPoint = true;
54 mContainer.ParentOrigin = Tizen.NUI.ParentOrigin.Center;
55 mContainer.PivotPoint = ScrollingDirection == Direction.Vertical ? Tizen.NUI.PivotPoint.TopCenter : Tizen.NUI.PivotPoint.CenterLeft;
56 ScrollAvailableArea = new Vector2( 0,ListLayoutManager.StepSize * (mAdapter.Data.Count - 1) );
58 noticeAnimationEndBeforePosition = 50;
64 /// Set focus to item which has specific data index.
66 /// <param name="dataIndex">Data index of item.</param>
67 /// <param name="animated">If set true, scroll to item using animation.</param>
68 /// <since_tizen> 8 </since_tizen>
69 /// This may be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API
70 public void SetFocus(int dataIndex, bool animated)
72 foreach (RecycleItem item in mContainer.Children)
74 if (item.DataIndex == dataIndex)
76 RecycleItem prevFocusedItem = FocusedItem;
77 prevFocusedItem?.OnFocusLost();
79 FocusedItem.OnFocusGained();
81 ScrollTo(item.DataIndex * mLayoutManager.StepSize, animated);
86 private void OnAnimationEnd(object source, ScrollableBase.ScrollEventArgs args)
91 /// This helps developer who wants to know before scroll is reaching target position.
93 /// <param name="targetPosition">Index of item.</param>
94 /// <since_tizen> 8 </since_tizen>
95 /// This may be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API
96 protected override void OnPreReachedTargetPosition(float targetPosition)
98 int targetDataIndex = (int)Math.Round(Math.Abs(targetPosition) / mLayoutManager.StepSize);
100 for (int i = 0; i < mContainer.Children.Count; i++)
102 RecycleItem item = mContainer.Children[i] as RecycleItem;
104 if (targetDataIndex == item.DataIndex)
107 item.OnFocusGained();
113 private void OnScrollDragStart(object source, ScrollableBase.ScrollEventArgs args)
115 RecycleItem prevFocusedItem = FocusedItem;
116 prevFocusedItem?.OnFocusLost();