Listen ConnectionStateChangedEvent 30/282830/3
authorcheoleun moon <chleun.moon@samsung.com>
Wed, 12 Oct 2022 06:04:25 +0000 (15:04 +0900)
committercheoleun moon <chleun.moon@samsung.com>
Wed, 12 Oct 2022 06:30:40 +0000 (15:30 +0900)
Change-Id: Ic6b2c2315dfbe97acd13fd689d68184eb82049cc

SettingWiFi/SettingWiFi/controller/WiFi.cs
SettingWiFi/SettingWiFi/model/AP.cs
SettingWiFi/SettingWiFi/view/APSource.cs
SettingWiFi/SettingWiFi/view/ConnectPage.cs
SettingWiFi/SettingWiFi/view/MainPage.cs

index 3a230148e262d1168583d90fb6eb4fd7b7c6db8f..9e60a8a6a309843d08342ded7db5e5af57e54dcb 100755 (executable)
@@ -9,10 +9,19 @@ using static SettingWiFi.Logger;
 \r
 namespace SettingWiFi\r
 {\r
+    public enum WiFiState {\r
+        Disconnected = 0,\r
+        Association = 1,\r
+        Configuration = 2,\r
+        Connected = 3,\r
+    }\r
+\r
     public class WiFi\r
     {\r
         IEnumerable<WiFiAP> apList = new List<WiFiAP>();\r
 \r
+        private event EventHandler<WiFiStateChangedEventArgs> wifiStateChanged = null;\r
+\r
         public async Task Activate()\r
         {\r
             Debug("WiFi.Activate");\r
@@ -158,38 +167,80 @@ namespace SettingWiFi
                 string securityType = item.SecurityInformation.SecurityType.ToString();\r
                 bool isWpsSupported = item.SecurityInformation.IsWpsSupported;\r
 \r
-                if (item.NetworkInformation.ConnectionState.ToString().Equals(Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS))\r
-                {\r
-                    apInfoList.Add(new AP(item, item.NetworkInformation.Essid,\r
-                                        Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS, securityType,\r
-                                        isWpsSupported, item.NetworkInformation.RssiLevel));\r
-                    continue;\r
-                }\r
-                string text = "";\r
+                WiFiState state = convertWiFiState(item.NetworkInformation.ConnectionState);\r
+                apInfoList.Add(new AP(item, item.NetworkInformation.Essid,\r
+                    state, securityType, isWpsSupported,\r
+                    item.NetworkInformation.Bssid, item.NetworkInformation.RssiLevel));\r
+            }\r
 \r
-                if (securityType.Equals(Resources.IDS_ST_BODY_NONE))\r
-                {\r
-                    text = Resources.IDS_WIFI_POP_OPEN;\r
-                }\r
-                else if (securityType.Equals(Resources.IDS_WIFI_BODY_EAP))\r
-                {\r
-                    text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (Eap)";\r
-                }\r
-                else if (isWpsSupported)\r
+            return apInfoList;\r
+        }\r
+\r
+        internal event EventHandler<WiFiStateChangedEventArgs> WiFiStateChangedEventArgs\r
+        {\r
+            add\r
+            {\r
+                if (wifiStateChanged == null)\r
                 {\r
-                    text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (WPS available)";\r
+                    WiFiManager.ConnectionStateChanged += OnConnectionStateChanged;\r
                 }\r
-                else\r
+                wifiStateChanged += value;\r
+            }\r
+            remove\r
+            {\r
+                wifiStateChanged -= value;\r
+                if (wifiStateChanged == null)\r
                 {\r
-                    text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY;\r
+                    WiFiManager.ConnectionStateChanged -= OnConnectionStateChanged;\r
                 }\r
+            }\r
+        }\r
 \r
-                apInfoList.Add(new AP(item, item.NetworkInformation.Essid,\r
-                                    text, securityType,\r
-                                    isWpsSupported, item.NetworkInformation.RssiLevel));\r
+        private void OnConnectionStateChanged(object sender, ConnectionStateChangedEventArgs e)\r
+        {\r
+            Debug("OnConnectionStateChanged is callled");\r
+            var ap = e.AP;\r
+            var bssid = ap.NetworkInformation.Bssid;\r
+            WiFiState state = convertWiFiState(e.State);\r
+            WiFiStateChangedEventArgs arg = new WiFiStateChangedEventArgs(bssid, state);\r
+            wifiStateChanged.Invoke(null, arg);\r
+        }\r
+\r
+        private WiFiState convertWiFiState(WiFiConnectionState state)\r
+        {\r
+            switch (state)\r
+            {\r
+            case WiFiConnectionState.Disconnected:\r
+                return WiFiState.Disconnected;\r
+            case WiFiConnectionState.Association:\r
+                return WiFiState.Association;\r
+            case WiFiConnectionState.Congfiguration:\r
+                return WiFiState.Configuration;\r
+            case WiFiConnectionState.Connected:\r
+                return WiFiState.Connected;\r
             }\r
+            return WiFiState.Disconnected;\r
+        }\r
+    }\r
 \r
