using System;
using System.Linq;
using System.Collections.Generic;
-using Tizen;
using Tizen.NUI;
using Tizen.NUI.BaseComponents;
using Tizen.NUI.Binding;
using SettingCore;
using static SettingWiFiDirect.Logger;
using SettingWiFiDirect.TextResources;
-
+using Tizen.Network.WiFiDirect;
namespace SettingWiFiDirect
{
public class MainPage : SettingCore.MenuGadget
{
- private WiFiDirect mWifiDirect;
private PeerSource mPeerSource;
private CollectionView mScanList;
bool mNeedScanning;
public MainPage()
{
Debug("+");
- mWifiDirect = new WiFiDirect();
mNeedScanning = true;
- mWifiDirect.WFDStateChanged += OnWFDStateChanged;
- mWifiDirect.Activate();
+ WiFiDirect.Activate();
try
{
- bool flag = mWifiDirect.IsDiscoverable();
+ bool flag = WiFiDirect.IsDiscoverable();
if (flag)
{
}
Resources.SetPath(GetResourcePath(""));
- StartScan();
+
}
protected override View OnCreate()
{
+ WiFiDirect.WFDStateChanged += OnWFDStateChanged;
+ WiFiDirect.WFDStatusChanged += OnConnectionStatusChanged;
+
Debug("MainPage: " + this.GetHashCode());
base.OnCreate();
ResourceManager.TextResourceManager = this;
protected override void OnDestroy()
{
Debug("+");
+ WiFiDirect.WFDStateChanged -= OnWFDStateChanged;
+ WiFiDirect.WFDStatusChanged -= OnConnectionStatusChanged;
base.OnDestroy();
}
}
break;
case WFDState.Connected:
+ ChangeScanningState(false);
ShowConnectedDevice();
break;
case WFDState.Disconnecting:
mNeedScanning = true;
break;
//TODO: update for further states.
+
+ }
+ }
+
+ private void OnConnectionStatusChanged(object sender, ConnectionStatusChangedEventArgs e)
+ {
+ Debug("State : " + e.ConnectionState);
+
+ switch (e.ConnectionState)
+ {
+ case WiFiDirectConnectionState.ConnectionRequest:
+
+ OnConnectionRequest();
+ break;
+
+ default:
+ break;
+ }
+
+ }
+
+ private void OnConnectionRequest()
+ {
+ try
+ {
+ ConnectionPopup connectionPopup = new ConnectionPopup();
+ var page = connectionPopup.ConnectionPopupPage();
+ if (page != null)
+ {
+ NUIApplication.GetDefaultWindow().GetDefaultNavigator().Add(page);
+ connectionPopup.SetPopupPage(page);
+ }
+ else
+ {
+ Debug("Page is NULL");
+ }
+ }
+ catch (Exception e)
+ {
+ Debug("An error occurred: " + e.Message);
}
}
item.SubLabel.SetBinding(TextLabel.TextProperty, "StateInfo");
item.SubLabel.HorizontalAlignment = HorizontalAlignment.Begin;
- //item.Icon = GetApIconImageView();
- //item.Extra = GetInfoButton();
item.IsSelectable = false;
item.SizeWidth = mScanList.SizeWidth;
private void StartScan()
{
Debug("+");
-
- bool discoveryStarted = mWifiDirect.StartDiscovery();
+ bool discoveryStarted = WiFiDirect.StartDiscovery();
if (discoveryStarted)
{
Debug("Discovery started");
Debug("+");
try
{
- List<Peer> peerList = mWifiDirect.GetScanResult();
+ List<Peer> peerList = WiFiDirect.GetScanResult();
mPeerSource.ShowDiscoveredPeers(peerList);
}
catch (Exception e)
private void ShowConnectedDevice()
{
Debug("+");
- List<Peer> peerList = mWifiDirect.GetConnectedDevices();
+ List<Peer> peerList = WiFiDirect.GetConnectedDevices();
mPeerSource.ShowConnectedPeer(peerList);
}
private TextLabel GetHeader()
{
Debug("+");
- string headerString = NUIGadgetResourceManager.GetString(nameof(Resources.IDS_WIFI_BODY_YOUR_DEVICE_HPS_IS_CURRENTLY_VISIBLE_TO_NEARBY_DEVICES));
- string label = string.Format(headerString, mWifiDirect.getDeviceName());
-
+ string headerString = NUIGadgetResourceManager.GetString(
+ nameof(Resources.IDS_WIFI_BODY_YOUR_DEVICE_HPS_IS_CURRENTLY_VISIBLE_TO_NEARBY_DEVICES));
+ string label = string.Format(headerString, WiFiDirect.getDeviceName());
TextLabel header = new TextLabel(label);
return header;
Debug("this: " + this.GetHashCode());
DefaultLinearItem listItem = (DefaultLinearItem)sender;
var peer = listItem.BindingContext as Peer;
+
Info("Name: " + peer.Name + " Address: " + peer.Address);
if(!peer.IsConnected())
{
}
}
+ /// <summary>
+ /// Looks up a localized string similar to wifi direct connection.
+ /// </summary>
+ public static string IDS_WIFI_HEADER_WI_FI_DIRECT_CONNECTION_ABB {
+ get {
+ return ResourceManager.GetString("IDS_WIFI_HEADER_WI_FI_DIRECT_CONNECTION_ABB", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Connect to ({0}) in ({1}) seconds..
+ /// </summary>
+ public static string IDS_WIFI_POP_CONNECT_TO_PS_IN_PD_SECONDS {
+ get {
+ return ResourceManager.GetString("IDS_WIFI_POP_CONNECT_TO_PS_IN_PD_SECONDS", resourceCulture);
+ }
+ }
+
/// <summary>
/// Looks up a localized string similar to Cancel.
/// </summary>
return ResourceManager.GetString("IDS_WIFI_SK_DISCONNECT", resourceCulture);
}
}
+
+ /// <summary>
+ /// Looks up a localized string similar to ok.
+ /// </summary>
+ public static string IDS_WIFI_SK2_OK {
+ get {
+ return ResourceManager.GetString("IDS_WIFI_SK2_OK", resourceCulture);
+ }
+ }
}
}
<data name="IDS_WIFI_HEADER_AVAILABLE_DEVICES_ABB" xml:space="preserve">
<value>Available devices</value>
</data>
+ <data name="IDS_WIFI_HEADER_WI_FI_DIRECT_CONNECTION_ABB" xml:space="preserve">
+ <value>Wi-Fi Direct connection</value>
+ </data>
+ <data name="IDS_WIFI_POP_CONNECT_TO_PS_IN_PD_SECONDS" xml:space="preserve">
+ <value>Connect to ({0}) in ({1}) seconds.
+</value>
+ </data>
+ <data name="IDS_WIFI_SK2_OK" xml:space="preserve">
+ <value>OK</value>
+ </data>
<data name="IDS_WIFI_SK_CANCEL" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="IDS_WIFI_HEADER_AVAILABLE_DEVICES_ABB" xml:space="preserve">
<value>사용 가능한 디바이스</value>
</data>
+ <data name="IDS_WIFI_HEADER_WI_FI_DIRECT_CONNECTION_ABB" xml:space="preserve">
+ <value>Wi-Fi 다이렉트 연결</value>
+ </data>
+ <data name="IDS_WIFI_POP_CONNECT_TO_PS_IN_PD_SECONDS" xml:space="preserve">
+ <value>({1})에 ({0})초 이내에 연결됩니다.</value>
+ </data>
+ <data name="IDS_WIFI_SK2_OK" xml:space="preserve">
+ <value>확인</value>
+ </data>
<data name="IDS_WIFI_SK_CANCEL" xml:space="preserve">
<value>취소</value>
</data>
<data name="IDS_WIFI_HEADER_AVAILABLE_DEVICES_ABB" xml:space="preserve">
<value>Available devices</value>
</data>
+ <data name="IDS_WIFI_HEADER_WI_FI_DIRECT_CONNECTION_ABB" xml:space="preserve">
+ <value>wifi direct connection</value>
+ </data>
+ <data name="IDS_WIFI_POP_CONNECT_TO_PS_IN_PD_SECONDS" xml:space="preserve">
+ <value>Connect to ({0}) in ({1}) seconds.</value>
+ </data>
+ <data name="IDS_WIFI_SK2_OK" xml:space="preserve">
+ <value>ok</value>
+ </data>
<data name="IDS_WIFI_SK_CANCEL" xml:space="preserve">
<value>Cancel</value>
</data>
internal static class WifiDirectConfig
{
// Following values are tentative, may be changed later.
- internal const string PeerDeviceName = "TizenRPI4_WFD";
- internal const int DiscoveryTime = 10;
+ internal const string PeerDeviceName = "RpiNui";
+ internal const int DiscoveryTime = 60;
internal const int DelayTime = 2000;
internal const int DiscoverDelayTime = 1000;
internal const int StartDiscoveryDelayTime = 10000;
namespace SettingWiFiDirect
{
- class WiFiDirect
+ static class WiFiDirect
{
- IEnumerable<WiFiDirectPeer> mFoundDeviceList = new List<WiFiDirectPeer>();
- IEnumerable<WiFiDirectPeer> mConnectedDeviceList = new List<WiFiDirectPeer>();
- private event EventHandler<WFDStateChangedEventArgs> mWifiDirectStateChanged = null;
- bool _isInitialized = false;
+ static private IEnumerable<WiFiDirectPeer> mFoundDeviceList = new List<WiFiDirectPeer>();
+ static private IEnumerable<WiFiDirectPeer> mConnectedDeviceList = new List<WiFiDirectPeer>();
+ static private event EventHandler<WFDStateChangedEventArgs> mWifiDirectStateChanged = null;
+ static bool _isInitialized = false;
- internal void Initialize()
+ static internal void Initialize()
{
if (WiFiDirectManager.IsInitialized)
{
}
}
- public async Task Activate()
+ static public async Task Activate()
{
+ Debug("WiFiDirect.Activate");
+ Initialize();
+ if (WiFiDirectManager.State >= WiFiDirectState.Activated)
+ {
+ Debug("Already activated");
+ return;
+ }
+
WiFiDirectManager.DeviceStateChanged += (Object sender, DeviceStateChangedEventArgs e) =>
{
Debug("DeviceState: " + e.DeviceState);
+ StartDiscovery();
};
- Debug("WiFiDirect.Activate");
- Initialize();
if (!_isInitialized)
{
return;
}
}
- public void Deactivate()
+ static public void Deactivate()
{
Debug("WiFiDirect.Deactivate");
WiFiDirectManager.Deactivate();
}
- internal event EventHandler<WFDStateChangedEventArgs> WFDStateChanged
+ static internal event EventHandler<WFDStateChangedEventArgs> WFDStateChanged
{
add
{
}
}
- private void OnWiFiDirectStateChanged(Object sender, StateChangedEventArgs e)
+ static private void OnWiFiDirectStateChanged(Object sender, StateChangedEventArgs e)
{
Debug("+");
WFDState state = ConvertWFDState(e.State);
mWifiDirectStateChanged.Invoke(null, new WFDStateChangedEventArgs(state));
}
- private WFDState ConvertWFDState(WiFiDirectState state)
+ static internal event EventHandler<ConnectionStatusChangedEventArgs> WFDStatusChanged
+ {
+ add
+ {
+ WiFiDirectManager.ConnectionStatusChanged += value;
+ }
+ remove
+ {
+ WiFiDirectManager.ConnectionStatusChanged -= value;
+ }
+ }
+
+ static private WFDState ConvertWFDState(WiFiDirectState state)
{
switch (state)
{
}
}
- public bool StartDiscovery()
+ static public bool StartDiscovery()
{
Debug("+");
try
return true;
}
- public bool IsDiscoverable()
+ static public bool IsDiscoverable()
{
Debug("+");
if (WiFiDirectManager.IsDiscoverable)
return false;
}
- public List<Peer> GetScanResult()
+ static public List<Peer> GetScanResult()
{
Debug("+");
try
return null;
}
- public List<Peer> GetConnectedDevices()
+ static public List<Peer> GetConnectedDevices()
{
Debug("+");
try
return null;
}
- public List<Peer> GetPeerList()
+ static public List<Peer> GetPeerList()
{
Debug("+");
List<Peer> peerList = new List<Peer>();
return peerList;
}
- private Peer CreatePeer(WiFiDirectPeer wifiDirectPeer)
+ static private Peer CreatePeer(WiFiDirectPeer wifiDirectPeer)
{
Debug("+");
Peer peer = new Peer(wifiDirectPeer);
return peer;
}
- public string getDeviceName()
+ static public string getDeviceName()
{
return WiFiDirectManager.Name;
}
--- /dev/null
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI;
+using Tizen.NUI.Components;
+using SettingWiFiDirect.TextResources;
+using static SettingWiFiDirect.Logger;
+
+namespace SettingWiFiDirect
+{
+ internal class ConnectionPopup:ContentPage
+ {
+ private Timer mTimer;
+ private Progress mProgress;
+ private ContentPage mContentPage = null;
+ private const int MaxDuration = 120;
+
+ internal ContentPage ConnectionPopupPage()
+ {
+ var connectionRequestView = new View()
+ {
+ Layout = new LinearLayout()
+ {
+ LinearOrientation = LinearLayout.Orientation.Vertical,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ },
+ WidthSpecification = 200,
+ HeightSpecification = 100,
+ };
+
+ var item = new DefaultLinearItem();
+ connectionRequestView.Add(item);
+
+ int timeout = 120;
+ string message = ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString(
+ nameof(Resources.IDS_WIFI_POP_CONNECT_TO_PS_IN_PD_SECONDS));
+ string label = string.Format(message, WiFiDirect.getDeviceName(), timeout);
+
+ var messageItem = new TextLabel(label)
+ {
+ HorizontalAlignment = HorizontalAlignment.Center,
+ };
+
+ CreateProgressBar();
+
+ connectionRequestView.Add(messageItem);
+ connectionRequestView.Add(mProgress);
+
+ var cancelButton = CreateCancelButton();
+ var okButton = CreateOkButton();
+
+ ContentPage page = new ContentPage()
+ {
+ Content = new AlertDialog()
+ {
+ Title = ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString(
+ nameof(Resources.IDS_WIFI_HEADER_WI_FI_DIRECT_CONNECTION_ABB)),
+ Content = connectionRequestView,
+ Actions = new View[] { cancelButton, okButton },
+ },
+ };
+
+ return page;
+ }
+
+ private bool OnTimerTick()
+ {
+ mProgress.CurrentValue++;
+
+ if (mProgress.CurrentValue == MaxDuration)
+ {
+ if (mContentPage != null)
+ {
+ NUIApplication.GetDefaultWindow().GetDefaultNavigator().Remove(mContentPage);
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ private void OnCancelButtonClicked(object sender, ClickedEventArgs e)
+ {
+ Debug("+");
+ mTimer.Stop();
+ if (mContentPage != null)
+ {
+ NUIApplication.GetDefaultWindow().GetDefaultNavigator().Remove(mContentPage);
+ }
+ }
+
+ private Button CreateOkButton()
+ {
+ var okButton = new Button()
+ {
+ Text = ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString(
+ nameof(Resources.IDS_WIFI_SK2_OK)),
+ WidthSpecification = 300,
+ HeightSpecification = 80,
+ };
+ okButton.Clicked += OnOkConfirmed;
+ return okButton;
+ }
+
+ private Button CreateCancelButton()
+ {
+ var cancelButton = new Button()
+ {
+ Text = ResourceManager.TextResourceManager.NUIGadgetResourceManager.GetString(
+ nameof(Resources.IDS_WIFI_SK_CANCEL)),
+ WidthSpecification = 300,
+ HeightSpecification = 80,
+ };
+ cancelButton.Clicked += OnCancelButtonClicked;
+ return cancelButton;
+ }
+
+ private void CreateProgressBar()
+ {
+ var customColor = new Color("#FF6200");
+ mProgress = new Progress()
+ {
+ MinValue = 0,
+ MaxValue = 120,
+ CurrentValue = 0,
+ TrackColor = Color.LightGrey,
+ ProgressColor = customColor,
+ };
+
+ mTimer = new Timer(1000);
+
+ mTimer.Tick += (o, e) => OnTimerTick();
+ mTimer.Start();
+ }
+
+ private void OnOkConfirmed(object source, ClickedEventArgs args)
+ {
+ Debug("+");
+ if (mContentPage != null)
+ {
+ NUIApplication.GetDefaultWindow().GetDefaultNavigator().Remove(mContentPage);
+ } //TODO
+ }
+
+ public void SetPopupPage(ContentPage page)
+ {
+ Debug("+");
+ mContentPage = page;
+ }
+
+ }
+}