<PackageReference Include="Tizen.NET" Version="8.0.0.15135">\r
<ExcludeAssets>Runtime</ExcludeAssets>\r
</PackageReference>\r
+ <PackageReference Include="Tizen.NET.Sdk" Version="1.0.9" />\r
</ItemGroup>\r
<ItemGroup>\r
<ProjectReference Include="..\OobeCommon\OobeCommon.csproj" />\r
<PackageReference Include="Tizen.NET" Version="8.0.0.15135">\r
<ExcludeAssets>Runtime</ExcludeAssets>\r
</PackageReference>\r
+ <PackageReference Include="Tizen.NET.Sdk" Version="1.0.9" />\r
</ItemGroup>\r
</Project>\r
-using System.Collections.Generic;
+using System.Collections.ObjectModel;
using System.Linq;
using Tizen.NUI;
using Tizen.NUI.BaseComponents;
namespace Oobe.Wifi.Controls
{
- public class ListView : ScrollableBase
+ public class ListView
{
- private List<View> items;
+ private ObservableCollection<View> items;
+ private ScrollableBase scrollableBase = null;
+
+ public ScrollableBase View
+ {
+ get
+ {
+ if (scrollableBase == null)
+ {
+ scrollableBase = new ScrollableBase();
+ scrollableBase.ScrollingDirection = ScrollableBase.Direction.Vertical;
+ scrollableBase.Size = new Size(360, 360);
+ }
+ return scrollableBase;
+ }
+ }
private View LayoutView
{
get
{
- if (this.Children.Any() == false)
+ if (View.Children.Any() == false)
{
- this.Add(new View()
+ View.Add(new View()
{
Layout = new LinearLayout()
{
LinearOrientation = LinearLayout.Orientation.Vertical,
+ LinearAlignment = LinearLayout.Alignment.Center,
},
BackgroundColor = new Color(0.7f, 0.7f, 0.7f, 1f),
WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FitToChildren,
});
}
- return this.Children.First();
+ return View.Children.First();
}
}
- public ListView()
- {
- this.ScrollingDirection = ScrollableBase.Direction.Vertical;
- }
-
- public IEnumerable<View> Items
+ public ObservableCollection<View> Items
{
get
{
{
if (value != items)
{
- Clear();
- items = value.ToList();
- AttachItems(items);
+ DetachItems();
+ items = value;
+ AttachItems();
+ }
+ }
+ }
+
+ private void DetachItems()
+ {
+ if (items != null)
+ {
+ items.CollectionChanged -= OnCollectionChanged;
+ foreach (var child in LayoutView.Children.ToList())
+ {
+ LayoutView.Remove(child);
}
+ LayoutView.HeightResizePolicy = ResizePolicyType.FitToChildren;
}
}
- private void Clear()
+ //not thread safe
+ private void AttachItems()
{
- foreach (var child in LayoutView.Children.ToList())
+ if (items != null)
{
- LayoutView.Remove(child);
+ foreach (var item in items.ToList())
+ {
+ LayoutView.Add(item);
+ }
+ items.CollectionChanged += OnCollectionChanged;
}
}
- private void AttachItems(IEnumerable<View> items)
+ private void OnCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
- foreach (var item in items)
+ if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
- LayoutView.Add(item);
+ var item = e.NewItems.OfType<View>().FirstOrDefault();
+ if (item != null)
+ {
+ LayoutView.Add(item);
+ }
+ }
+ else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
+ {
+ var item = e.OldItems.OfType<View>().FirstOrDefault();
+ if (item != null)
+ {
+ LayoutView.Remove(item);
+ //if scroll was at the end, make sure it is still properly aligned to the end
+ //Tizen.Log.Debug("demo", $"{View.CurrentPage}");
+ }
}
+ LayoutView.HeightResizePolicy = ResizePolicyType.FitToChildren;
}
}
}
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
using System.Linq;
+using System.Threading.Tasks;
using Tizen.NUI;
using Tizen.NUI.BaseComponents;
namespace Oobe.Wifi.Controls
{
- public class WifiView
+ public class WifiView : IDisposable
{
private View view = null;
+ private ObservableCollection<View> items;
+ private int counter = 0;
- private static View CreateViewAbsolute(string s)
+ private View CreateViewAbsolute(string s)
{
View mainView = new View()
{
WidthResizePolicy = ResizePolicyType.FillToParent,
};
TextLabel text = new TextLabel(s);
- text.WidthResizePolicy = ResizePolicyType.UseNaturalSize;
+ text.WidthResizePolicy = ResizePolicyType.FillToParent;
text.HorizontalAlignment = HorizontalAlignment.Begin;
text.VerticalAlignment = VerticalAlignment.Center;
text.TextColor = new Color(0.4f, 1 / (float)((s.GetHashCode() % 10) + 1), 1 / (float)((s.GetHashCode() % 20) + 1), 1);
return mainView;
}
- public static IEnumerable<View> CreateViews()
+ private IEnumerable<View> CreateViews(string pattern)
{
- foreach (var item in Enumerable.Range(1, 100))
+ foreach (var item in Enumerable.Range(1, 20))
{
- yield return CreateViewAbsolute($"{item}");
+ yield return CreateViewAbsolute($"{pattern}{item}");
}
}
-
+
public View View
{
get
{
- if( view == null )
+ if (view == null)
{
view = new View()
{
},
};
view.Add(CreateText("Header"));
+ items = new ObservableCollection<View>(CreateViews($"{counter} "));
view.Add(new ListView()
{
- Items = CreateViews(),
- Size = new Size(360, 360),
- });
+ Items = items
+ }.View);
+ ForVerify();
}
return view;
}
}
+ private async void ForVerify()
+ {
+ counter++;
+ if (counter > 10)
+ return;
+ if (view != null)
+ {
+ await Task.Delay(2000);
+ items.RemoveAt(1);
+ //items.Insert(1, CreateViewAbsolute($"s{counter}"));
+ ForVerify();
+ }
+ }
+
private static TextLabel CreateText(string text)
{
TextLabel text2 = new TextLabel(text);
text2.PointSize = 51.0f;
return text2;
}
+
+ public void Dispose()
+ {
+ view = null;
+ }
}
}
<TargetFrameworkIndentifier>Tizen</TargetFrameworkIndentifier>\r
</PropertyGroup>\r
\r
+ <ItemGroup>\r
+ <PackageReference Include="Tizen.NET" Version="8.0.0.15135" />\r
+ <PackageReference Include="Tizen.NET.Sdk" Version="1.0.9" />\r
+ </ItemGroup>\r
+\r
<ItemGroup>\r
<ProjectReference Include="..\OobeCommon\OobeCommon.csproj" />\r
- <PackageReference Include="Tizen.NET" Version="8.0.0.15135">\r
- <ExcludeAssets>Runtime</ExcludeAssets>\r
- </PackageReference>\r
</ItemGroup>\r
</Project>\r
using Oobe.Common.Interfaces;
using Oobe.Wifi.Controls;
-using System;
using Tizen.NUI;
using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
namespace Oobe.Wifi
{
public class WifiStep : ProcessStep
{
+ private WifiView wifiView;
+
public override View CreateView(IProcessNavigation nav)
{
var view = new View()
},
};
view.Add(CreateText("left"));
- view.Add(new WifiView().View);
+ wifiView = new WifiView();
+ view.Add(wifiView.View);
view.Add(CreateText("right"));
return view;
}
+ public override void OnShutdown()
+ {
+ base.OnShutdown();
+ wifiView?.Dispose();
+ wifiView = null;
+ }
+
private static TextLabel CreateText(string text)
{
TextLabel text2 = new TextLabel(text);