-            return apInfoList;\r
+    internal class WiFiStateChangedEventArgs\r
+    {\r
+        internal WiFiStateChangedEventArgs(string bssid, WiFiState state)\r
+        {\r
+            Bssid = bssid;\r
+            State = state;\r
+        }\r
+\r
+        internal string Bssid\r
+        {\r
+            get;\r
+            set;\r
+        }\r
+\r
+        internal WiFiState State\r
+        {\r
+            get;\r
+            set;\r
         }\r
     }\r
 }\r
index e0933efe26915ef0bbdc42b5a47038ebc5031f2f..9128d9cb665c93cf0e60262900e1a3042b29f009 100755 (executable)
@@ -24,7 +24,8 @@ namespace SettingWiFi
         }\r
         string iconDir;\r
         private string essid;\r
-        private string state;\r
+        private WiFiState state;\r
+        private string stateInfo;\r
         private string secType;\r
         private bool isWps;\r
         private SignalStrengthIndicator signalStrength = SignalStrengthIndicator.UNKNOWN;\r
@@ -33,7 +34,7 @@ namespace SettingWiFi
 \r
         private void OnPropertyChanged(string propertyName)\r
         {\r
-            Debug("OnPropertyChanged");\r
+            Debug("OnPropertyChanged " + propertyName);\r
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\r
         }\r
 \r
@@ -90,24 +91,30 @@ namespace SettingWiFi
                 + ", IconDir: " + iconDir); // TODO: will be removed.\r
         }\r
 \r
-        public AP(WiFiAP apHandle, string apEssid, string apState, string apSecType, bool apIsWps, SignalStrengthIndicator apSignalStrength)\r
+        public AP(WiFiAP apHandle, string apEssid, WiFiState apState,\r
+            string apSecType, bool apIsWps, string apBssid, SignalStrengthIndicator apSignalStrength)\r
         {\r
             ApHandle = apHandle;\r
             essid = apEssid;\r
-            state = apState;\r
             secType = apSecType;\r
             isWps = apIsWps;\r
+            Bssid = apBssid;\r
+            StateInfo = GetStateInfo(state);\r
             signalStrength = apSignalStrength;\r
             UpdateWiFiAPIcon();\r
         }\r
 \r
-        public AP(WiFiAP apHandle, string apEssid, string apState, string apSecType, bool apIsWps, WiFiRssiLevel apRssiLevel)\r
+        public AP(WiFiAP apHandle, string apEssid, WiFiState apState,\r
+            string apSecType, bool apIsWps, string apBssid, WiFiRssiLevel apRssiLevel)\r
         {\r
             ApHandle = apHandle;\r
             essid = apEssid;\r
             state = apState;\r
             secType = apSecType;\r
             isWps = apIsWps;\r
+            State = apState;\r
+            Bssid = apBssid;\r
+            StateInfo = GetStateInfo(state);\r
             signalStrength = ConvertToSignalStrength(apRssiLevel);\r
             UpdateWiFiAPIcon();\r
         }\r
