Connecting to wifi
authork.stepaniuk <k.stepaniuk@samsung.com>
Sun, 22 Mar 2020 17:39:57 +0000 (18:39 +0100)
committerLukasz Stanislawski/IoT & UI Sample (PLT) /SRPOL/Engineer/Samsung Electronics <l.stanislaws@samsung.com>
Wed, 25 Mar 2020 08:01:41 +0000 (09:01 +0100)
Replacing fake items by real AP
Type your password in code, wifiView ln:119
To refresh tap scan again

Signed-off-by: k.stepaniuk <k.stepaniuk@samsung.com>
Oobe/OobeWifi/Controls/ListView.cs
Oobe/OobeWifi/Controls/Wifi/ApManager.cs [new file with mode: 0644]
Oobe/OobeWifi/Controls/Wifi/WifiView.cs

index 8ab66eb..46dc11d 100644 (file)
@@ -119,6 +119,13 @@ namespace Oobe.Wifi.Controls
                     //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;
         }
     }
diff --git a/Oobe/OobeWifi/Controls/Wifi/ApManager.cs b/Oobe/OobeWifi/Controls/Wifi/ApManager.cs
new file mode 100644 (file)
index 0000000..3500257
--- /dev/null
@@ -0,0 +1,70 @@
+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
+        }
+    }
+}
index 13b5924..e940f7c 100644 (file)
@@ -13,12 +13,12 @@ namespace Oobe.Wifi.Controls.Wifi
     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
         {
@@ -75,7 +75,7 @@ namespace Oobe.Wifi.Controls.Wifi
             return manualWifi;
         }
 
-        private static View CreateWifiView(Tizen.Network.WiFi.WiFiAP wifiAp)
+        private static View CreateApView(Tizen.Network.WiFi.WiFiAP wifiAp)
         {
             var wifi = new View()
             {
@@ -99,7 +99,10 @@ namespace Oobe.Wifi.Controls.Wifi
                 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,
@@ -110,6 +113,13 @@ namespace Oobe.Wifi.Controls.Wifi
             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()
@@ -128,10 +138,8 @@ namespace Oobe.Wifi.Controls.Wifi
             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;
@@ -165,11 +173,9 @@ namespace Oobe.Wifi.Controls.Wifi
         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);
 
@@ -268,6 +274,7 @@ namespace Oobe.Wifi.Controls.Wifi
         public void Dispose()
         {
             view = null;
+            ApManager.Dispose();
         }
     }
 }