1 package org.iotivity.service.ssm.sample;
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;
10 import java.util.UUID;
12 import org.iotivity.service.ssm.DataReader;
13 import org.iotivity.service.ssm.IQueryEngineEvent;
14 import org.iotivity.service.ssm.ModelData;
15 import org.iotivity.service.ssm.R;
16 import org.iotivity.service.ssm.SSMInterface;
18 import android.app.Activity;
19 import android.content.Context;
20 import android.content.SharedPreferences;
21 import android.content.SharedPreferences.Editor;
22 import android.content.res.AssetManager;
23 import android.os.Bundle;
24 import android.os.Handler;
25 import android.os.Message;
26 import android.util.Log;
27 import android.view.View;
28 import android.widget.EditText;
29 import android.widget.ScrollView;
30 import android.widget.TextView;
32 public class MainActivity extends Activity {
34 private SSMInterface SoftSensorManager = null;
35 private ArrayList<Integer> mRunningQueries = new ArrayList<Integer>();
37 private IQueryEngineEvent mQueryEngineEventListener = new IQueryEngineEvent() {
39 public void OnQueryEngineEvent(int cqid, DataReader result) {
40 Log.i("[SSM]", "event received! cqid=" + cqid);
41 PrintLog("Event from cqid " + cqid + " has received");
43 List<String> models = result.GetAffectedModels();
45 for (String modelName : models) {
46 PrintLog("Model: " + modelName);
48 int dataCount = result.GetModelDataCount(modelName);
49 for (int i = 0; i < dataCount; i++) {
50 ModelData modelData = result.GetModelData(modelName, i);
51 for (int j = 0; j < modelData.GetPropertyCount(); j++) {
52 PrintLog("Name: " + modelData.GetPropertyName(j)
54 + modelData.GetPropertyValue(j));
57 } catch (Exception e) {
59 PrintLog("Receiving Event from cqid " + cqid + " failed");
65 void PrintLog(String log) {
66 Message msg = new Message();
67 Bundle data = new Bundle();
68 data.putString("Log", log);
70 logHandler.sendMessage(msg);
73 private Handler logHandler = new Handler() {
75 public void handleMessage(Message msg) {
76 tvLog.append(msg.getData().getString("Log") + "\n");
77 svLog.fullScroll(ScrollView.FOCUS_DOWN);
81 private TextView tvLog = null;
82 private ScrollView svLog = null;
83 private EditText edtQuery = null;
84 private EditText edtUnregisterQuery = null;
86 View.OnClickListener clickHandler = new View.OnClickListener() {
88 public void onClick(View v) {
90 case R.id.btnRegisterQuery:
93 cqid = SoftSensorManager.registerQuery(edtQuery.getText()
94 .toString(), mQueryEngineEventListener);
95 mRunningQueries.add(cqid);
96 PrintLog(edtQuery.getText().toString()
97 + " has executed, cqid=" + cqid);
98 } catch (Exception e) {
99 PrintLog("Register Query failed");
104 case R.id.btnUnregisterQuery:
105 Iterator<Integer> it = mRunningQueries.iterator();
107 while (it.hasNext()) {
108 if (it.next() == Integer.parseInt(edtUnregisterQuery
109 .getText().toString())) {
111 SoftSensorManager.unregisterQuery(Integer
112 .parseInt(edtUnregisterQuery.getText()
114 PrintLog("Unregister Query has executed, cqid="
115 + Integer.parseInt(edtUnregisterQuery
116 .getText().toString()));
118 } catch (NumberFormatException e) {
119 PrintLog("Invalid Query Id");
120 } catch (Exception e) {
121 PrintLog("UnRegister Query failed");
129 int queryNum = Integer.parseInt(edtUnregisterQuery.getText()
131 edtUnregisterQuery.setText(queryNum + "");
135 queryNum = Integer.parseInt(edtUnregisterQuery.getText()
137 edtUnregisterQuery.setText(queryNum + "");
143 View.OnClickListener textAddHandler = new View.OnClickListener() {
145 public void onClick(View v) {
148 edtQuery.setText("");
151 case R.id.btLogClear:
155 case R.id.btFullDevice:
156 edtQuery.setText("subscribe Device if Device.dataId != 0");
159 case R.id.btDiscomfortIndex:
160 edtQuery.setText("subscribe Device.DiscomfortIndexSensor if Device.DiscomfortIndexSensor.discomfortIndex > 0");
167 public void onCreate(Bundle savedInstanceState) {
168 super.onCreate(savedInstanceState);
169 setContentView(R.layout.activity_main);
171 tvLog = (TextView) findViewById(R.id.txtLog);
172 svLog = (ScrollView) findViewById(R.id.sclLog);
173 edtQuery = (EditText) findViewById(R.id.editQuery);
174 edtUnregisterQuery = (EditText) findViewById(R.id.editUnregisterQuery);
176 findViewById(R.id.btnRegisterQuery).setOnClickListener(clickHandler);
177 findViewById(R.id.btnUnregisterQuery).setOnClickListener(clickHandler);
178 findViewById(R.id.btFullDevice).setOnClickListener(textAddHandler);
179 findViewById(R.id.btDiscomfortIndex).setOnClickListener(textAddHandler);
180 findViewById(R.id.btPlus).setOnClickListener(clickHandler);
181 findViewById(R.id.btMinus).setOnClickListener(clickHandler);
182 findViewById(R.id.btClear).setOnClickListener(textAddHandler);
183 findViewById(R.id.btLogClear).setOnClickListener(textAddHandler);
187 SoftSensorManager = new SSMInterface();
189 String initConfig = "<SSMCore>" + "<Device>" + "<UDN>" + getUUID()
190 + "</UDN>" + "<Name>MyMobile</Name>" + "<Type>Mobile</Type>"
191 + "</Device>" + "<Config>"
192 + "<SoftSensorRepository>/data/data/" + getPackageName()
193 + "/files/</SoftSensorRepository>"
194 + "<SoftSensorDescription>/data/data/" + getPackageName()
195 + "/files/SoftSensorDescription.xml</SoftSensorDescription>"
196 + "</Config>" + "</SSMCore>";
199 SoftSensorManager.startSSMCore(initConfig);
200 } catch (Exception e) {
206 protected void onDestroy() {
208 SoftSensorManager.stopSSMCore();
209 } catch (Exception e) {
216 private String getUUID() {
217 String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
218 SharedPreferences sharedPrefs = getSharedPreferences(PREF_UNIQUE_ID,
219 Context.MODE_PRIVATE);
220 String uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
222 if (uniqueID == null) {
223 uniqueID = UUID.randomUUID().toString();
224 Editor editor = sharedPrefs.edit();
225 editor.putString(PREF_UNIQUE_ID, uniqueID);
232 private void copyFiles(String path) {
233 AssetManager assetManager = getAssets();
234 String assets[] = null;
237 assets = assetManager.list(path);
239 if (assets.length == 0) {
242 String fullPath = "/data/data/"
243 + this.getClass().getPackage().toString() + "/" + path;
244 File dir = new File(fullPath);
248 for (int i = 0; i < assets.length; ++i) {
249 copyFiles(path + "/" + assets[i]);
252 } catch (IOException ex) {
253 Log.e("tag", "I/O Exception", ex);
257 private void copyFile(String filename) {
258 AssetManager assetManager = getAssets();
259 InputStream in = null;
260 OutputStream out = null;
263 in = assetManager.open(filename);
264 out = openFileOutput(filename.split("/")[1], Context.MODE_PRIVATE);
266 byte[] buffer = new byte[1024];
269 while ((read = in.read(buffer)) != -1) {
270 out.write(buffer, 0, read);
278 } catch (Exception e) {
279 Log.e("tag", e.getMessage());