public async Task <WiFiConnectionStatus> ConnectToNetwork(WifiListViewItemPresenter network, bool autoConnect) { Log.Enter(); await AvailableNetworksLock.WaitAsync(); if (network == null) { return(WiFiConnectionStatus.UnspecifiedFailure); } try { var result = await network.Adapter.ConnectAsync(network.AvailableNetwork, autoConnect?WiFiReconnectionKind.Automatic : WiFiReconnectionKind.Manual); //Call redirect only for Open Wifi if (IsNetworkOpen(network)) { //Navigate to http://www.msftconnecttest.com/redirect NavigationUtils.NavigateToScreen(typeof(WebBrowserPage), Common.GetResourceText("MicrosoftWifiConnect")); } Log.Leave($"LEAVE {result.ConnectionStatus}"); return(result.ConnectionStatus); } catch (Exception) { return(WiFiConnectionStatus.UnspecifiedFailure); } }
private async Task ConnectToWifiAsync(WifiListViewItemPresenter network, PasswordCredential credential, CoreDispatcher dispatcher) { await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { SwitchToItemState(network, WifiConnectingState, false); }); Task <WiFiConnectionStatus> didConnect = null; if (network.IsEapAvailable) { didConnect = (credential == null) ? App.NetworkPresenter.ConnectToNetwork(network, network.ConnectAutomatically) : App.NetworkPresenter.ConnectToNetworkWithPassword(network, network.ConnectAutomatically, credential); } else { didConnect = (credential == null) ? App.NetworkPresenter.ConnectToNetwork(network, network.ConnectAutomatically) : App.NetworkPresenter.ConnectToNetworkWithPassword(network, network.ConnectAutomatically, credential); } WiFiConnectionStatus status = await didConnect; await OnConnected(network, status, dispatcher); }
private async Task OnConnected(WifiListViewItemPresenter network, WiFiConnectionStatus status, CoreDispatcher dispatcher) { if (status == WiFiConnectionStatus.Success) { await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { var itemLocation = WifiListViewItems.IndexOf(network); // don't move if index is -1 or 0 if (itemLocation > 0) { // make sure first network doesn't also show connected SwitchToItemState(WifiListViewItems[0], WifiInitialState, true); // Show current connected network at top of list in connected state WifiListViewItems.Move(itemLocation, 0); } var item = SwitchToItemState(network, WifiConnectedState, true); if (item != null) { item.IsSelected = true; } }); NetworkConnected?.Invoke(this, new EventArgs()); } else { var resourceLoader = ResourceLoader.GetForCurrentView(); network.Message = resourceLoader.GetString(status.ToString() + "Text"); network.IsMessageVisible = true; SwitchToItemState(network, WifiConnectState, true); } }
public async Task <WiFiConnectionStatus> ConnectToNetworkWithPassword(WifiListViewItemPresenter network, bool autoConnect, PasswordCredential password) { Log.Enter(); try { var result = await network.Adapter.ConnectAsync( network.AvailableNetwork, autoConnect?WiFiReconnectionKind.Automatic : WiFiReconnectionKind.Manual, password); Log.Leave($"LEAVE {result.ConnectionStatus}"); return(result.ConnectionStatus); } catch (Exception) { return(WiFiConnectionStatus.UnspecifiedFailure); } }
public static bool IsNetworkOpen(WifiListViewItemPresenter network) { Log.Enter(); return(network.AvailableNetwork.SecuritySettings.NetworkEncryptionType == NetworkEncryptionType.None); }
public void DisconnectNetwork(WifiListViewItemPresenter network) { Log.Enter(); network.Adapter.Disconnect(); Log.Leave(); }
public async Task <bool> UpdateAvailableNetworksAsync(bool refreshIfNeeded) { Log.Enter($"refreshIfNeeded={refreshIfNeeded}"); try { await AvailableNetworksLock.WaitAsync(); if ((await TestAccess()) == false) { return(false); } if (refreshIfNeeded && !IsRefreshNeeded()) { return(true); } LastRefresh = DateTime.Now; EnumAdaptersCompleted.WaitOne(); List <WiFiAdapter> WiFiAdaptersList = new List <WiFiAdapter>(WiFiAdapters.Values); foreach (var adapter in WiFiAdaptersList) { if (adapter == null) { return(false); } try { await adapter.ScanAsync(); } catch (Exception) { // ScanAsync() can throw an exception if the scan timeouts. continue; } if (adapter.NetworkReport == null) { continue; } DateTime reportTime = DateTime.Now; foreach (var network in adapter.NetworkReport.AvailableNetworks) { if (!String.IsNullOrWhiteSpace(network.Ssid)) { if (AvailableNetworks.ContainsKey(network.Ssid)) { WifiListViewItemPresenter value; AvailableNetworks.TryRemove(network.Ssid, out value); } var item = new WifiListViewItemPresenter(network, adapter, reportTime); if (AvailableNetworks.TryAdd(network.Ssid, item)) { await item.InitializeAsync(); Log.Trace($"Adding {network.Ssid}"); } } } // remove some jitter from the list when refresh is repeatedly clicked // by remembering networks from the last 5 minutes DateTime expireTime = DateTime.Now - TimeSpan.FromMinutes(5); foreach (var key in AvailableNetworks.Keys) { if (AvailableNetworks[key].LastSeen < expireTime) { WifiListViewItemPresenter value; AvailableNetworks.TryRemove(key, out value); } } } Log.Leave(); return(true); } finally { AvailableNetworksLock.Release(); } }