//Tizen.Log.Debug("demo", $"{View.CurrentPage}");
}
}
+ else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Reset)
+ {
+ foreach (var child in LayoutView.Children.ToList())
+ {
+ LayoutView.Remove(child);
+ }
+ }
LayoutView.HeightResizePolicy = ResizePolicyType.FitToChildren;
}
}
--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tizen.Network.WiFi;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+
+namespace Oobe.Wifi.Controls.Wifi
+{
+ public class ApManager : IDisposable
+ {
+ private Func<WiFiAP, View> viewFactory;
+ private Action<WiFiAP> onTapped;
+ //detectors have to be kept separately because of GC, there is no link by ref between View and Detector
+ private Dictionary<int, TapGestureDetector> detectors = new Dictionary<int, TapGestureDetector>();
+ public ObservableCollection<View> Views { get; private set; } = new ObservableCollection<View>();
+
+ public ApManager(Func<WiFiAP, View> viewFactory, Action<WiFiAP> onTapped)
+ {
+ this.viewFactory = viewFactory;
+ this.onTapped = onTapped;
+ WiFiManager.ConnectionStateChanged += OnConnectionStateChanged;
+ //run rssi updating thread
+ }
+
+ private void OnConnectionStateChanged(object sender, ConnectionStateChangedEventArgs e)
+ {
+ //find view by ap & recreate it? (wrap view from factory by another view?)
+ }
+
+ public void UpdateTo(IEnumerable<Tizen.Network.WiFi.WiFiAP> aps)
+ {
+ UpdateToNaive(aps);
+ }
+
+ public void UpdateToNaive(IEnumerable<Tizen.Network.WiFi.WiFiAP> aps)
+ {
+ foreach(var detectorKV in detectors)
+ {
+ detectorKV.Value.Dispose();
+ }
+ detectors.Clear();
+
+ Views.Clear();
+ int idx = 0;
+ foreach(var ap in aps)
+ {
+ var view = viewFactory(ap);
+ Views.Insert(idx, view);
+
+ var tap = new TapGestureDetector();
+ detectors.Add(idx, tap);
+ tap.Attach(view);
+
+ tap.Detected += (s, e) => onTapped(ap);
+
+ idx++;
+ }
+ }
+
+ public void Dispose()
+ {
+ WiFiManager.ConnectionStateChanged -= OnConnectionStateChanged;
+ //stop rssi updating thread
+ }
+ }
+}
public class WifiView : IDisposable
{
private View view = null;
- private ObservableCollection<View> items;
private int counter = 0;
private const int listItemWidth = 460;
private const int listItemHeight = 89;
private WifiState State { get; set; } = new WifiState();
+ private ApManager ApManager { get; set; } = new ApManager(CreateApView, OnApTapped);
public View View
{
return manualWifi;
}
- private static View CreateWifiView(Tizen.Network.WiFi.WiFiAP wifiAp)
+ private static View CreateApView(Tizen.Network.WiFi.WiFiAP wifiAp)
{
var wifi = new View()
{
FontStyle = FontsStyles.Light(),
});
- wifi.Add(new TextLabel("detail")
+ var detail = wifiAp.NetworkInformation.ConnectionState == Tizen.Network.WiFi.WiFiConnectionState.Connected
+ ? "Connected"
+ : "Secured";
+ wifi.Add(new TextLabel(detail)
{
Position = new Position(79, 56),
PixelSize = 14f,
return wifi;
}
+ private static async void OnApTapped(Tizen.Network.WiFi.WiFiAP wifiAp)
+ {
+ Tizen.Log.Debug("oobe", $"connect to wifi {wifiAp.NetworkInformation.Essid}");
+ wifiAp.SecurityInformation.SetPassphrase("");//type your passphrase
+ await wifiAp.ConnectAsync();
+ }
+
private View CreateHeader(int width, int height)
{
var header = new View()
scan.ClickEvent += async (s, e) =>
{
scan.IsEnabled = false;
- foreach(var item in await State.Scan())
- {
- items.Add(CreateWifiView(item));
- }
+ ApManager.UpdateTo(await State.Scan());
+ ApManager.Views.Add(CreateManualWifiView()); //should be built in listView
scan.IsEnabled = State.IsTurnedOn;
};
scan.IsEnabled = State.IsTurnedOn;
private View CreateListViewPlaceHolder()
{
var view = new View();
- items = new ObservableCollection<View>();
- items.Add(CreateManualWifiView());
var listView = new ListView(480, 328)//480, 335
{
- Items = items
+ Items = ApManager.Views
}.View;
view.Add(listView);
public void Dispose()
{
view = null;
+ ApManager.Dispose();
}
}
}