@@ -131,6 +138,49 @@ namespace SettingWiFi
             }\r
         }\r
 \r
+        public WiFiState State\r
+        {\r
+            get\r
+            {\r
+                return state;\r
+            }\r
+            set\r
+            {\r
+                state = value;\r
+                StateInfo = GetStateInfo(state);\r
+            }\r
+        }\r
+\r
+        private string GetStateInfo(WiFiState state)\r
+        {\r
+            switch (state)\r
+            {\r
+            case WiFiState.Disconnected:\r
+                if (secType.Equals(Resources.IDS_ST_BODY_NONE))\r
+                {\r
+                    return Resources.IDS_WIFI_POP_OPEN;\r
+                }\r
+                else if (secType.Equals(Resources.IDS_WIFI_BODY_EAP))\r
+                {\r
+                    return Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (Eap)";\r
+                }\r
+                else if (isWps)\r
+                {\r
+                    return Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (WPS available)";\r
+                }\r
+                else\r
+                {\r
+                    return Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY;\r
+                }\r
+            case WiFiState.Association:\r
+            case WiFiState.Configuration:\r
+                return  Resources.IDS_WIFI_BODY_CONNECTING_ING;\r
+            case WiFiState.Connected:\r
+                return Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS;\r
+            }\r
+            return "";\r
+        }\r
+\r
         public string ImageUrl\r
         {\r
             get\r
@@ -139,16 +189,16 @@ namespace SettingWiFi
             }\r
         }\r
 \r
-        public string State\r
+        public string StateInfo\r
         {\r
             get\r
             {\r
-                return state;\r
+                return stateInfo;\r
             }\r
             set\r
             {\r
-                state = value;\r
-                OnPropertyChanged("State");\r
+                stateInfo = value;\r
+                OnPropertyChanged("StateInfo");\r
             }\r
         }\r
 \r
@@ -175,5 +225,11 @@ namespace SettingWiFi
                 return signalStrength;\r
             }\r
         }\r
+\r
+        public string Bssid\r
+        {\r
+            get;\r
+            set;\r
+        }\r
     };\r
 }\r
index ceda9b8e528882ef1534b89c5339ccb92e094d5c..7fd226af1e3f3dffdd8ce3e3a5d2c31f1dbc993e 100755 (executable)
@@ -41,7 +41,7 @@ namespace SettingWiFi
             if (apList == null)\r
             {\r
                 Debug("apList is null");\r
-                this.Add(new AP(null, "", "", "", false, AP.SignalStrengthIndicator.UNKNOWN));\r
+                this.Add(new AP(null, "", WiFiState.Disconnected, "", false, "", AP.SignalStrengthIndicator.UNKNOWN));\r
                 return;\r
             }\r
             // Clear method have some issue about asynchronous actions,\r
@@ -53,8 +53,9 @@ namespace SettingWiFi
 \r
             foreach (var item in apList)\r
             {\r
-                this.Add(new AP(item.ApHandle, item.Essid, item.State, item.SecType, item.IsWps, item.SignalStrength));\r
+                this.Add(item);\r
             }\r
+\r
         }\r
 \r
         public void RemoveScanList()\r
@@ -86,7 +87,21 @@ namespace SettingWiFi
                 text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY;\r
             }\r
 \r
-            ap.State = text;\r
+            ap.StateInfo = text;\r
+        }\r
+\r
+        internal void UpdateApState(string bssid, WiFiState state)\r
+        {\r
+            Debug("UpdateApState. bssid: " + bssid + ", state: " + state.ToString());\r
+            var apList = this.Items;\r
+            foreach (var ap in apList)\r
+            {\r
+                if (ap.Bssid.Equals(bssid))\r
+                {\r
+                    ap.State = state;\r
+                    break;\r
+                }\r
+            }\r
         }\r
     }\r
 \r
@@ -113,5 +128,10 @@ namespace SettingWiFi
         {\r
             available.UpdateState(ap);\r
         }\r
+\r
+        internal void UpdateApState(string bssid, WiFiState state)\r
+        {\r
+            available.UpdateApState(bssid, state);\r
+        }\r
     }\r
 }
