replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / service / easy-setup / sampleapp / mediator / android / EasySetup / app / src / main / java / org / iotivity / service / easysetup / EasysetupActivity.java
index 0785c3a..650f44d 100755 (executable)
@@ -24,6 +24,7 @@ package org.iotivity.service.easysetup;
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
@@ -40,19 +41,25 @@ import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.ToggleButton;
 
+import org.iotivity.base.ErrorCode;
 import org.iotivity.base.ModeType;
 import org.iotivity.base.OcConnectivityType;
 import org.iotivity.base.OcException;
+import org.iotivity.base.OcHeaderOption;
+import org.iotivity.base.ObserveType;
 import org.iotivity.base.OcPlatform;
+import org.iotivity.base.OcPresenceStatus;
 import org.iotivity.base.OcProvisioning;
+import org.iotivity.base.OcRepresentation;
 import org.iotivity.base.OcResource;
 import org.iotivity.base.PlatformConfig;
 import org.iotivity.base.QualityOfService;
 import org.iotivity.base.ServiceType;
+import org.iotivity.base.OcAccountManager;
+import org.iotivity.service.easysetup.mediator.ESConstants;
 import org.iotivity.service.easysetup.mediator.CloudProp;
 import org.iotivity.service.easysetup.mediator.CloudPropProvisioningCallback;
 import org.iotivity.service.easysetup.mediator.CloudPropProvisioningStatus;
-import org.iotivity.service.easysetup.mediator.DeviceConfig;
 import org.iotivity.service.easysetup.mediator.DeviceProp;
 import org.iotivity.service.easysetup.mediator.DevicePropProvisioningCallback;
 import org.iotivity.service.easysetup.mediator.DevicePropProvisioningStatus;
@@ -64,7 +71,6 @@ import org.iotivity.service.easysetup.mediator.GetConfigurationStatus;
 import org.iotivity.service.easysetup.mediator.RemoteEnrollee;
 import org.iotivity.service.easysetup.mediator.SecurityProvisioningCallback;
 import org.iotivity.service.easysetup.mediator.SecurityProvisioningStatus;
-import org.iotivity.service.easysetup.mediator.WiFiConfig;
 import org.iotivity.service.easysetup.mediator.enums.ESCloudProvState;
 import org.iotivity.service.easysetup.mediator.enums.ESResult;
 import org.iotivity.service.easysetup.mediator.enums.WIFI_AUTHTYPE;
