2 * ***************************************************************
4 * Copyright 2016 Samsung Electronics All Rights Reserved.
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
20 * ****************************************************************
23 package org.iotivity.service.easysetup;
25 import android.app.Activity;
26 import android.content.Context;
27 import android.content.Intent;
28 import android.content.SharedPreferences;
29 import android.os.Bundle;
30 import android.preference.PreferenceManager;
31 import android.util.Log;
32 import android.view.View;
33 import android.widget.ArrayAdapter;
34 import android.widget.Button;
35 import android.widget.EditText;
36 import android.widget.LinearLayout;
37 import android.widget.RadioButton;
38 import android.widget.RadioGroup;
39 import android.widget.Spinner;
40 import android.widget.TextView;
41 import android.widget.Toast;
42 import android.widget.ToggleButton;
44 import org.iotivity.base.ErrorCode;
45 import org.iotivity.base.ModeType;
46 import org.iotivity.base.OcConnectivityType;
47 import org.iotivity.base.OcException;
48 import org.iotivity.base.OcHeaderOption;
49 import org.iotivity.base.OcPlatform;
50 import org.iotivity.base.OcPresenceStatus;
51 import org.iotivity.base.OcProvisioning;
52 import org.iotivity.base.OcRepresentation;
53 import org.iotivity.base.OcResource;
54 import org.iotivity.base.PlatformConfig;
55 import org.iotivity.base.QualityOfService;
56 import org.iotivity.base.ServiceType;
57 import org.iotivity.service.easysetup.mediator.CloudProp;
58 import org.iotivity.service.easysetup.mediator.CloudPropProvisioningCallback;
59 import org.iotivity.service.easysetup.mediator.CloudPropProvisioningStatus;
60 import org.iotivity.service.easysetup.mediator.DeviceProp;
61 import org.iotivity.service.easysetup.mediator.DevicePropProvisioningCallback;
62 import org.iotivity.service.easysetup.mediator.DevicePropProvisioningStatus;
63 import org.iotivity.service.easysetup.mediator.ESException;
64 import org.iotivity.service.easysetup.mediator.EasySetup;
65 import org.iotivity.service.easysetup.mediator.EnrolleeConf;
66 import org.iotivity.service.easysetup.mediator.GetConfigurationCallback;
67 import org.iotivity.service.easysetup.mediator.GetConfigurationStatus;
68 import org.iotivity.service.easysetup.mediator.RemoteEnrollee;
69 import org.iotivity.service.easysetup.mediator.SecurityProvisioningCallback;
70 import org.iotivity.service.easysetup.mediator.SecurityProvisioningStatus;
71 import org.iotivity.service.easysetup.mediator.enums.ESCloudProvState;
72 import org.iotivity.service.easysetup.mediator.enums.ESResult;
73 import org.iotivity.service.easysetup.mediator.enums.WIFI_AUTHTYPE;
74 import org.iotivity.service.easysetup.mediator.enums.WIFI_ENCTYPE;
75 import org.iotivity.service.easysetup.mediator.enums.WIFI_FREQ;
76 import org.iotivity.service.easysetup.mediator.enums.WIFI_MODE;
79 import java.io.FileNotFoundException;
80 import java.io.FileOutputStream;
81 import java.io.IOException;
82 import java.io.InputStream;
83 import java.io.OutputStream;
84 import java.util.ArrayList;
85 import java.util.Arrays;
86 import java.util.EnumSet;
87 import java.util.HashMap;
88 import java.util.List;
91 public class EasysetupActivity extends Activity implements OcPlatform.OnPresenceListener {
92 private static final String TAG = "Easysetup Mediator: ";
94 final String deviceID = "9E09F4FE-978A-4BC3-B356-1F93BCA37829";
95 final String samsungCIServer = "coap+tcp://52.69.149.85:5683";
97 private static final int BUFFER_SIZE = 1024;
99 private String filePath = "";
100 public static final String OIC_CLIENT_JSON_DB_FILE = "oic_svr_db_client.dat";
101 public static final String OIC_SQL_DB_FILE = "PDM.db";
103 private boolean isFirstTime = true;
104 String mEnrolleeDeviceID;
106 String mAuthProvider;
107 String mRefreshtoken;
110 String mEnrolleeAuthCode;
113 ToggleButton mSecurityMode;
115 RadioGroup mEasysetupProcess;
116 RadioButton mConfigureSecProcess;
117 RadioButton mGetConfigurationProcess;
118 RadioButton mProvisionDevPropProcess;
119 RadioButton mProvisionCloudPropProcess;
121 Button mDiscoverResource;
122 Button mStartGetConfiguration;
123 Button mStartConfigureSec;
124 Button mStartProvisionDevProp;
125 Button mStartProvisionCloudProp;
127 TextView mGetconfigurationStateText;
128 TextView mDevNameText;
129 TextView mModelNumberText;
130 TextView mLanguageText;
131 TextView mCountryText;
132 TextView mWifiModeText;
133 TextView mWifiFreqText;
134 TextView mCloudAccessableText;
135 TextView mSecStateText;
136 TextView mSecDevIDText;
137 TextView mProvisionDevPropState;
138 TextView mProvisionCloudPropState;
140 EditText mEnrollerSsidText;
141 EditText mEnrollerPWText;
142 EditText mInputLanguageText;
143 EditText mInputCountryText;
144 EditText mInputLocationText;
145 EditText mAuthCodeText;
146 EditText mAuthProviderText;
147 EditText mCIServerText;
149 LinearLayout mGetConfigurationInfo;
150 LinearLayout mConfigureSecInfo;
151 LinearLayout mProvisionDevPropInfo;
152 LinearLayout mProvisionCloudPropInfo;
157 EasySetup mEasySetup;
158 RemoteEnrollee mRemoteEnrollee;
164 protected void onCreate(Bundle savedInstanceState) {
165 super.onCreate(savedInstanceState);
166 setContentView(R.layout.easysetup_main);
168 mActivity = EasysetupActivity.this;
169 mContext = mActivity.getBaseContext();
171 mSecurityMode = (ToggleButton) findViewById(R.id.btn_Security);
173 mEasysetupProcess = (RadioGroup) findViewById(R.id.rg_EasysetupProcess);
175 mConfigureSecProcess = (RadioButton) findViewById(R.id.btn_configurSec);
176 mGetConfigurationProcess = (RadioButton) findViewById(R.id.btn_getConfiguration);
177 mProvisionDevPropProcess = (RadioButton) findViewById(R.id.btn_provisionDevConf);
178 mProvisionCloudPropProcess =
179 (RadioButton) findViewById(R.id.btn_provisionCloudConf);
181 mDiscoverResource = (Button) findViewById(R.id.btn_discoverResource);
182 mStartGetConfiguration =
183 (Button) findViewById(R.id.btn_startGetConfiguration);
184 mStartConfigureSec = (Button) findViewById(R.id.btn_startConfigureSec);
185 mStartProvisionDevProp = (Button) findViewById(R.id.btn_startProvisionDevConf);
186 mStartProvisionCloudProp = (Button) findViewById(R.id.btn_startProvisionCloudConf);
188 mGetconfigurationStateText =
189 (TextView) findViewById(R.id.txt_getConfigurationState);
190 mDevNameText = (TextView) findViewById(R.id.txt_devName);
191 mModelNumberText = (TextView) findViewById(R.id.txt_modelNumber);
192 mLanguageText = (TextView) findViewById(R.id.txt_language);
193 mCountryText = (TextView) findViewById(R.id.txt_country);
194 mWifiModeText = (TextView) findViewById(R.id.txt_wifiMode);
195 mWifiFreqText = (TextView) findViewById(R.id.txt_wifiFreq);
196 mCloudAccessableText = (TextView) findViewById(R.id.txt_cloudAccessable);
197 mSecStateText = (TextView) findViewById(R.id.txt_secState);
198 mSecDevIDText = (TextView) findViewById(R.id.txt_secDevID);
199 mProvisionDevPropState = (TextView) findViewById(R.id.txt_provisionDevConfState);
200 mProvisionCloudPropState =
201 (TextView) findViewById(R.id.txt_provisionCloudConfState);
203 mEnrollerSsidText = (EditText) findViewById(R.id.editText_EnrollerSSID);
204 mEnrollerPWText = (EditText) findViewById(R.id.editText_EnrollerPW);
205 mInputLanguageText = (EditText) findViewById(R.id.editText_Language);
206 mInputCountryText = (EditText) findViewById(R.id.editText_Country);
207 mInputLocationText = (EditText) findViewById(R.id.editText_Location);
208 mAuthCodeText = (EditText) findViewById(R.id.editText_authcode);
209 mAuthProviderText = (EditText) findViewById(R.id.editText_authprovider);
210 mCIServerText = (EditText) findViewById(R.id.editText_ciserver);
212 mGetConfigurationInfo =
213 (LinearLayout) findViewById(R.id.layout_GetConfiguration);
214 mConfigureSecInfo = (LinearLayout) findViewById(R.id.layout_ConfigurSec);
215 mProvisionDevPropInfo = (LinearLayout) findViewById(R.id.layout_ProvisionDevConf);
216 mProvisionCloudPropInfo = (LinearLayout) findViewById(R.id.layout_ProvisionCloudConf);
218 mAuthType = (Spinner) findViewById(R.id.spinner_authType);
219 mEncType = (Spinner) findViewById(R.id.spinner_encType);
221 mEasysetupProcess.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
223 public void onCheckedChanged(RadioGroup group, int checkedId) {
224 mGetConfigurationInfo.setVisibility(View.GONE);
225 mConfigureSecInfo.setVisibility(View.GONE);
226 mProvisionDevPropInfo.setVisibility(View.GONE);
227 mProvisionCloudPropInfo.setVisibility(View.GONE);
230 case R.id.btn_configurSec:
231 mConfigureSecInfo.setVisibility(View.VISIBLE);
234 case R.id.btn_getConfiguration:
235 mGetConfigurationInfo.setVisibility(View.VISIBLE);
238 case R.id.btn_provisionDevConf:
239 mProvisionDevPropInfo.setVisibility(View.VISIBLE);
242 case R.id.btn_provisionCloudConf:
243 Log.d(TAG, "Starting login activity");
244 Intent intent = new Intent(EasysetupActivity.this, LoginActivity.class);
245 startActivityForResult(intent, 2);
246 mProvisionCloudPropInfo.setVisibility(View.VISIBLE);
252 ArrayAdapter<CharSequence> adAuthType, adEnctype;
254 adAuthType = ArrayAdapter.createFromResource(this, R.array.auth_type,
255 android.R.layout.simple_spinner_item);
256 adAuthType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
258 adEnctype = ArrayAdapter.createFromResource(this, R.array.enc_type,
259 android.R.layout.simple_spinner_item);
260 adEnctype.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
262 mAuthType.setAdapter(adAuthType);
263 mAuthType.setSelection(0);
265 mEncType.setAdapter(adEnctype);
266 mEncType.setSelection(0);
268 addListenerForDiscoverEnrollee();
269 addListenerForStartConfigureSec();
270 addListenerForStartGetConfiguration();
271 addListenerForStartProvisionDevProp();
272 addListenerForStartProvisionCloudProp();
274 mSecurityMode.setClickable(false);
275 mConfigureSecProcess.setEnabled(false);
276 mGetConfigurationProcess.setEnabled(false);
277 mProvisionDevPropProcess.setEnabled(false);
278 mProvisionCloudPropProcess.setEnabled(false);
280 mEasySetup = EasySetup.getInstance(getApplicationContext());
284 SharedPreferences settings =
285 getApplicationContext().getSharedPreferences("IoTivityCloud", 0);
286 mAccessToken = settings.getString("accesstoken", null);
287 mRefreshtoken = settings.getString("refreshtoken", null);
288 mUserID = settings.getString("uid", null);
290 if(mRefreshtoken == null)
292 Log.d(TAG, "Can not find refresh token");
295 if(mAccessToken == null && mRefreshtoken == null)
297 Log.d(TAG, "Starting login activity");
298 Intent intent = new Intent(EasysetupActivity.this, LoginActivity.class);
299 startActivityForResult(intent, 1);
301 else if(mAccessToken != null)
307 private void initOICStack() {
308 filePath = getFilesDir().getPath() + "/";
310 SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences
311 (getApplicationContext());
312 boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
314 if(!copyJsonFromAsset())
316 Log.e(TAG, "initOICStack error: " + "copyJsonFromAsset()");
317 Toast.makeText(this,"Can't Copy DB file from asset, please retry start SampleApp.",
318 Toast.LENGTH_LONG).show();
321 SharedPreferences.Editor editor = wmbPreference.edit();
322 editor.putBoolean("FIRSTRUN", false);
326 cfg = new PlatformConfig(
329 ModeType.CLIENT_SERVER,
330 "0.0.0.0", // bind to all available interfaces
332 QualityOfService.LOW, filePath + OIC_CLIENT_JSON_DB_FILE);
335 * Initialize DataBase
338 OcPlatform.Configure(cfg);
340 String sqlDbPath = getFilesDir().getAbsolutePath().replace("files", "databases") +
342 File file = new File(sqlDbPath);
343 //check files directory exists
344 if (!(file.isDirectory())) {
346 Log.d(TAG, "Sql db directory created at " + sqlDbPath);
348 Log.d(TAG, "Sql db directory exists at " + sqlDbPath);
350 //SQLiteDatabase.openOrCreateDatabase(sqlDbPath+ OIC_SQL_DB_FILE, null);
351 OcProvisioning.provisionInit(sqlDbPath + OIC_SQL_DB_FILE);
352 mSecurityMode.setChecked(true);
353 } catch (OcException e) {
354 logMessage(TAG + "provisionInit error: " + e.getMessage());
355 Log.e(TAG, e.getMessage());
356 Toast.makeText(this,"provisionInit error: " + e.getMessage(),
357 Toast.LENGTH_LONG).show();
358 mSecurityMode.setChecked(false);
360 } catch (UnsatisfiedLinkError e) {
362 // Note : Easy setup is built with SECURED = 0, but user still selects Security feature
363 // while running the Mediator App it couldn't find "libocprovision.so".
364 // As per the programmer guide, security feature should be invoked only if build is done with SECURED = 1.
365 mSecurityMode.setChecked(false);
366 Log.e(TAG, " Easy setup is built with secured = 0, but executed with security feature");
367 Toast.makeText(this,"Security is not enabled [Easy setup is built with SECURED = 0]",
368 Toast.LENGTH_LONG).show();
373 OcPlatform.OnResourceFoundListener listener =
374 new OcPlatform.OnResourceFoundListener() {
376 public void onFindResourceFailed(Throwable throwable, String s) {
377 Log.e(TAG, "Failed found resource, ecode: " + s);
380 public void onResourceFound(OcResource ocResource) {
381 synchronized (mActivity) {
383 if (null == ocResource) {
384 Log.e(TAG, "Found resource is invalid");
388 if(ocResource.getHost().contains("coap+tcp")) {
389 Log.d(TAG, "Recv Found resource event from tcp port," +
390 "ignoring URI : " + ocResource.getUri());
391 runOnUiThread(new Runnable() {
394 mDiscoverResource.setEnabled(true);
400 // Get the resource URI
401 String resourceUri = ocResource.getUri();
402 // Get the resource host address
403 String hostAddress = ocResource.getHost();
404 Log.d(TAG,"URI of the resource: " + resourceUri);
405 Log.d(TAG,"Host address of the resource: " + hostAddress);
407 runOnUiThread(new Runnable() {
410 mDiscoverResource.setText("Found");
411 if(mSecurityMode.isChecked()) {
412 mConfigureSecProcess.setEnabled(true);
414 mGetConfigurationProcess.setEnabled(true);
415 mProvisionDevPropProcess.setEnabled(true);
416 mProvisionCloudPropProcess.setEnabled(true);
420 mRemoteEnrollee = mEasySetup.createRemoteEnrollee(ocResource);
421 mEnrolleeDeviceID = ocResource.getServerId();
427 private void addListenerForDiscoverEnrollee() {
428 mDiscoverResource.setOnClickListener(new View.OnClickListener() {
430 public void onClick(View v) {
431 Thread thread = new Thread() {
432 boolean result = true;
435 runOnUiThread(new Runnable() {
438 mDiscoverResource.setEnabled(false);
443 String requestUri = OcPlatform.WELL_KNOWN_QUERY + "?rt=ocf.wk.prov";
444 OcPlatform.findResource("",
446 EnumSet.of(OcConnectivityType.CT_DEFAULT),
450 catch (OcException e) {
453 runOnUiThread(new Runnable() {
456 mDiscoverResource.setEnabled(true);
468 private void addListenerForStartConfigureSec() {
469 mStartConfigureSec.setOnClickListener(new View.OnClickListener() {
471 public void onClick(View v) {
472 Thread thread = new Thread() {
475 runOnUiThread(new Runnable() {
478 mStartConfigureSec.setEnabled(false);
483 mRemoteEnrollee.provisionSecurity(new SecurityProvisioningCallback() {
485 public void onProgress(final SecurityProvisioningStatus securityProvisioningStatus) {
486 if(securityProvisioningStatus.getESResult() == ESResult.ES_OK) {
487 runOnUiThread(new Runnable() {
490 mSecStateText.setText("Success");
491 mSecDevIDText.setText(securityProvisioningStatus.getDevUUID());
496 runOnUiThread(new Runnable() {
499 mSecStateText.setText("Failed");
500 mStartConfigureSec.setEnabled(true);
506 } catch (ESException e) {
508 runOnUiThread(new Runnable() {
511 mStartConfigureSec.setEnabled(true);
523 private void addListenerForStartGetConfiguration(){
524 mStartGetConfiguration.setOnClickListener(new View.OnClickListener() {
526 public void onClick(View v) {
527 Thread thread = new Thread() {
530 runOnUiThread(new Runnable() {
533 mGetconfigurationStateText.setText("Process");
534 mStartGetConfiguration.setEnabled(false);
539 mRemoteEnrollee.getConfiguration(new GetConfigurationCallback() {
541 public void onProgress(GetConfigurationStatus getConfigurationStatus) {
542 if(getConfigurationStatus.getESResult() == ESResult.ES_OK) {
544 final EnrolleeConf enrolleeConf = getConfigurationStatus.getEnrolleeConf();
545 runOnUiThread(new Runnable() {
548 mGetconfigurationStateText.setText("Success");
549 mDevNameText.setText(enrolleeConf.getDeviceName());
550 mModelNumberText.setText(enrolleeConf.getModelNumber());
551 setWifiModes(enrolleeConf.getWiFiModes());
552 setWifiFreq(enrolleeConf.getWiFiFreq());
554 if(enrolleeConf.isCloudAccessible()) {
555 mCloudAccessableText.setText("TRUE");
558 mCloudAccessableText.setText("FALSE");
565 runOnUiThread(new Runnable() {
568 mGetconfigurationStateText.setText("Failed");
569 mStartGetConfiguration.setEnabled(true);
575 } catch (ESException e) {
577 runOnUiThread(new Runnable() {
580 mGetconfigurationStateText.setText("Failed");
581 mStartGetConfiguration.setEnabled(true);
593 private void addListenerForStartProvisionDevProp() {
594 mStartProvisionDevProp.setOnClickListener(new View.OnClickListener() {
596 public void onClick(View v) {
597 Thread thread = new Thread() {
601 runOnUiThread(new Runnable() {
604 mProvisionDevPropState.setText("Progress");
605 mStartProvisionDevProp.setEnabled(false);
609 String enrollerSSID = mEnrollerSsidText.getText().toString();
610 String enrollerPW = mEnrollerPWText.getText().toString();
611 WIFI_AUTHTYPE authType =
612 WIFI_AUTHTYPE.fromInt(mAuthType.getSelectedItemPosition());
613 WIFI_ENCTYPE encType =
614 WIFI_ENCTYPE.fromInt(mEncType.getSelectedItemPosition());
615 String inputLanguage = mInputLanguageText.getText().toString();
616 String inputCountry = mInputCountryText.getText().toString();
617 String inputLocation = mInputLocationText.getText().toString();
619 DeviceProp deviceProp = new DeviceProp();
620 deviceProp.setWiFiProp(enrollerSSID, enrollerPW, authType, encType);
621 deviceProp.setDevConfProp(inputLanguage, inputCountry, inputLocation);
623 mRemoteEnrollee.provisionDeviceProperties(deviceProp, new DevicePropProvisioningCallback() {
625 public void onProgress(DevicePropProvisioningStatus devPropProvisioningStatus) {
626 final ESResult result = devPropProvisioningStatus.getESResult();
627 runOnUiThread(new Runnable() {
630 if(result.equals(ESResult.ES_OK)) {
631 mProvisionDevPropState.setText("Success");
633 else if(result.equals(ESResult.ES_ERROR)) {
634 mProvisionDevPropState.setText("Failed");
636 else if(result.equals(ESResult.ES_UNAUTHORIZED_REQ)) {
637 mProvisionDevPropState.setText("Failed. Need SecProv");
639 mStartProvisionDevProp.setEnabled(true);
644 } catch (ESException e) {
646 runOnUiThread(new Runnable() {
649 mProvisionDevPropState.setText("Failed");
650 mStartProvisionDevProp.setEnabled(true);
662 private void addListenerForStartProvisionCloudProp() {
663 mStartProvisionCloudProp.setOnClickListener(new View.OnClickListener() {
665 public void onClick(View v) {
666 Thread thread = new Thread() {
669 runOnUiThread(new Runnable() {
672 mProvisionCloudPropState.setText("Progress");
673 mStartProvisionCloudProp.setEnabled(false);
678 String authCode = mAuthCodeText.getText().toString();
679 String authProvider = mAuthProviderText.getText().toString();
680 String ciserver = mCIServerText.getText().toString();
682 CloudProp cloudProp = new CloudProp();
683 cloudProp.setCloudProp(authCode, authProvider, ciserver);
684 cloudProp.setCloudID("f002ae8b-c42c-40d3-8b8d-1927c17bd1b3");
686 mRemoteEnrollee.provisionCloudProperties(cloudProp, new CloudPropProvisioningCallback() {
688 public void onProgress(CloudPropProvisioningStatus cloudProvisioningStatus) {
689 final ESResult result = cloudProvisioningStatus.getESResult();
690 runOnUiThread(new Runnable() {
693 if(result.equals(ESResult.ES_FOUND_ENROLLEE)) {
694 mProvisionCloudPropState.setText("Found Resource");
696 else if(result.equals(ESResult.ES_NOT_FOUND_ENROLLEE)) {
697 mProvisionCloudPropState.setText("Not Found Resource");
699 else if(result.equals(ESResult.ES_OK)) {
700 mProvisionCloudPropState.setText("Cloud Provisioning succeeds");
703 mProvisionCloudPropState.setText("Cloud Provisioning fails");
709 } catch (ESException e) {
711 runOnUiThread(new Runnable() {
714 mProvisionCloudPropState.setText("Failed");
715 mStartProvisionCloudProp.setEnabled(true);
727 private boolean copyJsonFromAsset() {
728 InputStream inputStream = null;
729 OutputStream outputStream = null;
731 byte[] buffer = new byte[BUFFER_SIZE];
733 inputStream = getAssets().open(OIC_CLIENT_JSON_DB_FILE);
734 File file = new File(filePath);
735 //check files directory exists
736 if (!(file.exists() && file.isDirectory())) {
739 outputStream = new FileOutputStream(filePath + OIC_CLIENT_JSON_DB_FILE);
740 while ((length = inputStream.read(buffer)) != -1) {
741 outputStream.write(buffer, 0, length);
743 } catch (NullPointerException e) {
744 logMessage(TAG + "Null pointer exception " + e.getMessage());
745 Log.e(TAG, e.getMessage());
747 } catch (FileNotFoundException e) {
748 logMessage(TAG + "Json svr db file not found " + e.getMessage());
749 Log.e(TAG, e.getMessage());
751 } catch (IOException e) {
752 logMessage(TAG + OIC_CLIENT_JSON_DB_FILE + " file copy failed");
753 Log.e(TAG, e.getMessage());
756 if (inputStream != null) {
759 } catch (IOException e) {
760 Log.e(TAG, e.getMessage());
764 if (outputStream != null) {
766 outputStream.close();
767 } catch (IOException e) {
768 Log.e(TAG, e.getMessage());
776 public void logMessage(String text) {
780 public void setWifiModes(ArrayList<WIFI_MODE> types) {
781 String temp = "WIFI - ";
783 for(WIFI_MODE type : types) {
784 if(type.equals(WIFI_MODE.WIFI_11A)) {
785 temp = temp + "11A ";
787 else if(type.equals(WIFI_MODE.WIFI_11B)) {
788 temp = temp + "11B ";
790 else if(type.equals(WIFI_MODE.WIFI_11G)) {
791 temp = temp + "11G ";
793 else if(type.equals(WIFI_MODE.WIFI_11N)) {
794 temp = temp + "11N ";
796 else if(type.equals(WIFI_MODE.WIFI_11AC)) {
797 temp = temp + "11AC ";
800 final String modeTypes = temp;
801 runOnUiThread(new Runnable() {
804 mWifiModeText.setText(modeTypes);
809 public void setWifiFreq(final WIFI_FREQ freq) {
810 runOnUiThread(new Runnable() {
813 if(freq.equals(WIFI_FREQ.WIFI_24G)) {
814 mWifiFreqText.setText("2.4G");
816 else if(freq.equals(WIFI_FREQ.WIFI_5G)) {
817 mWifiFreqText.setText("5G");
819 else if(freq.equals(WIFI_FREQ.WIFI_BOTH)) {
820 mWifiFreqText.setText("2.4G & 5G");
827 public void onPresence(OcPresenceStatus status, int sequence, String host) {
828 final String strStaus = status.getValue();
829 Log.d(TAG, "Presence response: " + strStaus + " sequence: " + sequence + " host: " + host);
830 runOnUiThread(new Runnable()
833 Toast.makeText(EasysetupActivity.this, "Easy-Setup completed", Toast.LENGTH_SHORT).show();
839 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
840 super.onActivityResult(requestCode, resultCode, data);
841 if(resultCode==RESULT_OK && requestCode==1){
842 mAuthCode = data.getStringExtra("authCode");
843 mAuthProvider = data.getStringExtra("authProvider");
844 String text = "Received authCode= " + mAuthCode;
848 else if(resultCode==RESULT_OK && requestCode==2)
850 mEnrolleeAuthCode = data.getStringExtra("authCode");
851 mAuthProvider = data.getStringExtra("authProvider");
852 mAuthCodeText.setText(mEnrolleeAuthCode);
853 mAuthProviderText.setText(mAuthProvider);
854 mAuthCodeText.setEnabled(false);
855 mAuthProviderText.setEnabled(false);
859 OcPlatform.subscribePresence(samsungCIServer, "oic.res&di=" + mEnrolleeDeviceID,
860 EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP, OcConnectivityType.CT_IP_USE_V4), this);
869 OcResource.OnPostListener onRefreshTokenPost = new OcResource.OnPostListener() {
871 public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {
872 Log.d(TAG, "onRefreshTokenPost..");
874 mAccessToken = ocRepresentation.getValue("accesstoken");
875 mRefreshtoken = ocRepresentation.getValue("refreshtoken");
877 saveCloudTokenAtSharedPreferences();
879 catch (OcException e)
888 public void onPostFailed(Throwable throwable) {
889 Log.d(TAG, "onRefreshTokenPost failed..");
893 public void RefreshToken() {
895 OcResource authResource = OcPlatform.constructResourceObject(samsungCIServer, "/.well-known/ocf/account/tokenrefresh",
896 EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP, OcConnectivityType.CT_IP_USE_V4),
897 false, Arrays.asList("oic.wk.account"), Arrays.asList(OcPlatform.DEFAULT_INTERFACE));
898 OcRepresentation rep = new OcRepresentation();
900 runOnUiThread(new Runnable()
903 Toast.makeText(EasysetupActivity.this, "RefreshToken in progress..", Toast.LENGTH_SHORT).show();
907 rep.setValue("di", deviceID);
908 rep.setValue("granttype", "refresh_token");
909 rep.setValue("refreshtoken", mRefreshtoken);
910 rep.setValue("uid", mUserID);
911 authResource.post(rep, new HashMap<String, String>(), onRefreshTokenPost);
918 Log.d(TAG, "No error while executing login");
921 private void saveCloudTokenAtSharedPreferences() {
922 Log.d(TAG, "accesstoken: " + mAccessToken);
923 SharedPreferences settings = getApplicationContext().getSharedPreferences("IoTivityCloud", 0);
924 SharedPreferences.Editor editor = settings.edit();
925 editor.putString("accesstoken", mAccessToken);
926 editor.putString("refreshtoken", mRefreshtoken);
927 editor.putString("uid", mUserID);
929 if(editor.commit() == true)
930 Log.d(TAG, "accesstoken saved");
932 Log.d(TAG, "accesstoken not saved");
935 OcResource.OnPostListener onSignUpPost = new OcResource.OnPostListener() {
937 public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {
938 Log.d(TAG, "onSignUpPost..");
940 runOnUiThread(new Runnable()
943 Toast.makeText(EasysetupActivity.this, "Sign-up completed", Toast.LENGTH_SHORT).show();
947 mAccessToken = ocRepresentation.getValue("accesstoken");
948 mRefreshtoken = ocRepresentation.getValue("refreshtoken");
949 mUserID = ocRepresentation.getValue("uid");
951 if(mAccessToken != null)
953 saveCloudTokenAtSharedPreferences();
957 catch (OcException e)
964 public void onPostFailed(Throwable throwable) {
965 Log.d(TAG, "onSignUpPost failed.. : " + throwable.getMessage());
969 private void SignUpDevice() {
971 OcResource authResource = OcPlatform.constructResourceObject(samsungCIServer, "/.well-known/ocf/account",
972 EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP, OcConnectivityType.CT_IP_USE_V4),
973 false, Arrays.asList("oic.wk.account"), Arrays.asList(OcPlatform.DEFAULT_INTERFACE));
974 OcRepresentation rep = new OcRepresentation();
976 runOnUiThread(new Runnable()
979 Toast.makeText(EasysetupActivity.this, "SignUpDevice in progress..", Toast.LENGTH_SHORT).show();
983 rep.setValue("di", deviceID);
984 rep.setValue("authprovider", mAuthProvider);
985 rep.setValue("authcode", mAuthCode);
986 authResource.post(rep, new HashMap<String, String>(), onSignUpPost);
993 Log.d(TAG, "No error while executing SignUp");
996 OcResource.OnPostListener onSignInPost = new OcResource.OnPostListener() {
998 public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {
999 Log.d(TAG, "onSignInPost..");
1001 runOnUiThread(new Runnable()
1004 Toast.makeText(EasysetupActivity.this, "Sign-in completed", Toast.LENGTH_SHORT).show();
1010 public void onPostFailed(Throwable ex) {
1011 if (ex instanceof OcException) {
1012 OcException ocEx = (OcException) ex;
1013 ErrorCode errCode = ocEx.getErrorCode();
1014 Log.e(TAG, ocEx.getMessage());
1015 if (ErrorCode.UNAUTHORIZED_REQ != errCode) {
1022 private void SignInDevice() {
1024 OcResource authResource = OcPlatform.constructResourceObject(samsungCIServer, "/.well-known/ocf/account/session",
1025 EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP, OcConnectivityType.CT_IP_USE_V4),
1026 false, Arrays.asList("oic.wk.account"), Arrays.asList(OcPlatform.DEFAULT_INTERFACE));
1027 OcRepresentation rep = new OcRepresentation();
1029 runOnUiThread(new Runnable()
1032 Toast.makeText(EasysetupActivity.this, "SignInDevice in progress..", Toast.LENGTH_SHORT).show();
1036 rep.setValue("di", deviceID);
1037 rep.setValue("accesstoken", mAccessToken);
1038 rep.setValue("login", true);
1039 rep.setValue("uid", mUserID);
1040 authResource.post(rep, new HashMap<String, String>(), onSignInPost);
1043 catch(OcException e)
1045 e.printStackTrace();
1048 Log.d(TAG, "No error while executing login");
1052 protected void onDestroy() {