bb3f15d8eb9abce1d7c5ba2febf65225ec1977ba
[platform/upstream/iotivity.git] / service / easy-setup / sampleapp / android / EasySetup / app / src / main / java / org / iotivity / service / easysetup / MainActivity.java
1 /**\r
2  * ***************************************************************\r
3  * <p/>\r
4  * Copyright 2015 Samsung Electronics All Rights Reserved.\r
5  * <p/>\r
6  * <p/>\r
7  * <p/>\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
11  * <p/>\r
12  * http://www.apache.org/licenses/LICENSE-2.0\r
13  * <p/>\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
19  * <p/>\r
20  * ****************************************************************\r
21  */\r
22 \r
23 package org.iotivity.service.easysetup;\r
24 \r
25 import java.io.IOException;\r
26 \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
35 \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
52 \r
53 public class MainActivity extends Activity {\r
54 \r
55 \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
60 \r
61     static final int REQUEST_IMAGE_CAPTURE = 1;\r
62     ImageView imageView;\r
63 \r
64     EditText mSsidText;\r
65     EditText mPassText;\r
66 \r
67     EditText mEnrolleeSsidText;\r
68     EditText mmEnrolleePasswordPassText;\r
69 \r
70 \r
71     TextView mDeviceIpTextView;\r
72     TextView mDeviceMacTextView;\r
73 \r
74 \r
75     TextView mResultTextView;\r
76     ProgressBar mProgressbar;\r
77     Button mStartButton;\r
78     Button mStopButton;\r
79     Handler mHandler = new ThreadHandler();\r
80 \r
81     /**\r
82      * Objects to be instantiated by the programmer\r
83      */\r
84     WiFiProvConfig mWiFiProvConfig;\r
85     WiFiOnBoardingConfig mWiFiOnBoardingConfig;\r
86     EasySetupService mEasySetupService;\r
87     EnrolleeDeviceFactory mDeviceFactory;\r
88     EnrolleeDevice mDevice;\r
89 \r
90     @Override\r
91     protected void onCreate(Bundle savedInstanceState) {\r
92         super.onCreate(savedInstanceState);\r
93         setContentView(R.layout.activity_main);\r
94 \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
102 \r
103         mResultTextView = (TextView) findViewById(R.id.status);\r
104         mProgressbar = (ProgressBar) findViewById(R.id.progressBar);\r
105 \r
106 \r
107 \r
108 \r
109        /* Create Easy Setup Service instance*/\r
110         mEasySetupService = EasySetupService.getInstance(getApplicationContext(),\r
111                 new EasySetupStatus() {\r
112 \r
113                     @Override\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
119                         } else {\r
120                             mHandler.sendEmptyMessage(FAILED);\r
121                         }\r
122                     }\r
123 \r
124                     @Override\r
125                     public void onProgress(EnrolleeState state) {\r
126                         Log.i("MainActivity", "onProgress() is received ");\r
127                         mHandler.sendEmptyMessage(STATE_CHANGED);\r
128                     }\r
129 \r
130                 });\r
131 \r
132         /* Create EnrolleeDevice Factory instance*/\r
133         mDeviceFactory = EnrolleeDeviceFactory.newInstance(getApplicationContext());\r
134 \r
135         /* Create a device using Factory instance*/\r
136         mDevice = mDeviceFactory.newEnrolleeDevice(getOnBoardingWifiConfig(),\r
137                 getEnrollerWifiConfig());\r
138 \r
139         addListenerForStartAP();\r
140         addListenerForStopAP();\r
141     }\r
142 \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
148 \r
149         return mWiFiProvConfig;\r
150     }\r
151 \r
152     public WiFiOnBoardingConfig getOnBoardingWifiConfig() {\r
153         mWiFiOnBoardingConfig = new WiFiOnBoardingConfig();\r
154 \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
160 \r
161         // Updating the UI with default credentials\r
162         mSsidText.setText("EasySetup123");\r
163         mPassText.setText("EasySetup123");\r
164 \r
165         return mWiFiOnBoardingConfig;\r
166     }\r
167 \r
168 \r
169     public void onDestroy() {\r
170         super.onDestroy();\r
171         /*Reset the Easy setup process*/\r
172         if(mEasySetupService != null)\r
173         {\r
174             mEasySetupService.finish();\r
175         }\r
176     }\r
177 \r
178     public void addListenerForStartAP() {\r
179         mStartButton = (Button) findViewById(R.id.startSetup);\r
180 \r
181         mStartButton.setOnClickListener(new OnClickListener() {\r
182             @Override\r
183             public void onClick(View arg0) {\r
184                 try {\r
185 \r
186                     mProgressbar.setVisibility(View.VISIBLE);\r
187                     mProgressbar.setIndeterminate(true);\r
188                     mStartButton.setEnabled(false);\r
189                     mResultTextView.setText(R.string.running);\r
190 \r
191                     //Reset Device information\r
192                     mDeviceIpTextView.setText(R.string.not_available);\r
193                     mDeviceMacTextView.setText(R.string.not_available);\r
194 \r
195 \r
196                     String ssid = mSsidText.getText().toString();\r
197                     String password = mPassText.getText().toString();\r
198 \r
199                     String enrolleeSsid = mEnrolleeSsidText.getText().toString();\r
200                     String enrolleePassword = mmEnrolleePasswordPassText.getText().toString();\r
201 \r
202                     mWiFiProvConfig = new WiFiProvConfig(enrolleeSsid, enrolleePassword);\r
203 \r
204                     mWiFiOnBoardingConfig.setSSId(ssid);\r
205                     mWiFiOnBoardingConfig.setSharedKey(password);\r
206 \r
207 \r
208                     mEasySetupService.startSetup(mDevice);\r
209 \r
210                     mStopButton.setEnabled(true);\r
211 \r
212 \r
213                 } catch (IOException e) {\r
214                     e.printStackTrace();\r
215                 }\r
216 \r
217             }\r
218         });\r
219     }\r
220 \r
221     public void addListenerForStopAP() {\r
222         mStopButton = (Button) findViewById(R.id.stopSetup);\r
223 \r
224         mStopButton.setOnClickListener(new OnClickListener() {\r
225             @Override\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
233             }\r
234         });\r
235     }\r
236 \r
237     @Override\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
243         }\r
244     }\r
245 \r
246     class ThreadHandler extends Handler {\r
247         @Override\r
248         public void handleMessage(Message msg) {\r
249 \r
250             switch (msg.what) {\r
251                 case SUCCESS: {\r
252 \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
259 \r
260                     /* Update device information on the Ui */\r
261                     IpOnBoardingConnection connection = (IpOnBoardingConnection) mDevice\r
262                             .getConnection();\r
263                     mDeviceIpTextView.setText(connection.getIp());\r
264                     mDeviceMacTextView.setText(connection.getHardwareAddress());\r
265 \r
266                     Toast.makeText(getApplicationContext(), resultMsg, Toast.LENGTH_SHORT).show();\r
267                     break;\r
268                 }\r
269                 case FAILED: {\r
270 \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
278                     break;\r
279                 }\r
280 \r
281                 case STATE_CHANGED: {\r
282                     String resultMsg = "Device state changed";\r
283                     Toast.makeText(getApplicationContext(), resultMsg, Toast.LENGTH_SHORT).show();\r
284                     break;\r
285                 }\r
286 \r
287             }\r
288 \r
289 \r
290         }\r
291     }\r
292 \r
293 }\r