2 * ***************************************************************
\r
4 * Copyright 2015 Samsung Electronics All Rights Reserved.
\r
8 * Licensed under the Apache License, Version 2.0 (the "License");
\r
9 * you may not use this file except in compliance with the License.
\r
10 * You may obtain a copy of the License at
\r
12 * http://www.apache.org/licenses/LICENSE-2.0
\r
14 * Unless required by applicable law or agreed to in writing, software
\r
15 * distributed under the License is distributed on an "AS IS" BASIS,
\r
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
17 * See the License for the specific language governing permissions and
\r
18 * limitations under the License.
\r
20 * ****************************************************************
\r
23 package org.iotivity.service.easysetup;
\r
25 import java.io.IOException;
\r
27 import org.iotivity.service.easysetup.core.EasySetupService;
\r
28 import org.iotivity.service.easysetup.core.EasySetupStatus;
\r
29 import org.iotivity.service.easysetup.core.EnrolleeDevice;
\r
30 import org.iotivity.service.easysetup.core.EnrolleeState;
\r
31 import org.iotivity.service.easysetup.core.IpOnBoardingConnection;
\r
32 import org.iotivity.service.easysetup.impl.EnrolleeDeviceFactory;
\r
33 import org.iotivity.service.easysetup.impl.WiFiOnBoardingConfig;
\r
34 import org.iotivity.service.easysetup.impl.WiFiProvConfig;
\r
36 import android.app.Activity;
\r
37 import android.content.Intent;
\r
38 import android.graphics.Bitmap;
\r
39 import android.net.wifi.WifiConfiguration;
\r
40 import android.os.Bundle;
\r
41 import android.os.Handler;
\r
42 import android.os.Message;
\r
43 import android.util.Log;
\r
44 import android.view.View;
\r
45 import android.view.View.OnClickListener;
\r
46 import android.widget.Button;
\r
47 import android.widget.EditText;
\r
48 import android.widget.ImageView;
\r
49 import android.widget.ProgressBar;
\r
50 import android.widget.TextView;
\r
51 import android.widget.Toast;
\r
53 public class MainActivity extends Activity {
\r
56 /*Status to update the UI */
\r
57 public static final int SUCCESS = 0;
\r
58 public static final int FAILED = 1;
\r
59 public static final int STATE_CHANGED = 2;
\r
61 static final int REQUEST_IMAGE_CAPTURE = 1;
\r
62 ImageView imageView;
\r
67 EditText mEnrolleeSsidText;
\r
68 EditText mmEnrolleePasswordPassText;
\r
71 TextView mDeviceIpTextView;
\r
72 TextView mDeviceMacTextView;
\r
75 TextView mResultTextView;
\r
76 ProgressBar mProgressbar;
\r
77 Button mStartButton;
\r
79 Handler mHandler = new ThreadHandler();
\r
82 * Objects to be instantiated by the programmer
\r
84 WiFiProvConfig mWiFiProvConfig;
\r
85 WiFiOnBoardingConfig mWiFiOnBoardingConfig;
\r
86 EasySetupService mEasySetupService;
\r
87 EnrolleeDeviceFactory mDeviceFactory;
\r
88 EnrolleeDevice mDevice;
\r
91 protected void onCreate(Bundle savedInstanceState) {
\r
92 super.onCreate(savedInstanceState);
\r
93 setContentView(R.layout.activity_main);
\r
95 /* Initialize widgets to get user input for target network's SSID & password*/
\r
96 mSsidText = (EditText) findViewById(R.id.ssid);
\r
97 mPassText = (EditText) findViewById(R.id.password);
\r
98 mEnrolleeSsidText = (EditText) findViewById(R.id.enrolleeSsid);
\r
99 mmEnrolleePasswordPassText = (EditText) findViewById(R.id.enrolleePass);
\r
100 mDeviceIpTextView = (TextView) findViewById(R.id.ipAddr);
\r
101 mDeviceMacTextView = (TextView) findViewById(R.id.hardAddr);
\r
103 mResultTextView = (TextView) findViewById(R.id.status);
\r
104 mProgressbar = (ProgressBar) findViewById(R.id.progressBar);
\r
109 /* Create Easy Setup Service instance*/
\r
110 mEasySetupService = EasySetupService.getInstance(getApplicationContext(),
\r
111 new EasySetupStatus() {
\r
114 public void onFinished(final EnrolleeDevice enrolledevice) {
\r
115 Log.i("MainActivity", "onFinished() is received " + enrolledevice
\r
116 .isSetupSuccessful());
\r
117 if (enrolledevice.isSetupSuccessful()) {
\r
118 mHandler.sendEmptyMessage(SUCCESS);
\r
120 mHandler.sendEmptyMessage(FAILED);
\r
125 public void onProgress(EnrolleeState state) {
\r
126 Log.i("MainActivity", "onProgress() is received ");
\r
127 mHandler.sendEmptyMessage(STATE_CHANGED);
\r
132 /* Create EnrolleeDevice Factory instance*/
\r
133 mDeviceFactory = EnrolleeDeviceFactory.newInstance(getApplicationContext());
\r
135 /* Create a device using Factory instance*/
\r
136 mDevice = mDeviceFactory.newEnrolleeDevice(getOnBoardingWifiConfig(),
\r
137 getEnrollerWifiConfig());
\r
139 addListenerForStartAP();
\r
140 addListenerForStopAP();
\r
143 public WiFiProvConfig getEnrollerWifiConfig() {
\r
144 /* Provide the credentials for the Mediator Soft AP to be connected by Enrollee*/
\r
145 mWiFiProvConfig = new WiFiProvConfig("hub2.4G", "11112222");
\r
146 mEnrolleeSsidText.setText("hub2.4G");
\r
147 mmEnrolleePasswordPassText.setText("11112222");
\r
149 return mWiFiProvConfig;
\r
152 public WiFiOnBoardingConfig getOnBoardingWifiConfig() {
\r
153 mWiFiOnBoardingConfig = new WiFiOnBoardingConfig();
\r
155 /* Provide the target credentials to be provisioned to the Enrollee by Mediator*/
\r
156 mWiFiOnBoardingConfig.setSSId("EasySetup123");
\r
157 mWiFiOnBoardingConfig.setSharedKey("EasySetup123");
\r
158 mWiFiOnBoardingConfig.setAuthAlgo(WifiConfiguration.AuthAlgorithm.OPEN);
\r
159 mWiFiOnBoardingConfig.setKms(WifiConfiguration.KeyMgmt.WPA_PSK);
\r
161 // Updating the UI with default credentials
\r
162 mSsidText.setText("EasySetup123");
\r
163 mPassText.setText("EasySetup123");
\r
165 return mWiFiOnBoardingConfig;
\r
169 public void onDestroy() {
\r
171 /*Reset the Easy setup process*/
\r
172 if(mEasySetupService != null)
\r
174 mEasySetupService.finish();
\r
178 public void addListenerForStartAP() {
\r
179 mStartButton = (Button) findViewById(R.id.startSetup);
\r
181 mStartButton.setOnClickListener(new OnClickListener() {
\r
183 public void onClick(View arg0) {
\r
186 mProgressbar.setVisibility(View.VISIBLE);
\r
187 mProgressbar.setIndeterminate(true);
\r
188 mStartButton.setEnabled(false);
\r
189 mResultTextView.setText(R.string.running);
\r
191 //Reset Device information
\r
192 mDeviceIpTextView.setText(R.string.not_available);
\r
193 mDeviceMacTextView.setText(R.string.not_available);
\r
196 String ssid = mSsidText.getText().toString();
\r
197 String password = mPassText.getText().toString();
\r
199 String enrolleeSsid = mEnrolleeSsidText.getText().toString();
\r
200 String enrolleePassword = mmEnrolleePasswordPassText.getText().toString();
\r
202 mWiFiProvConfig = new WiFiProvConfig(enrolleeSsid, enrolleePassword);
\r
204 mWiFiOnBoardingConfig.setSSId(ssid);
\r
205 mWiFiOnBoardingConfig.setSharedKey(password);
\r
208 mEasySetupService.startSetup(mDevice);
\r
210 mStopButton.setEnabled(true);
\r
213 } catch (IOException e) {
\r
214 e.printStackTrace();
\r
221 public void addListenerForStopAP() {
\r
222 mStopButton = (Button) findViewById(R.id.stopSetup);
\r
224 mStopButton.setOnClickListener(new OnClickListener() {
\r
226 public void onClick(View arg0) {
\r
227 mStartButton.setEnabled(true);
\r
228 mStopButton.setEnabled(false);
\r
229 mResultTextView.setText(R.string.stopped);
\r
230 mProgressbar.setIndeterminate(false);
\r
231 mProgressbar.setVisibility(View.INVISIBLE);
\r
232 mEasySetupService.stopSetup(mDevice);
\r
238 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
\r
239 if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
\r
240 Bundle extras = data.getExtras();
\r
241 Bitmap imageBitmap = (Bitmap) extras.get("data");
\r
242 imageView.setImageBitmap(imageBitmap);
\r
246 class ThreadHandler extends Handler {
\r
248 public void handleMessage(Message msg) {
\r
250 switch (msg.what) {
\r
253 mProgressbar.setIndeterminate(false);
\r
254 mStopButton.setEnabled(false);
\r
255 mStartButton.setEnabled(true);
\r
256 mProgressbar.setVisibility(View.INVISIBLE);
\r
257 String resultMsg = "Device configured successfully";
\r
258 mResultTextView.setText(R.string.success);
\r
260 /* Update device information on the Ui */
\r
261 IpOnBoardingConnection connection = (IpOnBoardingConnection) mDevice
\r
263 mDeviceIpTextView.setText(connection.getIp());
\r
264 mDeviceMacTextView.setText(connection.getHardwareAddress());
\r
266 Toast.makeText(getApplicationContext(), resultMsg, Toast.LENGTH_SHORT).show();
\r
271 mProgressbar.setIndeterminate(false);
\r
272 mStopButton.setEnabled(false);
\r
273 mStartButton.setEnabled(true);
\r
274 mProgressbar.setVisibility(View.INVISIBLE);
\r
275 String resultMsg = "Device configuration failed";
\r
276 mResultTextView.setText(R.string.failed);
\r
277 Toast.makeText(getApplicationContext(), resultMsg, Toast.LENGTH_SHORT).show();
\r
281 case STATE_CHANGED: {
\r
282 String resultMsg = "Device state changed";
\r
283 Toast.makeText(getApplicationContext(), resultMsg, Toast.LENGTH_SHORT).show();
\r