Add a connect method 22/282522/1
authorchaehee-hong <chaehee.hong@samsung.com>
Wed, 5 Oct 2022 04:33:03 +0000 (13:33 +0900)
committerchaehee-hong <chaehee.hong@samsung.com>
Wed, 5 Oct 2022 04:33:09 +0000 (13:33 +0900)
Change-Id: I7c1e248deb045aaa414531163aa7f7ce57df87ae

SettingWiFi/SettingWiFi/AP.cs
SettingWiFi/SettingWiFi/SettingWiFi.cs
SettingWiFi/SettingWiFi/WiFi.cs
SettingWiFi/SettingWiFi/WidgetSettingWiFi.cs
SettingWiFi/SettingWiFi/tizen-manifest.xml

index dd45e470e28b13e535595b8fbd7e8fe6c3ba3689..3a445c4fa0170a7dcbb6a529a940275dde817fb0 100755 (executable)
@@ -13,22 +13,23 @@ namespace SettingWiFi
 {\r
     public class AP : INotifyPropertyChanged\r
     {\r
-        internal static readonly string LogTag = "SettingWiFi";\r
         string iconDir = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "icon.png";\r
+        string infoIconDir = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "icon.png";\r
         private string essid;\r
         private string state;\r
+        private string stateText;\r
         public event PropertyChangedEventHandler PropertyChanged;\r
 \r
         private void OnPropertyChanged(string propertyName)\r
         {\r
-            Log.Debug(LogTag, "OnPropertyChanged");\r
+            Log.Debug(Program.LogTag, "OnPropertyChanged");\r
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\r
         }\r
 \r
         public AP(string apEssid, string apState)\r
         {\r
             essid = apEssid;\r
-            state = apState;\r
+            stateText = apState;\r
         }\r
 \r
         public string Essid\r
@@ -64,18 +65,38 @@ namespace SettingWiFi
                 OnPropertyChanged("State");\r
             }\r
         }\r
+\r
+        public string StateText\r
+        {\r
+            get\r
+            {\r
+                return stateText;\r
+            }\r
+            set\r
+            {\r
+                stateText = value;\r
+                OnPropertyChanged("StateText");\r
+            }\r
+        }\r
+\r
+        public string Info\r
+        {\r
+            get\r
+            {\r
+                return infoIconDir;\r
+            }\r
+        }\r
     };\r
 \r
 \r
     public class DeviceCollection : ObservableCollection<AP>\r
     {\r
-        internal static readonly string LogTag = "SettingWiFi";\r
         private string title;\r
 \r
         public DeviceCollection(string groupTitle)\r
         {\r
             title = groupTitle;\r
-            this.UpdateDevices(null);\r
+            this.UpdateScanList(null);\r
         }\r
 \r
         public string Title\r
@@ -91,11 +112,12 @@ namespace SettingWiFi
             }\r
         }\r
 \r
-        public void UpdateDevices(List<AP> apList)\r
+        public void UpdateScanList(List<AP> apList)\r
         {\r
-            Log.Debug(LogTag, "UpdateDevices");\r
+            Log.Debug(Program.LogTag, "UpdateDevices");\r
             if (apList == null)\r
             {\r
+                Log.Debug(Program.LogTag, "apList is null");\r
                 this.Add(new AP("", ""));\r
                 return;\r
             }\r
@@ -108,7 +130,7 @@ namespace SettingWiFi
 \r
             foreach (var item in apList)\r
             {\r
-                this.Add(new AP(item.Essid, item.State));\r
+                this.Add(new AP(item.Essid, item.StateText));\r
             }\r
         }\r
 \r
