diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle
index 1fd0aa8186..3c6c7507fe 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle
@@ -9,6 +9,7 @@ android {
targetSdkVersion 22
versionCode 1
versionName "1.0"
+
}
buildTypes {
release {
@@ -28,13 +29,22 @@ android {
packagingOptions {
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
+ exclude 'META-INF/DEPENDENCIES'
+ exclude 'META-INF/NOTICE'
+ exclude 'META-INF/LICENSE'
+ exclude 'META-INF/LICENSE.txt'
+ exclude 'META-INF/NOTICE.txt'
}
productFlavors {
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_7
+ targetCompatibility JavaVersion.VERSION_1_7
+ }
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.1'
compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.0.2'
@@ -42,5 +52,6 @@ dependencies {
compile 'commons-codec:commons-codec:1.4'
compile 'com.netflix.feign:feign-jaxrs:8.16.0'
compile 'com.netflix.feign:feign-jackson:8.16.0'
+ compile 'org.altbeacon:android-beacon-library:2.8.1'
}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml
index b7996fbd5c..d1857e4364 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml
@@ -13,6 +13,10 @@
+
+
+
+
+
+
+
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java
new file mode 100755
index 0000000000..c3c66a52ba
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.wso2.carbon.iot.android.sense.beacon;
+
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
+import agent.sense.android.iot.carbon.wso2.org.wso2_senseagent.R;
+
+import org.altbeacon.beacon.BeaconConsumer;
+import org.altbeacon.beacon.BeaconManager;
+import org.altbeacon.beacon.MonitorNotifier;
+import org.altbeacon.beacon.Region;
+
+public class BeaconDetactorService extends Service implements BeaconConsumer {
+
+ private BeaconManager iBeaconManager = BeaconManager.getInstanceForApplication(this);
+
+ @Override
+ public IBinder onBind(Intent arg0) {
+ return null;
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ return START_STICKY;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ iBeaconManager.bind(this);
+
+ final Handler handler = new Handler();
+ final Runnable runnable = new Runnable() {
+
+ @Override
+ public void run() {
+ stopSelf();
+ }
+ };
+ handler.postDelayed(runnable, 10000);
+ }
+
+ @Override
+ public void onDestroy() {
+ iBeaconManager.unbind(this);
+ super.onDestroy();
+ }
+
+ @Override
+ public void onBeaconServiceConnect() {
+ iBeaconManager.setMonitorNotifier(new MonitorNotifier() {
+ @Override
+ public void didEnterRegion(Region region) {
+ Log.e("BeaconDetactorService", "didEnterRegion");
+ generateNotification(BeaconDetactorService.this, region.getUniqueId()
+ + ": just saw this iBeacon for the first time");
+ }
+
+ @Override
+ public void didExitRegion(Region region) {
+ Log.e("BeaconDetactorService", "didExitRegion");
+ generateNotification(BeaconDetactorService.this, region.getUniqueId() + ": is no longer visible");
+ }
+
+ @Override
+ public void didDetermineStateForRegion(int state, Region region) {
+ Log.e("BeaconDetactorService", "didDetermineStateForRegion:" + state);
+ }
+
+ });
+
+ try {
+ iBeaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * Issues a notification to inform the user that server has sent a message.
+ */
+ private static void generateNotification(Context context, String message) {
+
+ Intent launchIntent = new Intent(context, MonitoringActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
+ | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+
+ ((NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE)).notify(
+ 0,
+ new NotificationCompat.Builder(context).setWhen(System.currentTimeMillis())
+ .setSmallIcon(R.drawable.beacon).setTicker(message)
+ .setContentTitle(context.getString(R.string.app_name)).setContentText(message)
+ .setContentIntent(PendingIntent.getActivity(context, 0, launchIntent, 0)).setAutoCancel(true)
+ .build());
+
+ }
+
+}
\ No newline at end of file
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java
new file mode 100644
index 0000000000..e33e3f8e2c
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.wso2.carbon.iot.android.sense.beacon;
+
+import java.util.Date;
+
+
+public class BeaconScanedData {
+
+
+ private int beaconMajor;// Major
+ private int beaconMinor;//Minor
+ private String beaconProximity;// Proximity
+ private int beaconUuid;// Uuid
+ private long timestamp;// Timestamp
+
+ BeaconScanedData(int beaconMajor, int beaconMinor,String beaconProximity,int beaconUuid) {
+ this.beaconMajor = beaconMajor;
+ this.beaconMinor = beaconMinor;
+ this.beaconProximity = beaconProximity;
+ this.beaconUuid = beaconUuid;
+ timestamp = new Date().getTime();
+
+ }
+
+ public int getBeaconMajor() {
+ return beaconMajor;
+ }
+
+ public void setBeaconMajor(int beaconMajor) {
+ this.beaconMajor = beaconMajor;
+ }
+
+ public int getBeaconMinor() {
+ return beaconMinor;
+ }
+
+ public void setBeaconMinor(int beaconMinor) {
+ this.beaconMinor = beaconMinor;
+ }
+
+ public String getBeaconProximity() {
+ return beaconProximity;
+ }
+
+ public void setBeaconProximity(String beaconProximity) {
+ this.beaconProximity = beaconProximity;
+ }
+
+ public int getBeaconUuid() {
+ return beaconUuid;
+ }
+
+ public void setBeaconUuid(int beaconUuid) {
+ this.beaconUuid = beaconUuid;
+ }
+
+ public long getTimeStamp() {
+ return timestamp;
+ }
+
+ public void setTimeStamp(long timeStamp) {
+ timestamp = timeStamp;
+ }
+}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java
new file mode 100755
index 0000000000..1a4271b5e2
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java
@@ -0,0 +1,71 @@
+package org.wso2.carbon.iot.android.sense.beacon;
+
+import java.util.Calendar;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import org.altbeacon.beacon.BeaconConsumer;
+import org.altbeacon.beacon.BeaconManager;
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+public class BeaconServiceUtility {
+
+ private Context context;
+ private PendingIntent pintent;
+ private AlarmManager alarm;
+ private Intent iService;
+
+ public BeaconServiceUtility(Context context) {
+ super();
+ this.context = context;
+ iService = new Intent(context, BeaconDetactorService.class);
+ alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ pintent = PendingIntent.getService(context, 0, iService, 0);
+ }
+
+ public void onStart(BeaconManager iBeaconManager, BeaconConsumer consumer) {
+
+ stopBackgroundScan();
+ iBeaconManager.bind(consumer);
+
+ }
+
+ public void onStop(BeaconManager iBeaconManager, BeaconConsumer consumer) {
+
+ iBeaconManager.unbind(consumer);
+ startBackgroundScan();
+
+ }
+
+ private void stopBackgroundScan() {
+
+ alarm.cancel(pintent);
+ context.stopService(iService);
+ }
+
+ private void startBackgroundScan() {
+
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.SECOND, 2);
+ alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 360000, pintent); // 6*60 * 1000
+ context.startService(iService);
+ }
+
+}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java
new file mode 100644
index 0000000000..5b24c38587
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java
@@ -0,0 +1,252 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and limitations under the License.
+ *
+ */
+
+package org.wso2.carbon.iot.android.sense.beacon;
+
+
+import android.Manifest;
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+import android.view.LayoutInflater;
+import android.widget.BaseAdapter;
+import org.altbeacon.beacon.BeaconConsumer;
+import org.altbeacon.beacon.BeaconManager;
+import org.altbeacon.beacon.Beacon;
+import org.altbeacon.beacon.RangeNotifier;
+import android.widget.ListView;
+import android.widget.TextView;
+import org.altbeacon.beacon.BeaconParser;
+import org.altbeacon.beacon.MonitorNotifier;
+import org.altbeacon.beacon.Region;
+import org.wso2.carbon.iot.android.sense.beacon.BeaconScanedData;
+import org.wso2.carbon.iot.android.sense.util.SenseDataHolder;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.logging.Handler;
+import agent.sense.android.iot.carbon.wso2.org.wso2_senseagent.R;
+
+public class MonitoringActivity extends Activity implements BeaconConsumer {
+ protected static final String TAG = MonitoringActivity.class.getName();
+ private static final int PERMISSION_REQUEST_COARSE_LOCATION = 1;
+ private ListView list = null;
+ private BeaconAdapter adapter;
+ private ArrayList arrayL = new ArrayList<>();
+ private LayoutInflater inflater;
+
+ private BeaconServiceUtility beaconUtill = null;
+ private BeaconManager iBeaconManager = BeaconManager.getInstanceForApplication(this);
+
+ BeaconScanedData beaconData;
+
+ @Override
+ public void onBeaconServiceConnect() {
+
+ iBeaconManager.setBackgroundMode(true);
+
+
+ iBeaconManager.setRangeNotifier(new RangeNotifier() {
+ @Override
+ public void didRangeBeaconsInRegion(Collection iBeacons, Region region) {
+ for (Beacon beacon: iBeacons) {
+ Log.i(TAG, "This beacon has identifiers:"+beacon.getId1()+", "+beacon.getId2()+", "+beacon.getId3());
+
+
+ }
+
+ arrayL.clear();
+ arrayL.addAll(iBeacons);
+ //adapter.notifyDataSetChanged();
+ }
+
+ });
+
+ iBeaconManager.setMonitorNotifier(new MonitorNotifier() {
+ @Override
+ public void didEnterRegion(Region region) {
+ Log.e("BeaconDetactorService", "didEnterRegion");
+ // logStatus("I just saw an iBeacon for the first time!");
+ }
+
+ @Override
+ public void didExitRegion(Region region) {
+ Log.e("BeaconDetactorService", "didExitRegion");
+ // logStatus("I no longer see an iBeacon");
+ }
+
+ @Override
+ public void didDetermineStateForRegion(int state, Region region) {
+ Log.e("BeaconDetactorService", "didDetermineStateForRegion");
+ // logStatus("I have just switched from seeing/not seeing iBeacons: " + state);
+ }
+
+ });
+
+ try {
+ iBeaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ iBeaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_monitor);
+ beaconUtill = new BeaconServiceUtility(this);
+ list = (ListView) findViewById(R.id.list);
+ adapter = new BeaconAdapter();
+ list.setAdapter(adapter);
+ inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ //iBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
+ iBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
+
+ iBeaconManager.bind(this);
+
+ iBeaconManager.setRangeNotifier(new RangeNotifier() {
+ @Override
+ public void didRangeBeaconsInRegion(Collection beacons, Region region) {
+ for(Beacon beacon : beacons) {
+ Log.d(TAG, "UUID:" + beacon.getId1() + ", major:" + beacon.getId2() + ", minor:" + beacon.getId3() + ", Distance:" + beacon.getDistance() + ",RSSI" + beacon.getRssi() + ", TxPower" + beacon.getTxPower());
+ }
+ arrayL.clear();
+ arrayL.addAll(beacons);
+ }
+ });
+
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ beaconUtill.onStart(iBeaconManager, this);
+ beaconUtill = new BeaconServiceUtility(this);
+ }
+
+ @Override
+ protected void onStop() {
+ beaconUtill.onStop(iBeaconManager, this);
+ super.onStop();
+ }
+
+
+ private class BeaconAdapter extends BaseAdapter {
+
+ @Override
+ public int getCount() {
+ if (arrayL != null && arrayL.size() > 0)
+ return arrayL.size();
+ else
+ return 0;
+ }
+
+ @Override
+ public Beacon getItem(int arg0) {
+ return arrayL.get(arg0);
+ }
+
+ @Override
+ public long getItemId(int arg0) {
+ return arg0;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ try {
+ ViewHolder holder;
+
+ if (convertView != null) {
+ holder = (ViewHolder) convertView.getTag();
+ } else {
+ holder = new ViewHolder(convertView = inflater.inflate(R.layout.tupple_monitoring, null));
+ }
+ holder.beacon_uuid.setText("UUID: " + arrayL.get(position).getId1().toString().toUpperCase());
+
+ holder.beacon_major.setText("Major: " + arrayL.get(position).getId2());
+
+ holder.beacon_minor.setText(" Minor: " + arrayL.get(position).getId3());
+
+ double proximity = arrayL.get(position).getDistance();
+ holder.beacon_proximity.setText("Proximity: " + (new BigDecimal(proximity).setScale(5, BigDecimal.ROUND_HALF_UP).doubleValue()));
+
+ holder.beacon_rssi.setText(" Rssi: " + arrayL.get(position).getRssi());
+
+ holder.beacon_txpower.setText(" TxPower: " + arrayL.get(position).getTxPower());
+
+ holder.beacon_range.setText("" + arrayL.get(position).getDistance());
+
+ beaconData = new BeaconScanedData(arrayL.get(position).getId2().toInt(), arrayL.get(position).getId3().toInt(),holder.beacon_uuid.toString(),arrayL.get(position).getRssi());
+ SenseDataHolder.getBeaconScanedDataHolder().add(beaconData);
+
+
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return convertView;
+ }
+
+ private class ViewHolder {
+ private TextView beacon_uuid;
+ private TextView beacon_major;
+ private TextView beacon_minor;
+ private TextView beacon_proximity;
+ private TextView beacon_rssi;
+ private TextView beacon_txpower;
+ private TextView beacon_range;
+
+
+ public ViewHolder(View view) {
+ beacon_uuid = (TextView) view.findViewById(R.id.BEACON_uuid);
+ beacon_major = (TextView) view.findViewById(R.id.BEACON_major);
+ beacon_minor = (TextView) view.findViewById(R.id.BEACON_minor);
+ beacon_proximity = (TextView) view.findViewById(R.id.BEACON_proximity);
+ beacon_rssi = (TextView) view.findViewById(R.id.BEACON_rssi);
+ beacon_txpower = (TextView) view.findViewById(R.id.BEACON_txpower);
+ beacon_range = (TextView) view.findViewById(R.id.BEACON_range);
+
+
+ view.setTag(this);
+ }
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java
index c1c4a93b9d..f3b6e06de4 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java
@@ -24,6 +24,7 @@ import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
+import org.wso2.carbon.iot.android.sense.beacon.BeaconScanedData;
import org.wso2.carbon.iot.android.sense.data.publisher.mqtt.AndroidSenseMQTTHandler;
import org.wso2.carbon.iot.android.sense.data.publisher.mqtt.transport.MQTTTransportHandler;
import org.wso2.carbon.iot.android.sense.data.publisher.mqtt.transport.TransportHandlerException;
@@ -140,8 +141,24 @@ public class DataPublisherService extends Service {
for (SpeedData speedData : speedDataMap) {
Event event = new Event();
event.setTimestamp(speedData.getTimeStamp());
- event.setSpeed(speedData.getSpeed());
event.setTurns(speedData.getTurns());
+ event.setSpeed(speedData.getSpeed());
+
+ events.add(event);
+ }
+ }
+ SenseDataHolder.resetSpeedDataHolder();
+
+ //retrieve speed data.
+ List beaconDataMap = SenseDataHolder.getBeaconScanedDataHolder();
+ if (!speedDataMap.isEmpty()) {
+ for (BeaconScanedData beaconData : beaconDataMap) {
+ Event event = new Event();
+ event.setBeaconMajor(beaconData.getBeaconMajor());
+ event.setBeaconMinor(beaconData.getBeaconMinor());
+ event.setBeaconProximity(beaconData.getBeaconProximity());
+ event.setBeaconUuid(beaconData.getBeaconUuid());
+
events.add(event);
}
}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java
index d5ec057ac3..ff933ecda0 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java
@@ -28,6 +28,12 @@ public class Event {
private static float speed;
private String turn;
public static final float SPEED_LIMIT = 60;
+ private int beaconMajor;
+ private int beaconMinor;
+ private int beaconUuid;
+ private String beaconProximity;
+
+
private int getBattery() {
return battery;
@@ -174,9 +180,7 @@ public class Event {
}
public float getSpeed() {
-
this.type = "speed";
-
return speed;
}
@@ -194,6 +198,46 @@ public class Event {
return turn;
}
+ public void setBeaconMajor(int beaconMajor) {
+ this.type = "beaconMajor";
+ this.beaconMajor = beaconMajor;
+ }
+
+ public int getBeaconMajor() {
+ this.type = "beaconMajor";
+ return beaconMajor;
+ }
+
+ public void setBeaconMinor(int beaconMinor) {
+ this.type = "beaconMinor";
+ this.beaconMinor = beaconMinor;
+ }
+
+ public int getBeaconMinor() {
+ this.type = "beaconMinor";
+ return beaconMinor;
+ }
+
+ public void setBeaconUuid(int beaconUuid) {
+ this.type = "beaconUuid";
+ this.beaconUuid = beaconUuid;
+ }
+
+ public int getBeaconUuid() {
+ this.type = "beaconUuid";
+ return beaconUuid;
+ }
+
+ public void setBeaconProximity(String beaconProximity) {
+ this.type = "beaconProximity";
+ this.beaconProximity = beaconProximity;
+ }
+
+ public String getBeaconProximity() {
+ this.type = "beaconProximity";
+ return beaconProximity;
+ }
+
public JSONObject getEvent() throws JSONException {
JSONObject jsonEvent = new JSONObject();
JSONObject jsonMetaData = new JSONObject();
@@ -209,18 +253,23 @@ public class Event {
double gpsEvents[] = getGps();
jsonPayloadData.put("gps_lat", gpsEvents[0]);
jsonPayloadData.put("gps_long", gpsEvents[1]);
- //acceleromter
+ //accelerometer
float events[] = getAccelerometer();
jsonPayloadData.put("accelerometer_x", events[0]);
jsonPayloadData.put("accelerometer_y", events[1]);
jsonPayloadData.put("accelerometer_z", events[2]);
//speed
-
//if (getSpeed()>SPEED_LIMIT) {
jsonPayloadData.put("speed_limit", getSpeed());
//}
+ //Beacon Data
+ jsonPayloadData.put("beacon_major", getBeaconMajor());
+ jsonPayloadData.put("beacon_minor", getBeaconMinor());
+ jsonPayloadData.put("beacon_proximity", getBeaconProximity());
+ jsonPayloadData.put("beacon_uuid", getBeaconUuid());
+
//turn
jsonPayloadData.put("turn_way", getTurns());
//magnetic
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationDataReader.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationDataReader.java
index 97eb6a9188..9935f2dd47 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationDataReader.java
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationDataReader.java
@@ -40,7 +40,6 @@ public class LocationDataReader extends DataReader implements LocationListener {
static final Double EARTH_RADIUS = 6371.00;
-
// flag for GPS status
private boolean isGPSEnabled = false;
@@ -176,8 +175,6 @@ public class LocationDataReader extends DataReader implements LocationListener {
time=c.get(Calendar.HOUR);
-
-
locationManager.removeUpdates(LocationDataReader.this);
//String Speed = "Device Speed: " +location.getSpeed();
latitude=location.getLongitude();
@@ -185,7 +182,6 @@ public class LocationDataReader extends DataReader implements LocationListener {
double distance =CalculationByDistance(latitude, longitude, lat_old, lon_old)/1000;
-
speed = (float)distance/(float)time;
Toast.makeText(mContext, longitude+"\n"+latitude+"\nDistance is: "
+distance+"\nSpeed is: "+speed , Toast.LENGTH_SHORT).show();
@@ -219,7 +215,6 @@ public class LocationDataReader extends DataReader implements LocationListener {
}
-
@Override
public void run() {
Log.d(TAG, "running -Location");
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java
index 41a28a0aef..4899b29b8c 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java
@@ -18,6 +18,7 @@ import android.content.Context;
import org.wso2.carbon.iot.android.sense.event.streams.Location.LocationDataReader;
import org.wso2.carbon.iot.android.sense.event.streams.Sensor.SensorDataReader;
import org.wso2.carbon.iot.android.sense.event.streams.Speed.SpeedDataReader;
+import org.wso2.carbon.iot.android.sense.beacon.MonitoringActivity;
/**
* This class triggered by service to collect the sensor data.
@@ -39,6 +40,7 @@ public class SenseDataCollector {
case SPEED:
dr = new SpeedDataReader(ctx);
break;
+
}
if (dr != null) {
Thread DataCollector = new Thread(dr);
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java
index d99889b889..fe6c4b0933 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java
@@ -35,7 +35,8 @@ import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
-
+import android.app.AlertDialog;
+import android.content.DialogInterface;
import org.wso2.carbon.iot.android.sense.RegisterActivity;
import org.wso2.carbon.iot.android.sense.data.publisher.DataPublisherReceiver;
import org.wso2.carbon.iot.android.sense.data.publisher.DataPublisherService;
@@ -48,11 +49,13 @@ import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.SupportedS
import org.wso2.carbon.iot.android.sense.realtimeviewer.view.adaptor.SensorViewAdaptor;
import org.wso2.carbon.iot.android.sense.realtimeviewer.view.sensor.selector.SelectSensorDialog;
import org.wso2.carbon.iot.android.sense.speech.detector.WordRecognitionActivity;
-import org.wso2.carbon.iot.android.sense.util.LocalRegistry;
+import org.wso2.carbon.iot.android.sense.beacon.MonitoringActivity;
+import org.wso2.carbon.iot.android.sense.util.LocalRegistry;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
+import org.altbeacon.beacon.BeaconManager;
import agent.sense.android.iot.carbon.wso2.org.wso2_senseagent.R;
@@ -73,6 +76,8 @@ public class ActivitySelectSensor extends AppCompatActivity
private RealTimeSensorReader sensorReader = null;
private RealTimeSensorChangeReceiver realTimeSensorChangeReceiver = new RealTimeSensorChangeReceiver();
private SupportedSensors supportedSensors = SupportedSensors.getInstance();
+ protected static final String TAG = ActivitySelectSensor.class.getName();
+ private static final int PERMISSION_REQUEST_COARSE_LOCATION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -85,6 +90,7 @@ public class ActivitySelectSensor extends AppCompatActivity
sessionIdText.setCursorVisible(false);
listView = (ListView) findViewById(R.id.senseListContainer);
+ verifyBluetooth();
registerReceiver(realTimeSensorChangeReceiver, new IntentFilter("sensorDataMap"));
@@ -136,6 +142,18 @@ public class ActivitySelectSensor extends AppCompatActivity
}
});
+ FloatingActionButton fbtnBeaconMonitor = (FloatingActionButton) findViewById(R.id.beacon);
+ fbtnBeaconMonitor.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(getApplicationContext(), MonitoringActivity.class);
+ startActivity(intent);
+
+
+ }
+ });
+
+
sharedPreferences = getSharedPreferences(SupportedSensors.SELECTED_SENSORS, 0);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
@@ -293,4 +311,44 @@ public class ActivitySelectSensor extends AppCompatActivity
public void unregisterReceivers() {
unregisterReceiver(realTimeSensorChangeReceiver);
}
+
+ private void verifyBluetooth() {
+
+ try {
+ if (!BeaconManager.getInstanceForApplication(this).checkAvailability()) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Bluetooth not enabled");
+ builder.setMessage("Please enable bluetooth in settings and restart this application.");
+ builder.setPositiveButton(android.R.string.ok, null);
+ builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
+
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ finish();
+ System.exit(0);
+ }
+
+ });
+ builder.show();
+
+ }
+ } catch (RuntimeException e) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Bluetooth LE not available");
+ builder.setMessage("Sorry, this device does not support Bluetooth LE.");
+ builder.setPositiveButton(android.R.string.ok, null);
+ builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
+
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ finish();
+ System.exit(0);
+ }
+
+ });
+ builder.show();
+
+ }
+
+ }
}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/dto/BLE.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/dto/BLE.java
new file mode 100755
index 0000000000..0dec7d2ad7
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/dto/BLE.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.wso2.carbon.iot.android.sense.siddhi.dto;
+
+public class BLE {
+ int id;
+ long timeStamp;
+ String location;
+
+ public BLE(int id, String location){
+ this.id = id;
+ this.location = location;
+ timeStamp = System.currentTimeMillis();
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public long getTimeStamp() {
+ return timeStamp;
+ }
+
+ public void setTimeStamp(long timeStamp) {
+ this.timeStamp = timeStamp;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/eventprocessor/core/SidhdhiQueryExecutor.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/eventprocessor/core/SidhdhiQueryExecutor.java
new file mode 100755
index 0000000000..6496a40bc6
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/eventprocessor/core/SidhdhiQueryExecutor.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.wso2.carbon.iot.android.sense.siddhi.eventprocessor.core;
+
+import org.wso2.carbon.iot.android.sense.siddhi.dto.BLE;
+import org.wso2.carbon.iot.android.sense.siddhi.eventprocessor.wrapper.SidhdhiWrapper;
+import org.wso2.siddhi.core.SiddhiManager;
+import org.wso2.siddhi.core.event.Event;
+import org.wso2.siddhi.core.stream.input.InputHandler;
+import org.wso2.siddhi.core.ExecutionPlanRuntime;
+import org.wso2.siddhi.core.stream.output.StreamCallback;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+
+public class SidhdhiQueryExecutor implements Runnable {
+
+ protected String query = null;
+ private static SiddhiManager siddhiManager = new SiddhiManager();
+ private static final int INTERVAL = 3000;
+
+ public volatile Thread sidhdiThread;
+ private ReadWriteLock rwlock = new ReentrantReadWriteLock();
+
+ //TODO have another array initialized so that a list of callbacks can be stored, String[] callbackList
+ public SidhdhiQueryExecutor(String query){
+ this.query = query;
+ }
+
+ public void run(){
+ //TODO the array of callbacks needs to be passed to invoke
+ //TODO what is retruned should be a map of callbacks and outputs
+ ExecutionPlan executionPlan = new ExecutionPlan().invoke();
+
+ Thread thisThread = Thread.currentThread();
+
+ while (sidhdiThread == thisThread) {
+ InputHandler inputHandler = executionPlan.getInputHandler();
+
+ //Sending events to Siddhi
+ try {
+ List bleReadings = read();
+ for(BLE ble : bleReadings){
+ System.out.println("Publishing data...");
+ inputHandler.send(new Object[]{ble.getId(), ble.getTimeStamp(), ble.getLocation()});
+ }
+
+ thisThread.sleep(INTERVAL);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ break;
+ }
+ }
+ }
+
+ public List read()
+ {
+ List bleData;
+ rwlock.readLock().lock();
+ try {
+ //TODO Reading BLE VALUES
+ bleData = SidhdhiWrapper.getBleData();
+ } finally {
+ rwlock.readLock().unlock();
+ }
+ return bleData;
+ }
+
+ public void stop(){
+ sidhdiThread = null;
+ }
+
+ public void start(){
+ sidhdiThread = new Thread(this);
+ sidhdiThread.start();
+ }
+
+ private class ExecutionPlan {
+
+ private InputHandler inputHandler;
+
+ public InputHandler getInputHandler() {
+ return inputHandler;
+ }
+
+ //TODO should expect an array of callbacks
+ public ExecutionPlan invoke() {
+
+ //Generating runtime
+ ExecutionPlanRuntime runtime = siddhiManager.createExecutionPlanRuntime(query);
+
+
+
+ //TODO logic needs to be revised so that array of callbacks are processed
+ runtime.addCallback("dataOut", new StreamCallback() {
+ @Override
+ public void receive(Event[] events) {
+ System.out.println("Location Match event initiated.");
+ if (events.length > 0) {
+ //TODO Configure Event here!
+ System.out.println("Firing location match event...");
+ }
+ }
+ });
+
+
+ //Retrieving InputHandler to push events into Siddhi
+ inputHandler = runtime.getInputHandler("dataIn");
+
+ //Starting event processing
+ runtime.start();
+ System.out.println("Execution Plan Started!");
+ return this;
+ }
+ }
+
+}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/eventprocessor/wrapper/SidhdhiWrapper.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/eventprocessor/wrapper/SidhdhiWrapper.java
new file mode 100755
index 0000000000..e6db9c6a9e
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/eventprocessor/wrapper/SidhdhiWrapper.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.wso2.carbon.iot.android.sense.siddhi.eventprocessor.wrapper;
+
+import org.wso2.carbon.iot.android.sense.siddhi.dto.BLE;
+import org.wso2.carbon.iot.android.sense.siddhi.eventprocessor.core.SidhdhiQueryExecutor;
+import org.wso2.carbon.iot.android.sense.siddhi.reader.BLEReader;
+
+import java.util.List;
+import java.util.Map;
+
+
+public class SidhdhiWrapper {
+
+ private static List bleData;
+
+ public static List getBleData() {
+ return bleData;
+ }
+
+ public static void setBleData(List bleData) {
+ SidhdhiWrapper.bleData = bleData;
+ }
+
+ public static void main(String args[]){
+ String query = "@Import('iot.sample.input:1.0.0')\n" +
+ "define stream dataIn (id int, timestamp long, location string);\n" +
+ "\n" +
+ "@Export('iot.sample.output:1.0.0')\n" +
+ "define stream dataOut (action string, timestamp long);\n" +
+ "\n" +
+ "from every e1=dataIn[location=='loc_1'] -> e2=dataIn[location=='loc_2'] -> e3=dataIn[location=='loc_3']\n" +
+ "select 'x' as action, e3.timestamp\n" +
+ "insert into dataOut;";
+
+ BLEReader blEReader = new BLEReader();
+ blEReader.start();
+
+ SidhdhiQueryExecutor queryExecutor = new SidhdhiQueryExecutor(query);
+ queryExecutor.start();
+ }
+
+}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/reader/BLEReader.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/reader/BLEReader.java
new file mode 100755
index 0000000000..36fb195f8a
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/siddhi/reader/BLEReader.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.wso2.carbon.iot.android.sense.siddhi.reader;
+
+import org.wso2.carbon.iot.android.sense.siddhi.dto.BLE;
+import org.wso2.carbon.iot.android.sense.siddhi.eventprocessor.wrapper.SidhdhiWrapper;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+public class BLEReader implements Runnable{
+
+ private ReadWriteLock rwlock = new ReentrantReadWriteLock();
+ List bleData = new ArrayList();
+ public volatile Thread bleReader;
+ private static final int INTERVAL = 2000;
+
+ public void run(){
+ Thread thisThread = Thread.currentThread();
+ while (bleReader == thisThread) {
+ write();
+ try {
+ thisThread.sleep(INTERVAL);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public void stop(){
+ bleReader = null;
+ }
+
+ public void start(){
+ bleReader = new Thread(this);
+ bleReader.start();
+ }
+
+ public void write()
+ {
+ rwlock.writeLock().lock();
+ try {
+ bleData.add(new BLE(123, "loc_1"));
+ bleData.add(new BLE(123, "loc_2"));
+ bleData.add(new BLE(123, "loc_3"));
+ SidhdhiWrapper.setBleData(bleData);
+ } finally {
+ rwlock.writeLock().unlock();
+ }
+ }
+}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java
index b5d0bea502..2d1cbce9d1 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java
@@ -51,7 +51,7 @@ public class SenseClient {
String responseStatus = response.get("status");
RegisterInfo registerInfo = new RegisterInfo();
if (responseStatus.trim().contains(SenseConstants.Request.REQUEST_SUCCESSFUL)) {
- registerInfo.setMsg("Login Succesful");
+ registerInfo.setMsg("Login Successful");
registerInfo.setIsRegistered(true);
return registerInfo;
} else {
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java
index 2d6868849b..1d33225b9a 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java
@@ -13,6 +13,7 @@
*/
package org.wso2.carbon.iot.android.sense.util;
+import org.wso2.carbon.iot.android.sense.beacon.BeaconScanedData;
import org.wso2.carbon.iot.android.sense.event.streams.Location.LocationData;
import org.wso2.carbon.iot.android.sense.event.streams.Sensor.SensorData;
import org.wso2.carbon.iot.android.sense.event.streams.Speed.SpeedData;
@@ -33,7 +34,7 @@ public class SenseDataHolder {
private static List locationDataHolder;
private static List wordDataHolder;
private static List speedDataHolder;
-
+ private static List beaconScanedDataHolder;
//LocationData gps;
@@ -80,6 +81,13 @@ public class SenseDataHolder {
return speedDataHolder;
}
+ public static List getBeaconScanedDataHolder(){
+ if(beaconScanedDataHolder == null){
+ beaconScanedDataHolder = new CopyOnWriteArrayList<>();
+ }
+ return beaconScanedDataHolder;
+ }
+
public static void resetSensorDataHolder(){
sensorDataHolder = null;
}
@@ -100,5 +108,9 @@ public class SenseDataHolder {
speedDataHolder = null;
}
+ public static void resetBeaconScanedDataHolder() {
+ beaconScanedDataHolder = null;
+ }
+
}
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png
new file mode 100644
index 0000000000..1ed9d05d7b
Binary files /dev/null and b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png differ
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml
new file mode 100644
index 0000000000..b18dede82b
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml
@@ -0,0 +1,13 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png
new file mode 100755
index 0000000000..b4114a6c19
Binary files /dev/null and b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png differ
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml
new file mode 100755
index 0000000000..b10638db6d
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml
index 6dc91c927a..35f02ab31a 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml
@@ -6,7 +6,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
- tools:context="org.wso2.carbon.iot.android.sense.realtimeviewer.ActivitySelectSensor">
+ tools:context="org.wso2.carbon.iot.android.sense.realtimeviewer.ActivitySelectSensor"
+ android:touchscreenBlocksFocus="false">
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml
new file mode 100644
index 0000000000..0c3c6b1dce
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml
new file mode 100644
index 0000000000..a120207f51
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml
new file mode 100644
index 0000000000..bc421e3222
--- /dev/null
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml
index 2626ab6a62..ea9d9f550a 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml
@@ -5,5 +5,5 @@
16dp
160dp
- 16dp
+ 40dp
diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml
index 7476a92b0c..66ce992b6d 100755
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml
@@ -51,4 +51,70 @@
+
+
+
+ wso2-nexus
+ WSO2 internal Repository
+ http://maven.wso2.org/nexus/content/groups/wso2-public/
+
+ true
+ daily
+ ignore
+
+
+
+ wso2.releases
+ WSO2 internal Repository
+ http://maven.wso2.org/nexus/content/repositories/releases/
+
+ true
+ daily
+ ignore
+
+
+
+
+
+
+
+ org.wso2.siddhi
+ siddhi-query-compiler
+ ${sidhdhi.version}
+
+
+ org.wso2.siddhi
+ siddhi-query-api
+ ${sidhdhi.version}
+
+
+ org.wso2.siddhi
+ siddhi-core
+ ${sidhdhi.version}
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ ${apache-httpclient.version}
+
+
+
+ com.google.code.gson
+ gson
+ ${gson.version}
+
+
+
+
+
+ 1.7
+ 1.7
+
+ 4.5
+
+ 3.0.5
+ 2.3.1
+
+
\ No newline at end of file
diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/speed_publisher.xml b/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/speed_publisher.xml
index a2b18b5db8..5e4d07ad31 100644
--- a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/speed_publisher.xml
+++ b/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/speed_publisher.xml
@@ -21,7 +21,7 @@
Email Alerts Speed
-
+ pacificcontrolsapps@gmail.com
text/html
diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/turn_publisher.xml b/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/turn_publisher.xml
index ffca74c42b..d04a6f0413 100644
--- a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/turn_publisher.xml
+++ b/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/turn_publisher.xml
@@ -21,7 +21,7 @@
Email Alerts Turn
-
+ pacificcontrolsapps@gmail.com
text/html