* Use NUI CollectionsView.
* Add review based fixes.
* Add review based fixes.
* Fix issues from CI.
--- /dev/null
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using Fitness.Views;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Binding;
+using Tizen.NUI.Components;
+
+namespace Fitness.Controls
+{
+ /// <summary>
+ /// Collection View with bindable item source property.
+ /// </summary>
+ public class BindableCollectionView : CollectionView
+ {
+ /// <summary>
+ /// ItemsSource property.
+ /// </summary>
+ public static readonly BindableProperty ItemsSourceProperty =
+ BindableProperty.Create(nameof(ItemsSource), typeof(IEnumerable), typeof(BindableCollectionView), null, propertyChanged: OnItemsSourceChanged);
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="BindableCollectionView"/> class.
+ /// </summary>
+ public BindableCollectionView()
+ {
+ this.SelectionChanged += BindableCollectionView_SelectionChanged;
+ }
+
+ /// <summary>
+ /// A delegate to be run when ItemsSource property has changed.
+ /// </summary>
+ /// <param name="bindable">The bindable object that contains the property.</param>
+ /// <param name="oldValue">The old property value.</param>
+ /// <param name="newValue">The new property value.</param>
+ public static void OnItemsSourceChanged(BindableObject bindable, object oldValue, object newValue)
+ {
+ if (bindable is BindableCollectionView collectionView && newValue is IEnumerable itemsSource)
+ {
+ collectionView.ItemsSource = itemsSource;
+ }
+ }
+
+ private void BindableCollectionView_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ List<object> oldSel = new List<object>(e.PreviousSelection);
+ List<object> newSel = new List<object>(e.CurrentSelection);
+
+ if (oldSel.Count == 1 && newSel.Count == 0 && oldSel[0] != null)
+ {
+ SelectedItem = oldSel[0];
+ }
+ }
+ }
+}
+++ /dev/null
-using System;
-using Tizen.NUI;
-using Tizen.NUI.Components;
-
-namespace Fitness.Controls
-{
- public interface ISelectionController
- {
- bool IsSelected { get; set; }
- }
-}
--- /dev/null
+using Fitness.Controls;
+using Fitness.Services;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Fitness.Views
+{
+ /// <summary>
+ /// Fitness workout collection View item.
+ /// </summary>
+ public partial class FitnessItemView : RecyclerViewItem
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="FitnessItemView"/> class.
+ /// </summary>
+ public FitnessItemView()
+ {
+ InitializeComponent();
+ }
+ }
+}
InitializeComponent();
- // TODO : Change RecyclerView to Collection View
- // this.scroller.SelectionMode = BindableRecyclerView.RecyclerViewSelectionMode.Single;
-
- // this.scroller.LayoutManager = new LinearRecycleLayoutManager()
- // {
- // LayoutOrientation = RecycleLayoutManager.Orientation.Horizontal,
- // };
- // this.scroller.ScrollingDirection = ScrollableBase.Direction.Horizontal;
+ scroller.ScrollingDirection = ScrollableBase.Direction.Horizontal;
}
private void CheckPrivilege()
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<nui:RecyclerViewItem x:Class="Fitness.Views.FitnessItemView"
+ xmlns="http://tizen.org/Tizen.NUI/2018/XAML"
+ xmlns:nui="clr-namespace:Tizen.NUI.Components"
+ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
+ xmlns:views="clr-namespace:Fitness.Views"
+ xmlns:converters="clr-namespace:Fitness.Views.Converters"
+ xmlns:ctrl="clr-namespace:Fitness.Controls"
+ Size="{views:SizeInUnits Width=82,Height=44}"
+ BackgroundColor="Transparent"
+ x:Name="Root">
+ <View Size="{views:SizeInUnits Width=78,Height=44}" >
+ <ImageView x:Name="image"
+ BindingContext="{Binding Source={x:Reference Root}, Path=BindingContext}"
+ HeightResizePolicy="FillToParent"
+ WidthResizePolicy="FillToParent"
+ ResourceUrl="{Binding ThumbnailUrl}"/>
+ <TextLabel x:Name="label"
+ BindingContext="{Binding Source={x:Reference Root}, Path=BindingContext}"
+ PositionUsesPivotPoint="true"
+ PivotPoint="0.0,1.0"
+ ParentOrigin="0.0,1.0"
+ PixelSize="24"
+ Text="{Binding Title}"/>
+ <ImageView x:Name="favourite"
+ BindingContext="{Binding Source={x:Reference Root}, Path=BindingContext}"
+ Size="40,40"
+ PositionUsesPivotPoint="true"
+ PivotPoint="1.0,0.0"
+ ParentOrigin="1.0,0.0"
+ ResourceUrl="{Binding Favourite, Converter={Static converters:FavouriteToIconConverter.Converter}}"/>
+ </View>
+</nui:RecyclerViewItem>
<ImageView PositionUsesPivotPoint="true" PivotPoint="1.0,0.0" ParentOrigin="1.0, 0.0" Size="30,30" BindingContext="{Binding Source={x:Reference context}, Path=SelectedWorkout}" ResourceUrl="{Binding Favourite, Converter={Static converters:FavouriteToIconConverter.Converter}}"/>
</View>
</View>
- <nui:CollectionView Size="{views:SizeInUnits Height=44}" Margin="{views:ExtentsInUnits Top=10, Bottom=10}" WidthResizePolicy="FillToParent" ItemsSource="{Binding Workouts}" x:Name="scroller" Padding="{views:ExtentsInUnits Start=16, End=16}">
- </nui:CollectionView>
+ <ctrl:BindableCollectionView Size="{views:SizeInUnits Height=44}" Margin="{views:ExtentsInUnits Top=10, Bottom=10, Start=16, End=16}" WidthResizePolicy="FillToParent" ItemsSource="{Binding Workouts}" x:Name="scroller" SelectedItem="{Binding Path=SelectedWorkout, Mode=TwoWay}" SelectionMode="SingleSelection">
+ <ctrl:BindableCollectionView.ItemTemplate>
+ <DataTemplate>
+ <views:FitnessItemView />
+ </DataTemplate>
+ </ctrl:BindableCollectionView.ItemTemplate>
+ <ctrl:BindableCollectionView.ItemsLayouter>
+ <nui:GridLayouter />
+ </ctrl:BindableCollectionView.ItemsLayouter>
+ </ctrl:BindableCollectionView>
</ctrl:Page>