@@ -123,18 +145,17 @@ namespace SettingWiFi
 \r
     public class APSource : ObservableCollection<DeviceCollection>\r
     {\r
-        internal static readonly string LogTag = "SettingWiFi";\r
         private DeviceCollection available;\r
         public APSource()\r
         {\r
-            Log.Debug(LogTag, "new APSource");\r
+            Log.Debug(Program.LogTag, "new APSource");\r
             available = new DeviceCollection("Available networks");\r
             this.Add(available);\r
-            Log.Debug(LogTag, "Add DeviceCollection");\r
+            Log.Debug(Program.LogTag, "Add DeviceCollection");\r
         }\r
         public void UpdateDevices(List<AP> apList)\r
         {\r
-            available.UpdateDevices(apList);\r
+            available.UpdateScanList(apList);\r
         }\r
 \r
         public void RemoveDevices()\r
index 5bf47858d6db6f057762d3fda7c5c1f01d50ba1f..f2aafc53bd0eaf425c09523dfab24674132c38ef 100755 (executable)
@@ -6,6 +6,7 @@ namespace SettingWiFi
 {
     public class Program : NUIWidgetApplication
     {
+        internal static readonly string LogTag = "SettingWiFi.App";
         public Program(Dictionary<System.Type, string> widgetSet) : base(widgetSet)
         {
         }
index 3d47b40517d4a36e0381511ff4cdd5f18904ad17..aa63a1b3339296448177f4c0e2e4105b3401cb65 100755 (executable)
@@ -9,23 +9,17 @@ namespace SettingWiFi
 {\r
     public class WiFi\r
     {\r
-        internal static readonly string LogTag = "SettingWiFi";\r
-        IEnumerable<WiFiAP> apList = null;\r
+        IEnumerable<WiFiAP> apList = new List<WiFiAP>();\r
 \r
         public async Task Activate()\r
         {\r
             try\r
             {\r
                 await WiFiManager.ActivateAsync();\r
-                if (WiFiManager.IsActive)\r
-                {\r
-                    Log.Debug(LogTag, "WiFi is activated");\r
-                    apList = new List<WiFiAP>();\r
-                }\r
             }\r
             catch (Exception e)\r
             {\r
-                Log.Debug(LogTag, "Exception occurred" + e.ToString());\r
+                Log.Debug(Program.LogTag, "Fail to activate WiFi " + e.ToString());\r
             }\r
         }\r
 \r
@@ -42,9 +36,8 @@ namespace SettingWiFi
             }\r
             catch (Exception e)\r
             {\r
-                Log.Debug(LogTag, "Exception occurred" + e.ToString());\r
+                Log.Debug(Program.LogTag, "Fail to scan " + e.ToString());\r
             }\r
-                \r
         }\r
 \r
         public List<AP> GetScanResult()\r
@@ -52,37 +45,28 @@ namespace SettingWiFi
             try\r
             {\r
                 apList = WiFiManager.GetFoundAPs();\r
-\r
-                List<AP> apInfoList = new List<AP>();\r
-                foreach (var item in apList)\r
-                {\r
-                    Log.Debug(LogTag, "AP name: " + item.NetworkInformation.Essid);\r
-                    //Log.Debug(LogTag, "Connection state: " + item.NetworkInformation.ConnectionState);\r
-                    apInfoList.Add(new AP(item.NetworkInformation.Essid, item.NetworkInformation.ConnectionState.ToString()));\r
-                }\r
-\r
-                return apInfoList;\r
+                return GetAPList();\r
             }\r
             catch (Exception e)\r
             {\r
-                Log.Debug(LogTag, "Exception occurred" + e.ToString());\r
+                Log.Debug(Program.LogTag, "Fail to get scan result " + e.ToString());\r
             }\r
 \r
             return null;\r
         }\r
 \r
-        public async Task Connect(string essid)\r
+        public async Task Connect(string essid, string password)\r
         {\r
-            WiFiAP ap = null;\r
-            apList = WiFiManager.GetFoundAPs();\r
+            WiFiAP ap = FindAP(essid);\r
+            if (ap == null)\r
+            {\r
+                Log.Debug(Program.LogTag, "Cannet find " + essid);\r
+                return;\r
+            }\r
 \r
-            foreach (var item in apList)\r
+            if (password.Length > 0)\r
             {\r
-                if (item.NetworkInformation.Essid.Equals(essid))\r
-                {\r
-                    ap = item;\r
-                    break;\r
-                }\r
+                ap.SecurityInformation.SetPassphrase(password);\r
             }\r
 \r
             try\r
@@ -91,10 +75,46 @@ namespace SettingWiFi
             }\r
             catch (Exception e)\r
             {\r
-                Log.Debug(LogTag, "Fail to connect" + e.ToString());\r
+                Log.Debug(Program.LogTag, "Fail to connect" + e.ToString());\r
             }\r
+\r
         }\r
 \r
+        public Task Disconnect(string essid)\r
+        {\r
+            WiFiAP ap = FindAP(essid);\r
+            if (ap == null)\r
+            {\r
+                return Task.FromException(new ArgumentException("Cannot find " + essid));\r
+            }\r
+            return ap.DisconnectAsync();\r
+        }\r
+\r
+        public void Forget(string essid)\r
+        {\r
+            WiFiAP ap = FindAP(essid);\r
+            if (ap == null)\r
+            {\r
+                Log.Debug(Program.LogTag, "Cannot find " + essid);\r
+                return;\r
+            }\r
+            ap.ForgetAP();\r
+        }\r
+\r
+        private WiFiAP FindAP(string essid)\r
+        {\r
+            GetScanResult();\r
+            foreach (var item in apList)\r
+            {\r
+                Log.Debug(Program.LogTag, "Found AP\t" + item.NetworkInformation.Essid);\r
+                if (item.NetworkInformation.Essid.Equals(essid))\r
+                {\r
+                    return item;\r
+                }\r
+            }\r
+\r
+            return null;\r
+        }\r
 \r
         public bool IsActive()\r
         {\r
@@ -105,5 +125,23 @@ namespace SettingWiFi
 \r
             return false;\r
         }\r
+\r
+        public string GetConnectedAP()\r
+        {\r
+            return WiFiManager.GetConnectedAP().NetworkInformation.Essid;\r
+        }\r
+\r
+        public List<AP> GetAPList()\r
+        {\r
+            List<AP> apInfoList = new List<AP>();\r
+            foreach (var item in apList)\r
+            {\r
+                Log.Debug(Program.LogTag, "AP name: " + item.NetworkInformation.Essid);\r
+                //Log.Debug(LogTag, "Connection state: " + item.NetworkInformation.ConnectionState);\r
+                apInfoList.Add(new AP(item.NetworkInformation.Essid, item.NetworkInformation.ConnectionState.ToString()));\r
+            }\r
+\r
+            return apInfoList;\r
+        }\r
     }\r
 }\r
