Add hidden connect and WPS connect 53/282853/2
authorchaehee-hong <chaehee.hong@samsung.com>
Wed, 12 Oct 2022 08:33:46 +0000 (17:33 +0900)
committerchaehee-hong <chaehee.hong@samsung.com>
Wed, 12 Oct 2022 08:33:50 +0000 (17:33 +0900)
Change-Id: I7695505e38460b0508722e6ffb3b865d72c800a4

SettingWiFi/SettingWiFi/controller/WiFi.cs
SettingWiFi/SettingWiFi/res/locale/Resources.Designer.cs
SettingWiFi/SettingWiFi/res/locale/Resources.en.resx
SettingWiFi/SettingWiFi/res/locale/Resources.ko-KR.resx
SettingWiFi/SettingWiFi/res/locale/Resources.resx
SettingWiFi/SettingWiFi/view/ConnectPage.cs
SettingWiFi/SettingWiFi/view/HiddenConnectPage.cs [new file with mode: 0644]
SettingWiFi/SettingWiFi/view/MainPage.cs
SettingWiFi/SettingWiFi/view/WPSConnectPage.cs [new file with mode: 0644]

index 9e60a8a6a309843d08342ded7db5e5af57e54dcb..09c14a1a24ef0b526b2dbf1e5407bf066b2edec0 100755 (executable)
@@ -19,6 +19,7 @@ namespace SettingWiFi
     public class WiFi\r
     {\r
         IEnumerable<WiFiAP> apList = new List<WiFiAP>();\r
+        IEnumerable<WiFiAP> specificAPList = new List<WiFiAP>();\r
 \r
         private event EventHandler<WiFiStateChangedEventArgs> wifiStateChanged = null;\r
 \r
@@ -94,7 +95,6 @@ namespace SettingWiFi
             {\r
                 Debug("Fail to connect" + e.ToString());\r
             }\r
-\r
         }\r
 \r
         public Task Disconnect(string essid)\r
@@ -120,6 +120,62 @@ namespace SettingWiFi
             ap.ForgetAP();\r
         }\r
 \r
+        public async Task ScanSpecificAP(string essid)\r
+        {\r
+            Debug("WiFi.ScanSpecificAP");\r
+            try\r
+            {\r
+                await WiFiManager.ScanSpecificAPAsync(essid);\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Debug("Fail to scan specific AP " + e.ToString());\r
+            }\r
+        }\r
+\r
+        public List<AP> GetSpecificScanResult()\r
+        {\r
+            Debug("WiFi.GetSpecificScanResult");\r
+            try\r
+            {\r
+                specificAPList = WiFiManager.GetFoundSpecificAPs();\r
+                return GetSpecificAPList();\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Debug("Fail to get scan result " + e.ToString());\r
+            }\r
+\r
+            return null;\r
+        }\r
+\r
+        public async Task ConnectWps(AP ap, string pin)\r
+        {\r
+            Debug("WiFi.ConnectWps");\r
+            WiFiAP wifiAP = FindAP(ap.Essid);\r
+            if (wifiAP == null)\r
+            {\r
+                Debug("Cannot find " + ap.Essid);\r
+                return;\r
+            }\r
+\r
+            try\r
+            {\r
+                if (pin == null)\r
+                {\r
+                    await wifiAP.ConnectWpsAsync(new WpsPbcInfo());\r
+                }\r
+                else\r
+                {\r
+                    await wifiAP.ConnectWpsAsync(new WpsPinInfo(pin));\r
+                }\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Debug("Fail to connect" + e.ToString());\r
+            }\r
+        }\r
+\r
         private WiFiAP FindAP(string essid)\r
         {\r
             Debug("WiFi.FindAP");\r
@@ -132,7 +188,6 @@ namespace SettingWiFi
                     return item;\r
                 }\r
             }\r
-\r
             return null;\r
         }\r
 \r
@@ -153,6 +208,12 @@ namespace SettingWiFi
             return WiFiManager.GetConnectedAP().NetworkInformation.Essid;\r
         }\r
 \r
