[Android] Mediator changes to support softAP at enrolllee side
authorJay Sharma <jay.sharma@samsung.com>
Fri, 29 Jan 2016 12:52:38 +0000 (18:22 +0530)
committerMadan Lanka <lanka.madan@samsung.com>
Mon, 1 Feb 2016 06:25:36 +0000 (06:25 +0000)
 - Updated mediator sample application.
 - Updated the mediator SDK.

Change-Id: I3bca597cdd83e23b0e75835a01433b01131a9397
Signed-off-by: Jay Sharma <jay.sharma@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/4889
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Madan Lanka <lanka.madan@samsung.com>
service/easy-setup/sampleapp/mediator/android/EasySetup/app/src/main/java/org/iotivity/service/easysetup/MainActivity.java
service/easy-setup/sampleapp/mediator/android/EasySetup/app/src/main/res/layout/activity_main.xml
service/easy-setup/sampleapp/mediator/android/EasySetup/app/src/main/res/values/strings.xml
service/easy-setup/sdk/mediator/android/EasySetupCore/src/main/java/org/iotivity/service/easysetup/mediator/EasySetupService.java
service/easy-setup/sdk/mediator/android/EasySetupCore/src/main/java/org/iotivity/service/easysetup/mediator/EnrolleeDevice.java
service/easy-setup/sdk/mediator/android/EasySetupCore/src/main/java/org/iotivity/service/easysetup/mediator/EnrolleeDeviceFactory.java
service/easy-setup/sdk/mediator/android/EasySetupCore/src/main/java/org/iotivity/service/easysetup/mediator/EnrolleeDeviceWiFiOnboarding.java
service/easy-setup/sdk/mediator/android/EasySetupCore/src/main/java/org/iotivity/service/easysetup/mediator/IpOnBoardingConnection.java
service/easy-setup/sdk/mediator/src/prov_adapter.cpp

index 4153496..c10a0c0 100755 (executable)
@@ -22,8 +22,6 @@
 \r
 package org.iotivity.service.easysetup;\r
 \r
-import java.io.IOException;\r
-\r
 import org.iotivity.service.easysetup.mediator.EasySetupService;\r
 import org.iotivity.service.easysetup.mediator.EasySetupStatus;\r
 import org.iotivity.service.easysetup.mediator.EnrolleeDevice;\r
@@ -33,7 +31,13 @@ import org.iotivity.service.easysetup.mediator.WiFiOnBoardingConfig;
 import org.iotivity.service.easysetup.mediator.WiFiProvConfig;\r
 \r
 import android.app.Activity;\r
+import android.app.AlertDialog;\r
+import android.content.DialogInterface;\r
+import android.content.Intent;\r
+import android.net.ConnectivityManager;\r
+import android.net.NetworkInfo;\r
 import android.net.wifi.WifiConfiguration;\r
+import android.net.wifi.WifiManager;\r
 import android.os.Bundle;\r
 import android.os.Handler;\r
 import android.os.Message;\r
@@ -42,71 +46,167 @@ import android.view.View;
 import android.view.View.OnClickListener;\r
 import android.widget.Button;\r
 import android.widget.EditText;\r
+import android.widget.LinearLayout;\r
 import android.widget.ProgressBar;\r
