Modified Android UI to accept Enroller information
[platform/upstream/iotivity.git] / service / easy-setup / sdk / mediator / android / EasySetupCore / src / main / java / org / iotivity / service / easysetup / impl / EnrolleeDeviceWiFiOnboarding.java
index 3dffae9..e985571 100755 (executable)
@@ -1,22 +1,22 @@
 /**\r
  * ***************************************************************\r
- * <p/>\r
+ * <p>\r
  * Copyright 2015 Samsung Electronics All Rights Reserved.\r
- * <p/>\r
- * <p/>\r
- * <p/>\r
+ * <p>\r
+ * <p>\r
+ * <p>\r
  * Licensed under the Apache License, Version 2.0 (the "License");\r
  * you may not use this file except in compliance with the License.\r
  * You may obtain a copy of the License at\r
- * <p/>\r
+ * <p>\r
  * http://www.apache.org/licenses/LICENSE-2.0\r
- * <p/>\r
+ * <p>\r
  * Unless required by applicable law or agreed to in writing, software\r
  * distributed under the License is distributed on an "AS IS" BASIS,\r
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
  * See the License for the specific language governing permissions and\r
  * limitations under the License.\r
- * <p/>\r
+ * <p>\r
  * ****************************************************************\r
  */\r
 \r
@@ -31,6 +31,7 @@ import org.iotivity.service.easysetup.core.EnrolleeState;
 import org.iotivity.service.easysetup.core.IpOnBoardingConnection;\r
 import org.iotivity.service.easysetup.core.OnBoardingConfig;\r
 import org.iotivity.service.easysetup.core.ProvisioningConfig;\r
+import org.iotivity.service.easysetup.mediator.EasySetupCallbackHandler;\r
 import org.iotivity.service.easysetup.mediator.EasySetupManager;\r
 import org.iotivity.service.easysetup.mediator.EnrolleeInfo;\r
 import org.iotivity.service.easysetup.mediator.IOnBoardingStatus;\r