@@ -79,12 +85,20 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
 
 
-public class EasysetupActivity extends Activity {
+public class EasysetupActivity extends Activity
+                                implements OcPlatform.OnPresenceListener,
+                                           OcResource.OnObserveListener{
     private static final String TAG = "Easysetup Mediator: ";
     PlatformConfig cfg;
+    OcAccountManager m_accountManager = null;
+    final String deviceID = "9E09F4FE-978A-4BC3-B356-1F93BCA37829";
+    final String CIServer = "coap+tcp://52.69.149.85:5683";
 
     private static final int BUFFER_SIZE = 1024;
 
@@ -92,25 +106,35 @@ public class EasysetupActivity extends Activity {
     public static final String OIC_CLIENT_JSON_DB_FILE =  "oic_svr_db_client.dat";
     public static final String OIC_SQL_DB_FILE =  "PDM.db";
 
-    private boolean isSecurityEnabled = false;
     private boolean isFirstTime = true;
 
+    String mEnrolleeDeviceID;
+    String mAuthCode;
+    String mAuthProvider;
+    String mRefreshtoken;
+    String mUserID;
+    String mAccessToken;
+    String mEnrolleeAuthCode;
+    byte[] mCertificate;
+    int mCredID;
+
     ToggleButton mSecurityMode;
 
     RadioGroup mEasysetupProcess;
     RadioButton mConfigureSecProcess;
     RadioButton mGetConfigurationProcess;
-    RadioButton mProvisionDevConfProcess;
-    RadioButton mProvisionCloudConfProcess;
+    RadioButton mProvisionDevPropProcess;
+    RadioButton mProvisionCloudPropProcess;
 
     Button mDiscoverResource;
     Button mStartGetConfiguration;
     Button mStartConfigureSec;
-    Button mStartProvisionDevConf;
-    Button mStartProvisionCloudConf;
+    Button mStartProvisionDevProp;
+    Button mStartProvisionCloudProp;
 
     TextView mGetconfigurationStateText;
     TextView mDevNameText;
+    TextView mModelNumberText;
     TextView mLanguageText;
     TextView mCountryText;
     TextView mWifiModeText;
@@ -118,21 +142,22 @@ public class EasysetupActivity extends Activity {
     TextView mCloudAccessableText;
     TextView mSecStateText;
     TextView mSecDevIDText;
-    TextView mProvisionDevConfState;
-    TextView mProvisionCloudConfState;
+    TextView mProvisionDevPropState;
+    TextView mProvisionCloudPropState;
 
     EditText mEnrollerSsidText;
     EditText mEnrollerPWText;
     EditText mInputLanguageText;
     EditText mInputCountryText;
+    EditText mInputLocationText;
     EditText mAuthCodeText;
     EditText mAuthProviderText;
     EditText mCIServerText;
 
     LinearLayout mGetConfigurationInfo;
     LinearLayout mConfigureSecInfo;
-    LinearLayout mProvisionDevConfInfo;
-    LinearLayout mProvisionCloudConfInfo;
+    LinearLayout mProvisionDevPropInfo;
+    LinearLayout mProvisionCloudPropInfo;
 
     Spinner mAuthType;
     Spinner mEncType;
@@ -157,20 +182,21 @@ public class EasysetupActivity extends Activity {
 
         mConfigureSecProcess = (RadioButton) findViewById(R.id.btn_configurSec);
         mGetConfigurationProcess = (RadioButton) findViewById(R.id.btn_getConfiguration);
-        mProvisionDevConfProcess = (RadioButton) findViewById(R.id.btn_provisionDevConf);
-        mProvisionCloudConfProcess =
+        mProvisionDevPropProcess = (RadioButton) findViewById(R.id.btn_provisionDevConf);
+        mProvisionCloudPropProcess =
                 (RadioButton) findViewById(R.id.btn_provisionCloudConf);
 
         mDiscoverResource = (Button) findViewById(R.id.btn_discoverResource);
         mStartGetConfiguration =
                 (Button) findViewById(R.id.btn_startGetConfiguration);
         mStartConfigureSec = (Button) findViewById(R.id.btn_startConfigureSec);
-        mStartProvisionDevConf = (Button) findViewById(R.id.btn_startProvisionDevConf);
-        mStartProvisionCloudConf = (Button) findViewById(R.id.btn_startProvisionCloudConf);
+        mStartProvisionDevProp = (Button) findViewById(R.id.btn_startProvisionDevConf);
+        mStartProvisionCloudProp = (Button) findViewById(R.id.btn_startProvisionCloudConf);
 
         mGetconfigurationStateText =
                 (TextView) findViewById(R.id.txt_getConfigurationState);
         mDevNameText = (TextView) findViewById(R.id.txt_devName);
+        mModelNumberText = (TextView) findViewById(R.id.txt_modelNumber);
         mLanguageText = (TextView) findViewById(R.id.txt_language);
         mCountryText = (TextView) findViewById(R.id.txt_country);
         mWifiModeText = (TextView) findViewById(R.id.txt_wifiMode);
@@ -178,14 +204,15 @@ public class EasysetupActivity extends Activity {
         mCloudAccessableText = (TextView) findViewById(R.id.txt_cloudAccessable);
         mSecStateText = (TextView) findViewById(R.id.txt_secState);
         mSecDevIDText = (TextView) findViewById(R.id.txt_secDevID);
-        mProvisionDevConfState = (TextView) findViewById(R.id.txt_provisionDevConfState);
-        mProvisionCloudConfState =
+        mProvisionDevPropState = (TextView) findViewById(R.id.txt_provisionDevConfState);
+        mProvisionCloudPropState =
                 (TextView) findViewById(R.id.txt_provisionCloudConfState);
 
         mEnrollerSsidText = (EditText) findViewById(R.id.editText_EnrollerSSID);
         mEnrollerPWText = (EditText) findViewById(R.id.editText_EnrollerPW);
         mInputLanguageText = (EditText) findViewById(R.id.editText_Language);
         mInputCountryText = (EditText) findViewById(R.id.editText_Country);
+        mInputLocationText = (EditText) findViewById(R.id.editText_Location);
         mAuthCodeText = (EditText) findViewById(R.id.editText_authcode);
         mAuthProviderText = (EditText) findViewById(R.id.editText_authprovider);
         mCIServerText = (EditText) findViewById(R.id.editText_ciserver);
@@ -193,8 +220,8 @@ public class EasysetupActivity extends Activity {
         mGetConfigurationInfo =
                 (LinearLayout) findViewById(R.id.layout_GetConfiguration);
         mConfigureSecInfo = (LinearLayout) findViewById(R.id.layout_ConfigurSec);
-        mProvisionDevConfInfo = (LinearLayout) findViewById(R.id.layout_ProvisionDevConf);
-        mProvisionCloudConfInfo = (LinearLayout) findViewById(R.id.layout_ProvisionCloudConf);
+        mProvisionDevPropInfo = (LinearLayout) findViewById(R.id.layout_ProvisionDevConf);
+        mProvisionCloudPropInfo = (LinearLayout) findViewById(R.id.layout_ProvisionCloudConf);
 
         mAuthType = (Spinner) findViewById(R.id.spinner_authType);
         mEncType = (Spinner) findViewById(R.id.spinner_encType);
@@ -204,8 +231,8 @@ public class EasysetupActivity extends Activity {
             public void onCheckedChanged(RadioGroup group, int checkedId) {
                 mGetConfigurationInfo.setVisibility(View.GONE);
                 mConfigureSecInfo.setVisibility(View.GONE);
-                mProvisionDevConfInfo.setVisibility(View.GONE);
-                mProvisionCloudConfInfo.setVisibility(View.GONE);
+                mProvisionDevPropInfo.setVisibility(View.GONE);
+                mProvisionCloudPropInfo.setVisibility(View.GONE);
 
                 switch (checkedId) {
                     case R.id.btn_configurSec:
@@ -217,11 +244,14 @@ public class EasysetupActivity extends Activity {
                         break;
 
                     case R.id.btn_provisionDevConf:
-                        mProvisionDevConfInfo.setVisibility(View.VISIBLE);
+                        mProvisionDevPropInfo.setVisibility(View.VISIBLE);
                         break;
 
                     case R.id.btn_provisionCloudConf:
-                        mProvisionCloudConfInfo.setVisibility(View.VISIBLE);
+                        Log.d(TAG, "Starting login activity");
+                        Intent intent = new Intent(EasysetupActivity.this, LoginActivity.class);
+                        startActivityForResult(intent, 2);
+                        mProvisionCloudPropInfo.setVisibility(View.VISIBLE);
                         break;
                 }
             }
@@ -252,12 +282,44 @@ public class EasysetupActivity extends Activity {
         mSecurityMode.setClickable(false);
         mConfigureSecProcess.setEnabled(false);
         mGetConfigurationProcess.setEnabled(false);
-        mProvisionDevConfProcess.setEnabled(false);
-        mProvisionCloudConfProcess.setEnabled(false);
+        mProvisionDevPropProcess.setEnabled(false);
+        mProvisionCloudPropProcess.setEnabled(false);
 
         mEasySetup = EasySetup.getInstance(getApplicationContext());
 
         initOICStack();
+
+        try {
+            m_accountManager = OcPlatform.constructAccountManagerObject(
+                    CIServer,
+                    EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));
+
+            Log.e(TAG, "constructAccountManagerObject is successful");
+        } catch (OcException e) {
+            Log.e(TAG, e.toString());
+            Log.e(TAG,"Failed to constructAccountManagerObject");
+        }
+        SharedPreferences settings =
+                                getApplicationContext().getSharedPreferences("IoTivityCloud", 0);
+        mAccessToken = settings.getString("accesstoken", null);
+        mRefreshtoken = settings.getString("refreshtoken", null);
+        mUserID = settings.getString("uid", null);
+
+        if(mRefreshtoken == null)
+        {
+            Log.d(TAG, "Can not find refresh token");
+        }
+
+        if(mAccessToken == null && mRefreshtoken == null)
+        {
+            Log.d(TAG, "Starting login activity");
+            Intent intent = new Intent(EasysetupActivity.this, LoginActivity.class);
+            startActivityForResult(intent, 1);
+        }
+        else if(mAccessToken != null)
+        {
+            SignInDevice();
+        }
     }
 
     private void initOICStack() {
@@ -285,7 +347,7 @@ public class EasysetupActivity extends Activity {
                 ModeType.CLIENT_SERVER,
                 "0.0.0.0", // bind to all available interfaces
                 0,
-                QualityOfService.LOW, filePath + OIC_CLIENT_JSON_DB_FILE);
+                QualityOfService.HIGH, filePath + OIC_CLIENT_JSON_DB_FILE);
         try {
             /*
              * Initialize DataBase
@@ -341,8 +403,9 @@ public class EasysetupActivity extends Activity {
                                 return;
                             }
 
-                            if(ocResource.getHost().contains("coap+tcp")) {
-                                Log.d(TAG, "Recv Found resource event  from tcp port, ignoring URI : " + ocResource.getUri());
+                            if(ocResource.getHost().contains("+tcp")) {
+                                Log.d(TAG, "Recv Found resource event  from tcp port," +
+                                    "ignoring URI : " + ocResource.getUri());
                                 runOnUiThread(new Runnable() {
                                     @Override
                                     public void run() {
@@ -359,18 +422,35 @@ public class EasysetupActivity extends Activity {
                             Log.d(TAG,"URI of the resource: " + resourceUri);
                             Log.d(TAG,"Host address of the resource: " + hostAddress);
 
+                            mRemoteEnrollee = mEasySetup.createRemoteEnrollee(ocResource);
+
+                            if(mRemoteEnrollee == null) {
+                                Log.d(TAG, "Recv Found resource event," +
+                                    "ignoring URI : " + ocResource.getUri());
+                                runOnUiThread(new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        mDiscoverResource.setEnabled(true);
+                                    }
+                                });
+                                return;
+                            }
+
+                            isFirstTime = false;
+                            mEnrolleeDeviceID = ocResource.getServerId();
+
                             runOnUiThread(new Runnable() {
                                 @Override
                                 public void run() {
-                                    mDiscoverResource.setText("Founded");
-                                    mConfigureSecProcess.setEnabled(true);
+                                    mDiscoverResource.setText("Found");
+                                    if(mSecurityMode.isChecked()) {
+                                        mConfigureSecProcess.setEnabled(true);
+                                    }
                                     mGetConfigurationProcess.setEnabled(true);
-                                    mProvisionDevConfProcess.setEnabled(true);
-                                    mProvisionCloudConfProcess.setEnabled(true);
+                                    mProvisionDevPropProcess.setEnabled(true);
+                                    mProvisionCloudPropProcess.setEnabled(true);
                                 }
                             });
-                            isFirstTime = false;
-                            mRemoteEnrollee = mEasySetup.createRemoteEnrollee(ocResource);
                         }
                     }
                 }
@@ -392,7 +472,7 @@ public class EasysetupActivity extends Activity {
                         });
 
                         try {
-                            String requestUri = OcPlatform.WELL_KNOWN_QUERY + "?rt=ocf.wk.prov";
+                            String requestUri = OcPlatform.WELL_KNOWN_QUERY + "?rt=" + ESConstants.OC_RSRVD_ES_RES_TYPE_EASYSETUP;
                             OcPlatform.findResource("",
                                     requestUri,
                                     EnumSet.of(OcConnectivityType.CT_DEFAULT),
@@ -444,6 +524,26 @@ public class EasysetupActivity extends Activity {
                                             }
                                         });
                                     }
+                                    else if(securityProvisioningStatus.getESResult()
+                                            == ESResult.ES_SECURE_RESOURCE_DISCOVERY_FAILURE) {
+                                        runOnUiThread(new Runnable() {
+                                            @Override
+                                            public void run() {
+                                                mSecStateText.setText("Not found Secure Resource");
+                                                mStartConfigureSec.setEnabled(true);
+                                            }
+                                        });
+                                    }
+                                    else if(securityProvisioningStatus.getESResult()
+                                            == ESResult.ES_OWNERSHIP_TRANSFER_FAILURE) {
+                                        runOnUiThread(new Runnable() {
+                                            @Override
+                                            public void run() {
+                                                mSecStateText.setText("Ownership transfer failed");
+                                                mStartConfigureSec.setEnabled(true);
+                                            }
+                                        });
+                                    }
                                     else {
                                         runOnUiThread(new Runnable() {
                                             @Override
@@ -492,21 +592,17 @@ public class EasysetupActivity extends Activity {
                                 @Override
                                 public void onProgress(GetConfigurationStatus getConfigurationStatus) {
                                     if(getConfigurationStatus.getESResult() == ESResult.ES_OK) {
-
                                         final EnrolleeConf enrolleeConf = getConfigurationStatus.getEnrolleeConf();
-                                        final DeviceConfig devConf = enrolleeConf.getDeviceConfig();
-                                        final WiFiConfig netInfo = enrolleeConf.getWiFiConfig();
                                         runOnUiThread(new Runnable() {
                                             @Override
                                             public void run() {
                                                 mGetconfigurationStateText.setText("Success");
-                                                mDevNameText.setText(devConf.getName());
-                                                mLanguageText.setText(devConf.getLanguage());
-                                                mCountryText.setText(devConf.getCountry());
-                                                setWifiModes(netInfo.getWifiModes());
-                                                setWifiFreq(netInfo.getWifiFreq());
+                                                mDevNameText.setText(enrolleeConf.getDeviceName());
+                                                mModelNumberText.setText(enrolleeConf.getModelNumber());
+                                                setWifiModes(enrolleeConf.getWiFiModes());
+                                                setWifiFreq(enrolleeConf.getWiFiFreq());
 
-                                                if(enrolleeConf.isCloudable()) {
+                                                if(enrolleeConf.isCloudAccessible()) {
                                                     mCloudAccessableText.setText("TRUE");
                                                 }
                                                 else {
@@ -514,7 +610,16 @@ public class EasysetupActivity extends Activity {
                                                 }
                                             }
                                         });
-
+                                    }
+                                    else if(getConfigurationStatus.getESResult() == ESResult.ES_COMMUNICATION_ERROR)
+                                    {
+                                        runOnUiThread(new Runnable() {
+                                            @Override
+                                            public void run() {
+                                                mGetconfigurationStateText.setText("Communication Error");
+                                                mStartGetConfiguration.setEnabled(true);
+                                            }
+                                        });
                                     }
                                     else {
                                         runOnUiThread(new Runnable() {
@@ -546,7 +651,7 @@ public class EasysetupActivity extends Activity {
     }
 
     private void addListenerForStartProvisionDevProp() {
-        mStartProvisionDevConf.setOnClickListener(new View.OnClickListener() {
+        mStartProvisionDevProp.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 Thread thread = new Thread() {
@@ -556,8 +661,8 @@ public class EasysetupActivity extends Activity {
                             runOnUiThread(new Runnable() {
                                 @Override
                                 public void run() {
-                                    mProvisionDevConfState.setText("Progress");
-                                    mStartProvisionDevConf.setEnabled(false);
+                                    mProvisionDevPropState.setText("Progress");
+                                    mStartProvisionDevProp.setEnabled(false);
                                 }
                             });
 
@@ -569,10 +674,11 @@ public class EasysetupActivity extends Activity {
                                     WIFI_ENCTYPE.fromInt(mEncType.getSelectedItemPosition());
                             String inputLanguage = mInputLanguageText.getText().toString();
                             String inputCountry = mInputCountryText.getText().toString();
+                            String inputLocation = mInputLocationText.getText().toString();
 
-                            DeviceProp deviceProp =
-                                    new DeviceProp(enrollerSSID, enrollerPW, authType, encType,
-                                                    inputLanguage, inputCountry);
+                            DeviceProp deviceProp = new DeviceProp();
+                            deviceProp.setWiFiProp(enrollerSSID, enrollerPW, authType, encType);
+                            deviceProp.setDevConfProp(inputLanguage, inputCountry, inputLocation);
 
                             mRemoteEnrollee.provisionDeviceProperties(deviceProp, new DevicePropProvisioningCallback() {
                                 @Override
@@ -582,15 +688,15 @@ public class EasysetupActivity extends Activity {
                                         @Override
                                         public void run() {
                                             if(result.equals(ESResult.ES_OK)) {
-                                                mProvisionDevConfState.setText("Success");
+                                                mProvisionDevPropState.setText("Success");
                                             }
                                             else if(result.equals(ESResult.ES_ERROR)) {
-                                                mProvisionDevConfState.setText("Failed");
+                                                mProvisionDevPropState.setText("Failed");
                                             }
-                                            else if(result.equals(ESResult.ES_UNAUTHORIZED)) {
-                                                mProvisionDevConfState.setText("Failed. Need SecProv");
+                                            else if(result.equals(ESResult.ES_COMMUNICATION_ERROR)) {
+                                                mProvisionDevPropState.setText("Communication Error");
                                             }
-                                            mStartProvisionDevConf.setEnabled(true);
+                                            mStartProvisionDevProp.setEnabled(true);
                                         }
                                     });
                                 }
@@ -600,8 +706,8 @@ public class EasysetupActivity extends Activity {
                             runOnUiThread(new Runnable() {
                                 @Override
                                 public void run() {
-                                    mProvisionDevConfState.setText("Failed");
-                                    mStartProvisionDevConf.setEnabled(true);
+                                    mProvisionDevPropState.setText("Failed");
+                                    mStartProvisionDevProp.setEnabled(true);
                                 }
                             });
                         }
@@ -614,7 +720,7 @@ public class EasysetupActivity extends Activity {
     }
 
     private void addListenerForStartProvisionCloudProp() {
-        mStartProvisionCloudConf.setOnClickListener(new View.OnClickListener() {
+        mStartProvisionCloudProp.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 Thread thread = new Thread() {
@@ -623,8 +729,8 @@ public class EasysetupActivity extends Activity {
                         runOnUiThread(new Runnable() {
                             @Override
                             public void run() {
-                                mProvisionCloudConfState.setText("Progress");
-                                mStartProvisionCloudConf.setEnabled(false);
+                                mProvisionCloudPropState.setText("Progress");
+                                mStartProvisionCloudProp.setEnabled(false);
                             }
                         });
 
@@ -633,33 +739,35 @@ public class EasysetupActivity extends Activity {
                             String authProvider = mAuthProviderText.getText().toString();
                             String ciserver = mCIServerText.getText().toString();
 
-                            CloudProp cloudProp =
-                                    new CloudProp(authCode, authProvider, ciserver);
+                            CloudProp cloudProp = new CloudProp();
+                            cloudProp.setCloudProp(authCode, authProvider, ciserver);
+                            cloudProp.setCloudID("f002ae8b-c42c-40d3-8b8d-1927c17bd1b3");
+                            cloudProp.setCredID(1);
 
                             mRemoteEnrollee.provisionCloudProperties(cloudProp, new CloudPropProvisioningCallback() {
                                 @Override
                                 public void onProgress(CloudPropProvisioningStatus cloudProvisioningStatus) {
                                     final ESResult result = cloudProvisioningStatus.getESResult();
-                                    final ESCloudProvState state = cloudProvisioningStatus.getESCloudState();
                                     runOnUiThread(new Runnable() {
                                         @Override
                                         public void run() {
-                                            if(result.equals(ESResult.ES_OK)) {
-                                                if(state.equals(ESCloudProvState.ES_CLOUD_ENROLLEE_FOUND)) {
-                                                    mProvisionCloudConfState.setText("Found Resource");
-                                                }
-                                                else if(state.equals(ESCloudProvState.ES_CLOUD_PROVISIONING_SUCCESS)) {
-                                                    mProvisionCloudConfState.setText("Success");
-                                                }
+                                            if(result.equals(ESResult.ES_ENROLLEE_DISCOVERY_FAILURE)) {
+                                                mProvisionCloudPropState.setText("Not Found Resource");
+                                            }
+                                            else if(result.equals(ESResult.ES_OK)) {
+                                                mProvisionCloudPropState.setText("Cloud Provisioning succeeds");
+                                            }
+                                            else if(result.equals(ESResult.ES_ACL_PROVISIONING_FAILURE)){
+                                                mProvisionCloudPropState.setText("ACL-provisioning fails");
+                                            }
+                                            else if(result.equals(ESResult.ES_CERT_PROVISIONING_FAILURE)){
+                                                mProvisionCloudPropState.setText("CERT-provisioning fails");
+                                            }
+                                            else if(result.equals(ESResult.ES_COMMUNICATION_ERROR)){
+                                                mProvisionCloudPropState.setText("Communication Error");
                                             }
                                             else {
-                                                if(state.equals(ESCloudProvState.ES_CLOUD_ENROLLEE_NOT_FOUND)) {
-                                                    mProvisionCloudConfState.setText("Not Found Resource");
-                                                }
-                                                else if(state.equals(ESCloudProvState.ES_CLOUD_PROVISIONING_ERROR)) {
-                                                    mProvisionCloudConfState.setText("Failed");
-                                                }
-                                                mStartProvisionCloudConf.setEnabled(true);
+                                                mProvisionCloudPropState.setText("Cloud Provisioning fails");
                                             }
                                         }
                                     });
@@ -670,8 +778,8 @@ public class EasysetupActivity extends Activity {
                             runOnUiThread(new Runnable() {
                                 @Override
                                 public void run() {
-                                    mProvisionCloudConfState.setText("Failed");
-                                    mStartProvisionCloudConf.setEnabled(true);
+                                    mProvisionCloudPropState.setText("Failed");
+                                    mStartProvisionCloudProp.setEnabled(true);
                                 }
                             });
                         }
@@ -783,6 +891,239 @@ public class EasysetupActivity extends Activity {
     }
 
     @Override
+    public void onPresence(OcPresenceStatus status, int sequence, String host) {
+        final String strStaus = status.getValue();
+        Log.d(TAG, "Presence response: " + strStaus + " sequence: " + sequence + " host: " + host);
+        runOnUiThread(new Runnable()
+        {
+            public void run() {
+                Toast.makeText(EasysetupActivity.this, "Easy-Setup completed", Toast.LENGTH_SHORT).show();
+            }
+        });
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if(resultCode==RESULT_OK && requestCode==1){
+            mAuthCode = data.getStringExtra("authCode");
+            mAuthProvider = data.getStringExtra("authProvider");
+            String text = "Received authCode= " + mAuthCode;
+            Log.d(TAG, text);
+            SignUpDevice();
+        }
+        else if(resultCode==RESULT_OK && requestCode==2)
+        {
+            mEnrolleeAuthCode = data.getStringExtra("authCode");
+            mAuthProvider = data.getStringExtra("authProvider");
+            mAuthCodeText.setText(mEnrolleeAuthCode);
+            mAuthProviderText.setText(mAuthProvider);
+            mAuthCodeText.setEnabled(false);
+            mAuthProviderText.setEnabled(false);
+
+            subscribeDevicePresence();
+        }
+    }
+
+    OcResource.OnPostListener onRefreshTokenPost = new OcResource.OnPostListener() {
+        @Override
+        public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {
+            Log.d(TAG, "onRefreshTokenPost..");
+            try {
+                mAccessToken = ocRepresentation.getValue("accesstoken");
+                mRefreshtoken = ocRepresentation.getValue("refreshtoken");
+
+                saveCloudTokenAtSharedPreferences();
+            }
+            catch (OcException e)
+            {
+                e.printStackTrace();
+            }
+
+            SignInDevice();
+        }
+
+        @Override
+        public void onPostFailed(Throwable throwable) {
+            Log.d(TAG, "onRefreshTokenPost failed..");
+        }
+    };
+
+    public void RefreshToken() {
+        try {
+            OcResource authResource = OcPlatform.constructResourceObject(CIServer, "/.well-known/ocf/account/tokenrefresh",
+                    EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP, OcConnectivityType.CT_IP_USE_V4),
+                    false, Arrays.asList("oic.wk.account"), Arrays.asList(OcPlatform.DEFAULT_INTERFACE));
+            OcRepresentation rep = new OcRepresentation();
+
+            runOnUiThread(new Runnable()
+            {
+                public void run() {
+                    Toast.makeText(EasysetupActivity.this, "RefreshToken in progress..", Toast.LENGTH_SHORT).show();
+                }
+            });
+
+            rep.setValue("di", deviceID);
+            rep.setValue("granttype", "refresh_token");
+            rep.setValue("refreshtoken", mRefreshtoken);
+            rep.setValue("uid", mUserID);
+            authResource.post(rep, new HashMap<String, String>(), onRefreshTokenPost);
+        }
+        catch(OcException e)
+        {
+            e.printStackTrace();
+        }
+
+        Log.d(TAG, "No error while executing login");
+    }
+
+    private void saveCloudTokenAtSharedPreferences() {
+        Log.d(TAG, "accesstoken: " + mAccessToken);
+        SharedPreferences settings = getApplicationContext().getSharedPreferences("IoTivityCloud", 0);
+        SharedPreferences.Editor editor = settings.edit();
+        editor.putString("accesstoken", mAccessToken);
+        editor.putString("refreshtoken", mRefreshtoken);
+        editor.putString("uid", mUserID);
+
+        if(editor.commit() == true)
+            Log.d(TAG, "accesstoken saved");
+        else
+            Log.d(TAG, "accesstoken not saved");
+    }
+
+    OcAccountManager.OnPostListener onSignUpPost = new OcAccountManager.OnPostListener() {
+        @Override
+        public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {
+            Log.d(TAG, "onSignUpPost..");
+            try {
+                runOnUiThread(new Runnable()
+                {
+                    public void run() {
+                        Toast.makeText(EasysetupActivity.this, "Sign-up completed", Toast.LENGTH_SHORT).show();
+                    }
+                });
+
+                mAccessToken = ocRepresentation.getValue("accesstoken");
+                mRefreshtoken = ocRepresentation.getValue("refreshtoken");
+                mUserID = ocRepresentation.getValue("uid");
+
+                if(mAccessToken != null)
+                {
+                    saveCloudTokenAtSharedPreferences();
+                    SignInDevice();
+                }
+                //TODO : save certificate
+            }
+            catch (OcException e)
+            {
+                e.printStackTrace();
+            }
+        }
+
+        @Override
+        public void onPostFailed(Throwable throwable) {
+            Log.d(TAG, "onSignUpPost failed.. : " + throwable.getMessage());
+        }
+    };
+
+    private void SignUpDevice() {
+        try {
+            Log.d(TAG, "SignUpDevice..");
+
+            runOnUiThread(new Runnable()
+            {
+                public void run() {
+                    Toast.makeText(EasysetupActivity.this, "SignUpDevice in progress..", Toast.LENGTH_SHORT).show();
+                }
+            });
+
+            if(m_accountManager != null) {
+                m_accountManager.signUp(mAuthProvider, mAuthCode, onSignUpPost);
+            }
+        }
+        catch(OcException e)
+        {
+            e.printStackTrace();
+        }
+
+        Log.d(TAG, "No error while executing SignUp");
+    }
+
+    OcAccountManager.OnPostListener onSignInPost = new OcAccountManager.OnPostListener() {
+        @Override
+        public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {
+            Log.d(TAG, "onSignInPost..");
+
+            runOnUiThread(new Runnable()
+            {
+                public void run() {
+                    Toast.makeText(EasysetupActivity.this, "Sign-in completed", Toast.LENGTH_SHORT).show();
+                }
+            });
+        }
+
+        @Override
+        public void onPostFailed(Throwable ex) {
+            if (ex instanceof OcException) {
+                OcException ocEx = (OcException) ex;
+                ErrorCode errCode = ocEx.getErrorCode();
+                Log.e(TAG, ocEx.getMessage());
+                if (ErrorCode.UNAUTHORIZED_REQ != errCode) {
+                    RefreshToken();
+                }
+            }
+        }
+    };
+
+    private void SignInDevice() {
+        try {
+            Log.d(TAG, "SignInDevice..");
+
+            runOnUiThread(new Runnable()
+            {
+                public void run() {
+                    Toast.makeText(EasysetupActivity.this, "SignInDevice in progress..", Toast.LENGTH_SHORT).show();
+                }
+            });
+            if(m_accountManager != null) {
+                m_accountManager.signIn(mUserID, mAccessToken, onSignInPost);
+            }
+        }
+        catch(OcException e)
+        {
+            e.printStackTrace();
+        }
+
+        Log.d(TAG, "No error while executing login");
+    }
+
+    @Override
+    public void onObserveCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation, int i) {
+        Log.d(TAG,"onObserveCompleted");
+    }
+
+    @Override
+    public void onObserveFailed(Throwable throwable) {
+        Log.d(TAG,"onObserveFailed");
+    }
+
+    public void subscribeDevicePresence()
+    {
+        List<String> deviceIDs = new ArrayList<String>();
+        deviceIDs.add(mEnrolleeDeviceID);
+
+        try {
+
+            OcPlatform.subscribeDevicePresence(CIServer, deviceIDs, EnumSet.of(OcConnectivityType.
+                                               CT_ADAPTER_TCP), this);
+        } catch(OcException e)
+        {
+            e.printStackTrace();
+        }
+
+    }
+
+    @Override
     protected void onDestroy() {
         super.onDestroy();
     }