From: cheoleun moon Date: Wed, 12 Oct 2022 06:04:25 +0000 (+0900) Subject: Listen ConnectionStateChangedEvent X-Git-Tag: accepted/tizen/unified/20221216.024031~28 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dad11b7825c2fb76ed63c43dacf74791f695847c;p=profile%2Fiot%2Fapps%2Fdotnet%2Fsetting-wifi.git Listen ConnectionStateChangedEvent Change-Id: Ic6b2c2315dfbe97acd13fd689d68184eb82049cc --- diff --git a/SettingWiFi/SettingWiFi/controller/WiFi.cs b/SettingWiFi/SettingWiFi/controller/WiFi.cs index 3a23014..9e60a8a 100755 --- a/SettingWiFi/SettingWiFi/controller/WiFi.cs +++ b/SettingWiFi/SettingWiFi/controller/WiFi.cs @@ -9,10 +9,19 @@ using static SettingWiFi.Logger; namespace SettingWiFi { + public enum WiFiState { + Disconnected = 0, + Association = 1, + Configuration = 2, + Connected = 3, + } + public class WiFi { IEnumerable apList = new List(); + private event EventHandler wifiStateChanged = null; + public async Task Activate() { Debug("WiFi.Activate"); @@ -158,38 +167,80 @@ namespace SettingWiFi string securityType = item.SecurityInformation.SecurityType.ToString(); bool isWpsSupported = item.SecurityInformation.IsWpsSupported; - if (item.NetworkInformation.ConnectionState.ToString().Equals(Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS)) - { - apInfoList.Add(new AP(item, item.NetworkInformation.Essid, - Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS, securityType, - isWpsSupported, item.NetworkInformation.RssiLevel)); - continue; - } - string text = ""; + WiFiState state = convertWiFiState(item.NetworkInformation.ConnectionState); + apInfoList.Add(new AP(item, item.NetworkInformation.Essid, + state, securityType, isWpsSupported, + item.NetworkInformation.Bssid, item.NetworkInformation.RssiLevel)); + } - if (securityType.Equals(Resources.IDS_ST_BODY_NONE)) - { - text = Resources.IDS_WIFI_POP_OPEN; - } - else if (securityType.Equals(Resources.IDS_WIFI_BODY_EAP)) - { - text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (Eap)"; - } - else if (isWpsSupported) + return apInfoList; + } + + internal event EventHandler WiFiStateChangedEventArgs + { + add + { + if (wifiStateChanged == null) { - text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (WPS available)"; + WiFiManager.ConnectionStateChanged += OnConnectionStateChanged; } - else + wifiStateChanged += value; + } + remove + { + wifiStateChanged -= value; + if (wifiStateChanged == null) { - text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY; + WiFiManager.ConnectionStateChanged -= OnConnectionStateChanged; } + } + } - apInfoList.Add(new AP(item, item.NetworkInformation.Essid, - text, securityType, - isWpsSupported, item.NetworkInformation.RssiLevel)); + private void OnConnectionStateChanged(object sender, ConnectionStateChangedEventArgs e) + { + Debug("OnConnectionStateChanged is callled"); + var ap = e.AP; + var bssid = ap.NetworkInformation.Bssid; + WiFiState state = convertWiFiState(e.State); + WiFiStateChangedEventArgs arg = new WiFiStateChangedEventArgs(bssid, state); + wifiStateChanged.Invoke(null, arg); + } + + private WiFiState convertWiFiState(WiFiConnectionState state) + { + switch (state) + { + case WiFiConnectionState.Disconnected: + return WiFiState.Disconnected; + case WiFiConnectionState.Association: + return WiFiState.Association; + case WiFiConnectionState.Congfiguration: + return WiFiState.Configuration; + case WiFiConnectionState.Connected: + return WiFiState.Connected; } + return WiFiState.Disconnected; + } + } - return apInfoList; + internal class WiFiStateChangedEventArgs + { + internal WiFiStateChangedEventArgs(string bssid, WiFiState state) + { + Bssid = bssid; + State = state; + } + + internal string Bssid + { + get; + set; + } + + internal WiFiState State + { + get; + set; } } } diff --git a/SettingWiFi/SettingWiFi/model/AP.cs b/SettingWiFi/SettingWiFi/model/AP.cs index e0933ef..9128d9c 100755 --- a/SettingWiFi/SettingWiFi/model/AP.cs +++ b/SettingWiFi/SettingWiFi/model/AP.cs @@ -24,7 +24,8 @@ namespace SettingWiFi } string iconDir; private string essid; - private string state; + private WiFiState state; + private string stateInfo; private string secType; private bool isWps; private SignalStrengthIndicator signalStrength = SignalStrengthIndicator.UNKNOWN; @@ -33,7 +34,7 @@ namespace SettingWiFi private void OnPropertyChanged(string propertyName) { - Debug("OnPropertyChanged"); + Debug("OnPropertyChanged " + propertyName); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } @@ -90,24 +91,30 @@ namespace SettingWiFi + ", IconDir: " + iconDir); // TODO: will be removed. } - public AP(WiFiAP apHandle, string apEssid, string apState, string apSecType, bool apIsWps, SignalStrengthIndicator apSignalStrength) + public AP(WiFiAP apHandle, string apEssid, WiFiState apState, + string apSecType, bool apIsWps, string apBssid, SignalStrengthIndicator apSignalStrength) { ApHandle = apHandle; essid = apEssid; - state = apState; secType = apSecType; isWps = apIsWps; + Bssid = apBssid; + StateInfo = GetStateInfo(state); signalStrength = apSignalStrength; UpdateWiFiAPIcon(); } - public AP(WiFiAP apHandle, string apEssid, string apState, string apSecType, bool apIsWps, WiFiRssiLevel apRssiLevel) + public AP(WiFiAP apHandle, string apEssid, WiFiState apState, + string apSecType, bool apIsWps, string apBssid, WiFiRssiLevel apRssiLevel) { ApHandle = apHandle; essid = apEssid; state = apState; secType = apSecType; isWps = apIsWps; + State = apState; + Bssid = apBssid; + StateInfo = GetStateInfo(state); signalStrength = ConvertToSignalStrength(apRssiLevel); UpdateWiFiAPIcon(); } @@ -131,6 +138,49 @@ namespace SettingWiFi } } + public WiFiState State + { + get + { + return state; + } + set + { + state = value; + StateInfo = GetStateInfo(state); + } + } + + private string GetStateInfo(WiFiState state) + { + switch (state) + { + case WiFiState.Disconnected: + if (secType.Equals(Resources.IDS_ST_BODY_NONE)) + { + return Resources.IDS_WIFI_POP_OPEN; + } + else if (secType.Equals(Resources.IDS_WIFI_BODY_EAP)) + { + return Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (Eap)"; + } + else if (isWps) + { + return Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (WPS available)"; + } + else + { + return Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY; + } + case WiFiState.Association: + case WiFiState.Configuration: + return Resources.IDS_WIFI_BODY_CONNECTING_ING; + case WiFiState.Connected: + return Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS; + } + return ""; + } + public string ImageUrl { get @@ -139,16 +189,16 @@ namespace SettingWiFi } } - public string State + public string StateInfo { get { - return state; + return stateInfo; } set { - state = value; - OnPropertyChanged("State"); + stateInfo = value; + OnPropertyChanged("StateInfo"); } } @@ -175,5 +225,11 @@ namespace SettingWiFi return signalStrength; } } + + public string Bssid + { + get; + set; + } }; } diff --git a/SettingWiFi/SettingWiFi/view/APSource.cs b/SettingWiFi/SettingWiFi/view/APSource.cs index ceda9b8..7fd226a 100755 --- a/SettingWiFi/SettingWiFi/view/APSource.cs +++ b/SettingWiFi/SettingWiFi/view/APSource.cs @@ -41,7 +41,7 @@ namespace SettingWiFi if (apList == null) { Debug("apList is null"); - this.Add(new AP(null, "", "", "", false, AP.SignalStrengthIndicator.UNKNOWN)); + this.Add(new AP(null, "", WiFiState.Disconnected, "", false, "", AP.SignalStrengthIndicator.UNKNOWN)); return; } // Clear method have some issue about asynchronous actions, @@ -53,8 +53,9 @@ namespace SettingWiFi foreach (var item in apList) { - this.Add(new AP(item.ApHandle, item.Essid, item.State, item.SecType, item.IsWps, item.SignalStrength)); + this.Add(item); } + } public void RemoveScanList() @@ -86,7 +87,21 @@ namespace SettingWiFi text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY; } - ap.State = text; + ap.StateInfo = text; + } + + internal void UpdateApState(string bssid, WiFiState state) + { + Debug("UpdateApState. bssid: " + bssid + ", state: " + state.ToString()); + var apList = this.Items; + foreach (var ap in apList) + { + if (ap.Bssid.Equals(bssid)) + { + ap.State = state; + break; + } + } } } @@ -113,5 +128,10 @@ namespace SettingWiFi { available.UpdateState(ap); } + + internal void UpdateApState(string bssid, WiFiState state) + { + available.UpdateApState(bssid, state); + } } } \ No newline at end of file diff --git a/SettingWiFi/SettingWiFi/view/ConnectPage.cs b/SettingWiFi/SettingWiFi/view/ConnectPage.cs index df277e4..e27158f 100644 --- a/SettingWiFi/SettingWiFi/view/ConnectPage.cs +++ b/SettingWiFi/SettingWiFi/view/ConnectPage.cs @@ -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 diff --git a/SettingWiFi/SettingWiFi/view/MainPage.cs b/SettingWiFi/SettingWiFi/view/MainPage.cs index ffc50ce..5d9209b 100644 --- a/SettingWiFi/SettingWiFi/view/MainPage.cs +++ b/SettingWiFi/SettingWiFi/view/MainPage.cs @@ -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;