Refactoring of EasySetup Android implementation
[platform/upstream/iotivity.git] / service / easy-setup / sdk / mediator / android / EasySetupCore / src / main / java / org / iotivity / service / easysetup / core / EasySetupService.java
1 package org.iotivity.service.easysetup.core;
2
3 import android.content.Context;
4 import android.util.Log;
5
6 import org.iotivity.service.easysetup.impl.EnrolleeDeviceFactory;
7
8 import java.io.IOException;
9 import java.util.ArrayList;
10
11 public class EasySetupService {
12
13     private static EasySetupService sInstance ;
14
15     private final EasySetupStatus mCallback;
16
17     private ArrayList<EnrolleeDevice>mEnrolleeDeviceList;
18
19     private final ProvisioningCallback mProvisioningCallback;
20
21     private static Context mContext;
22
23     public EnrolleeDeviceFactory mDeviceFactory;
24
25
26     private EasySetupService(EasySetupStatus callback) {
27         mCallback = callback;
28         mProvisioningCallback = new ProvisioningCallbackImpl(mCallback);
29         mEnrolleeDeviceList = new ArrayList<EnrolleeDevice> ();
30         mContext = null;
31         mDeviceFactory = null;
32     }
33
34     // TODO : Implement singleton method
35     public synchronized static EasySetupService getInstance(Context context, EasySetupStatus callback) {
36         if(sInstance == null) {
37             sInstance = new EasySetupService(callback);
38             mContext = context;
39         }
40         return sInstance ;
41     }
42
43     public synchronized void startSetup (final EnrolleeDevice enrolledevice) throws IOException{
44
45         mEnrolleeDeviceList.add(enrolledevice);
46
47         // Starts the provisioning directly if the device is already on boarded on the network.
48         if(enrolledevice.onBoarded()) {
49             enrolledevice.startProvisioning(mProvisioningCallback);
50             return;
51         }
52
53         enrolledevice.startOnBoarding(new OnBoardingCallback() {
54
55             @Override
56             public void onFinished(ConnectionInterface connection) {
57                 if(connection.isConnected()) {
58                     try {
59                         Thread.sleep(15000);//Sleep for allowing thin device to start the services
60                     } catch (InterruptedException e) {
61                         e.printStackTrace();
62                     }
63
64                     // Start provisioning here
65                     enrolledevice.setConnection(connection);
66                     enrolledevice.startProvisioning(mProvisioningCallback);
67                 }else{
68                     enrolledevice.mState = EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;
69                     mProvisioningCallback.onFinished(enrolledevice);
70                 }
71
72             }
73
74         });
75
76     }
77
78     public synchronized void stopSetup (EnrolleeDevice enrolledevice) {
79         enrolledevice.stopOnBoardingProcess();
80         mEnrolleeDeviceList.remove(enrolledevice);
81     }
82
83     public synchronized void getEnrolleeDevice (OnBoardingConfig connType) {
84         mDeviceFactory = EnrolleeDeviceFactory.newInstance(mContext);
85     }
86
87     class ProvisioningCallbackImpl extends ProvisioningCallback {
88
89         private final EasySetupStatus mCallback ;
90
91         ProvisioningCallbackImpl (EasySetupStatus callback) {
92             mCallback  = callback;
93         }
94
95         @Override
96         public void onFinished(EnrolleeDevice enrolledevice) {
97             //if(mEnrolleeDeviceList.contains(enrolledevice)) {
98                 mCallback.onFinished(enrolledevice);
99             //}
100         }
101
102     }
103
104
105 }