From: Akash Kumar Date: Wed, 18 Dec 2024 09:59:53 +0000 (+0530) Subject: Implement connection establishment functionality X-Git-Tag: accepted/tizen/unified/20250113.133501~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a087eca5ecaeb92cd20a6cfd3e2ec4ec0378ffbf;p=profile%2Fiot%2Fapps%2Fdotnet%2Fsetting-wifi-direct.git Implement connection establishment functionality Change-Id: I84cbeaeb283555536fdac7a9a2e1d0d2a63f85de Signed-off-by: Akash Kumar --- diff --git a/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.cs b/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.cs index bba16b2..ed80453 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.cs @@ -55,7 +55,7 @@ namespace SettingWiFiDirect protected override View OnCreate() { - Debug("+"); + Debug("MainPage: " + this.GetHashCode()); base.OnCreate(); ResourceManager.TextResourceManager = this; mPeerSource = new PeerSource(); @@ -63,6 +63,17 @@ namespace SettingWiFiDirect return CreateComponents(); } + protected override void OnDestroy() + { + Debug("+"); + base.OnDestroy(); + } + + ~MainPage() + { + Debug("+"); + } + internal View CreateLoadingIcon() { var lottieAnimationView = new LottieAnimationView() @@ -135,7 +146,7 @@ namespace SettingWiFiDirect private void OnWFDStateChanged(Object sender, WFDStateChangedEventArgs e) { - Debug("State: " + e.State); + Debug("State: " + e.State + " MainPage addrees: " + this.GetHashCode()); switch (e.State) { case WFDState.Discovering: @@ -145,6 +156,9 @@ namespace SettingWiFiDirect UpdateDeviceList(); mPeerSource.SetScanningState(false); break; + case WFDState.Connected: + ShowConnectedDevice(); + break; //TODO: update for further states. } } @@ -192,6 +206,8 @@ namespace SettingWiFiDirect //item.Extra = GetInfoButton(); item.IsSelectable = false; item.SizeWidth = mScanList.SizeWidth; + + item.Clicked += OnPeerClicked; return item; }); } @@ -217,6 +233,13 @@ namespace SettingWiFiDirect } } + private void ShowConnectedDevice() + { + Debug("+"); + List peerList = mWifiDirect.GetConnectedDevices(); + mPeerSource.ShowConnectedPeer(peerList); + } + private TextLabel GetHeader() { Debug("+"); @@ -227,5 +250,22 @@ namespace SettingWiFiDirect return header; } + + private void OnPeerClicked(object sender, ClickedEventArgs e) + { + Debug("this: " + this.GetHashCode()); + DefaultLinearItem listItem = (DefaultLinearItem)sender; + var peer = listItem.BindingContext as Peer; + Info("Name: " + peer.Name + " Address: " + peer.Address); + if(!peer.IsConnected()) + { + Debug("Devices is not already connected."); + peer.Connect(); + }else + { + Debug("Disconnect"); + peer.Disconnect(); + } + } } } diff --git a/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.csproj b/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.csproj index d6f24ba..fc91e74 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.csproj +++ b/SettingWiFiDirect/SettingWiFiDirect/SettingWiFiDirect.csproj @@ -13,8 +13,8 @@ - - + + diff --git a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.Designer.cs b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.Designer.cs index cd88a28..34a7637 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.Designer.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.Designer.cs @@ -10,8 +10,8 @@ namespace SettingWiFiDirect.TextResources { using System; - - + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -22,13 +22,12 @@ namespace SettingWiFiDirect.TextResources { [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public class Resources - { - + public class Resources { + private static global::System.Resources.ResourceManager resourceMan; - + private static global::System.Globalization.CultureInfo resourceCulture; - + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] static private string mResourcePath = ""; @@ -41,44 +40,38 @@ namespace SettingWiFiDirect.TextResources { { return mResourcePath; } - internal Resources() - { - } + internal Resources() { + } + /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager - { - get - { - if (object.ReferenceEquals(resourceMan, null)) - { + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SettingWiFiDirect.TextResources.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } - + /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture - { - get - { + public static global::System.Globalization.CultureInfo Culture { + get { return resourceCulture; } - set - { + set { resourceCulture = value; } } - + /// /// Looks up a localized string similar to Available. /// @@ -88,6 +81,42 @@ namespace SettingWiFiDirect.TextResources { } } + /// + /// Looks up a localized string similar to Connection failed. + /// + public static string IDS_CHATON_HEADER_CONNECTION_FAILED_ABB2 { + get { + return ResourceManager.GetString("IDS_CHATON_HEADER_CONNECTION_FAILED_ABB2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Connected. + /// + public static string IDS_COM_BODY_CONNECTED_M_STATUS { + get { + return ResourceManager.GetString("IDS_COM_BODY_CONNECTED_M_STATUS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Connected devices. + /// + public static string IDS_ST_HEADER_CONNECTED_DEVICES { + get { + return ResourceManager.GetString("IDS_ST_HEADER_CONNECTED_DEVICES", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Connecting.... + /// + public static string IDS_WIFI_BODY_CONNECTING_ING { + get { + return ResourceManager.GetString("IDS_WIFI_BODY_CONNECTING_ING", resourceCulture); + } + } + /// /// Looks up a localized string similar to Wi-Fi Direct. /// @@ -98,7 +127,7 @@ namespace SettingWiFiDirect.TextResources { } /// - /// Looks up a localized string similar to Your device (%s) is currently visible to nearby devices.. + /// Looks up a localized string similar to Your device ({0}) is currently visible to nearby devices.. /// public static string IDS_WIFI_BODY_YOUR_DEVICE_HPS_IS_CURRENTLY_VISIBLE_TO_NEARBY_DEVICES { get { @@ -114,5 +143,23 @@ namespace SettingWiFiDirect.TextResources { return ResourceManager.GetString("IDS_WIFI_HEADER_AVAILABLE_DEVICES_ABB", resourceCulture); } } + + /// + /// Looks up a localized string similar to Cancel. + /// + public static string IDS_WIFI_SK_CANCEL { + get { + return ResourceManager.GetString("IDS_WIFI_SK_CANCEL", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Disconnect. + /// + public static string IDS_WIFI_SK_DISCONNECT { + get { + return ResourceManager.GetString("IDS_WIFI_SK_DISCONNECT", resourceCulture); + } + } } } diff --git a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.en-US.resx b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.en-US.resx index a137c54..1ba258e 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.en-US.resx +++ b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.en-US.resx @@ -120,6 +120,18 @@ Available + + Connection failed + + + Connected + + + Connected devices + + + Connecting... + Wi-Fi Direct @@ -129,4 +141,10 @@ Available devices - + + Cancel + + + Disconnect + + \ No newline at end of file diff --git a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.ko-KR.resx b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.ko-KR.resx index 6db7705..a9f38fe 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.ko-KR.resx +++ b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.ko-KR.resx @@ -120,6 +120,18 @@ 가능 + + 연결 안 됨 + + + 연결됨 + + + 연결된 디바이스 + + + 연결 중... + Wi-Fi 다이렉트 @@ -129,4 +141,10 @@ 사용 가능한 디바이스 - + + 취소 + + + 연결 해제 + + \ No newline at end of file diff --git a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.resx b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.resx index a137c54..1ba258e 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.resx +++ b/SettingWiFiDirect/SettingWiFiDirect/TextResources/Resources.resx @@ -120,6 +120,18 @@ Available + + Connection failed + + + Connected + + + Connected devices + + + Connecting... + Wi-Fi Direct @@ -129,4 +141,10 @@ Available devices - + + Cancel + + + Disconnect + + \ No newline at end of file diff --git a/SettingWiFiDirect/SettingWiFiDirect/controller/WiFiDirect.cs b/SettingWiFiDirect/SettingWiFiDirect/controller/WiFiDirect.cs index 741d19d..24fad90 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/controller/WiFiDirect.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/controller/WiFiDirect.cs @@ -143,6 +143,22 @@ namespace SettingWiFiDirect return null; } + public List GetConnectedDevices() + { + Debug("+"); + try + { + mFoundDeviceList = WiFiDirectManager.GetConnectedPeers(); + return GetPeerList(); + } + catch (Exception e) + { + Debug("Fail to get connected peers " + e.ToString()); + } + + return null; + } + public List GetPeerList() { Debug("+"); diff --git a/SettingWiFiDirect/SettingWiFiDirect/model/Peer.cs b/SettingWiFiDirect/SettingWiFiDirect/model/Peer.cs index 3f11e30..73b20aa 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/model/Peer.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/model/Peer.cs @@ -21,7 +21,36 @@ namespace SettingWiFiDirect Name = peer.Name; Address = peer.MacAddress; mRssi = peer.Rssi; - mStateInfo = "Available"; //TODO + mStateInfo = GetStateInfo(); + mWfdPeer.ConnectionStateChanged += ConnectionStateChanged; + } + + private void ConnectionStateChanged(object sender, ConnectionStateChangedEventArgs e) + { + Debug(this.GetHashCode() + " State: " + e.State + " Address: " + e.MacAddress); + if (e.MacAddress == mAddress) + { + Debug("+"); + switch (e.State) + { + case WiFiDirectConnectionState.ConnectionRsp: + Debug("Update stateInfo"); + StateInfo = "Connected"; + break; + case WiFiDirectConnectionState.ConnectionWpsRequest: + break; + case WiFiDirectConnectionState.DisconnectRsp: + Debug("Update stateInfo"); + StateInfo = "Available"; + break; + case WiFiDirectConnectionState.DisconnectInd: + Debug("Update stateInfo"); + StateInfo = "Available"; + break; + + } + } + Debug("StateInfo " + StateInfo); } private void OnPropertyChanged(string propertyName) @@ -89,10 +118,66 @@ namespace SettingWiFiDirect OnPropertyChanged("StateInfo"); } } + private string GetStateInfo(WiFiDirectConnectionState state) { //TODO: update - return "Available"; + if (mWfdPeer.IsConnected) + { + return "Connected"; + }else + { + return "Available"; + } + } + + private string GetStateInfo() + { + //TODO: update + if (mWfdPeer.IsConnected) + { + return "Connected"; + } + else + { + return "Available"; + } + } + public void Connect() + { + Debug("this: " + this.GetHashCode()); + try + { + Debug("+"); + mWfdPeer.Connect(); + StateInfo = "Connecting..."; + Debug("-"); + } + catch (Exception e) + { + Error("Error in connecting peer. " + e.Message); + } + + } + + public void Disconnect() + { + Debug("this: " + this.GetHashCode()); + try + { + mWfdPeer.Disconnect(); + StateInfo = "Disconnecting..."; + } + catch (Exception e) + { + Error("Error in disconnecting. " + e.Message); + } + } + + public bool IsConnected() + { + Debug ("Connected?: " + mWfdPeer.IsConnected); + return mWfdPeer.IsConnected; } } } diff --git a/SettingWiFiDirect/SettingWiFiDirect/view/WiFiDirectDeviceView.cs b/SettingWiFiDirect/SettingWiFiDirect/view/WiFiDirectDeviceView.cs index 9f759ca..8992342 100644 --- a/SettingWiFiDirect/SettingWiFiDirect/view/WiFiDirectDeviceView.cs +++ b/SettingWiFiDirect/SettingWiFiDirect/view/WiFiDirectDeviceView.cs @@ -74,7 +74,7 @@ namespace SettingWiFiDirect public class PeerSource : ObservableCollection { private DeviceCollection mAvailable; - private DeviceCollection mPaired; + private DeviceCollection mConnected; public PeerSource() { @@ -95,6 +95,7 @@ namespace SettingWiFiDirect internal void AddFoundPeers(List peerList) { Debug("Size: " + peerList.Count); + mAvailable.Clear(); foreach (var item in peerList) { mAvailable.AddDevice(item); @@ -105,5 +106,47 @@ namespace SettingWiFiDirect { mAvailable.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)); + + 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(); + foreach (var item in peerList) + { + mConnected.AddDevice(item); + } + } + + private void AddConnectedDevice() + { + Debug("+"); + foreach (Peer peer in mAvailable) + { + Debug(peer.Name + " : " + peer.Address); + if (peer.IsConnected()) + { + Debug("+" + peer.Name + "Connected."); + mConnected.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 136ea95..05e5da7 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