{\r
public class AP : INotifyPropertyChanged\r
{\r
- internal static readonly string LogTag = "SettingWiFi";\r
string iconDir = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "icon.png";\r
+ string infoIconDir = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "icon.png";\r
private string essid;\r
private string state;\r
+ private string stateText;\r
public event PropertyChangedEventHandler PropertyChanged;\r
\r
private void OnPropertyChanged(string propertyName)\r
{\r
- Log.Debug(LogTag, "OnPropertyChanged");\r
+ Log.Debug(Program.LogTag, "OnPropertyChanged");\r
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\r
}\r
\r
public AP(string apEssid, string apState)\r
{\r
essid = apEssid;\r
- state = apState;\r
+ stateText = apState;\r
}\r
\r
public string Essid\r
OnPropertyChanged("State");\r
}\r
}\r
+\r
+ public string StateText\r
+ {\r
+ get\r
+ {\r
+ return stateText;\r
+ }\r
+ set\r
+ {\r
+ stateText = value;\r
+ OnPropertyChanged("StateText");\r
+ }\r
+ }\r
+\r
+ public string Info\r
+ {\r
+ get\r
+ {\r
+ return infoIconDir;\r
+ }\r
+ }\r
};\r
\r
\r
public class DeviceCollection : ObservableCollection<AP>\r
{\r
- internal static readonly string LogTag = "SettingWiFi";\r
private string title;\r
\r
public DeviceCollection(string groupTitle)\r
{\r
title = groupTitle;\r
- this.UpdateDevices(null);\r
+ this.UpdateScanList(null);\r
}\r
\r
public string Title\r
}\r
}\r
\r
- public void UpdateDevices(List<AP> apList)\r
+ public void UpdateScanList(List<AP> apList)\r
{\r
- Log.Debug(LogTag, "UpdateDevices");\r
+ Log.Debug(Program.LogTag, "UpdateDevices");\r
if (apList == null)\r
{\r
+ Log.Debug(Program.LogTag, "apList is null");\r
this.Add(new AP("", ""));\r
return;\r
}\r
\r
foreach (var item in apList)\r
{\r
- this.Add(new AP(item.Essid, item.State));\r
+ this.Add(new AP(item.Essid, item.StateText));\r
}\r
}\r
\r
\r
public class APSource : ObservableCollection<DeviceCollection>\r
{\r
- internal static readonly string LogTag = "SettingWiFi";\r
private DeviceCollection available;\r
public APSource()\r
{\r
- Log.Debug(LogTag, "new APSource");\r
+ Log.Debug(Program.LogTag, "new APSource");\r
available = new DeviceCollection("Available networks");\r
this.Add(available);\r
- Log.Debug(LogTag, "Add DeviceCollection");\r
+ Log.Debug(Program.LogTag, "Add DeviceCollection");\r
}\r
public void UpdateDevices(List<AP> apList)\r
{\r
- available.UpdateDevices(apList);\r
+ available.UpdateScanList(apList);\r
}\r
\r
public void RemoveDevices()\r
{\r
public class WiFi\r
{\r
- internal static readonly string LogTag = "SettingWiFi";\r
- IEnumerable<WiFiAP> apList = null;\r
+ IEnumerable<WiFiAP> apList = new List<WiFiAP>();\r
\r
public async Task Activate()\r
{\r
try\r
{\r
await WiFiManager.ActivateAsync();\r
- if (WiFiManager.IsActive)\r
- {\r
- Log.Debug(LogTag, "WiFi is activated");\r
- apList = new List<WiFiAP>();\r
- }\r
}\r
catch (Exception e)\r
{\r
- Log.Debug(LogTag, "Exception occurred" + e.ToString());\r
+ Log.Debug(Program.LogTag, "Fail to activate WiFi " + e.ToString());\r
}\r
}\r
\r
}\r
catch (Exception e)\r
{\r
- Log.Debug(LogTag, "Exception occurred" + e.ToString());\r
+ Log.Debug(Program.LogTag, "Fail to scan " + e.ToString());\r
}\r
- \r
}\r
\r
public List<AP> GetScanResult()\r
try\r
{\r
apList = WiFiManager.GetFoundAPs();\r
-\r
- List<AP> apInfoList = new List<AP>();\r
- foreach (var item in apList)\r
- {\r
- Log.Debug(LogTag, "AP name: " + item.NetworkInformation.Essid);\r
- //Log.Debug(LogTag, "Connection state: " + item.NetworkInformation.ConnectionState);\r
- apInfoList.Add(new AP(item.NetworkInformation.Essid, item.NetworkInformation.ConnectionState.ToString()));\r
- }\r
-\r
- return apInfoList;\r
+ return GetAPList();\r
}\r
catch (Exception e)\r
{\r
- Log.Debug(LogTag, "Exception occurred" + e.ToString());\r
+ Log.Debug(Program.LogTag, "Fail to get scan result " + e.ToString());\r
}\r
\r
return null;\r
}\r
\r
- public async Task Connect(string essid)\r
+ public async Task Connect(string essid, string password)\r
{\r
- WiFiAP ap = null;\r
- apList = WiFiManager.GetFoundAPs();\r
+ WiFiAP ap = FindAP(essid);\r
+ if (ap == null)\r
+ {\r
+ Log.Debug(Program.LogTag, "Cannet find " + essid);\r
+ return;\r
+ }\r
\r
- foreach (var item in apList)\r
+ if (password.Length > 0)\r
{\r
- if (item.NetworkInformation.Essid.Equals(essid))\r
- {\r
- ap = item;\r
- break;\r
- }\r
+ ap.SecurityInformation.SetPassphrase(password);\r
}\r
\r
try\r
}\r
catch (Exception e)\r
{\r
- Log.Debug(LogTag, "Fail to connect" + e.ToString());\r
+ Log.Debug(Program.LogTag, "Fail to connect" + e.ToString());\r
}\r
+\r
}\r
\r
+ public Task Disconnect(string essid)\r
+ {\r
+ WiFiAP ap = FindAP(essid);\r
+ if (ap == null)\r
+ {\r
+ return Task.FromException(new ArgumentException("Cannot find " + essid));\r
+ }\r
+ return ap.DisconnectAsync();\r
+ }\r
+\r
+ public void Forget(string essid)\r
+ {\r
+ WiFiAP ap = FindAP(essid);\r
+ if (ap == null)\r
+ {\r
+ Log.Debug(Program.LogTag, "Cannot find " + essid);\r
+ return;\r
+ }\r
+ ap.ForgetAP();\r
+ }\r
+\r
+ private WiFiAP FindAP(string essid)\r
+ {\r
+ GetScanResult();\r
+ foreach (var item in apList)\r
+ {\r
+ Log.Debug(Program.LogTag, "Found AP\t" + item.NetworkInformation.Essid);\r
+ if (item.NetworkInformation.Essid.Equals(essid))\r
+ {\r
+ return item;\r
+ }\r
+ }\r
+\r
+ return null;\r
+ }\r
\r
public bool IsActive()\r
{\r
\r
return false;\r
}\r
+\r
+ public string GetConnectedAP()\r
+ {\r
+ return WiFiManager.GetConnectedAP().NetworkInformation.Essid;\r
+ }\r
+\r
+ public List<AP> GetAPList()\r
+ {\r
+ List<AP> apInfoList = new List<AP>();\r
+ foreach (var item in apList)\r
+ {\r
+ Log.Debug(Program.LogTag, "AP name: " + item.NetworkInformation.Essid);\r
+ //Log.Debug(LogTag, "Connection state: " + item.NetworkInformation.ConnectionState);\r
+ apInfoList.Add(new AP(item.NetworkInformation.Essid, item.NetworkInformation.ConnectionState.ToString()));\r
+ }\r
+\r
+ return apInfoList;\r
+ }\r
}\r
}\r
{\r
internal class WidgetSettingWiFi : Widget\r
{\r
- internal static readonly string LogTag = "SettingWiFi";\r
+ CollectionView scanList;\r
+ Navigator navigator;\r
+\r
+ ContentPage mainPage;\r
+ ContentPage infoPage;\r
+ ContentPage morePage;\r
+\r
WiFi wifi;\r
APSource apSource;\r
\r
+ private static readonly int itemCount = 1;\r
+ private MenuItem[] menuItems = new MenuItem[itemCount];\r
+\r
private RecyclerViewItem GetHeader()\r
{\r
var header = new RecyclerViewItem()\r
HeightSpecification = LayoutParamPolicies.WrapContent,\r
};\r
\r
+ bool isWiFiOn = false;\r
+ if (IsWiFiActive())\r
+ {\r
+ isWiFiOn = true;\r
+ Log.Debug(Program.LogTag, "ScanAP");\r
+ ScanAP();\r
+ }\r
+\r
var toggle = new DefaultLinearItem()\r
{\r
WidthSpecification = LayoutParamPolicies.MatchParent,\r
};\r
toggle.Label.HorizontalAlignment = HorizontalAlignment.Begin;\r
\r
- var onOffSwitch = new Switch();\r
+ var onOffSwitch = new Switch()\r
+ {\r
+ IsSelected = isWiFiOn,\r
+ };\r
+\r
toggle.Extra = onOffSwitch;\r
- onOffSwitch.SelectedChanged += OnSelectedChanged;\r
+ onOffSwitch.SelectedChanged += OnWiFiSelected;\r
header.Add(toggle);\r
\r
return header;\r
}\r
\r
- protected override void OnCreate(string contentInfo, Window window)\r
+ private ContentPage CreateMainPage()\r
{\r
- Bundle bundle = Bundle.Decode(contentInfo);\r
- Navigator navigator = window.GetDefaultNavigator();\r
- wifi = new WiFi();\r
- apSource = new APSource();\r
+ var moreButton = new Button()\r
+ {\r
+ Text = "More",\r
+ };\r
+\r
+ MenuItem[] menuItems = new MenuItem[itemCount];\r
+ menuItems[0] = new MenuItem() { Text = "Add WiFi network" };\r
+ menuItems[0].SelectedChanged += (object sender, SelectedChangedEventArgs args) =>\r
+ {\r
+ var menuItem = sender as MenuItem;\r
+ navigator.Push(morePage);\r
+ };\r
+\r
+ moreButton.Clicked += (object sender, ClickedEventArgs args) =>\r
+ {\r
+ var menu = new Menu()\r
+ {\r
+ Anchor = moreButton,\r
+ HorizontalPositionToAnchor = Menu.RelativePosition.Center,\r
+ VerticalPositionToAnchor = Menu.RelativePosition.End,\r
+ Items = menuItems,\r
+ };\r
+ menu.Post();\r
+ };\r
\r
var appBar = new AppBar()\r
{\r
Title = "Wi-Fi",\r
+ Actions = new View[] { moreButton, },\r
};\r
\r
- View rootView = new View()\r
+ AppBarStyle appBarStyle = (AppBarStyle)ThemeManager.GetStyle("Tizen.NUI.Components.AppBar");\r
+ Button backButton = new Button(((AppBarStyle)appBarStyle).BackButton);\r
+\r
+ backButton.Clicked += (object source, ClickedEventArgs args) =>\r
+ {\r
+ navigator.Pop();\r
+ };\r
+\r
+ appBar.NavigationContent = backButton;\r
+\r
+ View mainView = new View()\r
{\r
Layout = new LinearLayout()\r
{\r
HeightSpecification = LayoutParamPolicies.MatchParent,\r
};\r
\r
- CollectionView deviceView = new CollectionView()\r
+ scanList = new CollectionView()\r
{\r
ItemsSource = apSource,\r
ItemsLayouter = new LinearLayouter(),\r
{\r
DefaultLinearItem item = new DefaultLinearItem();\r
item.WidthSpecification = LayoutParamPolicies.MatchParent;\r
- //Decorate Label\r
item.Label.SetBinding(TextLabel.TextProperty, "Essid");\r
+\r
item.Label.HorizontalAlignment = HorizontalAlignment.Begin;\r
- //Decorate Icon\r
+ item.SubLabel.SetBinding(TextLabel.TextProperty, "StateText");\r
+\r
+ item.SubLabel.HorizontalAlignment = HorizontalAlignment.Begin;\r
item.Icon.SetBinding(ImageView.ResourceUrlProperty, "ImageUrl");\r
item.Icon.WidthSpecification = 40;\r
item.Icon.HeightSpecification = 40;\r
HeightSpecification = LayoutParamPolicies.MatchParent,\r
SelectionMode = ItemSelectionMode.Single,\r
};\r
- deviceView.SelectionChanged += DeviceConnectedEvent;\r
+ scanList.SelectionChanged += OnScanListSelected;\r
\r
var header = GetHeader();\r
var scanButton = new Button()\r
};\r
scanButton.Clicked += OnScanButtonClicked;\r
\r
- rootView.Add(header);\r
- rootView.Add(deviceView);\r
- rootView.Add(scanButton);\r
+ mainView.Add(header);\r
+ mainView.Add(scanList);\r
+ mainView.Add(scanButton);\r
+ ContentPage page = new ContentPage()\r
+ {\r
+ AppBar = appBar,\r
+ Content = mainView,\r
+ };\r
+\r
+ return page;\r
+ }\r
+\r
+ private ContentPage CreateInfoPage()\r
+ {\r
+ var appBar = new AppBar()\r
+ {\r
+ Title = "Wi-Fi network info",\r
+ };\r
+\r
+ AppBarStyle appBarStyle = (AppBarStyle)ThemeManager.GetStyle("Tizen.NUI.Components.AppBar");\r
+ Button backButton = new Button(((AppBarStyle)appBarStyle).BackButton);\r
+\r
+ backButton.Clicked += (object source, ClickedEventArgs args) =>\r
+ {\r
+ navigator.Pop();\r
+ };\r
+\r
+ View infoView = new View()\r
+ {\r
+ Layout = new LinearLayout()\r
+ {\r
+ LinearOrientation = LinearLayout.Orientation.Vertical,\r
+ HorizontalAlignment = HorizontalAlignment.Center,\r
+ },\r
+ WidthSpecification = LayoutParamPolicies.MatchParent,\r
+ HeightSpecification = LayoutParamPolicies.MatchParent,\r
+ };\r
+\r
+ var forgetButton = new Button()\r
+ {\r
+ Text = "Forget",\r
+ WidthSpecification = 300,\r
+ HeightSpecification = 80,\r
+ };\r
+ forgetButton.Clicked += OnforgetButtonClicked;\r
\r
+ infoView.Add(forgetButton);\r
ContentPage page = new ContentPage()\r
{\r
AppBar = appBar,\r
- Content = rootView,\r
+ Content = infoView,\r
};\r
\r
- navigator.Push(page);\r
+ return page;\r
}\r
\r
+ private ContentPage CreatemorePage()\r
+ {\r
+ var appBar = new AppBar()\r
+ {\r
+ Title = "Add Wi-Fi network",\r
+ };\r
+\r
+ AppBarStyle appBarStyle = (AppBarStyle)ThemeManager.GetStyle("Tizen.NUI.Components.AppBar");\r
+ Button backButton = new Button(((AppBarStyle)appBarStyle).BackButton);\r
+\r
+ backButton.Clicked += (object source, ClickedEventArgs args) =>\r
+ {\r
+ navigator.Pop();\r
+ };\r
+\r
+ View moreView = new View()\r
+ {\r
+ Layout = new LinearLayout()\r
+ {\r
+ LinearOrientation = LinearLayout.Orientation.Vertical,\r
+ HorizontalAlignment = HorizontalAlignment.Center,\r
+ },\r
+ WidthSpecification = LayoutParamPolicies.MatchParent,\r
+ HeightSpecification = LayoutParamPolicies.MatchParent,\r
+ };\r
+\r
+ ContentPage page = new ContentPage()\r
+ {\r
+ AppBar = appBar,\r
+ Content = moreView,\r
+ };\r
+\r
+ return page;\r
+ }\r
+\r
+ protected override void OnCreate(string contentInfo, Window window)\r
+ {\r
+ navigator = window.GetDefaultNavigator();\r
+ wifi = new WiFi();\r
+ apSource = new APSource();\r
+\r
+ mainPage = CreateMainPage();\r
+ infoPage = CreateInfoPage();\r
+ morePage = CreatemorePage();\r
+\r
+ navigator.Push(mainPage);\r
+ }\r
\r
/* Call WiFi */\r
- private async void OnSelectedChanged(object sender, SelectedChangedEventArgs e)\r
+ private async void OnWiFiSelected(object sender, SelectedChangedEventArgs e)\r
{\r
if (e.IsSelected)\r
{\r
{\r
await wifi.Activate();\r
}\r
+ /* TODO: auto connect */\r
ScanAP();\r
}\r
else\r
{\r
- apSource.RemoveDevices();\r
-\r
if (IsWiFiActive())\r
{\r
await wifi.Deactivate();\r
}\r
+ apSource.RemoveDevices();\r
}\r
}\r
\r
private void OnScanButtonClicked(object sender, ClickedEventArgs e)\r
{\r
- Log.Debug(LogTag, "OnScanButtonClicked");\r
+ Log.Debug(Program.LogTag, "OnScanButtonClicked");\r
ScanAP();\r
}\r
\r
+ private void OnforgetButtonClicked(object sender, ClickedEventArgs e)\r
+ {\r
+ Log.Debug(Program.LogTag, "OnforgetButtonClicked");\r
+ //wifi.Forget(essid);\r
+ }\r
+\r
private bool IsWiFiActive()\r
{\r
return wifi.IsActive();\r
}\r
+\r
private async void ScanAP()\r
{\r
if (IsWiFiActive())\r
}\r
}\r
\r
- public async void DeviceConnectedEvent(object sender, SelectionChangedEventArgs ev)\r
+ public async void OnScanListSelected(object sender, SelectionChangedEventArgs ev)\r
{\r
+ /* TODO: disable to click the connected ap */\r
+\r
+\r
+\r
//SingleSelection Only have 1 or nil object in the list.\r
foreach (object item in ev.PreviousSelection)\r
{\r
if (item == null) break;\r
if (item is AP device)\r
{\r
+ //Log.Debug(LogTag, "Disconnect ");\r
+ //await wifi.Disconnect(device.Essid);\r
+ //device.State = "Disonnected";\r
+\r
// device.Connected = false;\r
}\r
}\r
if (item == null) break;\r
if (item is AP device)\r
{\r
- await wifi.Connect(device.Essid);\r
+ if (device.StateText.Equals("Connected"))\r
+ {\r
+ Log.Debug(Program.LogTag, "already connected");\r
+ return;\r
+ }\r
+\r
+ Log.Debug(Program.LogTag, "new connect"); /* TODO: pop-up(password, cancel, connect) */\r
+ device.StateText = "Connecting";\r
+ await wifi.Connect(device.Essid, "datanetwork");\r
+ if(wifi.GetConnectedAP().Equals(device.Essid))\r
+ {\r
+ device.StateText = "Connected";\r
+\r
+ }\r
// device.Connected = true;\r
// device.Registered = true;\r
}\r