Modified android mediator UI for BLE onBoarding
[platform/upstream/iotivity.git] / service / easy-setup / sdk / mediator / android / EasySetupCore / src / main / java / org / iotivity / service / easysetup / impl / EnrolleeDeviceBLEOnBoarding.java
1 //******************************************************************
2 //
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20 package org.iotivity.service.easysetup.impl;
21
22 import android.content.Context;
23 import android.util.Log;
24
25 import org.iotivity.base.OcConnectivityType;
26 import org.iotivity.service.easysetup.core.BleConnection;
27 import org.iotivity.service.easysetup.core.OnBoardingConnection;
28 import org.iotivity.service.easysetup.core.EnrolleeDevice;
29 import org.iotivity.service.easysetup.core.EnrolleeState;
30 import org.iotivity.service.easysetup.core.OnBoardingConfig;
31 import org.iotivity.service.easysetup.core.ProvisioningConfig;
32 import org.iotivity.service.easysetup.mediator.EasySetupManager;
33 import org.iotivity.service.easysetup.mediator.EnrolleeInfo;
34 import org.iotivity.service.easysetup.mediator.IOnBoardingStatus;
35 import org.iotivity.service.easysetup.mediator.IProvisioningListener;
36 import org.iotivity.service.easysetup.mediator.ProvisionEnrollee;
37 import org.iotivity.service.easysetup.mediator.ble.BLEManager;
38
39 public class EnrolleeDeviceBLEOnBoarding extends EnrolleeDevice {
40     /**
41      * @param onBoardingConfig Contains details about the connectivity to be established between
42      * the Enrollee device & Mediator device in order to perform
43      * on-boarding
44      * @param provConfig       Contains details about the network to which Enrollee device is
45      */
46     public static final String TAG = EnrolleeDeviceWiFiOnboarding.class.getName();
47
48     final Context mContext;
49     BLEManager bleManager;
50     EnrolleeInfo connectedDevice;
51     ProvisionEnrollee provisionEnrolleInstance;
52     private EasySetupManager easySetupManagerNativeInstance;
53
54
55     IOnBoardingStatus deviceScanListener = new IOnBoardingStatus() {
56
57         @Override
58         public void deviceOnBoardingStatus(EnrolleeInfo enrolleStatus) {
59             Log.d("ESBLEOnBoarding", "Entered");
60             if (enrolleStatus != null && enrolleStatus.getHWAddr() != null) {
61                 String finalResult = "Easy Connect : ";
62
63                 if (enrolleStatus.isReachable()) {
64                     finalResult = "Device OnBoarded" + "["
65                             + enrolleStatus.getHWAddr() + "]";
66                     connectedDevice = enrolleStatus;
67                     BleConnection conn = new BleConnection();
68                     conn.setMacaddress(connectedDevice.getHWAddr());
69                     conn.setConnectivity(true);
70                     conn.setmServiceUUID(connectedDevice.getIpAddr());
71                     conn.setmDeviceName(connectedDevice.getDevice());
72                     Log.d("ESBLEOnBoarding", "Entered" + ":" + finalResult);
73                     mOnBoardingCallback.onFinished(conn);
74                     return;
75
76                 }
77             }
78
79             BleConnection conn = new BleConnection();
80             conn.setConnectivity(false);
81             mOnBoardingCallback.onFinished(conn);
82
83
84         }
85     };
86
87     protected EnrolleeDeviceBLEOnBoarding(Context context, OnBoardingConfig onBoardingConfig,
88                                           ProvisioningConfig provConfig) {
89         super(onBoardingConfig, provConfig);
90         mContext = context;
91         bleManager = new BLEManager(mContext, (BLEOnBoardingConfig) onBoardingConfig);
92     }
93
94     @Override
95     protected void startOnBoardingProcess() {
96         Log.i(TAG, "Starging on boarding process");
97
98         boolean status = bleManager.setupBluetooth();
99         mState = EnrolleeState.DEVICE_ON_BOARDING_STATE;
100         Log.i(TAG, "Bluetooth started with status " + status);
101         if (status) {
102             Log.i(TAG, "Scanning available BLE devices");
103             bleManager.startScan(deviceScanListener);
104
105         }
106
107     }
108
109     @Override
110     protected void stopOnBoardingProcess() {
111
112         if (bleManager != null)
113             bleManager.stopscan();
114
115     }
116
117     @Override
118     protected void startProvisioningProcess(OnBoardingConnection conn) {
119
120         Log.i("start provisioning BLE", mProvConfig.getConnType() + "");
121
122         mState = EnrolleeState.DEVICE_PROVISIONING_STATE;
123         provisionEnrolleInstance = new ProvisionEnrollee(mContext);
124         provisionEnrolleInstance.registerProvisioningHandler(new IProvisioningListener() {
125             @Override
126             public void onFinishProvisioning(int statuscode) {
127                 mState = (statuscode == 0) ? EnrolleeState.DEVICE_PROVISIONING_SUCCESS_STATE :
128                         EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;
129                 mProvisioningCallback.onFinished(EnrolleeDeviceBLEOnBoarding.this);
130             }
131         });
132
133         BleConnection connection = (BleConnection) conn;
134         WiFiProvConfig wifiProvConfig = (WiFiProvConfig) mProvConfig;
135         easySetupManagerNativeInstance = EasySetupManager.getInstance();
136         easySetupManagerNativeInstance.setApplicationContext(mContext);
137         easySetupManagerNativeInstance.initEasySetup();
138         Log.d("init", "successful");
139         OcConnectivityType ocConnectivityType = OcConnectivityType.CT_ADAPTER_GATT_BTLE;
140         easySetupManagerNativeInstance.provisionEnrollee(connection.getMacaddress(),
141                 wifiProvConfig.getSsId(),
142                 wifiProvConfig.getPassword(),
143                 ocConnectivityType.getValue());
144
145
146     }
147 }