Fixed SoftAP device removal notifications
[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.service.easysetup.core.BleConnection;
26 import org.iotivity.service.easysetup.core.OnBoardingConnection;
27 import org.iotivity.service.easysetup.core.EnrolleeDevice;
28 import org.iotivity.service.easysetup.core.EnrolleeState;
29 import org.iotivity.service.easysetup.core.OnBoardingConfig;
30 import org.iotivity.service.easysetup.core.ProvisioningConfig;
31 import org.iotivity.service.easysetup.mediator.EasySetupManager;
32 import org.iotivity.service.easysetup.mediator.EnrolleeInfo;
33 import org.iotivity.service.easysetup.mediator.IOnBoardingStatus;
34 import org.iotivity.service.easysetup.mediator.IProvisioningListener;
35 import org.iotivity.service.easysetup.mediator.ProvisionEnrollee;
36 import org.iotivity.service.easysetup.mediator.ble.BLEManager;
37
38 public class EnrolleeDeviceBLEOnBoarding extends EnrolleeDevice {
39     /**
40      * @param onBoardingConfig Contains details about the connectivity to be established between
41      * the Enrollee device & Mediator device in order to perform
42      * on-boarding
43      * @param provConfig       Contains details about the network to which Enrollee device is
44      */
45     public static final String TAG = EnrolleeDeviceWiFiOnboarding.class.getName();
46
47     final Context mContext;
48     BLEManager bleManager;
49     EnrolleeInfo connectedDevice;
50     ProvisionEnrollee provisionEnrolleInstance;
51     private EasySetupManager easySetupManagerNativeInstance;
52
53
54     IOnBoardingStatus deviceScanListener = new IOnBoardingStatus() {
55
56         @Override
57         public void deviceOnBoardingStatus(EnrolleeInfo enrolleStatus) {
58             Log.d("ESBLEOnBoarding", "Entered");
59             if (enrolleStatus != null && enrolleStatus.getHWAddr() != null) {
60                 String finalResult = "Easy Connect : ";
61
62                 if (enrolleStatus.isReachable()) {
63                     finalResult = "Device OnBoarded" + "["
64                             + enrolleStatus.getHWAddr() + "]";
65                     connectedDevice = enrolleStatus;
66                     BleConnection conn = new BleConnection();
67                     conn.setMacaddress(connectedDevice.getHWAddr());
68                     conn.setConnectivity(true);
69                     Log.d("ESBLEOnBoarding", "Entered" + ":" + finalResult);
70                     mOnBoardingCallback.onFinished(conn);
71                     return;
72
73                 }
74             }
75
76             BleConnection conn = new BleConnection();
77             conn.setConnectivity(false);
78             mOnBoardingCallback.onFinished(conn);
79
80
81         }
82     };
83
84     protected EnrolleeDeviceBLEOnBoarding(Context context, OnBoardingConfig onBoardingConfig, ProvisioningConfig provConfig) {
85         super(onBoardingConfig, provConfig);
86         mContext = context;
87         bleManager = new BLEManager(mContext, (BLEOnBoardingConfig) onBoardingConfig);
88     }
89
90     @Override
91     protected void startOnBoardingProcess() {
92         Log.i(TAG, "Starging on boarding process");
93
94         boolean status = bleManager.setupBluetooth();
95
96         Log.i(TAG, "Bluetooth started with status " + status);
97         if (status) {
98             Log.i(TAG, "Scanning available BLE devices");
99             bleManager.startScan(deviceScanListener);
100
101         }
102
103     }
104
105     @Override
106     protected void stopOnBoardingProcess() {
107
108         bleManager.stopscan();
109
110     }
111
112     @Override
113     protected void startProvisioningProcess(OnBoardingConnection conn) {
114
115         Log.i("start provisioning BLE", mProvConfig.getConnType() + "");
116
117         //if (mProvConfig.getConnType() == ProvisioningConfig.ConnType.WiFi)
118         {
119
120             provisionEnrolleInstance = new ProvisionEnrollee(mContext);
121             provisionEnrolleInstance.registerProvisioningHandler(new IProvisioningListener() {
122                 @Override
123                 public void onFinishProvisioning(int statuscode) {
124                     mState = (statuscode == 0) ? EnrolleeState.DEVICE_PROVISIONING_SUCCESS_STATE : EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;
125                     mProvisioningCallback.onFinished(EnrolleeDeviceBLEOnBoarding.this);
126                 }
127             });
128
129             BleConnection connection = (BleConnection) conn;
130             WiFiProvConfig wifiProvConfig = (WiFiProvConfig) mProvConfig;
131             if (mContext == null)
132                 Log.d("BLE context is null", "");
133             else Log.d("BLE context is not null", "");
134             easySetupManagerNativeInstance = EasySetupManager.getInstance();
135
136
137             easySetupManagerNativeInstance.setApplicationContext(mContext);
138             easySetupManagerNativeInstance.initEasySetup();
139             Log.d("init", "successful");
140             easySetupManagerNativeInstance.provisionEnrollee(connection.getMacaddress(), wifiProvConfig.getSsId(), wifiProvConfig.getPassword(), 0);
141
142         }
143
144     }
145 }