\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
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
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
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
\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
});\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
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
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
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">
android:layout_marginRight="30dp"
android:text="@string/not_started"
android:textColor="@android:color/background_light"
- android:textSize="20dp" />
+ android:textSize="10dp" />
</LinearLayout>
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>