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.*;
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;
29 public class MainActivity extends Activity {
31 private SSMInterface SoftSensorManager = null;
32 private List<Integer> mRunningQueries = new ArrayList<Integer>();
34 private IQueryEngineEvent mQueryEngineEventListener = new IQueryEngineEvent()
37 public void OnQueryEngineEvent(int cqid, DataReader result)
39 Log.i("[SSM]", "event received! cqid=" + cqid);
40 PrintLog("Event from cqid " + cqid + " has received");
42 List<String> models = result.GetAffectedModels();
44 for(String modelName : models)
46 PrintLog("Model: " + modelName);
47 int dataCount = result.GetModelDataCount(modelName);
48 for(int i=0; i < dataCount; i++)
51 result.GetModelData(modelName, i);
52 for(int j=0; j < modelData.GetPropertyCount(); j++)
54 PrintLog("Name: " + modelData.GetPropertyName(j) +
55 " Value: " + modelData.GetPropertyValue(j));
62 void PrintLog(String log)
64 Message msg = new Message();
65 Bundle data = new Bundle();
66 data.putString("Log", log);
68 logHandler.sendMessage(msg);
71 private Handler logHandler = new Handler()
74 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)
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);
98 case R.id.btnUnregisterQuery:
99 Iterator<Integer> it = mRunningQueries.iterator();
102 if(it.next() == Integer.parseInt(edtUnregisterQuery.getText().toString()))
104 SoftSensorManager.unregisterQuery(Integer.parseInt(edtUnregisterQuery.getText().toString()));
105 PrintLog("Unregister Query has executed, cqid=" + Integer.parseInt(edtUnregisterQuery.getText().toString()));
112 int queryNum = Integer.parseInt(edtUnregisterQuery.getText().toString()) + 1;
113 edtUnregisterQuery.setText(queryNum + "");
117 queryNum = Integer.parseInt(edtUnregisterQuery.getText().toString()) - 1;
118 edtUnregisterQuery.setText(queryNum + "");
124 View.OnClickListener textAddHandler = new View.OnClickListener() {
126 public void onClick(View v)
131 edtQuery.setText("");
134 case R.id.btLogClear :
138 case R.id.btFullDevice:
139 edtQuery.setText("subscribe Device if Device.dataId != 0");
142 case R.id.btDiscomfortIndex:
143 edtQuery.setText("subscribe Device.DiscomfortIndexSensor if Device.DiscomfortIndexSensor.discomfortIndex > 0");
150 public void onCreate(Bundle savedInstanceState)
152 super.onCreate(savedInstanceState);
153 setContentView(R.layout.activity_main);
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);
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);
171 SoftSensorManager = new SSMInterface();
173 String initConfig = "<SSMCore>" +
175 "<UDN>"+getUUID()+"</UDN>" +
176 "<Name>MyMobile</Name>" +
177 "<Type>Mobile</Type>" +
180 "<SoftSensorRepository>/data/data/" + getPackageName() + "/files/</SoftSensorRepository>" +
181 "<SoftSensorDescription>/data/data/" + getPackageName() + "/files/SoftSensorDescription.xml</SoftSensorDescription>" +
187 SoftSensorManager.startSSMCore(initConfig);
191 // TODO Auto-generated catch block
197 protected void onDestroy()
199 SoftSensorManager.stopSSMCore();
204 private String getUUID()
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);
210 if (uniqueID == null)
212 uniqueID = UUID.randomUUID().toString();
213 Editor editor = sharedPrefs.edit();
214 editor.putString(PREF_UNIQUE_ID, uniqueID);
221 private void copyFiles(String path)
223 AssetManager assetManager = getAssets();
224 String assets[] = null;
228 assets = assetManager.list(path);
230 if (assets.length == 0)
236 String fullPath = "/data/data/" + this.getClass().getPackage().toString() + "/" + path;
237 File dir = new File(fullPath);
241 for (int i = 0; i < assets.length; ++i)
243 copyFiles(path + "/" + assets[i]);
247 catch (IOException ex)
249 Log.e("tag", "I/O Exception", ex);
253 private void copyFile(String filename)
255 AssetManager assetManager = getAssets();
256 InputStream in = null;
257 OutputStream out = null;
261 in = assetManager.open(filename);
262 out = openFileOutput(filename.split("/")[1], Context.MODE_PRIVATE);
264 byte[] buffer = new byte[1024];
267 while ((read = in.read(buffer)) != -1)
269 out.write(buffer, 0, read);
280 Log.e("tag", e.getMessage());