dbb3c10e4df3b216aebacadcdc0e80f2364d8faa
[platform/upstream/iotivity.git] / service / soft-sensor-manager / SampleApp / android / SSMTesterApp / src / org / iotivity / service / ssm / sample / MainActivity.java
1 package org.iotivity.service.ssm.sample;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.OutputStream;
7 import java.util.ArrayList;
8 import java.util.Iterator;
9 import java.util.List;
10 import java.util.UUID;
11
12 import org.iotivity.service.ssm.*;
13
14 import android.app.Activity;
15 import android.content.Context;
16 import android.content.SharedPreferences;
17 import android.content.SharedPreferences.Editor;
18 import android.content.res.AssetManager;
19 import android.os.Bundle;
20 import android.os.Handler;
21 import android.os.Message;
22 import android.util.Log;
23 //import android.view.Menu;
24 import android.view.View;
25 import android.widget.EditText;
26 import android.widget.ScrollView;
27 import android.widget.TextView;
28
29 public class MainActivity extends Activity {
30         
31         private SSMInterface SoftSensorManager = null;
32         private List<Integer>   mRunningQueries = new ArrayList<Integer>();
33                 
34         private IQueryEngineEvent mQueryEngineEventListener = new IQueryEngineEvent()
35         {
36                 @Override
37                 public void OnQueryEngineEvent(int cqid, DataReader result)
38                 {
39                         Log.i("[SSM]", "event received! cqid=" + cqid);
40                         PrintLog("Event from cqid " + cqid + " has received");
41                                                 
42                         List<String> models = result.GetAffectedModels();
43                         
44                         for(String modelName : models)
45                         {
46                                 PrintLog("Model: " + modelName);
47                                 int dataCount = result.GetModelDataCount(modelName);
48                                 for(int i=0; i < dataCount; i++)
49                                 {
50                                         ModelData modelData = 
51                                                         result.GetModelData(modelName, i);
52                                         for(int j=0; j < modelData.GetPropertyCount(); j++)
53                                         {
54                                                 PrintLog("Name: " + modelData.GetPropertyName(j) + 
55                                                                 " Value: " + modelData.GetPropertyValue(j));
56                                         }
57                                 }
58                         }
59                 }
60         };
61         
62         void PrintLog(String log)
63         {
64                 Message msg = new Message();
65                 Bundle data = new Bundle();
66                 data.putString("Log", log);
67                 msg.setData(data);
68                 logHandler.sendMessage(msg);
69         }
70         
71         private Handler logHandler = new Handler()
72         {
73                 @Override
74                 public void handleMessage(Message msg)
75                 {
76                         tvLog.append(msg.getData().getString("Log") + "\n");
77                         svLog.fullScroll(ScrollView.FOCUS_DOWN);
78                 }
79         };
80         
81         private TextView        tvLog = null;
82         private ScrollView      svLog = null;
83         private EditText        edtQuery = null;
84         private EditText        edtUnregisterQuery = null;
85     
86     View.OnClickListener clickHandler = new View.OnClickListener() {
87                 
88                 public void onClick(View v)
89                 {
90                         switch(v.getId())
91                         {
92                         case R.id.btnRegisterQuery:
93                                 int cqid = SoftSensorManager.registerQuery(edtQuery.getText().toString(), mQueryEngineEventListener);
94                                 mRunningQueries.add(cqid);
95                                 PrintLog(edtQuery.getText().toString() + " has executed, cqid=" + cqid);
96                                 break;
97                                 
98                         case R.id.btnUnregisterQuery:
99                                 Iterator<Integer> it = mRunningQueries.iterator();
100                                 while(it.hasNext())
101                                 {
102                                         if(it.next() == Integer.parseInt(edtUnregisterQuery.getText().toString()))
103                                         {
104                                                 SoftSensorManager.unregisterQuery(Integer.parseInt(edtUnregisterQuery.getText().toString()));
105                                                 PrintLog("Unregister Query has executed, cqid=" + Integer.parseInt(edtUnregisterQuery.getText().toString()));
106                                                 it.remove();
107                                         }
108                                 }
109                                 break;
110                                 
111                         case R.id.btPlus:
112                                 int queryNum = Integer.parseInt(edtUnregisterQuery.getText().toString()) + 1;
113                                 edtUnregisterQuery.setText(queryNum + "");
114                                 break;
115                                 
116                         case R.id.btMinus:
117                                 queryNum = Integer.parseInt(edtUnregisterQuery.getText().toString()) - 1;
118                                 edtUnregisterQuery.setText(queryNum + "");
119                                 break;
120                         }
121                 }
122         };
123         
124          View.OnClickListener textAddHandler = new View.OnClickListener() {
125                         
126                         public void onClick(View v)
127                         {
128                                 switch(v.getId())
129                                 {
130                                 case R.id.btClear :
131                                         edtQuery.setText("");
132                                         break;
133                                 
134                                 case R.id.btLogClear :
135                                         tvLog.setText("");
136                                         break;
137                                 
138                                 case R.id.btFullDevice:
139                                         edtQuery.setText("subscribe Device if Device.dataId != 0");
140                                         break;
141                                 
142                                 case R.id.btDiscomfortIndex:
143                                         edtQuery.setText("subscribe Device.DiscomfortIndexSensor if Device.DiscomfortIndexSensor.discomfortIndex > 0");
144                                         break;
145                                 }
146                         }
147                 };
148                 
149     @Override
150     public void onCreate(Bundle savedInstanceState) 
151     {
152         super.onCreate(savedInstanceState);
153         setContentView(R.layout.activity_main);
154         
155         tvLog = (TextView)findViewById(R.id.txtLog);
156         svLog = (ScrollView)findViewById(R.id.sclLog);
157         edtQuery = (EditText)findViewById(R.id.editQuery);
158         edtUnregisterQuery = (EditText)findViewById(R.id.editUnregisterQuery);
159         
160         findViewById(R.id.btnRegisterQuery).setOnClickListener(clickHandler);     
161         findViewById(R.id.btnUnregisterQuery).setOnClickListener(clickHandler);      
162         findViewById(R.id.btFullDevice).setOnClickListener(textAddHandler);       
163         findViewById(R.id.btDiscomfortIndex).setOnClickListener(textAddHandler);
164         findViewById(R.id.btPlus).setOnClickListener(clickHandler);        
165         findViewById(R.id.btMinus).setOnClickListener(clickHandler);
166         findViewById(R.id.btClear).setOnClickListener(textAddHandler);
167         findViewById(R.id.btLogClear).setOnClickListener(textAddHandler);
168         
169                 copyFiles("lib");
170         
171         SoftSensorManager = new SSMInterface();
172         
173         String initConfig = "<SSMCore>" +
174                         "<Device>" +
175                                 "<UDN>"+getUUID()+"</UDN>" +
176                                 "<Name>MyMobile</Name>" +
177                                 "<Type>Mobile</Type>" +
178                                 "</Device>" +
179                                 "<Config>" +
180                                 "<SoftSensorRepository>/data/data/" +  getPackageName() + "/files/</SoftSensorRepository>" +
181                                 "<SoftSensorDescription>/data/data/" + getPackageName() + "/files/SoftSensorDescription.xml</SoftSensorDescription>" + 
182                                 "</Config>" +
183                                 "</SSMCore>";
184         
185         try 
186         {
187                         SoftSensorManager.startSSMCore(initConfig);
188                 } 
189         catch (Exception e) 
190         {
191                         // TODO Auto-generated catch block
192                         e.printStackTrace();
193                 }
194     }
195       
196     @Override
197     protected void onDestroy()
198     {
199         SoftSensorManager.stopSSMCore();
200         
201         super.onDestroy();
202     }
203     
204         private String getUUID() 
205         {
206                 String  PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
207                 SharedPreferences sharedPrefs = getSharedPreferences(PREF_UNIQUE_ID, Context.MODE_PRIVATE);
208                 String uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
209             
210                 if (uniqueID == null) 
211                 {
212                uniqueID = UUID.randomUUID().toString();
213                Editor editor = sharedPrefs.edit();
214                editor.putString(PREF_UNIQUE_ID, uniqueID);
215                editor.commit();
216             }
217             
218                 return uniqueID;
219         }
220                 
221         private void copyFiles(String path)
222     {            
223                 AssetManager assetManager = getAssets();
224             String assets[] = null;
225             
226             try 
227             {
228                 assets = assetManager.list(path);
229                 
230                 if (assets.length == 0) 
231                 {                       
232                     copyFile(path);
233                 } 
234                 else 
235                 {
236                     String fullPath = "/data/data/" + this.getClass().getPackage().toString() + "/" + path;
237                     File dir = new File(fullPath);
238                     
239                     if (!dir.exists())
240                         dir.mkdir();
241                     for (int i = 0; i < assets.length; ++i) 
242                     {
243                         copyFiles(path + "/" + assets[i]);
244                     }
245                 }
246             }
247             catch (IOException ex) 
248             {   
249                 Log.e("tag", "I/O Exception", ex);
250             }
251         }
252             
253         private void copyFile(String filename) 
254         {
255             AssetManager assetManager = getAssets();
256             InputStream in = null;
257             OutputStream out = null;
258             
259             try 
260             {
261                 in = assetManager.open(filename);
262                 out = openFileOutput(filename.split("/")[1], Context.MODE_PRIVATE);
263                
264                 byte[] buffer = new byte[1024];
265                 int read;
266
267                 while ((read = in.read(buffer)) != -1) 
268                 {
269                     out.write(buffer, 0, read);
270                 }
271                 
272                 in.close();
273                 in = null;
274                 out.flush();
275                 out.close();
276                 out = null;
277             }
278             catch (Exception e)
279             {
280                 Log.e("tag", e.getMessage());
281             }
282         }
283 }