\ No newline at end of file
index df277e445dd34f8a065ffdd2e5b5d0b23664b29a..e27158f97d01250d8e5e213c4b2e8705001363c0 100644 (file)
@@ -2,6 +2,7 @@ using Tizen.NUI;
 using Tizen.NUI.BaseComponents;
 using Tizen.NUI.Components;
 using SettingWiFi.res.locale;
+using static SettingWiFi.Logger;
 
 
 namespace SettingWiFi
@@ -13,6 +14,7 @@ namespace SettingWiFi
 
         internal ConnectPage(WiFi wifi)
         {
+            Debug("ConnectPage");
             mWifi = wifi;
         }
 
@@ -82,10 +84,16 @@ namespace SettingWiFi
             Navigator.Pop();
         }
 
-        private void Connect()
+        private async void Connect()
         {
-            mAp.State = Resources.IDS_WIFI_BODY_CONNECTING_ING;
-            mWifi.Connect(mAp, "datanetwork");
+            Debug("Connect");
+            //mAp.StateInfo = Resources.IDS_WIFI_BODY_CONNECTING_ING;
+            await mWifi.Connect(mAp, "datanetwork");
+
+            if(mWifi.GetConnectedAP().Equals(mAp.Essid))
+            {
+                mAp.StateInfo = Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS;
+            }
         }
     }
 }
\ No newline at end of file
index ffc50ce45b41a1e78e4f5adc37ff9690f31ae83c..5d9209bc91aee7adedd8bb8df954809cfcd9bf12 100644 (file)
@@ -6,7 +6,7 @@ using Tizen.NUI.Binding;
 using Tizen.NUI.Components;
 using SettingWiFi.res.locale;
 using static SettingWiFi.Logger;
-
+using System;
 
 namespace SettingWiFi
 {
@@ -108,6 +108,7 @@ namespace SettingWiFi
                 SelectionMode = ItemSelectionMode.Single,
             };
             mScanList.SelectionChanged += OnScanListSelected;
+            mWifi.WiFiStateChangedEventArgs += OnWiFiStateChanged;
 
             var header = GetHeader();
             var scanButton = new Button()
@@ -126,6 +127,11 @@ namespace SettingWiFi
             Content = mainView;
         }
 
+        private void OnWiFiStateChanged(object sender, WiFiStateChangedEventArgs e)
+        {
+            mApSource.UpdateApState(e.Bssid, e.State);
+        }
+
         private DataTemplate CreateItemTemplate()
         {
             return new DataTemplate(() =>
@@ -136,7 +142,7 @@ namespace SettingWiFi
                     };
                     item.Label.SetBinding(TextLabel.TextProperty, "Essid");
                     item.Label.HorizontalAlignment = HorizontalAlignment.Begin;
-                    item.SubLabel.SetBinding(TextLabel.TextProperty, "State");
+                    item.SubLabel.SetBinding(TextLabel.TextProperty, "StateInfo");
                     item.SubLabel.HorizontalAlignment = HorizontalAlignment.Begin;
 
                     ImageViewStyle imageViewStyle = new ImageViewStyle()
@@ -285,6 +291,7 @@ namespace SettingWiFi
         public async void OnScanListSelected(object sender, SelectionChangedEventArgs ev)
         {
             //SingleSelection Only have 1 or nil object in the list.
+            /*
             foreach (object item in ev.PreviousSelection)
             {
                 if (item == null) break;
@@ -292,15 +299,16 @@ namespace SettingWiFi
                 {
                     Debug("Disconnect " + ap.Essid);
                     await mWifi.Disconnect(ap.Essid);
-                    mApSource.UpdateState(ap);
+                    //mApSource.UpdateState(ap);
                 }
             }
+            */
             foreach (object item in ev.CurrentSelection)
             {
                 if (item == null) break;
                 if (item is AP ap)
                 {
-                    if (ap.State.Equals(Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS))
+                    if (ap.StateInfo.Equals(Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS))
                     {
                         Debug("Already connected " + ap.Essid);
                         break;