+        public string GetConnectionState()\r
+        {\r
+            Debug("WiFi.GetConnectionState");\r
+            return WiFiManager.ConnectionState.ToString();\r
+        }\r
+\r
         public List<AP> GetAPList()\r
         {\r
             Debug("WiFi.GetAPList");\r
@@ -242,5 +303,48 @@ namespace SettingWiFi
             get;\r
             set;\r
         }\r
+\r
+        public List<AP> GetSpecificAPList()\r
+        {\r
+            Debug("WiFi.GetSpecificAPList");\r
+            List<AP> apInfoList = new List<AP>();\r
+            foreach (var item in specificAPList)\r
+            {\r
+                Debug("AP name: " + item.NetworkInformation.Essid);\r
+                Debug("AP connection state: " + item.NetworkInformation.ConnectionState.ToString());\r
+\r
+                string securityType = item.SecurityInformation.SecurityType.ToString();\r
+                bool isWpsSupported = item.SecurityInformation.IsWpsSupported;\r
+\r
+                if (item.NetworkInformation.ConnectionState.ToString().Equals(Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS))\r
+                {\r
+                    apInfoList.Add(new AP(item.NetworkInformation.Essid, Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS, securityType, isWpsSupported));\r
+                    continue;\r
+                }\r
+\r
+                string text = "";\r
+\r
+                if (securityType.Equals(Resources.IDS_ST_BODY_NONE))\r
+                {\r
+                    text = Resources.IDS_WIFI_POP_OPEN;\r
+                }\r
+                else if (securityType.Equals(Resources.IDS_WIFI_BODY_EAP))\r
+                {\r
+                    text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (Eap)";\r
+                }\r
+                else if (isWpsSupported)\r
+                {\r
+                    text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY + " (WPS available)";\r
+                }\r
+                else\r
+                {\r
+                    text = Resources.IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY;\r
+                }\r
+\r
+                apInfoList.Add(new AP(item.NetworkInformation.Essid, text, securityType, isWpsSupported));\r
+            }\r
+\r
+            return apInfoList;\r
+        }\r
     }\r
 }\r