@@ -54,43 +55,51 @@ public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice {
     EnrolleeInfo connectedDevice;\r
     private EasySetupManager easySetupManagerNativeInstance;\r
     ProvisionEnrollee provisionEnrolleInstance;\r
-\r
-    // Native Api to start provisioning process after successful on-boarding on Wifi AP.\r
-    // Library is already loaded while constructing EasySetupService\r
-    private native void ProvisionEnrollee(String ipAddress, String netSSID,\r
-                                          String netPWD, int connectivityType);\r
+    Timer myTimer;\r
 \r
     IOnBoardingStatus deviceScanListener = new IOnBoardingStatus() {\r
 \r
         @Override\r
         public void deviceOnBoardingStatus(EnrolleeInfo enrolleStatus) {\r
             Log.d("ESSoftAPOnBoarding", "Entered");\r
-            if (enrolleStatus != null && enrolleStatus.getIpAddr() != null) {\r
-                String finalResult = "Easy Connect : ";\r
+            if (mState == EnrolleeState.DEVICE_ON_BOARDING_STATE) {\r
+                Log.d("ESSoftAPOnBoarding", "Device in OnBoarding State");\r
+                if (enrolleStatus != null && enrolleStatus.getIpAddr() != null) {\r
+                    String finalResult = "Easy Connect : ";\r
+\r
+                    if (enrolleStatus.isReachable()) {\r
+                        finalResult = "Device OnBoarded" + "["\r
+                                + enrolleStatus.getIpAddr() + "]";\r
 \r
-                if (enrolleStatus.isReachable()) {\r
-                    finalResult = "Device OnBoarded" + "["\r
-                            + enrolleStatus.getIpAddr() + "]";\r
+                        connectedDevice = enrolleStatus;\r
+                        IpOnBoardingConnection conn = new IpOnBoardingConnection();\r
 \r
-                    connectedDevice = enrolleStatus;\r
-                    IpOnBoardingConnection conn = new IpOnBoardingConnection();\r
-                    conn.setConnectivity(true);\r
-                    conn.setIp(connectedDevice.getIpAddr());\r
-                    Log.d("ESSoftAPOnBoarding", "Entered");\r
-                    mOnBoardingCallback.onFinished(conn);\r
-                    return;\r
+                        conn.setConnectivity(true);\r
+                        conn.setIp(connectedDevice.getIpAddr());\r
+                        conn.setHardwareAddress(enrolleStatus.getHWAddr());\r
+                        conn.setDeviceName(enrolleStatus.getDevice());\r
 \r
+                        Log.d("ESSoftAPOnBoarding", "Entered");\r
+                        mOnBoardingCallback.onFinished(conn);\r
+                        return;\r
+\r
+                    }\r
                 }\r
-            }\r
 \r
-            IpOnBoardingConnection conn = new IpOnBoardingConnection();\r
-            conn.setConnectivity(false);\r
-            mOnBoardingCallback.onFinished(conn);\r
+                IpOnBoardingConnection conn = new IpOnBoardingConnection();\r
+                conn.setConnectivity(false);\r
+                mOnBoardingCallback.onFinished(conn);\r
+            }\r
+            else\r
+            {\r
+                Log.e("ESSoftAPOnBoarding", "Device NOT in OnBoarding State. Ignoring the event");\r
+            }\r
         }\r
     };\r
 \r
 \r
-    protected EnrolleeDeviceWiFiOnboarding(Context context, OnBoardingConfig onBoardingConfig, ProvisioningConfig provConfig) {\r
+    protected EnrolleeDeviceWiFiOnboarding(Context context, OnBoardingConfig onBoardingConfig,\r
+                                           ProvisioningConfig provConfig) {\r
         super(onBoardingConfig, provConfig);\r
         mContext = context;\r
         mWifiSoftAPManager = new WiFiSoftAPManager(mContext);\r
@@ -98,14 +107,16 @@ public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice {
 \r
     @Override\r
     protected void startOnBoardingProcess() {\r
-        Log.i(TAG, "Starging on boarding process");\r
+        Log.i(TAG, "Starting on boarding process");\r
 \r
         //1. Create Soft AP\r
-        boolean status = mWifiSoftAPManager.setWifiApEnabled((WifiConfiguration) mOnBoardingConfig.getConfig(), true);\r
+        boolean status = mWifiSoftAPManager.setWifiApEnabled((WifiConfiguration)\r
+                mOnBoardingConfig.getConfig(), true);\r
+\r
+        mState = EnrolleeState.DEVICE_ON_BOARDING_STATE;\r
 \r
         Log.i(TAG, "Soft AP is created with status " + status);\r
 \r
-        Timer myTimer;\r
         myTimer = new Timer();\r
         myTimer.schedule(new TimerTask() {\r
             @Override\r
@@ -119,12 +130,14 @@ public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice {
 \r
     protected void stopOnBoardingProcess() {\r
         Log.i(TAG, "Stopping on boarding process");\r
+        myTimer.cancel();\r
         boolean status = mWifiSoftAPManager.setWifiApEnabled(null, false);\r
         Log.i(TAG, "Soft AP is disabled with status " + status);\r
     }\r
 \r
     @Override\r
     protected void startProvisioningProcess(OnBoardingConnection conn) {\r
+        mState = EnrolleeState.DEVICE_PROVISIONING_STATE;\r
 \r
         if (mProvConfig.getConnType() == ProvisioningConfig.ConnType.WiFi) {\r
 \r
@@ -132,7 +145,11 @@ public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice {
             provisionEnrolleInstance.registerProvisioningHandler(new IProvisioningListener() {\r
                 @Override\r
                 public void onFinishProvisioning(int statuscode) {\r
-                    mState = (statuscode == 0) ? EnrolleeState.DEVICE_PROVISIONING_SUCCESS_STATE : EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;\r
+\r
+                    Log.i(TAG, "Provisioning is finished with status code " + statuscode);\r
+                    mState = (statuscode == 0) ? EnrolleeState.DEVICE_PROVISIONING_SUCCESS_STATE\r
+                            : EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;\r
+                    stopOnBoardingProcess();\r
                     mProvisioningCallback.onFinished(EnrolleeDeviceWiFiOnboarding.this);\r
                 }\r
             });\r
@@ -140,12 +157,13 @@ public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice {
             IpOnBoardingConnection connection = (IpOnBoardingConnection) conn;\r
             WiFiProvConfig wifiProvConfig = (WiFiProvConfig) mProvConfig;\r
 \r
-            // Native Api call to start provisioning of the enrolling device\r
-            EasySetupManager.getInstance().provisionEnrollee(connection.getIp(), wifiProvConfig.getSsId(), wifiProvConfig.getPassword(), mOnBoardingConfig.getConnType().getValue());\r
+            easySetupManagerNativeInstance = EasySetupManager.getInstance();\r
+            easySetupManagerNativeInstance.initEasySetup();\r
 \r
+            // Native Api call to start provisioning of the enrolling device\r
+            easySetupManagerNativeInstance.provisionEnrollee(connection.getIp(), wifiProvConfig\r
+                    .getSsId(), wifiProvConfig.getPassword(), mOnBoardingConfig.getConnType()\r
+                    .getValue());\r
         }\r
-\r
     }\r
-\r
-\r
 }\r