Refactoring of EasySetup Android implementation
[platform/upstream/iotivity.git] / service / easy-setup / sdk / mediator / android / EasySetupCore / src / main / java / org / iotivity / service / easysetup / impl / EnrolleeDeviceWiFiOnboarding.java
1 package org.iotivity.service.easysetup.impl;
2
3 import java.util.Timer;
4 import java.util.TimerTask;
5
6 import org.iotivity.service.easysetup.core.ConnectionInterface;
7 import org.iotivity.service.easysetup.core.EnrolleeDevice;
8 import org.iotivity.service.easysetup.core.EnrolleeState;
9 import org.iotivity.service.easysetup.core.IpConnection;
10 import org.iotivity.service.easysetup.core.OnBoardingConfig;
11 import org.iotivity.service.easysetup.core.ProvisioningConfig;
12 import org.iotivity.service.easysetup.mediator.EasySetupCallbackHandler;
13 import org.iotivity.service.easysetup.mediator.EasySetupManager;
14 import org.iotivity.service.easysetup.mediator.EnrolleeInfo;
15 import org.iotivity.service.easysetup.mediator.IOnBoardingStatus;
16 import org.iotivity.service.easysetup.mediator.IProvisioningListener;
17 import org.iotivity.service.easysetup.mediator.ProvisionEnrollee;
18 import org.iotivity.service.easysetup.mediator.ip.WiFiSoftAPManager;
19
20 import android.content.Context;
21 import android.net.wifi.WifiConfiguration;
22 import android.util.Log;
23 import android.widget.Toast;
24
25 public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice  {
26
27     public static final String TAG = EnrolleeDeviceWiFiOnboarding.class.getName();
28
29     final Context  mContext;
30     final WiFiSoftAPManager mWifiSoftAPManager;
31     EnrolleeInfo      connectedDevice;
32     private EasySetupManager  easySetupManagerNativeInstance ;
33     ProvisionEnrollee provisionEnrolleInstance;
34
35     IOnBoardingStatus deviceScanListener = new IOnBoardingStatus() {
36
37            @Override
38             public void deviceOnBoardingStatus(EnrolleeInfo enrolleStatus) {
39                 Log.d("ESSoftAPOnBoarding", "Entered");
40                 if (enrolleStatus != null && enrolleStatus.getIpAddr() != null) {
41                     String finalResult = "Easy Connect : ";
42
43                     if (enrolleStatus.isReachable()) {
44                         finalResult = "Device OnBoarded" + "["
45                                 + enrolleStatus.getIpAddr() + "]";
46
47                         /*
48                          * easySetupInstance.StartEasySetup(enrolleStatus.getIpAddr()) ;
49                          * easySetupCount++; Log.i("EasyConnect",
50                          * "easy Setup Count-"+easySetupCount); Log.i("EasyConnect",
51                          * "IP Address-"+enrolleStatus.getIpAddr());
52                          */
53                            connectedDevice = enrolleStatus;
54                            IpConnection conn = new IpConnection();
55                            conn.setConnectivity(true);
56                            conn.setIp(connectedDevice.getIpAddr());
57                            Log.d("ESSoftAPOnBoarding", "Entered");
58                            mOnBoardingCallback.onFinished(conn);
59                            return;
60
61                     }
62
63 /*                    textView1.setText("");
64                     textView1.append("Clients: \n");
65                     textView1.append("####################\n");
66                     textView1.append("IP Address     : " + enrolleStatus.getIpAddr()
67                             + "\n");
68                     textView1.append("Device          : " + enrolleStatus.getDevice() + "\n");
69                     textView1.append("HW Address     : " + enrolleStatus.getHWAddr()
70                             + "\n");
71                     textView1.append("Is OnBoarded    : " + enrolleStatus.isReachable()
72                             + "\n");
73
74                     Toast.makeText(getApplicationContext(), finalResult,
75                             Toast.LENGTH_LONG).show();*/
76
77
78                 }
79
80                    IpConnection conn = new IpConnection();
81                    conn.setConnectivity(false);
82                    mOnBoardingCallback.onFinished(conn);
83             }
84     };
85
86
87     protected EnrolleeDeviceWiFiOnboarding(Context context, OnBoardingConfig onBoardingConfig, ProvisioningConfig provConfig) {
88         super(onBoardingConfig, provConfig);
89         mContext = context;
90         mWifiSoftAPManager = new WiFiSoftAPManager(mContext);
91     }
92
93     @Override
94     protected void startOnBoardingProcess() {
95         // TODO Auto-generated method stub
96
97         //2. Get call back once enrolling device connect to the Soft AP
98         //3. fetch the IP assigned to enrolling device
99         //4. Call below steps
100
101         Log.i(TAG, "Starging on boarding process");
102
103         //1. Create Soft AP
104         boolean status = mWifiSoftAPManager.setWifiApEnabled((WifiConfiguration)mOnBoardingConfig.getConfig(), true);
105
106         Log.i(TAG, "Soft AP is created with status " + status);
107
108
109         Timer  myTimer;
110         myTimer = new Timer();
111         myTimer.schedule(new TimerTask() {
112             @Override
113             public void run() {
114                 // Below function to be called after 5 seconds
115                 mWifiSoftAPManager.getClientList(deviceScanListener, 300);
116             }
117
118         }, 0, 5000);
119
120
121
122     }
123
124     protected void stopOnBoardingProcess() {
125         Log.i(TAG, "Stopping on boarding process");
126         boolean status = mWifiSoftAPManager.setWifiApEnabled(null, false);
127         Log.i(TAG, "Soft AP is disabled with status " + status);
128     }
129
130     @Override
131     protected void startProvisioningProcess(ConnectionInterface conn) {
132
133         if(mProvConfig.getConnType() == ProvisioningConfig.ConnType.WiFi) {
134
135             provisionEnrolleInstance = new ProvisionEnrollee(mContext);
136             provisionEnrolleInstance.registerProvisioningHandler(new IProvisioningListener() {
137                 @Override
138                 public void onFinishProvisioning(int statuscode) {
139                     mState = ( statuscode == 0) ? EnrolleeState.DEVICE_PROVISIONING_SUCCESS_STATE : EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;
140                     mProvisioningCallback.onFinished(EnrolleeDeviceWiFiOnboarding.this);
141                 }
142             });
143
144             IpConnection connection = (IpConnection)conn;
145             WiFiProvConfig wifiProvConfig = (WiFiProvConfig)mProvConfig;
146             easySetupManagerNativeInstance = EasySetupManager.getInstance();
147             easySetupManagerNativeInstance.initEasySetup();
148             easySetupManagerNativeInstance.provisionEnrollee(connection .getIp(), wifiProvConfig.getSsId(), wifiProvConfig.getPassword(), 0 /*In base code '0' is hard coded*/);
149
150         }
151
152     }
153
154
155
156 }