index 329eea9c7ee604d354cf1faf76824174b1102e25..fbcae5ac666f1603ab9250c896a8cd5dc2502fcd 100755 (executable)
@@ -140,5 +140,131 @@ namespace SettingWiFi.res.locale {
                 return ResourceManager.GetString("IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY", resourceCulture);
             }
         }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_BUTTON_FIND_HIDDEN_NETWORK {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_BUTTON_FIND_HIDDEN_NETWORK", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_ST_BODY_NETWORK_SSID {
+            get {
+                return ResourceManager.GetString("IDS_ST_BODY_NETWORK_SSID", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_SK_CANCEL {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_SK_CANCEL", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_COM_BODY_FIND {
+            get {
+                return ResourceManager.GetString("IDS_COM_BODY_FIND", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_POP_PRESS_WPS_ON_YOUR_WI_FI_ACCESS_POINT_WITHIN_PD_MINUTES {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_POP_PRESS_WPS_ON_YOUR_WI_FI_ACCESS_POINT_WITHIN_PD_MINUTES", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_BUTTON_WPS_BUTTON {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_BUTTON_WPS_BUTTON", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_SK_WPS_PIN {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_SK_WPS_PIN", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_HEADER_SELECT_WPS_METHOD_ABB {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_HEADER_SELECT_WPS_METHOD_ABB", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_BODY_CONNECT {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_BODY_CONNECT", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_OPT_WPS {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_OPT_WPS", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_BODY_WI_FI {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_BODY_WI_FI", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_BUTTON_SCAN {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_BUTTON_SCAN", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_ST_BODY_ENTER_THE_P1SS_PIN_ON_YOUR_WI_FI_ROUTER_THE_SETUP_CAN_TAKE_UP_TO_P2SD_MINUTES_TO_COMPLETE {
+            get {
+                return ResourceManager.GetString("IDS_ST_BODY_ENTER_THE_P1SS_PIN_ON_YOUR_WI_FI_ROUTER_THE_SETUP_CAN_TAKE_UP_TO_P2SD_MINUTES_TO_COMPLETE", resourceCulture);
+            }
+        }
+
+        /// <summary>
+        ///   과(와) 유사한 지역화된 문자열을 찾습니다.
+        /// </summary>
+        public static string IDS_WIFI_HEADER_PASSWORD {
+            get {
+                return ResourceManager.GetString("IDS_WIFI_HEADER_PASSWORD", resourceCulture);
+            }
+        }
     }
 }
index dfac5eca0fc856fdea825efc6a41302eff9fea32..c414f7a03436b47a441baa6aaf5aaa773702dcdf 100755 (executable)
   <data name="IDS_WIFI_BODY_CONNECTING_ING" xml:space="preserve">\r
     <value>Connecting...</value>\r
   </data>\r
-  <data name="IDS_WIFI_SBODY_CONNECTED_M_STATUS" xml:space="preserve">\r
-    <value>Connected</value>\r
-  </data>\r
   <data name="IDS_WIFI_HEADER_WI_FI_NETWORK_INFO_ABB" xml:space="preserve">\r
     <value>Wi-Fi network info</value>\r
   </data>\r
   <data name="IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY" xml:space="preserve">\r
     <value>Secured</value>\r
   </data>\r
+  <data name="IDS_WIFI_BUTTON_FIND_HIDDEN_NETWORK" xml:space="preserve">\r
+    <value>Find hidden network</value>\r
+  </data>\r
+  <data name="IDS_ST_BODY_NETWORK_SSID" xml:space="preserve">\r
+    <value>Network SSID</value>\r
+  </data>\r
+  <data name="IDS_WIFI_SK_CANCEL" xml:space="preserve">\r
+    <value>Cancel</value>\r
+  </data>\r
+  <data name="IDS_COM_BODY_FIND" xml:space="preserve">\r
+    <value>Find</value>\r
+  </data>\r
+  <data name="IDS_WIFI_POP_PRESS_WPS_ON_YOUR_WI_FI_ACCESS_POINT_WITHIN_PD_MINUTES" xml:space="preserve">\r
+    <value>Press WPS on your Wi-Fi access point within {0} minutes.</value>\r
+  </data>\r
+  <data name="IDS_WIFI_BUTTON_WPS_BUTTON" xml:space="preserve">\r
+    <value>WPS button</value>\r
+  </data>\r
+  <data name="IDS_WIFI_SK_WPS_PIN" xml:space="preserve">\r
+    <value>WPS PIN</value>\r
+  </data>\r
+  <data name="IDS_WIFI_HEADER_SELECT_WPS_METHOD_ABB" xml:space="preserve">\r
+    <value>Select WPS method</value>\r
+  </data>\r
+  <data name="IDS_WIFI_BODY_CONNECT" xml:space="preserve">\r
+    <value>Connect</value>\r
+  </data>\r
+  <data name="IDS_WIFI_OPT_WPS" xml:space="preserve">\r
+    <value>WPS</value>\r
+  </data>\r
+  <data name="IDS_WIFI_BODY_WI_FI" xml:space="preserve">\r
+    <value>Wi-Fi</value>\r
+  </data>\r
+  <data name="IDS_WIFI_BUTTON_SCAN" xml:space="preserve">\r
+    <value>Scan</value>\r
+  </data>\r
+  <data name="IDS_ST_BODY_ENTER_THE_P1SS_PIN_ON_YOUR_WI_FI_ROUTER_THE_SETUP_CAN_TAKE_UP_TO_P2SD_MINUTES_TO_COMPLETE" xml:space="preserve">\r
+    <value>Enter the {0} PIN on your Wi-Fi router. The setup can take up to {1} minutes to complete.</value>\r
+  </data>\r
+  <data name="IDS_WIFI_HEADER_PASSWORD" xml:space="preserve">\r
+    <value>Password</value>\r
+  </data>\r
 </root>
\ No newline at end of file
index 63405a2d77828eb6eac62d66b5e0fd49de2ee050..dee30053f840f81384248a761da60e25e53286c2 100755 (executable)
   <data name="IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY" xml:space="preserve">\r
     <value>보안</value>\r
   </data>\r
+  <data name="IDS_WIFI_BUTTON_FIND_HIDDEN_NETWORK" xml:space="preserve">\r
+    <value>숨겨진 네트워크 찾기</value>\r
+  </data>\r
+  <data name="IDS_ST_BODY_NETWORK_SSID" xml:space="preserve">\r
+    <value>네트워크 이름</value>\r
+  </data>\r
+  <data name="IDS_WIFI_SK_CANCEL" xml:space="preserve">\r
+    <value>취소</value>\r
+  </data>\r
+  <data name="IDS_COM_BODY_FIND" xml:space="preserve">\r
+    <value>찾기</value>\r
+  </data>\r
+  <data name="IDS_WIFI_POP_PRESS_WPS_ON_YOUR_WI_FI_ACCESS_POINT_WITHIN_PD_MINUTES" xml:space="preserve">\r
+    <value>Wi-Fi 액세스 포인트에서 %d분 안에 WPS 버튼을 누르세요.</value>\r
+  </data>\r
+  <data name="IDS_WIFI_BUTTON_WPS_BUTTON" xml:space="preserve">\r
+    <value>WPS 버튼</value>\r
+  </data>\r
+  <data name="IDS_WIFI_SK_WPS_PIN" xml:space="preserve">\r
+    <value>WPS PIN</value>\r
+  </data>\r
+  <data name="IDS_WIFI_HEADER_SELECT_WPS_METHOD_ABB" xml:space="preserve">\r
+    <value>WPS 방식 선택</value>\r
+  </data>\r
+  <data name="IDS_WIFI_BODY_CONNECT" xml:space="preserve">\r
+    <value>연결</value>\r
+  </data>\r
+  <data name="IDS_WIFI_OPT_WPS" xml:space="preserve">\r
+    <value>WPS</value>\r
+  </data>\r
+  <data name="IDS_WIFI_BODY_WI_FI" xml:space="preserve">\r
+    <value>Wi-Fi</value>\r
+  </data>\r
+  <data name="IDS_WIFI_BUTTON_SCAN" xml:space="preserve">\r
+    <value>찾기</value>\r
+  </data>\r
+  <data name="IDS_ST_BODY_ENTER_THE_P1SS_PIN_ON_YOUR_WI_FI_ROUTER_THE_SETUP_CAN_TAKE_UP_TO_P2SD_MINUTES_TO_COMPLETE" xml:space="preserve">\r
+    <value>Wi-Fi 공유기에 PIN{0}을 입력하세요. 설정을 완료하기까지 최대 {1}분이 소요됩니다.</value>\r
+  </data>\r
+  <data name="IDS_WIFI_HEADER_PASSWORD" xml:space="preserve">\r
+    <value>비밀번호</value>\r
+  </data>\r
 </root>
\ No newline at end of file
index afb697d6e4f4c952f9549dc03adfb45dd08f2a41..0106462985a16e0a7e4098e9273f2e4c54cc7634 100755 (executable)
   <data name="IDS_ST_BODY_SECURED_ABB_M_WIFI_AP_SUMMARY" xml:space="preserve">\r
     <value />\r
   </data>\r
+  <data name="IDS_WIFI_BUTTON_FIND_HIDDEN_NETWORK" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_ST_BODY_NETWORK_SSID" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_SK_CANCEL" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_COM_BODY_FIND" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_POP_PRESS_WPS_ON_YOUR_WI_FI_ACCESS_POINT_WITHIN_PD_MINUTES" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_BUTTON_WPS_BUTTON" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_SK_WPS_PIN" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_HEADER_SELECT_WPS_METHOD_ABB" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_BODY_CONNECT" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_OPT_WPS" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_BODY_WI_FI" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_BUTTON_SCAN" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_ST_BODY_ENTER_THE_P1SS_PIN_ON_YOUR_WI_FI_ROUTER_THE_SETUP_CAN_TAKE_UP_TO_P2SD_MINUTES_TO_COMPLETE" xml:space="preserve">\r
+    <value />\r
+  </data>\r
+  <data name="IDS_WIFI_HEADER_PASSWORD" xml:space="preserve">\r
+    <value />\r
+  </data>\r
 </root>
\ No newline at end of file
index e27158f97d01250d8e5e213c4b2e8705001363c0..bb8a8d8faa10352974224509925c159bbae961aa 100644 (file)
@@ -1,3 +1,4 @@
+using System;
 using Tizen.NUI;
 using Tizen.NUI.BaseComponents;
 using Tizen.NUI.Components;
@@ -32,9 +33,14 @@ namespace SettingWiFi
                 HeightSpecification = 100,
             };
 
+            var passwordItem = new DefaultLinearItem();    
+            var wpsButtonItem = new DefaultLinearItem();
+
             var passwordField = new TextField()
             {
                 WidthSpecification = 400,
+                BackgroundColor = Color.Grey,
+                PlaceholderText = Resources.IDS_WIFI_HEADER_PASSWORD,
             };
 
             var hiddenInput = new Tizen.NUI.Text.HiddenInput();
@@ -44,24 +50,27 @@ namespace SettingWiFi
             hiddenInput.ShowLastCharacterDuration = 1000;
             passwordField.SetHiddenInput(hiddenInput);
 
-            connectView.Add(passwordField);
+            var wpsButton = new Button()
+            {
+                Text = Resources.IDS_WIFI_OPT_WPS,
+            };
+            wpsButton.Clicked += OnWpsClicked;
+
+            passwordItem.Add(passwordField);
+            wpsButtonItem.Add(wpsButton);
 
-            var item = new DefaultLinearItem();
-            connectView.Add(item);
+            connectView.Add(passwordItem);
+            connectView.Add(wpsButtonItem);
 
             var cancelButton = new Button()
             {
-                Text = "Cancel",
-                WidthSpecification = 300,
-                HeightSpecification = 80,
+                Text = Resources.IDS_WIFI_SK_CANCEL,
             };
             cancelButton.Clicked += OnCancelClicked;
 
             var connectButton = new Button()
             {
-                Text = "Connect",
-                WidthSpecification = 300,
-                HeightSpecification = 80,
+                Text = Resources.IDS_WIFI_BODY_CONNECT,
             };
             connectButton.Clicked += OnConnectClicked;
 
@@ -78,6 +87,13 @@ namespace SettingWiFi
             Navigator.Pop();
         }
 
+        private void OnWpsClicked(object source, ClickedEventArgs args)
+        {
+            var page = new WpsConnectPage(mWifi);
+            page.CreateComponents(mAp);
+            Navigator.Push(page);
+        }
+
         private void OnConnectClicked(object source, ClickedEventArgs args)
         {
             Connect();
diff --git a/SettingWiFi/SettingWiFi/view/HiddenConnectPage.cs b/SettingWiFi/SettingWiFi/view/HiddenConnectPage.cs
new file mode 100644 (file)
index 0000000..faadd4a
--- /dev/null
@@ -0,0 +1,120 @@
+using System.Collections.Generic;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using SettingWiFi.res.locale;
+using static SettingWiFi.Logger;
+
+namespace SettingWiFi
+{
+    internal class HiddenConnectPage : ContentPage
+    {
+        private WiFi mWifi;
+        private APSource mApSource;
+
+        internal HiddenConnectPage(WiFi wifi)
+        {
+            mWifi = wifi;
+        }
+
+        internal void CreateComponents(APSource apSource)
+        {
+            mApSource = apSource;
+
+            var findView = new View()
+            {
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+                WidthSpecification = 200,
+                HeightSpecification = 100,
+            };
+
+            var ssidField = new TextField()
+            {
+                Text = Resources.IDS_ST_BODY_NETWORK_SSID,
+                WidthSpecification = 400,
+            };
+
+            // todo: add text input
+            var input = "dnet_sn";
+
+            findView.Add(ssidField);
+
+            var item = new DefaultLinearItem();
+            findView.Add(item);
+
+            var cancelButton = new Button()
+            {
+                Text = Resources.IDS_WIFI_SK_CANCEL,
+                WidthSpecification = 300,
+                HeightSpecification = 80,
+            };
+            cancelButton.Clicked += (object source, ClickedEventArgs args) =>
+            {
+                Navigator.Pop();
+            };
+
+            var findButton = new Button()
+            {
+                Text = Resources.IDS_COM_BODY_FIND,
+                WidthSpecification = 300,
+                HeightSpecification = 80,
+            };
+            findButton.Clicked += (object source, ClickedEventArgs args) =>
+            {
+                if (mWifi.IsActive())
+                {
+                    ConnectSpecificAP(input);
+                }
+            };
+
+            Content = new AlertDialog()
+            {
+                Title = Resources.IDS_WIFI_BUTTON_FIND_HIDDEN_NETWORK,
+                Content = findView,
+                Actions = new View[] { cancelButton, findButton },
+            };
+        }
+
+        private async void ConnectSpecificAP(string essid)
+        {
+            await mWifi.ScanSpecificAP(essid);
+
+            List<AP> apList = mWifi.GetSpecificScanResult();
+            if (apList.Count == 0)
+            {
+                Navigator.Pop();
+                return;
+            }
+
+            // todo: locate on the bottom of the scan list
+            //if (apList.Count > 1)
+            //{
+            //    Navigator.Pop();
+            //    return;
+            //}
+
+            foreach (var item in apList)
+            {
+                if (item.SecType.Equals(Resources.IDS_WIFI_POP_OPEN))
+                {
+                    await mWifi.Connect(item.Essid, null);
+                }
+                else
+                {
+                    Navigator.Push(CreateConnectPage(item));
+                }
+                break;
+            }
+        }
+
+        private DialogPage CreateConnectPage(AP ap)
+        {
+            var page = new ConnectPage(mWifi);
+            page.CreateComponents(ap);
+            return page;
+        }
+    }
+}
\ No newline at end of file
index 5d9209bc91aee7adedd8bb8df954809cfcd9bf12..130413f6a886d70a2d8fd7c8d70faeb70a51e351 100644 (file)
@@ -15,7 +15,6 @@ namespace SettingWiFi
         CollectionView mScanList;
 
         ContentPage mInfoPage;
-        ContentPage mMorePage;
         DialogPage mConnectPage;
 
         WiFi mWifi;
@@ -39,12 +38,11 @@ namespace SettingWiFi
             };
 
             MenuItem[] menuItems = new MenuItem[itemCount];
-            menuItems[0] = new MenuItem() { Text = "Add WiFi network" };
+            menuItems[0] = new MenuItem() { Text = Resources.IDS_WIFI_BUTTON_FIND_HIDDEN_NETWORK };
             menuItems[0].SelectedChanged += (object sender, SelectedChangedEventArgs args) =>
             {
+                Navigator.Push(CreateHiddenConnectPage());
                 var menuItem = sender as MenuItem;
-                mMorePage = CreateMorePage();
-                Navigator.Push(mMorePage);
             };
 
             moreButton.Clicked += (object sender, ClickedEventArgs args) =>
@@ -61,7 +59,7 @@ namespace SettingWiFi
 
             var appBar = new AppBar()
             {
-                Title = "Wi-Fi",
+                Title = Resources.IDS_WIFI_BODY_WI_FI,
                 Actions = new View[] { moreButton, },
             };
 
@@ -113,7 +111,7 @@ namespace SettingWiFi
             var header = GetHeader();
             var scanButton = new Button()
             {
-                Text = "Scan",
+                Text = Resources.IDS_WIFI_BUTTON_SCAN,
                 WidthSpecification = 300,
                 HeightSpecification = 80,
             };
@@ -197,7 +195,7 @@ namespace SettingWiFi
             var toggle = new DefaultLinearItem()
             {
                 WidthSpecification = LayoutParamPolicies.MatchParent,
-                Text = "Wi-Fi",
+                Text = Resources.IDS_WIFI_BODY_WI_FI,
                 IsSelectable = false,
             };
             toggle.Label.HorizontalAlignment = HorizontalAlignment.Begin;
@@ -221,10 +219,10 @@ namespace SettingWiFi
             return page;
         }
 
-        private ContentPage CreateMorePage()
+        private ContentPage CreateHiddenConnectPage()
         {
-            var page = new MorePage(mWifi);
-            page.CreateComponents();
+            var page = new HiddenConnectPage(mWifi);
+            page.CreateComponents(mApSource);
             return page;
         }
 
diff --git a/SettingWiFi/SettingWiFi/view/WPSConnectPage.cs b/SettingWiFi/SettingWiFi/view/WPSConnectPage.cs
new file mode 100644 (file)
index 0000000..283ac90
--- /dev/null
@@ -0,0 +1,294 @@
+using System;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using SettingWiFi.res.locale;
+using static SettingWiFi.Logger;
+
+
+namespace SettingWiFi
+{
+    internal class WpsButtonWaitPage : DialogPage
+    {
+        private WiFi mWifi;
+        private AP mAp;
+        private bool isConnected = false;
+
+        internal WpsButtonWaitPage(WiFi wifi)
+        {
+            mWifi = wifi;
+        }
+
+        internal void CreateComponents(AP ap)
+        {
+            mAp = ap;
+
+            var view = new View()
+            {
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            var messageItem = new DefaultLinearItem();
+            var progressItem = new DefaultLinearItem();
+
+            string timeout = "2";
+            TextLabel text = new TextLabel(String.Format(Resources.IDS_WIFI_POP_PRESS_WPS_ON_YOUR_WI_FI_ACCESS_POINT_WITHIN_PD_MINUTES, timeout))
+            {
+                Size = new Size(1000, 700),
+                HorizontalAlignment = HorizontalAlignment.Begin,
+                PointSize = 15.0f,
+            };
+
+            var progress = new Progress()
+            {
+                MinValue = 0,
+                MaxValue = 120,
+                CurrentValue = 0,
+                TrackColor = Color.White,
+                ProgressColor = Color.Navy,
+                Size = new Size(400, 50),
+                WidthSpecification = 400,
+            };
+
+            messageItem.Add(text);
+            progressItem.Add(progress);
+
+            view.Add(messageItem);
+            view.Add(progressItem);
+
+            int timeCnt = 60 * 2;
+            var timer = new Timer(1000);
+            timer.Tick += (o, e) =>
+            {
+                timeCnt--;
+                progress.CurrentValue++;
+                if (timeCnt == 0)
+                {
+                    Navigator.Pop();
+                    return false;
+                }
+
+                checkConnection();
+                if (isConnected)
+                {
+                    Navigator.Pop();
+                    return false;
+                }
+
+                return true;
+            };
+            timer.Start();
+
+            var cancelButton = new Button()
+            {
+                Text = Resources.IDS_WIFI_SK_CANCEL,
+                WidthSpecification = 100,
+                HeightSpecification = 60,
+            };
+            cancelButton.Clicked += (object s, ClickedEventArgs e) =>
+            {
+                timer.Stop();
+                Navigator.Pop();
+            };
+
+            Content = new AlertDialog()
+            {
+                Title = Resources.IDS_WIFI_BUTTON_WPS_BUTTON,
+                Content = view,
+                Actions = new View[] { cancelButton },
+            };
+        }
+
+        private async void checkConnection()
+        {
+            if (mWifi.GetConnectionState().Equals(Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS))
+            {
+                isConnected = true;
+            }
+        }
+    }
+
+    internal class WpsPinWaitPage : DialogPage
+    {
+        private WiFi mWifi;
+        private AP mAp;
+        private bool isConnected = false;
+
+        internal WpsPinWaitPage(WiFi wifi)
+        {
+            mWifi = wifi;
+        }
+
+        internal void CreateComponents(AP ap, string pin)
+        {
+            mAp = ap;
+
+            var view = new View()
+            {
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            var messageItem = new DefaultLinearItem();
+            var progressItem = new DefaultLinearItem();
+
+            string timeout = "2";
+            TextLabel text = new TextLabel(String.Format(Resources.IDS_ST_BODY_ENTER_THE_P1SS_PIN_ON_YOUR_WI_FI_ROUTER_THE_SETUP_CAN_TAKE_UP_TO_P2SD_MINUTES_TO_COMPLETE, pin, timeout))
+            {
+                Size = new Size(1000, 700),
+            };
+            text.HorizontalAlignment = HorizontalAlignment.Begin;
+            text.PointSize = 15.0f;
+
+            var progress = new Progress()
+            {
+                MinValue = 0,
+                MaxValue = 120,
+                CurrentValue = 0,
+                TrackColor = Color.White,
+                ProgressColor = Color.Navy,
+                Size = new Size(400, 50),
+                WidthSpecification = 400,
+            };
+
+            messageItem.Add(text);
+            progressItem.Add(progress);
+
+            view.Add(messageItem);
+            view.Add(progressItem);
+
+            int timeCnt = 60 * 2;
+            var timer = new Timer(1000);
+            timer.Tick += (o, e) =>
+            {
+                timeCnt--;
+                progress.CurrentValue++;
+                if (timeCnt == 0)
+                {
+                    Navigator.Pop();
+                    return false;
+                }
+
+                checkConnection();
+                if (isConnected)
+                {
+                    Debug(Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS);
+                    Navigator.Pop();
+                    return false;
+                }
+
+                return true;
+            };
+            timer.Start();
+
+            var cancelButton = new Button()
+            {
+                Text = Resources.IDS_WIFI_SK_CANCEL,
+                WidthSpecification = 100,
+                HeightSpecification = 60,
+            };
+            cancelButton.Clicked += (object s, ClickedEventArgs e) =>
+            {
+                timer.Stop();
+                Navigator.Pop();
+            };
+
+            Content = new AlertDialog()
+            {
+                Title = Resources.IDS_WIFI_SK_WPS_PIN,
+                Content = view,
+                Actions = new View[] { cancelButton },
+            };
+        }
+
+        private async void checkConnection()
+        {
+            if (mWifi.GetConnectionState().Equals(Resources.IDS_WIFI_SBODY_CONNECTED_M_STATUS))
+            {
+                isConnected = true;
+            }
+        }
+    }
+
+    internal class WpsConnectPage : DialogPage
+    {
+        private WiFi mWifi;
+        private AP mAp;
+
+        internal WpsConnectPage(WiFi wifi)
+        {
+            mWifi = wifi;
+        }
+
+        internal void CreateComponents(AP ap)
+        {
+            mAp = ap;
+
+            var view = new View()
+            {
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+                WidthSpecification = 200,
+                HeightSpecification = 100,
+            };
+
+            var pbsButton = new Button()
+            {
+                Text = Resources.IDS_WIFI_BUTTON_WPS_BUTTON,
+            };
+            pbsButton.Clicked += OnButtonMethodClicked;
+
+            var pinButton = new Button()
+            {
+                Text = Resources.IDS_WIFI_SK_WPS_PIN,
+            };
+            pinButton.Clicked += OnPinMethodClicked;
+
+            Content = new AlertDialog()
+            {
+                Title = Resources.IDS_WIFI_HEADER_SELECT_WPS_METHOD_ABB,
+                Content = view,
+                Actions = new View[] { pbsButton, pinButton },
+            };
+        }
+
+        private void OnButtonMethodClicked(object source, ClickedEventArgs args)
+        {
+            var page = new WpsButtonWaitPage(mWifi);
+            page.CreateComponents(mAp);
+
+            ConnectWpsPbs();
+
+            Navigator.Push(page);
+        }
+
+        private void OnPinMethodClicked(object source, ClickedEventArgs args)
+        {
+            //GeneratePinNumber(); // todo
+            string pin = "1234";
+            ConnectWpsPin(pin);
+
+            var page = new WpsPinWaitPage(mWifi);
+            page.CreateComponents(mAp, pin);
+
+            Navigator.Push(page);
+        }
+
+        private async void ConnectWpsPbs()
+        {
+            await mWifi.ConnectWps(mAp, null);
+        }
+
+        private async void ConnectWpsPin(string pin)
+        {
+            await mWifi.ConnectWps(mAp, pin);
+        }
+    }
+}
\ No newline at end of file