+import android.widget.RadioButton;\r
+import android.widget.RelativeLayout;\r
 import android.widget.TextView;\r
 import android.widget.Toast;\r
 \r
 public class MainActivity extends Activity {\r
 \r
-\r
-    /*Status to update the UI */\r
-    public static final int SUCCESS = 0;\r
-    public static final int FAILED = 1;\r
+    /* Status to update the UI */\r
+    public static final int SUCCESS       = 0;\r
+    public static final int FAILED        = 1;\r
     public static final int STATE_CHANGED = 2;\r
 \r
-    EditText mSsidText;\r
-    EditText mPassText;\r
+    String                  mSoftAPSsid;\r
+    String                  mSoftAPPassword;\r
+    String                  mEnrollerSsid;\r
+    String                  mEnrollerPassword;\r
+\r
+    EditText                mSoftAPSsidText;\r
+    EditText                mSoftAPPassText;\r
+    EditText                mEnrollerSsidText;\r
+    EditText                mEnrollerPasswordPassText;\r
+\r
+    TextView                mDeviceIpTextView;\r
+    TextView                mDeviceMacTextView;\r
+    TextView                mResultTextView;\r
 \r
-    EditText mEnrolleeSsidText;\r
-    EditText mmEnrolleePasswordPassText;\r
+    ProgressBar             mProgressbar;\r
 \r
+    Button                  mStartButton;\r
+    Button                  mStopButton;\r
 \r
-    TextView mDeviceIpTextView;\r
-    TextView mDeviceMacTextView;\r
+    RadioButton             mEnrollee;\r
+    RadioButton             mMediator;\r
 \r
+    LinearLayout            mSoftAP;\r
+    RelativeLayout          mDeviceInfo;\r
+    TextView                mDeviceText;\r
 \r
-    TextView mResultTextView;\r
-    ProgressBar mProgressbar;\r
-    Button mStartButton;\r
-    Button mStopButton;\r
-    Handler mHandler = new ThreadHandler();\r
+    Handler                 mHandler      = new ThreadHandler();\r
 \r
     /**\r
      * Objects to be instantiated by the programmer\r
      */\r
-    WiFiProvConfig mWiFiProvConfig;\r
-    WiFiOnBoardingConfig mWiFiOnBoardingConfig;\r
-    EasySetupService mEasySetupService;\r
-    EnrolleeDeviceFactory mDeviceFactory;\r
-    EnrolleeDevice mDevice;\r
+    WiFiProvConfig          mWiFiProvConfig;\r
+    WiFiOnBoardingConfig    mWiFiOnBoardingConfig;\r
+    EasySetupService        mEasySetupService;\r
+    EnrolleeDeviceFactory   mDeviceFactory;\r
+    EnrolleeDevice          mDevice;\r
 \r
     @Override\r
     protected void onCreate(Bundle savedInstanceState) {\r
         super.onCreate(savedInstanceState);\r
         setContentView(R.layout.activity_main);\r
 \r
-        /* Initialize widgets to get user input for target network's SSID & password*/\r
-        mSsidText = (EditText) findViewById(R.id.ssid);\r
-        mPassText = (EditText) findViewById(R.id.password);\r
-        mEnrolleeSsidText = (EditText) findViewById(R.id.enrolleeSsid);\r
-        mmEnrolleePasswordPassText = (EditText) findViewById(R.id.enrolleePass);\r
+        /*\r
+         * Initialize widgets to get user input for target network's SSID &\r
+         * password\r
+         */\r
+        mSoftAP = (LinearLayout) findViewById(R.id.softAP);\r
+        mDeviceInfo = (RelativeLayout) findViewById(R.id.deviceInfo);\r
+        mDeviceText = (TextView) findViewById(R.id.textViewDeviceinfo);\r
+\r
+        mSoftAPSsidText = (EditText) findViewById(R.id.ssid);\r
+        mSoftAPPassText = (EditText) findViewById(R.id.password);\r
+        mEnrollerSsidText = (EditText) findViewById(R.id.enrolleeSsid);\r
+        mEnrollerPasswordPassText = (EditText) findViewById(R.id.enrolleePass);\r
         mDeviceIpTextView = (TextView) findViewById(R.id.ipAddr);\r
         mDeviceMacTextView = (TextView) findViewById(R.id.hardAddr);\r
 \r
         mResultTextView = (TextView) findViewById(R.id.status);\r
         mProgressbar = (ProgressBar) findViewById(R.id.progressBar);\r
 \r
+        mEnrollee = (RadioButton) findViewById(R.id.enrollee);\r
+        mMediator = (RadioButton) findViewById(R.id.mediator);\r
 \r
+        mStartButton = (Button) findViewById(R.id.startSetup);\r
+\r
+        mEnrollee.setChecked(false);\r
+        mMediator.setChecked(false);\r
+        mStartButton.setEnabled(false);\r
+\r
+        /* Create EnrolleeDevice Factory instance */\r
+        mDeviceFactory = EnrolleeDeviceFactory\r
+                .newInstance(getApplicationContext());\r
+        addListenerForStartAP();\r
+        addListenerForStopAP();\r
 \r
+        // default values for target network\r
+        mEnrollerSsidText.setText(R.string.target_default_ssid);\r
+        mEnrollerPasswordPassText.setText(R.string.target_default_pwd);\r
+        mSoftAPSsidText.setEnabled(false);\r
+        mSoftAPPassText.setEnabled(false);\r
 \r
-       /* Create Easy Setup Service instance*/\r
-        mEasySetupService = EasySetupService.getInstance(getApplicationContext(),\r
-                new EasySetupStatus() {\r
+        mEnrollee.setOnClickListener(new OnClickListener() {\r
+            @Override\r
+            public void onClick(View v) {\r
+\r
+                mMediator.setChecked(false);\r
+                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(\r
+                        MainActivity.this);\r
+                alertDialogBuilder.setTitle("Network selection");\r
+                alertDialogBuilder\r
+                        .setMessage("Proceed to select the network!")\r
+                        .setCancelable(false)\r
+                        .setPositiveButton("Yes",\r
+                                new DialogInterface.OnClickListener() {\r
+                                    public void onClick(DialogInterface dialog,\r
+                                            int id) {\r
+                                        MainActivity.this\r
+                                                .startActivity(new Intent(\r
+                                                        WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+\r
+                                        mStartButton.setEnabled(true);\r
+                                        mSoftAP.setVisibility(View.INVISIBLE);\r
+                                        mDeviceInfo\r
+                                                .setVisibility(View.INVISIBLE);\r
+                                        mDeviceText\r
+                                                .setVisibility(View.INVISIBLE);\r
+                                    }\r
+                                })\r
+                        .setNegativeButton("No",\r
+                                new DialogInterface.OnClickListener() {\r
+                                    public void onClick(DialogInterface dialog,\r
+                                            int id) {\r
+                                        mEnrollee.setChecked(false);\r
+                                        mStartButton.setEnabled(false);\r
+                                        dialog.cancel();\r
+                                    }\r
+                                });\r
+                alertDialogBuilder.create().show();\r
+            }\r
+        });\r
+\r
+        mMediator.setOnClickListener(new OnClickListener() {\r
+            @Override\r
+            public void onClick(View v) {\r
+                mStartButton.setEnabled(true);\r
+                mEnrollee.setChecked(false);\r
+                mSoftAPSsidText.setEnabled(false);\r
+                mSoftAPPassText.setEnabled(false);\r
+                mSoftAPSsidText.setText(R.string.softAP_ssid);\r
+                mSoftAPPassText.setText(R.string.softAP_pwd);\r
+                mDeviceIpTextView.setText(R.string.not_available);\r
+                mDeviceMacTextView.setText(R.string.not_available);\r
+                mResultTextView.setText(R.string.not_started);\r
+                mSoftAP.setVisibility(View.VISIBLE);\r
+                mDeviceInfo.setVisibility(View.VISIBLE);\r
+                mDeviceText.setVisibility(View.VISIBLE);\r
+            }\r
+        });\r
+\r
+        /* Create Easy Setup Service instance */\r
+        mEasySetupService = EasySetupService.getInstance(\r
+                getApplicationContext(), new EasySetupStatus() {\r
 \r
                     @Override\r
                     public void onFinished(final EnrolleeDevice enrolledevice) {\r
-                        Log.i("MainActivity", "onFinished() is received " + enrolledevice\r
-                                .isSetupSuccessful());\r
+                        Log.i("MainActivity", "onFinished() is received "\r
+                                + enrolledevice.isSetupSuccessful());\r
                         if (enrolledevice.isSetupSuccessful()) {\r
                             mHandler.sendEmptyMessage(SUCCESS);\r
                         } else {\r
@@ -119,49 +219,12 @@ public class MainActivity extends Activity {
                         Log.i("MainActivity", "onProgress() is received ");\r
                         mHandler.sendEmptyMessage(STATE_CHANGED);\r
                     }\r
-\r
                 });\r
-\r
-        /* Create EnrolleeDevice Factory instance*/\r
-        mDeviceFactory = EnrolleeDeviceFactory.newInstance(getApplicationContext());\r
-\r
-        /* Create a device using Factory instance*/\r
-        mDevice = mDeviceFactory.newEnrolleeDevice(getOnBoardingWifiConfig(),\r
-                getEnrollerWifiConfig());\r
-\r
-        addListenerForStartAP();\r
-        addListenerForStopAP();\r
     }\r
 \r
-    public WiFiProvConfig getEnrollerWifiConfig() {\r
-        /* Provide the credentials for the Mediator Soft AP to be connected by Enrollee*/\r
-        mWiFiProvConfig = new WiFiProvConfig("hub2.4G", "11112222");\r
-        mEnrolleeSsidText.setText("hub2.4G");\r
-        mmEnrolleePasswordPassText.setText("11112222");\r
-\r
-        return mWiFiProvConfig;\r
-    }\r
-\r
-    public WiFiOnBoardingConfig getOnBoardingWifiConfig() {\r
-        mWiFiOnBoardingConfig = new WiFiOnBoardingConfig();\r
-\r
-        /* Provide the target credentials to be provisioned to the Enrollee by Mediator*/\r
-        mWiFiOnBoardingConfig.setSSId("EasySetup123");\r
-        mWiFiOnBoardingConfig.setSharedKey("EasySetup123");\r
-        mWiFiOnBoardingConfig.setAuthAlgo(WifiConfiguration.AuthAlgorithm.OPEN);\r
-        mWiFiOnBoardingConfig.setKms(WifiConfiguration.KeyMgmt.WPA_PSK);\r
-\r
-        // Updating the UI with default credentials\r
-        mSsidText.setText("EasySetup123");\r
-        mPassText.setText("EasySetup123");\r
-\r
-        return mWiFiOnBoardingConfig;\r
-    }\r
-\r
-\r
     public void onDestroy() {\r
         super.onDestroy();\r
-        /*Reset the Easy setup process*/\r
+        /* Reset the Easy setup process */\r
         if (mEasySetupService != null) {\r
             mEasySetupService.finish();\r
         }\r
@@ -169,50 +232,69 @@ public class MainActivity extends Activity {
 \r
     public void addListenerForStartAP() {\r
         mStartButton = (Button) findViewById(R.id.startSetup);\r
-\r
         mStartButton.setOnClickListener(new OnClickListener() {\r
             @Override\r
             public void onClick(View arg0) {\r
                 try {\r
+                    if (mEnrollee.isChecked()) {\r
+                        // Check the wifi connectivity\r
+                        if (!isConnectedTowifi()) {\r
+                            return;\r
+                        }\r
 \r
+                        mEnrollerSsid = mEnrollerSsidText.getText().toString();\r
+                        mEnrollerPassword = mEnrollerPasswordPassText.getText()\r
+                                .toString();\r
+\r
+                        mWiFiProvConfig = new WiFiProvConfig(mEnrollerSsid,\r
+                                mEnrollerPassword);\r
+                        mDevice = mDeviceFactory\r
+                                .newEnrolleeDevice(mWiFiProvConfig);\r
+                        mEasySetupService.startSetup(mDevice);\r
+                    } else {\r
+                        mSoftAPSsid = mSoftAPSsidText.getText().toString();\r
+                        mSoftAPPassword = mSoftAPPassText.getText().toString();\r
+                        mEnrollerSsid = mEnrollerSsidText.getText().toString();\r
+                        mEnrollerPassword = mEnrollerPasswordPassText.getText()\r
+                                .toString();\r
+\r
+                        mWiFiProvConfig = new WiFiProvConfig(mEnrollerSsid,\r
+                                mEnrollerPassword);\r
+                        mWiFiOnBoardingConfig = new WiFiOnBoardingConfig();\r
+\r
+                        /*\r
+                         * Provide the target credentials to be provisioned to\r
+                         * the Enrollee by Mediator\r
+                         */\r
+                        mWiFiOnBoardingConfig.setSSId("EasySetup123");\r
+                        mWiFiOnBoardingConfig.setSharedKey("EasySetup123");\r
+                        mWiFiOnBoardingConfig\r
+                                .setAuthAlgo(WifiConfiguration.AuthAlgorithm.OPEN);\r
+                        mWiFiOnBoardingConfig\r
+                                .setKms(WifiConfiguration.KeyMgmt.WPA_PSK);\r
+                        mDevice = mDeviceFactory.newEnrolleeDevice(\r
+                                mWiFiProvConfig, mWiFiOnBoardingConfig);\r
+                        mEasySetupService.startSetup(mDevice);\r
+                    }\r
                     mProgressbar.setVisibility(View.VISIBLE);\r
                     mProgressbar.setIndeterminate(true);\r
                     mStartButton.setEnabled(false);\r
                     mResultTextView.setText(R.string.running);\r
 \r
-                    //Reset Device information\r
+                    // Reset Device information\r
                     mDeviceIpTextView.setText(R.string.not_available);\r
                     mDeviceMacTextView.setText(R.string.not_available);\r
-\r
-\r
-                    String ssid = mSsidText.getText().toString();\r
-                    String password = mPassText.getText().toString();\r
-\r
-                    String enrolleeSsid = mEnrolleeSsidText.getText().toString();\r
-                    String enrolleePassword = mmEnrolleePasswordPassText.getText().toString();\r
-\r
-                    mWiFiProvConfig = new WiFiProvConfig(enrolleeSsid, enrolleePassword);\r
-\r
-                    mWiFiOnBoardingConfig.setSSId(ssid);\r
-                    mWiFiOnBoardingConfig.setSharedKey(password);\r
-\r
-\r
-                    mEasySetupService.startSetup(mDevice);\r
-\r
                     mStopButton.setEnabled(true);\r
 \r
-\r
-                } catch (IOException e) {\r
+                } catch (Exception e) {\r
                     e.printStackTrace();\r
                 }\r
-\r
             }\r
         });\r
     }\r
 \r
     public void addListenerForStopAP() {\r
         mStopButton = (Button) findViewById(R.id.stopSetup);\r
-\r
         mStopButton.setOnClickListener(new OnClickListener() {\r
             @Override\r
             public void onClick(View arg0) {\r
@@ -226,6 +308,45 @@ public class MainActivity extends Activity {
         });\r
     }\r
 \r
+    private boolean isConnectedTowifi() {\r
+\r
+        AlertDialog dialog;\r
+        ConnectivityManager connManager;\r
+        NetworkInfo wifi;\r
+\r
+        // Check the wifi connectivity\r
+        connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);\r
+        wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);\r
+        if (false == wifi.isConnected()) {\r
+\r
+            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);\r
+            dialogBuilder.setTitle("Error");\r
+            dialogBuilder\r
+                    .setMessage("WiFi is not enabled/connected! Please connect the WiFi..");\r
+            dialogBuilder.setCancelable(false);\r
+            dialogBuilder.setPositiveButton("OK",\r
+                    new DialogInterface.OnClickListener() {\r
+                        @Override\r
+                        public void onClick(DialogInterface dialog, int which) {\r
+\r
+                            MainActivity.this.startActivity(new Intent(\r
+                                    WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+\r
+                        }\r
+                    });\r
+            dialogBuilder.setNegativeButton("Cancel",\r
+                    new DialogInterface.OnClickListener() {\r
+                        @Override\r
+                        public void onClick(DialogInterface dialog, int which) {\r
+                        }\r
+                    });\r
+\r
+            dialog = dialogBuilder.create();\r
+            dialog.show();\r
+            return false;\r
+        }\r
+        return true;\r
+    }\r
 \r
     class ThreadHandler extends Handler {\r
         @Override\r
@@ -247,7 +368,8 @@ public class MainActivity extends Activity {
                     mDeviceIpTextView.setText(connection.getIp());\r
                     mDeviceMacTextView.setText(connection.getHardwareAddress());\r
 \r
-                    Toast.makeText(getApplicationContext(), resultMsg, Toast.LENGTH_SHORT).show();\r
+                    Toast.makeText(getApplicationContext(), resultMsg,\r
+                            Toast.LENGTH_SHORT).show();\r
                     break;\r
                 }\r
                 case FAILED: {\r
@@ -258,20 +380,18 @@ public class MainActivity extends Activity {
                     mProgressbar.setVisibility(View.INVISIBLE);\r
                     String resultMsg = "Device configuration failed";\r
                     mResultTextView.setText(R.string.failed);\r
-                    Toast.makeText(getApplicationContext(), resultMsg, Toast.LENGTH_SHORT).show();\r
+                    Toast.makeText(getApplicationContext(), resultMsg,\r
+                            Toast.LENGTH_SHORT).show();\r
                     break;\r
                 }\r
 \r
                 case STATE_CHANGED: {\r
                     String resultMsg = "Device state changed";\r
-                    Toast.makeText(getApplicationContext(), resultMsg, Toast.LENGTH_SHORT).show();\r
+                    Toast.makeText(getApplicationContext(), resultMsg,\r
+                            Toast.LENGTH_SHORT).show();\r
                     break;\r
                 }\r
-\r
             }\r
-\r
-\r
         }\r
     }\r
-\r
 }\r
index 4c2e087..0620a58 100644 (file)
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:layout_marginTop="5dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:textStyle="bold"
+            android:textColor="@android:color/holo_red_dark"
+            android:textSize="20dp"
+            android:text="Soft AP   "/>
+
+        <RadioButton
+
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Enrollee  "
+            android:id="@+id/enrollee"
+            android:textStyle="bold"
+            android:layout_gravity="center_horizontal"
+            android:checked="false"
+            />
+
+        <RadioButton
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Mediator"
+            android:id="@+id/mediator"
+            android:textStyle="bold"
+            android:layout_gravity="center_horizontal"
+            android:checked="false"
+            />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
         android:orientation="horizontal">
 
 
@@ -45,7 +81,7 @@
             android:layout_marginRight="30dp"
             android:text="@string/not_started"
             android:textColor="@android:color/background_light"
-            android:textSize="20dp" />
+            android:textSize="10dp" />
 
     </LinearLayout>
 
@@ -54,7 +90,7 @@
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
         android:layout_gravity="center"
-        android:layout_marginTop="10dp"
+        android:layout_marginTop="5dp"
         android:orientation="vertical">
 
         <TextView
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginTop="10dp"
+            android:layout_marginTop="5dp"
             android:text="Enter Enroller's Password" />
 
 
 
 
     <LinearLayout
+        android:id="@+id/softAP"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
         android:layout_gravity="center"
-        android:layout_marginTop="10dp"
+        android:layout_marginTop="5dp"
         android:orientation="vertical">
 
         <TextView
             android:id="@+id/textView2"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginTop="10dp"
+            android:layout_marginTop="5dp"
             android:text="Enter SoftAP PWD" />
 
 
 
 
     <TextView
+        android:id="@+id/textViewDeviceinfo"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center_horizontal"
         android:textAppearance="?android:attr/textAppearanceMedium" />
 
     <RelativeLayout
+        android:id="@+id/deviceInfo"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
-            android:text="IP Address"
+            android:text="IP Address : "
             android:textAppearance="?android:attr/textAppearanceSmall" />
 
         <TextView
             android:layout_height="wrap_content"
             android:layout_below="@id/ipAddrLable"
             android:layout_gravity="center_horizontal"
-            android:text="MAC Address"
+            android:text="MAC Address : "
             android:textAppearance="?android:attr/textAppearanceSmall" />
 
         <TextView
     <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_centerHorizontal="true"
-        android:layout_gravity="center"
-        android:layout_marginTop="20dp"
-        android:orientation="horizontal">
+        android:layout_marginTop="5dp"
+        android:orientation="horizontal"
+        android:weightSum="1">
 
         <Button
             android:id="@+id/startSetup"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
+            android:layout_width="160dp"
+            android:layout_height="50dp"
             android:layout_alignParentTop="true"
-            android:layout_centerHorizontal="true"
             android:layout_margin="10dp"
             android:layout_marginTop="20dp"
             android:elegantTextHeight="true"
 
         <Button
             android:id="@+id/stopSetup"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_below="@+id/startSetup"
-            android:layout_centerHorizontal="true"
+            android:layout_width="160dp"
+            android:layout_height="50dp"
             android:layout_margin="10dp"
             android:elegantTextHeight="true"
             android:enabled="false"
             android:text="@string/stopSetup"
             android:textAllCaps="false"
-            android:textSize="18sp" />
+            android:textSize="18sp"
+            />
 
     </LinearLayout>
 
index 8383bac..c554cb7 100644 (file)
@@ -4,10 +4,10 @@
     <string name="action_settings">Settings</string>
     <string name="textview2">Device Information</string>
     <string name="textview1"> -- empty -- </string>
-    <string name="scan_qr_code">Scan QR Code</string> 
-       <string name="start_easy_setup">Start Easy Setup</string> 
+    <string name="scan_qr_code">Scan QR Code</string>
+       <string name="start_easy_setup">Start Easy Setup</string>
        <string name="start_soft_ap">Start Wi-Fi Soft AP</string>
-       <string name="stop_soft_ap">Stop Soft AP</string>  
+       <string name="stop_soft_ap">Stop Soft AP</string>
     <string name="provision_device">Provision Connected Device</string>
 
     <string name="startSetup">Start Setup</string>
     <string name="test_status">Device configuration</string>
     <string name="running">Running</string>
     <string name="stopped">Stopped</string>
+    <string name="softAP_ssid">EasySetup123</string>
+    <string name="softAP_pwd">EasySetup123</string>
+    <string name="target_default_ssid">DLNA_LISMORE1</string>
+    <string name="target_default_pwd">dlna@010203</string>
     <string name="not_available">Not available</string>
 
 
index 5e764a7..826bffa 100755 (executable)
@@ -102,14 +102,12 @@ public class EasySetupService {
 \r
         mEnrolleeDeviceList.add(enrolledevice);\r
 \r
-\r
         // Starts the provisioning directly if the device is already on boarded on the network.\r
         if (enrolledevice.onBoarded()) {\r
             enrolledevice.startProvisioning(mProvisioningCallback);\r
             return;\r
         }\r
         enrolledevice.mState = EnrolleeState.DEVICE_ON_BOARDING_STATE;\r
-\r
         mCallback.onProgress(enrolledevice);\r
         enrolledevice.startOnBoarding(new OnBoardingCallback() {\r
 \r
@@ -121,6 +119,11 @@ public class EasySetupService {
                     enrolledevice.mState = EnrolleeState.DEVICE_ON_BOARDED_STATE;\r
                     mCallback.onProgress(enrolledevice);\r
                     enrolledevice.setConnection(connection);\r
+\r
+                    /* Delay is set according to Soft AP host and Mediator platform;\r
+                    *  For Android with Soft AP it is 2000 ms\r
+                    */\r
+                    delayProvisioning(connection);\r
                     enrolledevice.startProvisioning(mProvisioningCallback);\r
                 } else {\r
                     enrolledevice.mState = EnrolleeState.DEVICE_INIT_STATE;\r
@@ -185,4 +188,15 @@ public class EasySetupService {
 \r
 \r
     }\r
+\r
+    private void delayProvisioning(OnBoardingConnection conn) {\r
+        if (((IpOnBoardingConnection)conn).getThrottlingDelay()>0) {\r
+            try {\r
+                Log.i(TAG, "waiting for 20 seconds to start provisioning");\r
+                Thread.sleep(20000);//Sleep for allowing thin device to start the services\r
+            } catch (InterruptedException e) {\r
+                e.printStackTrace();\r
+            }\r
+        }\r
+    }\r
 }
\ No newline at end of file
index cdac2c5..11d512c 100755 (executable)
@@ -159,7 +159,7 @@ public abstract class EnrolleeDevice {
      */\r
 \r
     protected boolean onBoarded() {\r
-        return (mState == EnrolleeState.DEVICE_PROVISIONING_STATE) ? true : false;\r
+        return (mState == EnrolleeState.DEVICE_ON_BOARDED_STATE) ? true : false;\r
     }\r
 \r
 \r
index de7c7fb..9f62ca1 100755 (executable)
@@ -53,16 +53,24 @@ public class EnrolleeDeviceFactory {
      * @return Instance of the Enrollee device created natively.
      */
 
-    public EnrolleeDevice newEnrolleeDevice(OnBoardingConfig onboardingConfig, ProvisioningConfig provConfig) {
+    public EnrolleeDevice newEnrolleeDevice(ProvisioningConfig provConfig, OnBoardingConfig onboardingConfig) {
 
         if (onboardingConfig.getConnType() != OnBoardingConfig.ConnType.WiFi) {
             throw new IllegalArgumentException("OnBoarding configuration is not supported");
         }
 
-        EnrolleeDevice enrolleeDevice;
-        enrolleeDevice = new EnrolleeDeviceWiFiOnboarding(mContext, onboardingConfig, provConfig);
+        return new EnrolleeDeviceWiFiOnboarding(mContext, onboardingConfig, provConfig);
+    }
 
-        return enrolleeDevice;
+    /**
+     * This method create & returns instance of Enrollee device of supported configuration
+     * [When SoftAP is going to be created on Enrollee side]
+     *
+     * @param provConfig       Contains details about the network to which Enrollee device is going to connect.
+     * @return Instance of the Enrollee device created natively.
+     */
+    public EnrolleeDevice newEnrolleeDevice(ProvisioningConfig provConfig){
+        return new EnrolleeDeviceWiFiOnboarding(mContext, new IpOnBoardingConnection(true), provConfig);
     }
 
 }
index 37e1b1d..fb50a0e 100755 (executable)
@@ -97,6 +97,15 @@ public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice {
         mWifiSoftAPManager = new WiFiSoftAPManager(mContext);\r
     }\r
 \r
+    protected EnrolleeDeviceWiFiOnboarding(Context context, IpOnBoardingConnection conn,\r
+                                           ProvisioningConfig provConfig) {\r
+        super(new WiFiOnBoardingConfig(), provConfig);\r
+        mContext = context;\r
+        mConnection = conn;\r
+        mState = EnrolleeState.DEVICE_ON_BOARDED_STATE;\r
+        mWifiSoftAPManager = new WiFiSoftAPManager(mContext);\r
+    }\r
+\r
     @Override\r
     protected void startOnBoardingProcess() {\r
         Log.i(TAG, "Starting on boarding process");\r
@@ -132,12 +141,6 @@ public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice {
 \r
     @Override\r
     protected void startProvisioningProcess(OnBoardingConnection conn) {\r
-        try {\r
-            Log.i(TAG, "waiting for 20 seconds to start provisioning");\r
-            Thread.sleep(20000);//Sleep for allowing thin device to start the services\r
-        } catch (InterruptedException e) {\r
-            e.printStackTrace();\r
-        }\r
 \r
         mState = EnrolleeState.DEVICE_PROVISIONING_STATE;\r
         mProvisioningCallback.onProgress(this);\r
@@ -171,4 +174,6 @@ public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice {
                     .getSsId(), wifiProvConfig.getPassword(), 1);\r
         }\r
     }\r
+\r
+\r
 }\r
index 259514d..8d4971f 100755 (executable)
@@ -29,6 +29,25 @@ public class IpOnBoardingConnection implements OnBoardingConnection {
     private String mHardwareAddress;\r
     private String mDeviceName;\r
 \r
+    /**\r
+     * @mThrottlingDelay\r
+     * After creating the Soft AP at Mediator & on-boarding the-\r
+     * -Enrollee device on it provisioning needs to be delayed by at least 2000 ms for Android Mediator\r
+     */\r
+    private int mThrottlingDelay = 2000 ;\r
+\r
+    int getThrottlingDelay() {\r
+        return mThrottlingDelay;\r
+    }\r
+\r
+    IpOnBoardingConnection(boolean enrolleeOnboarded) {\r
+        mThrottlingDelay = 0;\r
+        mIp = "0.0.0.01";\r
+        mIsConnected = enrolleeOnboarded; // Always true for this constructor\r
+    }\r
+\r
+    IpOnBoardingConnection(){}\r
+\r
     public void setHardwareAddress(String address) {\r
         mHardwareAddress = address;\r
     }\r
index 8ceb278..cc38694 100644 (file)
@@ -95,7 +95,7 @@ OCStackResult StartProvisioning(const EnrolleeNWProvInfo *netInfo) {
     snprintf(findQuery, sizeof(findQuery) - 1, UNICAST_PROVISIONING_QUERY,
              netInfo->netAddressInfo.WIFI.ipAddress, IP_PORT);
 #else
-    OICStrcpy(findQuery, sizeof(UNICAST_PROVISIONING_QUERY), UNICAST_PROVISIONING_QUERY);
+    OICStrcpy(findQuery, sizeof(findQuery)-1, UNICAST_PROVISIONING_QUERY);
 #endif
 
     return StartProvisioningProcess(netInfo, cbData, findQuery);