From: Akash Kumar Date: Thu, 2 Jan 2025 10:39:58 +0000 (+0530) Subject: Handle disconnection of wfd peer X-Git-Tag: accepted/tizen/unified/20250113.133501^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f568c093f56c4269a218096b9aaa99905c8a1b57;p=profile%2Fiot%2Fapps%2Fdotnet%2Fsetting-wifi-direct.git Handle disconnection of wfd peer This patch: - Implements disconnection functionality of wfd peer - Update peer list after disconnection - Updates the logic to call startdiscovery Change-Id: I7038dbe88acc756fbd531abd115bbdfe7559fc24 Signed-off-by: Akash Kumar --- diff --git a/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.cs b/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.cs index ed80453..63022a8 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.cs @@ -18,6 +18,7 @@ namespace SettingWiFiDirect private WiFiDirect mWifiDirect; private PeerSource mPeerSource; private CollectionView mScanList; + bool mNeedScanning; public override string ProvideTitle() => NUIGadgetResourceManager.GetString(nameof(Resources.IDS_WIFI_BODY_WI_FI_DIRECT_ABB)); protected override void OnCustomizationUpdate(IEnumerable items) @@ -30,6 +31,8 @@ namespace SettingWiFiDirect { Debug("+"); mWifiDirect = new WiFiDirect(); + mNeedScanning = true; + mWifiDirect.WFDStateChanged += OnWFDStateChanged; mWifiDirect.Activate(); try { @@ -59,7 +62,7 @@ namespace SettingWiFiDirect base.OnCreate(); ResourceManager.TextResourceManager = this; mPeerSource = new PeerSource(); - mPeerSource.SetScanningState(true); + ChangeScanningState(true); return CreateComponents(); } @@ -129,7 +132,6 @@ namespace SettingWiFiDirect HeightSpecification = LayoutParamPolicies.MatchParent, SelectionMode = ItemSelectionMode.Single, }; - mWifiDirect.WFDStateChanged += OnWFDStateChanged; mScanList.Relayout += (s, e) => { @@ -150,19 +152,37 @@ namespace SettingWiFiDirect switch (e.State) { case WFDState.Discovering: - mPeerSource.SetScanningState(true); + ChangeScanningState(true); break; case WFDState.Activated: - UpdateDeviceList(); - mPeerSource.SetScanningState(false); + if (mNeedScanning) + { + StartScan(); + }else + { + UpdateDeviceList(); + ChangeScanningState(false); + } break; case WFDState.Connected: ShowConnectedDevice(); break; + case WFDState.Disconnecting: + mNeedScanning = true; + break; //TODO: update for further states. } } + private void ChangeScanningState(bool isScanning) + { + if(mPeerSource != null) + { + Debug("+"); + mPeerSource.SetScanningState(isScanning); + } + } + private Selector GetDefaultColorSelector() { return new Selector() @@ -215,7 +235,14 @@ namespace SettingWiFiDirect private void StartScan() { Debug("+"); - mWifiDirect.StartDiscovery(); + + bool discoveryStarted = mWifiDirect.StartDiscovery(); + if (discoveryStarted) + { + Debug("Discovery started"); + mNeedScanning = false; + ChangeScanningState(true); + } Debug("-"); } @@ -225,7 +252,7 @@ namespace SettingWiFiDirect try { List peerList = mWifiDirect.GetScanResult(); - mPeerSource.AddFoundPeers(peerList); + mPeerSource.ShowDiscoveredPeers(peerList); } catch (Exception e) { diff --git a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.Designer.cs b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.Designer.cs index 34a7637..a2ff494 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.Designer.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.Designer.cs @@ -117,6 +117,24 @@ namespace SettingWiFiDirect.TextResources { } } + /// + /// Looks up a localized string similar to Disconnecting.... + /// + public static string IDS_WIFI_BODY_DISCONNECTING { + get { + return ResourceManager.GetString("IDS_WIFI_BODY_DISCONNECTING", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unknown. + /// + public static string IDS_WIFI_BODY_UNKNOWN { + get { + return ResourceManager.GetString("IDS_WIFI_BODY_UNKNOWN", resourceCulture); + } + } + /// /// Looks up a localized string similar to Wi-Fi Direct. /// diff --git a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.en-US.resx b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.en-US.resx index 1ba258e..b61b83d 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.en-US.resx +++ b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.en-US.resx @@ -132,6 +132,12 @@ Connecting... + + Disconnecting... + + + Unknown + Wi-Fi Direct diff --git a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.ko-KR.resx b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.ko-KR.resx index a9f38fe..100a8c6 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.ko-KR.resx +++ b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.ko-KR.resx @@ -132,6 +132,12 @@ 연결 중... + + 디스커넥팅... + + + 미상 + Wi-Fi 다이렉트 diff --git a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.resx b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.resx index 1ba258e..b61b83d 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.resx +++ b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.resx @@ -132,6 +132,12 @@ Connecting... + + Disconnecting... + + + Unknown + Wi-Fi Direct diff --git a/SettingWiFiDirect/SettingWiFiDirect/controller/WiFiDirect.cs b/SettingWiFiDirect/SettingWiFiDirect/controller/WiFiDirect.cs index dc7878d..63b5146 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/controller/WiFiDirect.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/controller/WiFiDirect.cs @@ -34,6 +34,10 @@ namespace SettingWiFiDirect public async Task Activate() { + WiFiDirectManager.DeviceStateChanged += (Object sender, DeviceStateChangedEventArgs e) => + { + Debug("DeviceState: " + e.DeviceState); + }; Debug("WiFiDirect.Activate"); Initialize(); @@ -44,7 +48,6 @@ namespace SettingWiFiDirect try { WiFiDirectManager.Activate(); - StartDiscovery(); } catch (Exception e) { @@ -110,7 +113,7 @@ namespace SettingWiFiDirect } } - public void StartDiscovery() + public bool StartDiscovery() { Debug("+"); try @@ -120,7 +123,9 @@ namespace SettingWiFiDirect catch (Exception e) { Error("Error: " + e.Message + "\n" + e.StackTrace); + return false; } + return true; } public bool IsDiscoverable() diff --git a/SettingWiFiDirect/SettingWiFiDirect/model/Peer.cs b/SettingWiFiDirect/SettingWiFiDirect/model/Peer.cs index 78b2640..97c256f 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/model/Peer.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/model/Peer.cs @@ -2,16 +2,26 @@ using System; using System.ComponentModel; using Tizen.Network.WiFiDirect; using static SettingWiFiDirect.Logger; +using SettingWiFiDirect.TextResources; namespace SettingWiFiDirect { + public enum PeerState + { + Unknown = -1, + Connecting = 0, + Connected, + Disconnecting, + Disconnected + } + public class Peer : INotifyPropertyChanged { private WiFiDirectPeer mWfdPeer; private string mPeerName; private string mAddress; private int mRssi = 0; - private WiFiDirectConnectionState mState; + private PeerState mState; private string mStateInfo; public event PropertyChangedEventHandler PropertyChanged; @@ -21,10 +31,17 @@ namespace SettingWiFiDirect Name = peer.Name; Address = peer.MacAddress; mRssi = peer.Rssi; - mStateInfo = GetStateInfo(); + Debug("isConnected: " + mWfdPeer.IsConnected); + State = mWfdPeer.IsConnected ? PeerState.Connected : PeerState.Disconnected; mWfdPeer.ConnectionStateChanged += ConnectionStateChanged; } + ~Peer() + { + Debug("+"); + mWfdPeer.ConnectionStateChanged -= ConnectionStateChanged; + } + private void ConnectionStateChanged(object sender, ConnectionStateChangedEventArgs e) { Debug(this.GetHashCode() + " State: " + e.State + " Address: " + e.MacAddress); @@ -34,20 +51,16 @@ namespace SettingWiFiDirect switch (e.State) { case WiFiDirectConnectionState.ConnectionRsp: - Debug("Update stateInfo"); - StateInfo = "Connected"; + State = PeerState.Connected; break; case WiFiDirectConnectionState.ConnectionWpsRequest: break; case WiFiDirectConnectionState.DisconnectRsp: - Debug("Update stateInfo"); - StateInfo = "Available"; + State = PeerState.Disconnected; break; case WiFiDirectConnectionState.DisconnectInd: - Debug("Update stateInfo"); - StateInfo = "Available"; + State = PeerState.Disconnected; break; - } } Debug("StateInfo " + StateInfo); @@ -93,7 +106,7 @@ namespace SettingWiFiDirect } } - public WiFiDirectConnectionState State + public PeerState State { get { @@ -119,28 +132,20 @@ namespace SettingWiFiDirect } } - private string GetStateInfo(WiFiDirectConnectionState state) - { - //TODO: update - if (mWfdPeer.IsConnected) - { - return "Connected"; - }else - { - return "Available"; - } - } - - private string GetStateInfo() + private string GetStateInfo(PeerState state) { - //TODO: update - if (mWfdPeer.IsConnected) - { - return "Connected"; - } - else - { - return "Available"; + switch (state) + { + case PeerState.Connecting: + return ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString(nameof(Resources.IDS_WIFI_BODY_CONNECTING_ING)); + case PeerState.Connected: + return ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString(nameof(Resources.IDS_COM_BODY_CONNECTED_M_STATUS)); + case PeerState.Disconnecting: + return ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString(nameof(Resources.IDS_WIFI_BODY_DISCONNECTING)); + case PeerState.Disconnected: + return ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString(nameof(Resources.IDS_CHATON_BODY_AVAILABLE)); + default: + return ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString(nameof(Resources.IDS_WIFI_BODY_UNKNOWN)); } } @@ -175,10 +180,10 @@ namespace SettingWiFiDirect } } - public bool IsConnected() + public bool IsConnected() { Debug ("Connected?: " + mWfdPeer.IsConnected); - return mWfdPeer.IsConnected; + return mState == PeerState.Connected; } } } diff --git a/SettingWiFiDirect/SettingWiFiDirect/view/WiFiDirectDeviceView.cs b/SettingWiFiDirect/SettingWiFiDirect/view/WiFiDirectDeviceView.cs index 8992342..2761e55 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/view/WiFiDirectDeviceView.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/view/WiFiDirectDeviceView.cs @@ -73,78 +73,66 @@ namespace SettingWiFiDirect public class PeerSource : ObservableCollection { - private DeviceCollection mAvailable; - private DeviceCollection mConnected; + private DeviceCollection mPeerCollection; + string mAvailableGroupTitle, mConnectedGroupTitle; public PeerSource() { Debug("+"); - var availableGroupTitle = ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString( + mAvailableGroupTitle = ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString( nameof(Resources.IDS_WIFI_HEADER_AVAILABLE_DEVICES_ABB)); + mConnectedGroupTitle = ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString( + nameof(Resources.IDS_ST_HEADER_CONNECTED_DEVICES)); + + mPeerCollection = new DeviceCollection(mAvailableGroupTitle); + this.Add(mPeerCollection); - mAvailable = new DeviceCollection(availableGroupTitle); - this.Add(mAvailable); } internal void AddToAvailableDeviceList(Peer peer) { - mAvailable.AddDevice(peer); + mPeerCollection.AddDevice(peer); } - internal void AddFoundPeers(List peerList) + internal void ShowDiscoveredPeers(List peerList) { Debug("Size: " + peerList.Count); - mAvailable.Clear(); + mPeerCollection.Clear(); + mPeerCollection.Title = mAvailableGroupTitle; foreach (var item in peerList) { - mAvailable.AddDevice(item); + mPeerCollection.AddDevice(item); } } public void SetScanningState(bool isScanning) { - mAvailable.IconOpacity = isScanning ? 1.0f : 0.0f; + mPeerCollection.IconOpacity = isScanning ? 1.0f : 0.0f; } public void ShowConnectedPeer(List peerList) { - Debug("+"); - - string groupTitle = ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString( - nameof(Resources.IDS_ST_HEADER_CONNECTED_DEVICES)); + Debug("Size:" + peerList.Count); - try - { - mConnected = new DeviceCollection(groupTitle); - Debug("Count: " + this.Count); - this.Clear(); - Debug("Count: " + this.Count); - this.Add(mConnected); - Debug("Count: " + this.Count); - } - catch (Exception e) - { - Error(e.Message + "\n" + e.StackTrace); - } - Debug("Size: " + peerList.Count); - mConnected.Clear(); + mPeerCollection.Clear(); + mPeerCollection.Title = mConnectedGroupTitle; foreach (var item in peerList) { - mConnected.AddDevice(item); + mPeerCollection.AddDevice(item); } } private void AddConnectedDevice() { Debug("+"); - foreach (Peer peer in mAvailable) + foreach (Peer peer in mPeerCollection) { Debug(peer.Name + " : " + peer.Address); if (peer.IsConnected()) { Debug("+" + peer.Name + "Connected."); - mConnected.AddDevice(peer); + mPeerCollection.AddDevice(peer); } } } diff --git a/packaging/org.tizen.cssetting-wifi-direct-1.0.3.rpk b/packaging/org.tizen.cssetting-wifi-direct-1.0.3.rpk index 05e5da7..61482cf 100644 Binary files a/packaging/org.tizen.cssetting-wifi-direct-1.0.3.rpk and b/packaging/org.tizen.cssetting-wifi-direct-1.0.3.rpk differ