index ca3dfbbffc49bfcba3f1826a418f261c5710b5cd..37a04163f4884ba1d357173f9f928e8d3eeefabd 100755 (executable)
@@ -13,10 +13,19 @@ namespace SettingWiFi
 {\r
     internal class WidgetSettingWiFi : Widget\r
     {\r
-        internal static readonly string LogTag = "SettingWiFi";\r
+        CollectionView scanList;\r
+        Navigator navigator;\r
+\r
+        ContentPage mainPage;\r
+        ContentPage infoPage;\r
+        ContentPage morePage;\r
+\r
         WiFi wifi;\r
         APSource apSource;\r
 \r
+        private static readonly int itemCount = 1;\r
+        private MenuItem[] menuItems = new MenuItem[itemCount];\r
+\r
         private RecyclerViewItem GetHeader()\r
         {\r
             var header = new RecyclerViewItem()\r
@@ -29,6 +38,14 @@ namespace SettingWiFi
                 HeightSpecification = LayoutParamPolicies.WrapContent,\r
             };\r
 \r
+            bool isWiFiOn = false;\r
+            if (IsWiFiActive())\r
+            {\r
+                isWiFiOn = true;\r
+                Log.Debug(Program.LogTag, "ScanAP");\r
+                ScanAP();\r
+            }\r
+\r
             var toggle = new DefaultLinearItem()\r
             {\r
                 WidthSpecification = LayoutParamPolicies.MatchParent,\r
@@ -37,27 +54,62 @@ namespace SettingWiFi
             };\r
             toggle.Label.HorizontalAlignment = HorizontalAlignment.Begin;\r
 \r
-            var onOffSwitch = new Switch();\r
+            var onOffSwitch = new Switch()\r
+            {\r
+                IsSelected = isWiFiOn,\r
+            };\r
+\r
             toggle.Extra = onOffSwitch;\r
-            onOffSwitch.SelectedChanged += OnSelectedChanged;\r
+            onOffSwitch.SelectedChanged += OnWiFiSelected;\r
             header.Add(toggle);\r
 \r
             return header;\r
         }\r
 \r
-        protected override void OnCreate(string contentInfo, Window window)\r
+        private ContentPage CreateMainPage()\r
         {\r
-            Bundle bundle = Bundle.Decode(contentInfo);\r
-            Navigator navigator = window.GetDefaultNavigator();\r
-            wifi = new WiFi();\r
-            apSource = new APSource();\r
+            var moreButton = new Button()\r
+            {\r
+                Text = "More",\r
+            };\r
+\r
+            MenuItem[] menuItems = new MenuItem[itemCount];\r
+            menuItems[0] = new MenuItem() { Text = "Add WiFi network" };\r
+            menuItems[0].SelectedChanged += (object sender, SelectedChangedEventArgs args) =>\r
+            {\r
+                var menuItem = sender as MenuItem;\r
+                navigator.Push(morePage);\r
+            };\r
+\r
+            moreButton.Clicked += (object sender, ClickedEventArgs args) =>\r
+            {\r
+                var menu = new Menu()\r
+                {\r
+                    Anchor = moreButton,\r
+                    HorizontalPositionToAnchor = Menu.RelativePosition.Center,\r
+                    VerticalPositionToAnchor = Menu.RelativePosition.End,\r
+                    Items = menuItems,\r
+                };\r
+                menu.Post();\r
+            };\r
 \r
             var appBar = new AppBar()\r
             {\r
                 Title = "Wi-Fi",\r
+                Actions = new View[] { moreButton, },\r
             };\r
 \r
-            View rootView = new View()\r
+            AppBarStyle appBarStyle = (AppBarStyle)ThemeManager.GetStyle("Tizen.NUI.Components.AppBar");\r
+            Button backButton = new Button(((AppBarStyle)appBarStyle).BackButton);\r
+\r
+            backButton.Clicked += (object source, ClickedEventArgs args) =>\r
+            {\r
+                navigator.Pop();\r
+            };\r
+\r
+            appBar.NavigationContent = backButton;\r
+\r
+            View mainView = new View()\r
             {\r
                 Layout = new LinearLayout()\r
                 {\r
@@ -68,7 +120,7 @@ namespace SettingWiFi
                 HeightSpecification = LayoutParamPolicies.MatchParent,\r
             };\r
 \r
-            CollectionView deviceView = new CollectionView()\r
+            scanList = new CollectionView()\r
             {\r
                 ItemsSource = apSource,\r
                 ItemsLayouter = new LinearLayouter(),\r
@@ -76,10 +128,12 @@ namespace SettingWiFi
                 {\r
                     DefaultLinearItem item = new DefaultLinearItem();\r
                     item.WidthSpecification = LayoutParamPolicies.MatchParent;\r
-                    //Decorate Label\r
                     item.Label.SetBinding(TextLabel.TextProperty, "Essid");\r
+\r
                     item.Label.HorizontalAlignment = HorizontalAlignment.Begin;\r
-                    //Decorate Icon\r
+                    item.SubLabel.SetBinding(TextLabel.TextProperty, "StateText");\r
+\r
+                    item.SubLabel.HorizontalAlignment = HorizontalAlignment.Begin;\r
                     item.Icon.SetBinding(ImageView.ResourceUrlProperty, "ImageUrl");\r
                     item.Icon.WidthSpecification = 40;\r
                     item.Icon.HeightSpecification = 40;\r
@@ -102,7 +156,7 @@ namespace SettingWiFi
                 HeightSpecification = LayoutParamPolicies.MatchParent,\r
                 SelectionMode = ItemSelectionMode.Single,\r
             };\r
-            deviceView.SelectionChanged += DeviceConnectedEvent;\r
+            scanList.SelectionChanged += OnScanListSelected;\r
 \r
             var header = GetHeader();\r
             var scanButton = new Button()\r
@@ -113,22 +167,112 @@ namespace SettingWiFi
             };\r
             scanButton.Clicked += OnScanButtonClicked;\r
 \r
-            rootView.Add(header);\r
-            rootView.Add(deviceView);\r
-            rootView.Add(scanButton);\r
+            mainView.Add(header);\r
+            mainView.Add(scanList);\r
+            mainView.Add(scanButton);\r
+            ContentPage page = new ContentPage()\r
+            {\r
+                AppBar = appBar,\r
+                Content = mainView,\r
+            };\r
+\r
+            return page;\r
+        }\r
+\r
+        private ContentPage CreateInfoPage()\r
+        {\r
+            var appBar = new AppBar()\r
+            {\r
+                Title = "Wi-Fi network info",\r
+            };\r
+\r
+            AppBarStyle appBarStyle = (AppBarStyle)ThemeManager.GetStyle("Tizen.NUI.Components.AppBar");\r
+            Button backButton = new Button(((AppBarStyle)appBarStyle).BackButton);\r
+\r
+            backButton.Clicked += (object source, ClickedEventArgs args) =>\r
+            {\r
+                navigator.Pop();\r
+            };\r
+\r
+            View infoView = new View()\r
+            {\r
+                Layout = new LinearLayout()\r
+                {\r
+                    LinearOrientation = LinearLayout.Orientation.Vertical,\r
+                    HorizontalAlignment = HorizontalAlignment.Center,\r
+                },\r
+                WidthSpecification = LayoutParamPolicies.MatchParent,\r
+                HeightSpecification = LayoutParamPolicies.MatchParent,\r
+            };\r
+\r
+            var forgetButton = new Button()\r
+            {\r
+                Text = "Forget",\r
+                WidthSpecification = 300,\r
+                HeightSpecification = 80,\r
+            };\r
+            forgetButton.Clicked += OnforgetButtonClicked;\r
 \r
+            infoView.Add(forgetButton);\r
             ContentPage page = new ContentPage()\r
             {\r
                 AppBar = appBar,\r
-                Content = rootView,\r
+                Content = infoView,\r
             };\r
 \r
-            navigator.Push(page);\r
+            return page;\r
         }\r
 \r
+        private ContentPage CreatemorePage()\r
+        {\r
+            var appBar = new AppBar()\r
+            {\r
+                Title = "Add Wi-Fi network",\r
+            };\r
+\r
+            AppBarStyle appBarStyle = (AppBarStyle)ThemeManager.GetStyle("Tizen.NUI.Components.AppBar");\r
+            Button backButton = new Button(((AppBarStyle)appBarStyle).BackButton);\r
+\r
+            backButton.Clicked += (object source, ClickedEventArgs args) =>\r
+            {\r
+                navigator.Pop();\r
+            };\r
+\r
+            View moreView = new View()\r
+            {\r
+                Layout = new LinearLayout()\r
+                {\r
+                    LinearOrientation = LinearLayout.Orientation.Vertical,\r
+                    HorizontalAlignment = HorizontalAlignment.Center,\r
+                },\r
+                WidthSpecification = LayoutParamPolicies.MatchParent,\r
+                HeightSpecification = LayoutParamPolicies.MatchParent,\r
+            };\r
+\r
+            ContentPage page = new ContentPage()\r
+            {\r
+                AppBar = appBar,\r
+                Content = moreView,\r
+            };\r
+\r
+            return page;\r
+        }\r
+\r
+        protected override void OnCreate(string contentInfo, Window window)\r
+        {\r
+            navigator = window.GetDefaultNavigator();\r
+            wifi = new WiFi();\r
+            apSource = new APSource();\r
+\r
+            mainPage = CreateMainPage();\r
+            infoPage = CreateInfoPage();\r
+            morePage = CreatemorePage();\r
+\r
+            navigator.Push(mainPage);\r
+        }\r
 \r
         /* Call WiFi */\r
-        private async void OnSelectedChanged(object sender, SelectedChangedEventArgs e)\r
+        private async void OnWiFiSelected(object sender, SelectedChangedEventArgs e)\r
         {\r
             if (e.IsSelected)\r
             {\r
@@ -136,29 +280,36 @@ namespace SettingWiFi
                 {\r
                     await wifi.Activate();\r
                 }\r
+                /* TODO: auto connect */\r
                 ScanAP();\r
             }\r
             else\r
             {\r
-                apSource.RemoveDevices();\r
-\r
                 if (IsWiFiActive())\r
                 {\r
                     await wifi.Deactivate();\r
                 }\r
+                apSource.RemoveDevices();\r
             }\r
         }\r
 \r
         private void OnScanButtonClicked(object sender, ClickedEventArgs e)\r
         {\r
-            Log.Debug(LogTag, "OnScanButtonClicked");\r
+            Log.Debug(Program.LogTag, "OnScanButtonClicked");\r
             ScanAP();\r
         }\r
 \r
+        private void OnforgetButtonClicked(object sender, ClickedEventArgs e)\r
+        {\r
+            Log.Debug(Program.LogTag, "OnforgetButtonClicked");\r
+            //wifi.Forget(essid);\r
+        }\r
+\r
         private bool IsWiFiActive()\r
         {\r
             return wifi.IsActive();\r
         }\r
+\r
         private async void ScanAP()\r
         {\r
             if (IsWiFiActive())\r
@@ -169,14 +320,22 @@ namespace SettingWiFi
             }\r
         }\r
 \r
-        public async void DeviceConnectedEvent(object sender, SelectionChangedEventArgs ev)\r
+        public async void OnScanListSelected(object sender, SelectionChangedEventArgs ev)\r
         {\r
+            /* TODO: disable to click the connected ap */\r
+\r
+\r
+\r
             //SingleSelection Only have 1 or nil object in the list.\r
             foreach (object item in ev.PreviousSelection)\r
             {\r
                 if (item == null) break;\r
                 if (item is AP device)\r
                 {\r
+                    //Log.Debug(LogTag, "Disconnect ");\r
+                    //await wifi.Disconnect(device.Essid);\r
+                    //device.State = "Disonnected";\r
+\r
                     // device.Connected = false;\r
                 }\r
             }\r
@@ -185,7 +344,20 @@ namespace SettingWiFi
                 if (item == null) break;\r
                 if (item is AP device)\r
                 {\r
-                    await wifi.Connect(device.Essid);\r
+                    if (device.StateText.Equals("Connected"))\r
+                    {\r
+                        Log.Debug(Program.LogTag, "already connected");\r
+                        return;\r
+                    }\r
+\r
+                    Log.Debug(Program.LogTag, "new connect"); /* TODO: pop-up(password, cancel, connect) */\r
+                    device.StateText = "Connecting";\r
+                    await wifi.Connect(device.Essid, "datanetwork");\r
+                    if(wifi.GetConnectedAP().Equals(device.Essid))\r
+                    {\r
+                        device.StateText = "Connected";\r
+\r
+                    }\r
                     //  device.Connected = true;\r
                     //  device.Registered = true;\r
                 }\r
index c1b1256dbf84d2635c8179140d38f3911dee22c2..98646049ec46287a1a5c0958101663ce4897357e 100755 (executable)
@@ -9,4 +9,9 @@
     </widget-class>
     <metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
   </widget-application>
+  <privileges>
+    <privilege>http://tizen.org/privilege/network.get</privilege>
+    <privilege>http://tizen.org/privilege/network.set</privilege>
+    <privilege>http://tizen.org/privilege/network.profile</privilege>
+  </privileges>
 </manifest>