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<MenuCustomizationItem> items)
{
Debug("+");
mWifiDirect = new WiFiDirect();
+ mNeedScanning = true;
+ mWifiDirect.WFDStateChanged += OnWFDStateChanged;
mWifiDirect.Activate();
try
{
base.OnCreate();
ResourceManager.TextResourceManager = this;
mPeerSource = new PeerSource();
- mPeerSource.SetScanningState(true);
+ ChangeScanningState(true);
return CreateComponents();
}
HeightSpecification = LayoutParamPolicies.MatchParent,
SelectionMode = ItemSelectionMode.Single,
};
- mWifiDirect.WFDStateChanged += OnWFDStateChanged;
mScanList.Relayout += (s, e) =>
{
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<Color> GetDefaultColorSelector()
{
return new Selector<Color>()
private void StartScan()
{
Debug("+");
- mWifiDirect.StartDiscovery();
+
+ bool discoveryStarted = mWifiDirect.StartDiscovery();
+ if (discoveryStarted)
+ {
+ Debug("Discovery started");
+ mNeedScanning = false;
+ ChangeScanningState(true);
+ }
Debug("-");
}
try
{
List<Peer> peerList = mWifiDirect.GetScanResult();
- mPeerSource.AddFoundPeers(peerList);
+ mPeerSource.ShowDiscoveredPeers(peerList);
}
catch (Exception e)
{
}
}
+ /// <summary>
+ /// Looks up a localized string similar to Disconnecting....
+ /// </summary>
+ public static string IDS_WIFI_BODY_DISCONNECTING {
+ get {
+ return ResourceManager.GetString("IDS_WIFI_BODY_DISCONNECTING", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Unknown.
+ /// </summary>
+ public static string IDS_WIFI_BODY_UNKNOWN {
+ get {
+ return ResourceManager.GetString("IDS_WIFI_BODY_UNKNOWN", resourceCulture);
+ }
+ }
+
/// <summary>
/// Looks up a localized string similar to Wi-Fi Direct.
/// </summary>
<data name="IDS_WIFI_BODY_CONNECTING_ING" xml:space="preserve">
<value>Connecting...</value>
</data>
+ <data name="IDS_WIFI_BODY_DISCONNECTING" xml:space="preserve">
+ <value>Disconnecting...</value>
+ </data>
+ <data name="IDS_WIFI_BODY_UNKNOWN" xml:space="preserve">
+ <value>Unknown</value>
+ </data>
<data name="IDS_WIFI_BODY_WI_FI_DIRECT_ABB" xml:space="preserve">
<value>Wi-Fi Direct</value>
</data>
<data name="IDS_WIFI_BODY_CONNECTING_ING" xml:space="preserve">
<value>연결 중...</value>
</data>
+ <data name="IDS_WIFI_BODY_DISCONNECTING" xml:space="preserve">
+ <value>디스커넥팅...</value>
+ </data>
+ <data name="IDS_WIFI_BODY_UNKNOWN" xml:space="preserve">
+ <value>미상</value>
+ </data>
<data name="IDS_WIFI_BODY_WI_FI_DIRECT_ABB" xml:space="preserve">
<value>Wi-Fi 다이렉트</value>
</data>
<data name="IDS_WIFI_BODY_CONNECTING_ING" xml:space="preserve">
<value>Connecting...</value>
</data>
+ <data name="IDS_WIFI_BODY_DISCONNECTING" xml:space="preserve">
+ <value>Disconnecting...</value>
+ </data>
+ <data name="IDS_WIFI_BODY_UNKNOWN" xml:space="preserve">
+ <value>Unknown</value>
+ </data>
<data name="IDS_WIFI_BODY_WI_FI_DIRECT_ABB" xml:space="preserve">
<value>Wi-Fi Direct</value>
</data>
public async Task Activate()
{
+ WiFiDirectManager.DeviceStateChanged += (Object sender, DeviceStateChangedEventArgs e) =>
+ {
+ Debug("DeviceState: " + e.DeviceState);
+ };
Debug("WiFiDirect.Activate");
Initialize();
try
{
WiFiDirectManager.Activate();
- StartDiscovery();
}
catch (Exception e)
{
}
}
- public void StartDiscovery()
+ public bool StartDiscovery()
{
Debug("+");
try
catch (Exception e)
{
Error("Error: " + e.Message + "\n" + e.StackTrace);
+ return false;
}
+ return true;
}
public bool IsDiscoverable()
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;
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);
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);
}
}
- public WiFiDirectConnectionState State
+ public PeerState State
{
get
{
}
}
- 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));
}
}
}
}
- public bool IsConnected()
+ public bool IsConnected()
{
Debug ("Connected?: " + mWfdPeer.IsConnected);
- return mWfdPeer.IsConnected;
+ return mState == PeerState.Connected;
}
}
}
public class PeerSource : ObservableCollection<DeviceCollection>
{
- 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<Peer> peerList)
+ internal void ShowDiscoveredPeers(List<Peer> 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<Peer> 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);
}
}
}