From 32c4a342837f77a04d6129db0b5cbc524d3e468f Mon Sep 17 00:00:00 2001 From: Waruna Samarsinghe Date: Sun, 26 Jun 2016 14:36:06 +0530 Subject: [PATCH] Ranged iBeacons --- .../app/build.gradle | 9 +- .../app/src/main/AndroidManifest.xml | 10 + .../sense/beacon/BeaconDetactorService.java | 105 +++++++++ .../sense/beacon/BeaconServiceUtility.java | 55 +++++ .../sense/beacon/MonitoringActivity.java | 212 ++++++++++++++++++ .../data/publisher/DataPublisherService.java | 3 +- .../android/sense/data/publisher/Event.java | 5 +- .../streams/Location/LocationDataReader.java | 5 - .../realtimeviewer/ActivitySelectSensor.java | 62 ++++- .../iot/android/sense/util/SenseClient.java | 2 +- .../app/src/main/res/drawable/beacon.png | Bin 0 -> 23479 bytes .../src/main/res/drawable/round_button.xml | 13 ++ .../app/src/main/res/drawable/wso2logo.png | Bin 0 -> 30848 bytes .../src/main/res/layout/activity_monitor.xml | 22 ++ .../layout/app_bar_activity_select_sensor.xml | 59 +++-- .../main/res/layout/beacon_activity_list.xml | 40 ++++ .../src/main/res/layout/tupple_monitoring.xml | 80 +++++++ .../src/main/res/layout/web_view_activity.xml | 6 + .../app/src/main/res/values/dimens.xml | 2 +- .../speed_publisher/speed_publisher.xml | 2 +- .../turn_publisher/turn_publisher.xml | 2 +- 21 files changed, 652 insertions(+), 42 deletions(-) create mode 100755 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 create mode 100755 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 create mode 100644 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 create mode 100644 components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png create mode 100644 components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml create mode 100755 components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png create mode 100755 components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml create mode 100644 components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml create mode 100644 components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml create mode 100644 components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml 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 1fd0aa818..dc2ec083c 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 { @@ -31,10 +32,14 @@ android { } 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 +47,5 @@ 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 b7996fbd5..d1857e436 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 000000000..727559ac7 --- /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,105 @@ +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/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 000000000..7c0c82887 --- /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,55 @@ +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; + +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 000000000..89ffcd3a9 --- /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,212 @@ +/* + * 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 java.util.ArrayList; +import java.util.Collection; +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 = null; + private ArrayList arrayL = new ArrayList<>(); + private LayoutInflater inflater; + + private BeaconServiceUtility beaconUtill = null; + private BeaconManager iBeaconManager = BeaconManager.getInstanceForApplication(this); + + @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); + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + @Override + protected void onStart() { + super.onStart(); + beaconUtill.onStart(iBeaconManager, this); + } + + @Override + protected void onStop() { + beaconUtill.onStop(iBeaconManager, this); + super.onStop(); + } + + @Override + public void onBeaconServiceConnect() { + + iBeaconManager.setRangeNotifier(new RangeNotifier() { + @Override + public void didRangeBeaconsInRegion(Collection iBeacons, Region region) { + + arrayL.clear(); + arrayL.addAll((ArrayList) 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(); + } + } + + 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)); + } + if (arrayL.get(position).getId1() != null) + holder.beacon_uuid.setText("UUID: " + arrayL.get(position).getServiceUuid()); + + holder.beacon_major.setText("Major: " + arrayL.get(position).getId1()); + + holder.beacon_minor.setText(", Minor: " + arrayL.get(position).getId2()); + + holder.beacon_proximity.setText("Proximity: " + arrayL.get(position).getId3()); + + 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()); + + } 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 c1c4a93b9..055bf13e1 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 @@ -140,8 +140,9 @@ 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); } } 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 d5ec057ac..562bafc55 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 @@ -174,9 +174,7 @@ public class Event { } public float getSpeed() { - this.type = "speed"; - return speed; } @@ -209,14 +207,13 @@ 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()); //} 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 97eb6a918..9935f2dd4 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/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 d99889b88..fe6c4b093 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/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 b5d0bea50..2d1cbce9d 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/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 0000000000000000000000000000000000000000..1ed9d05d7b5cb4c59384b8bcd8ec2e2f7872cb32 GIT binary patch literal 23479 zcmY&=1ymGV)a`(DiAqZgNH<7HNev*~DJ|U~Al(f^H_}5l!XPQqAYBqlw-VCwF5myZ zx7KsX0w(Uw(=tpo&8 z7ms~wf(m{|a#fR+gjA1_?}A^b&E(YHLLlA@5J*4>1ab`?3fO@_+&LkTy>}3ZP&x!c z?3CT6DgvHBGgXk40^h;Et2YRL@D0;RPS+Iz!RvkaLh5%cGkyEFOOGSIpM-xWCW+nAfasok`I&<&l}gpOoscusnDqMXz7qhgc`lUT5F^ zMdVpWWLuZYsMD=i=}uPK?ao>weM0jjazIv~=ZVozLL&*{ho9o!5no^vuJm9ze(GbH z?;)aX2*sjhSj{-N`}c>WCN{%(T;wA6W+Xe!jgZOGa?Cf^=eTwIhwC^JNtnt1_y4(* zDt5lGWP}>T!A6iI%vl68ZP-0l4}(D%#|DX9Trgm2T9OlI{e#h?F8N85TKWt$nh>OS zSmInwtT?>_sics2gh4f~jYRsvhX6guvU95eCIlUcuFS%O{(Y7%jrjK#c zODo|Dmj(K~)i*Hxp$QU$M^15i7&7b!4ow+gI+>hcNMVCk{1A~NmsZO%RFjRK)S}TJ z9tg_f)L;`5c=kI~U6NXQCQKTs#{tX_1F6fgg?Ox1a}93@R?^Yag#1QMM_ns?n2x20 z?ifo8mU{7bo)vTsX@g!-dU#! zLkrd!A=c9MSxo^Z^l%cI5UP@;lq4L^m<}gimPY~0RYPE+hu2_wIEBJBwL#{PX1YOq zNgSkzhs`wNJJRLWP_2sH^SxIdhCw3*=|Y)59O7)NTiSHNRmbk$K|<(9f__9pavvr! z-RDCjA)V_hJLuCFAtb0O|9yUXIB8{r3>!w_V>{@iD~4r?YnaJ2lhat6K{X2)&vo~a)?0kZ7zkq_Xc8;It2QeIimVU2b|SEx0q>peanNF5s-)xV z-gGfU|IH0nUtR8Y{Qg#%1EHItQ45+RmzwW$S>bwim!w+LZNli;r)zD}}7k>>2 z)}xeB)`9LxFa`X1EOz^wD%Wc(1N~_vN|Ojq(gnGY8%9M%1=XYPc==S~33?1NV*jXY zkg&)fb&*1>kWe7+oSmOM7QLhvy}ue)AO6PaHQX0X{O4r&BHMugsSNdZC!|_^xPRx7 zY|G>mNxD3n!al7qYt&>f58G2uFJ(2SufIiHW<4Me^_H@-*B z8xJ4%J#wAq=22X6`twUVTgaU`Nz50&si`Rp z6y)i8o|tuAef{2-VpoH1S{q6Rff=IQ`;WQD!k4RTK0N87u2)Hb)YjDn2BSY#8y@5I zl0b8qHJ36;ZHiX82vmKH(BJ%p^xHn&iaeE{?)3EZz{4V)ywznBE7zC5bjXboG6V5L zdk1S1ixHY%W{$@XpoH|b`X$co_nn>b-u|n^Q4KRmNXp_P-G-1Ol_s)cfLDcMLEh9# zNFZ;~iMj3IyXTR7OBA`kJ@sIggOmjeb_P%Tnr-wRY28={WpwwNZKtiYdp(numcAUZ z5`D8Q2Et@-Z?Ay&8Kd7H?4@A!N04$z4CK;r&yV{A98%v8NN(MYw8d+uSDaj2-5~NM zA=T;N#EV`tI;^xaoj!yG)HPane^S9(#0+JW$q{2Qn0Oss-R_^g;oTs7F}#+Ir%b7$ zMw&94#^njhNh;c=0f9OPBLIm}DDU!N|J@Ge-C`oZOHs|t%miFEB5+>Wa??UYAM>aR zp`UF$0WXi0Pe;hL3{h>q*A9a!u@d#J$BV^1f90TZd&>v8fmEu9p@aCkY?C9Ct}T+x zEY}s|@%rN>r~5srjDk{*kaRIMQa+BQk)=NE5~(+c!!p7nl2t`+o}PtmZJByFVH06> zbzBFFO$yzT13>Fo-ODq^AZ&^eXi&F(?n*s`D57@%P`_D zAI|aTjlaIdKF0`^yqqo-m1e{0O>kcShWqin!dR1ZG!r)k;t*(96Bn{vwfpDMPVhHW zojX6VlG4(j=iYE>6OzsMJC<+1sX}U0vAfOD^-hL+65 z!xQ`_9FK;`b>!}@6PZO`w)R8$hn_6<*Rtno-|^kbv1)V=ry7XDmp#NC0i9P_o!u9m_r8^t0{ohL#sTAuO<^fT zkyMrh6)%F^n%6xL6SK2n+D2Ze4{@kT0H+YAb2a|@+Pku*#>~zxMvuJWmN4KRb!{GR zgNOXH83Ptcz_$x(^(T>1-@zMI1`@AxOzg})d>{$Oqv*N46=`DB`stHQrnV#RvcG14 zP!!5=I@y5o^6?4Y8GxK-=H*3-jz{if^OXfc4slA>aY&b=9Lnn>p^sOh=3fM)F(B@qgm5*q9QW_ zb6?-rXlQ6U65KJd$tfu&A3y%EzKF7gkQWjas4$_>?}oyueW!!W<@NQSFD@2K*P_=uFK*Y+ z#qx<>KBI*Eo`d`&?ILU943!jR8N^DzplR}CA|@tYf7ptpqUTKDw3Vz~Mt5Ffe-NR> z!NXIFhG9~s>-Mz0(@TvpKhcDSy)*hY^H0r0SC@3f=lHeA+4nco1)PfACs*VClwg${ zJMZ|PVjjAWzu~l9`KyYphOx1pQH0(lFcP6vg&E#ULPi!ew_gm-C<#Qn#;7kzS#&oU zksOYcT}(u~IMBqr)FoX?8hbCe|wzVx(3v8;Ymr9P&qrBzT`8g47j9kXT7=|_R^ zICKfxKNksjGcCEna#cWg2Vuzf;(iz2>H-Bh>TRBJh&D-)WkqL8&yNC)oPeIXG8l~Xy4 zH8jIoQsI@YvoqJjO3J>(+S%Rh4t^{e5$}6o20H5{MVr{A-El(raZf$3=lFK)SS8vl z(n%mDoYETubZ)wUt`~jH^PQHsDHi@C%SFLYX4ojmrXC(z0x6-PsH%pBY>*jgFBi}^--8VzW+r@NlDpuwZ--I zwG=h}=ThaIoSbP>F0Y=mv&P@vUoK*5>g%~>9hq5}nFr=_2<(xvV@uZ`p8&Y+QjfwgA_@IRMKYoxmMJQ6@M@o5+n}wMOc%ylPgqX> zMB_ximS{1vwY4qGtw~K!PsjhH!f3I|%*;%FNMyFN;L=cH)6~>t>g$`MH(jZ#qk}J+ z7yl7ge)1RRzA`szK(oUvh`oDWHj&lU>_7i};NCOy@eywN9P=h4D+@6`npsImOdP$t zYi*O*U}gW=5LLW7f^xJ+VfXX)$^_THwXwM_mLv=nKAV_!t68 z&Lg9vV3F+LofGeq^*(+xX>4iH&o#!y#f@7EpcM1V{%8pL4(XYW7JLy-EFso)WE*A@ z@#z!Io?r%HaB#3-UXB1?SCFbQKLC7Hm6eJ=+T5etSacIv#i7CccyEtWd1jfyN+v3+ zs;Z`4xmfh{^y*z|7;GuyWm#ESRXoF;Aq#D~Nlhw@8)de%3JMCeBsj1dRjA&J^MbMY zVaN{pjBiy*$v4%BTn|J5GYbnG@%6oul~rk#+1UD@i0*EQJqL@C>FMO^K#`VwFI@=+ zS7r&Z{3F|+PV-#bbO4+;A8xh0@<4D8>geeWEsVCQyCRlB5{hs0Ax#?gs@#}W`tq5l zbv=x+U73gZ?R^-kPv!->LmEfbtM z-{w=vT{Hy-BJByLJ#lq)l^>G=<>`Wwr)LYS^~3F@^Io;(*R8FR&G#;Y_7UERR+a0) z8LkQ5_{&pDxgyZltK5<)K|gGi+Q+{Qm{?mwFYo*;%xdcD65EDJxrBt|JN)RaRrmUG z>ttAV(8pi1J&hEgRk1QPmGtsvRpRcltJ8cfW8o@~zdV@qa&WGWVv*odK4P6Q%re9M zheOK?W}le2ILmC)u_G-*!?(-6VI-OkvpIV9_Ej$kEUc}WuDqMyRFoQ?WZ3OKy321Z z6{NA+9TH`qJ`kv)7T)I&8uyCxjq-21k|ruT8fx(wK>ojn zOW``KGIs*7r&ys**Jsu?T+PoQzu(%>q>qrG-&OA^onC!h%xil4_HAO?4klV~oWgkj zz^AIJ*dJ=;m6g*g=Xyp)N*x{cwppAh^o3k0`BaP-yvrQJ%F4>oAY4vbX&4$F4qW@k zh%hiPNP&38GDM)Lteiv@fAC$PJK!4$#8N^`?x-;;3Tw|R8P?h=_yhxGAUD2${Rs#k zdK^+X6n{P#OwY|FjhQSTt2Q?_Ce*kt>5+>+DW-h~Q%Ai-sz;FE8KdL8E3ci#D>DK|w(=y=+B3^l-u}E9tW4gi4b{ zJPt^%+FGjIpX{SpK3~*H1ZQz#LUm6tiJ+W^GH<-}+|?wzx6Z8J4sM-kKXrv+;qIOy z0&&!jeuSaMg7&Ql`RvgzC1KFY`A4X{t1HhS4-*^PraV$IT&thN)*YAsZ9Hci#V3~Ne@aO zRG3eNg3MXNyF*gxx)aZ#0cfO^G$po=uugq4=92`Oq(Ny_}6W*i>X> zYTo=mJrL6V{$lPe8OSdw<5?aX!Qt>vM}OnSX$Y_qYvMimz6?`u(op34?;;1hfB!x| z_whwtV`I@7IgF65@EHMov8}DG4B<-!vf#%4x}kl9o;AT!(ezJ!(;S8$z8D=I-S@3K zt7>VL9FUTPbz{LM@Mf%%+Zf0I9N5_3Fl1A#5@A%;b!(*z2yg3!JizVCkD@kQM?X`v zjk=p`=aTP?KoS8ts0=a6c>ypjmw-UTJI=C=i`m&(r=9OKbWbt&s#kkob;30%%&S5M zwSPcT#XDa-4HOqguuwHLG{{HK>}7w=F$v+U2`_7xU6`DdT;9C-K9Cs`9L=pzN_NJf zH#}I|(NTR?O|lwnp51eBP+89c7y?;EMMV|QE6Q*E{qFLdU2_t2Q;)CHSdjw*Jc@HQ zw2;2@En)Q1nSr3C`*z4lpfV>7YLP9O$&b#H!}ubQ_PxvD`o>_=wAnvO8CltsLxRGI zG7oG>uX)efT7ErWL2GM98{&eKmshI8VP&RZdWg zddni+P9^2tn|?cya-OHf?}Mj@LXa0Gs?Y*T;lh{@WwAS65lXfoTO^2M`yaGw<4*QF zPn_PauC4%&iFTYMT(INH%FAK@gr7fu4oHDAt%>T<(a~vIyC;EODe-lQF5i#+Li*Py zhN28~bX15&7w6_=mkq<}LeJ0LRSgU(%~y6(QF3UXe1v&q>%q%pn(41J_wbO#4GnX& zv^El7$O3YN=FT%SGgC!Z7rMM0v+(0b5z(i$%eCOgjrEyo0114bn=3VE&l7Y-tJ8^T z8}=0N)yrC&>?|ar&U1S78TD6Ayn~>gkGFU7nJ`EM%qpd&rLrirp<2fva+(|T^g?M{OW3J#X)EO z7Xo>jbFi_wC%brZ8yXsV<|6vnoi*T%VPR;yrvrx`wtVqILP7&`Q%hBmdaWDSdOu>x zsi;aRmplc$PKwU{k%iI7$jFo-GM^L{77FKb30l{AFoQfQydqW!hdWErxq;;})dk69 zuX@GA*VoY6vYNmi>!TI7)yMB^4(4=EKT*zkrsw7oIkf0|=eZ-WGh+apDPre|?=PIe z6QzPzS1avCI`zmXXbQ>ZU?G7Bt1U+M=5y-fyj~CZwdn3Y;F{o zl%RzO2L}gch3niBYgex+Yn;H#&6Kn>_4sw+0gqS!nyZe9JUl$M+M(Z>oOjtNS*cBv4sTW4TlivdnVDl|KE-F}i(f-LRBoFTMBi&&rYT zCjft^4P981l9HO4ALkHSsH-PU3zjDF!J(paLBpGwEX&k>)&O8mn`vWw`W7|Kq}sDQ zZ#X-!eOfonCku{_KP229$rAZ2monnJ_j94*4^T6)LHR zv$C+D3%7dFW?58sYT9B#0^*Er^hJg;m?$tkSW7GFV5(E+-bj8*m~N6ulcG;aNtwn{ zgS^+Mv?W*Ii7=l1v)&Kyuf&&(0FV%VXXoHha`ej=)S&at6}SMh$VG3N1E_1~V>~l6 zvuJM#GHTJ7grS-dSe1vt@F>4ZLTaG)1Ehuew3$|Ab+x>EAPDLYd3Jf!hlG^0u4)`` zzS-j9PXNkp&RO04kk{1M$a_4O1wsymL3I}7jA_1tX+zh;P4H!c;Vzhx;I`-s&R4Ij zmISrU%nDPh5g#o<+y$-bujDz*C4$pgG$w8M3z>T`v@%~>gN340BG*DToY(Eohab(T zR;5}XkoC!|9sOH$57d_>cKHMvOVbpcGau!|u}9u+meV}^8uxDx|8r5~a8s=0AAv|w z{LUg!tL)V=gTqzyx2~ch8ua0v>;fgoo(*x>iQxR`^NaX(8nbv_0gygT-8NOKtnR6L z{X{t|w&A$Qgd&84kpxFAUY#bSme0n?XKFO+;OJ<~>yI;H`QyFn3vM>E)ase(X%){+ zN^_ZjJ#G#@IL=e*NwGzBv|nk3Z#4EnsW(jl&eH7kw8j`_DsJz0hM3$ddJy9ZDl1vH z|17SoC@rT511v0W=??=W`}YyvF^hhY|Bi?-P#PoO$M&x` z7xhlk+hV$k0gNDsFmhLD=ivD)jXtcKWIDpe%Pi-QCVpw!Zd60`B+&y!l+IQNh2Gxz z_VQ2mO<__>_rb{Cp3Ru%n+GuGB#lMWf>yY6IBWWh#T9p`_D|~u-UspQD5Y>tyNpj; zAkt+W2zhAee(&ZRGym4p6ZHG$PVkGPVRh)&b!WJ|RQNjn0#uRP&X3lRE*9P8_9GL7 z!vekIvX4XUp9tiE7N~AKuCAzfLoM!4nJY*4zsY`hRTZ#dQ>Cp+73zS$2bFr@(qZ#0 z#Y?5^uFE)@P z%yKK6&P~0`@-iS5+eWmK9F5!>PQKMAsn6^ws#B?=!Gd=FuaFh*;_R<;z(Eh%A`?66N9_H6}3 z0vo|=GpfVG!_@v@_QXYyBPX}m+)V>VN8eJ6(VsHI#o3Rv)Eb090gL#(;j8|8aE1t<5B4d;9xrRIXo5x!SMyDy9v^H8lyrrb<5c0}K%K zX3GPisweM_g$BthChAghQH2#fmJB}~V9~CYyIKKt4gn!y;$OBzxwZ2-%30J!1Bj5En)(Z%Q5wSt5I`RgszP3DpQ(WJFO-Y}{ees~78aJ&FB~3! zB9%V|on4rqxe>KvGeLfx%I!_+fJ$fbS|;bz1r#Kul0)n3>qRH=ad9ipR5bPU_AVPH z4*4Dp4-Z2X)HXAF(}Z&0f!A%*-3^ktYr#SFw#NfS3YaAvvb7~7qi;EsO22L)j+ko|_C@cdtTY6?DZBj*N=W5-$6b8)$Y8d$`M<==5 zl+EAD-_(w^QYZNu!&n>&#oUF&^sfts_LSO8t5$(n>0)ZTx6`LVyt3@@s`a9q86W}Z z&E~mx-_8zWh8>97so$dJ_UXq}Ua$KrImwvK?{b9;tge46u(3!d;T1XzV`KN zNMna8g4uPDTFU+9!{A>GuS7b`{rmT?5xU6~t-TF9%Ux_UHZ)ApdX#$2EC*iE1Upcv zfNhxYIfe6j?*i7mow8P($c#=@a#CHn1s*)I*IM6 zn~Mvq(ik!@_hdsiq=Jx0{IkNR=4Mc86rDw1XInZrjGc^SmeZ+~Y|DdMG&Pl|Ul#_7 zJW>QNn4HLcK4M!JC#Qt7t0Cr8%2*lbO%p(z_E2`F8M(}#sQBnVvGa{~%%%HO5$`M6 zN&GtVHgHM+xny=#_DZXD^2d+tL|Pz1(RGVxJzB7_v60K$-`OckZaw((;lv|ns9@93 zeo&EV_%{;NdU_(SzNZ3wsFz&lOoTvGL$Ttx0pN?Ec@;T!or^G=xU!>$ne0y>j?R=xK?6)IPks%4m<*$Fbw8qHkIVbfgl(BB?x4xMXq_l_wJ-(3Z@ z4((aJL?){H%YLXo6~t?gidjhfeb2?&Swb79yn;gUS@ekrcUsgIv!VQ-4u!X`!IBqZX7h{%+c7k(XhYZx8Ja&ddO-T$mmX`r1lj9tP zII$)qMcdq3JO^cCtS%=TgN@vpnwpzmf_|8~x$)X_DhrTnU5lvEyUEQk+V&2~<4NX_ zDh8jqz1W*cy3=uPL4$|5BbJLc>$bMHpG5cB-LE(a;B@94m0jGd-ggv_-z~4+<#3Z) zSz0=6jbtSIKLY~L#6+Se`>Z(#GXSdzZmudSDKWbv{H}(Lo6lO0{Votg=0D<0NYuvY zpGBeoi55CrBTfxzS$g~TW*~_N%2FBp-b&5DK(U$SndAd&$aGg;QSoA5on5tx+0cCV zN2O?huuApHHiR_Fdyff+Lv13-?KFYY(aAB2E$1{nOt+K zIV7M-(uH5#&|G)6I)R&H7f4vC1$v-{t@ln$<1kjz_baQadK-P6LU49=R&?OQN~B;L zx&*`w@bKuhD^Qey@+)utBU0J_dP=P$P3RQwPv$P#r|k*$N=7Jm8FBZ+a)KvL^oD=` zt}PyiyEHL8jcmmJ2;?I$fRus47nJcYtFo>R78-{3$n_|mYxNgU478!0aNM78nEN6R zq|haxW1`k;!ip$To0f)?ZRe_?S4O(ec%N0~%E}a~(x2oAd$JdYf}#d6?FCXqIgv7j zWpFt3>Q#B=AmHOah%5+aSH?*T1Kn0_tR9Z-r(Tosjvh|Ll9qA^G>^W&$7fd`%_W2* zrFvlQs(O0mBjx`4RV`}&eDw9RictlrtQ{Pbu2`!LT1^L=a@oR6bWY-8Vq>A0F~cYz z##m6Yv$Mm_G2ban;*l5AF)detX#wHB+20Y0X;^>T*C%afXJ>vVsGIVvIq8VCzP+8C zkdRQ`+!@)glL{AiaQLzh%kynN`NG|mH^w7*6 z2@A`#Ly!X%pr_KiHcf5RzCcjXpfwh{phoB(Z?|seDhMi%<%v03n?-K>;`fF)!bj#Oj;;>%LAcT{>q57pEsi*kRDpjbI`?gqy;vrH}s>u z{oA1nHHIg(1(zU;CTAmcoX_erv0Yf@ddalmC~am~6So;65z zR!qYEYV{Y@lR>xElg*<*B&5ZRzLFIvM0jbR;+>F`^wGuj-%fe~T*i zKizuEJ*+TmaJ#GQFF%>b7EuN5mz@#(1}oBF2xt#9GEh|4u&}oug}GPuy#9E)HJVJ+ zH>E6Q$O+%Bgbht9(LI$P643qPmrslA`O;i^T>ab%`&U!atqQL;xhn(I7s9rGjXq=Q z57d2yJauQh`K6_-lU2>-iIHTmoYsMcT9Hz;OpiW1prl=H9SWA@Kz43|s3>u`27XPB z9ke{?nmrrGlV$VE_|=scXyOx{x*;=QC+HhGkfyK@Zo5zMD1<^}DZNnG)37`5Z#v^2 ze(pSB=?q%^cewg3@Dcj=r6mP#v9Uvs(h*5I7Orp0z*3`-)kSr;BMa6cEJhG&4}Dsb zgK7nZNqF5oO5pj<QS-Tr)BJiNxM0K3+Csmw&80Mme~$-EyF z(s#*3oVWPxw-gPhFn3EZ5~y8|G_%SH4^e>q{qA_>%h2&i@uEhV%3|jYV!?{OuwDDT zw9)d7lrIki@9~Or3?gN6560JJ@peG5_SdAE^D6U9PnFR4;pw=TqafCYmjEvQK4=(c zK77MW5AQK;;I?EWjH-M~;*L+u6^FOtthlBmD!IE@SC0>$Pb^V`0mD`8+3M;qknuh{ z{R}!>_4(O@YS8K;tt+PXnujp8D1}RX4J&j4r=JlzguyoSBf7r!sdK3$ytLjy!_rX5 zbt|T^?5ldI64SnHxm5}H#B#SXT1g9OM|Hh^GN~3JGA$S>HOpe$US*dJKFp3jLyk^O z?@9Tj?Q*-9y3NM+{Cs+q!w-!jZ>!zh77Cr57L9J<`YpO*_YrySSLB6sr%#yY;xy@* zgx@nPJLspt+TC_xZVFqI#R~G*Fo%gW`=0{#fm?3jBOW?X?!^QpE;yJz#<`+$I)c19 zE=7l0n0dN=nbWyynzAVg0}pu72)_o3&88VAN$(}BM~{x-)}@M3_p!M zAL3LBPobmHz)shsr(TjyXCIK#{8|`A-c(-QP~>A(|Dv)gF5}~38RytHE_s-XEGx@p z;GV&dO>#Mw0{6_XGI?nEfNBM^k4kw6(gV--E?#p#kJ+NIQgBeUVT}GcJ=Ajoy%8F3 zaoEg6*qM^k7DIQu1U;|Rj1APFFFBCZ9IVlZ?!b~RG98(ZWK9#b_@}YQOa~zcYb*nG z5y%}?VTQ6`7ex)G+HhUP-(No7?R*SLltTe1Xz>Ca8Oega^I_?*TL_0otUXzH0w-b9 zYX*xGZM`50%A4al4N>G0zRHSKXg?A3g{apV!ce4@OzYz*Wpgpt}3ACBJii{BRn{ z*g&WHD1LRS#=u?-yDb#EF02$Yll}A4t;iM0sMF7|4M!hTC~j_U^YvY%VSz_S4#j+2 zQ?FSFkF;2h6+%yx9^#YXS^A`zdsdKO5?vD=-17~05GG@l8OzZuh@rbjN_pdHC%FaX z*`@j#+S-K(gz(E~7X=9|O--hhyKu2vlSzMUwBU_%i6jZ#7=v#@Zzv*)B(S6=v!1lV z4l_2$Qu3$$+({qhaLaX-6MpK+WMyGdxON1lxS?S@V1+O>HSJN8vH`{oK<%fn3;=b% z{eD-n9s=Evt+529lxBXx{<BNyXxxdD#e~*g%0o& z)o+;w>cisZzArFC>w~+Sn)oJ1p42~8QwImYN(`7BgOf0GHfDQfA-vK&a>5vvF{&1MoPxIj_WzEheq;bD_aX zT~7*pl>FF0;BsNB z$1T$@H7AOV@2}_7bCp$fk``En%8ARs%m7Ou!{(~U-Px49x!3WR3y}K8x7D?*Twj{g zm2=_*H!6dQ$Gp?`xuEdlP=PJQr}?XdgCqy999QVRJhIs|aIv#f97F&B8X;2%z4x`Z zXDhZwe$Z4{<(2R_X#^+&G+?t_`ZiNk@26WDUqyOdU0`BK-!b$CZcS5lf|cgM}9}xY?tg!^z;BJo5Q_0DXQoGdo){ zlGzIQEqdD(z|`c*8X-L14qZ7@<5Mftp?|MQp`Io5Fp-AB!V~~*6e|F13(a!*KHUl^ zfm4a$j{Y}GLmQRlM z?HnH+Dft+m0~j>l31n!B*G%B>lM6UO(%22AqxO08%HEMcd1(6)1x(=Pkm*!aRQLfTnBy=OIE#4C)+f|2a+^;87_*Nr{-9)lx9) z-#$%@zj3o#)>;CVZQafg{DQKwh-*deGD(`jZ&CEEI6bUb(b3UGp8n>=rAzbk)J+Vy zy|wLy{->j_Qe=Dq`2&woX}%&q0iG2y=oJ{;j||NJ@PW$p*s!hOPrQ5yRG z4^;vJRAQUn6k%yI;M!7%aPu(hxiKtWAfM2+%|yXaAd|w_)4=}_I;H<5#GV*vQmH>& zL6EUt_V-ZN)r|zku||JSP@e$v^KkRW1_EvIZ{NPvg6cS?nu%P@Po$#fyT=1BHtc$0 zYkZTbrrTmh-*3kNjB|--ha)2+D#qGvm_5Sh9;TX5BDau=%7!pN%_jV1A;Hlb8*=&e z6?0SYy>gytEYSWN{aXMUf9>;kO@H+|bux6lFkW=%O4!J2lki~Wi|~tz{N`qU`(LOC zV6hf(-%I|FY(4o=Qoluh?p1^aMZx+j;u6h(f8Dmfw+iN%(V4$~sNt3HP;r%Tg@BINwhk;q_9uy0=j9kYL6Vdo z?mG0?&aQ(4DRSLPRZ}y?HLqZzEOi!vF9{av$BBToqvOjYAMA>Sz{w_{y-fP`t^bKB z=%jzOXc&a{8R@IU9Uo6m&q>q=PHFp?gM(xI zQWpT7Y=6i9>{$OO@?3#JyWpCelhf3W58&&`+ao|q@@iM?v8XN$GPoCfP4&g%cw4vU z5F2>;E_E@7n#be}l!wq8OOi0)bplj|Y#cdFbY(?#^|zg!9bY6GutKB=bM;Sc#^Brn zlflJp=R3{_;9TBRt@KQ)=GA7-^}Dv7w519V(PnvvMyD$Ig};Y2=;x*Bu*Y|_o}4I( z>PiD(ja9qWQd5)6B+q&j)t8PAc0gnw=@gaerH)Z(Ql=I0r! z{5{zAS`&sBia>k@9=B;je4s@)GatO;l;f81|J#rkdF*@agQEP~h=_>DWk{v4S9b%L zLmIvGjg6I;zci+p5H$WULk5?jo zDOvWWDm1~95G6l;ZJG9Iq|Onz(WUn}?vQrr-!?XICkYy|FtV^rnNGdrIcX><32XCF zn=8awsx+mbqo|mu(odN6B%`D(8B>nn@V^?K?6?6If7-((A`l}}qqrYg^6r5108N_Y zX|2=D9k$`ESUO~YdelDS-kwhDIHTV?N-S+gsZ;u%DD?eEZ(vHy-ofGML;PqQ*fm7m z9FiClKrB@^rcK0XWntC^-lm457CbAb)_Ou++a?NOkC--WNemi?|5hobTA7x9ZJ z8SFgKv-uj2n5eZCPMF=%xtS>Fo`Ex3Ue3(4nj=T|`+C17>91q-cCHV5sm4cu^FRDu zu!18JpJ~Z6!&&9nf(vEix00E;@G;gxiH-7)&>(9MxKKnHXy2({*gQT35@Np3f97V6 z86unpc)>l~@@YnGK#a%oaSI5fyZVo|S z$6Gb+{nqChs(C_E1;A~G1$eS5x*JVqO3jTu2h@OLbr0%9xp^&>SH$K-@xFKGbAykP zo8JTGs&(%Ua6p{=TkWTJl9-~I|C5|u$z18_>EA!>mmvxx-*ZjtRd7_^P$s*b?`eXZ zszxeaiEVBY4x>{hxI97}t3?NZ`Llkuxiy-#VO66K_`b2RvFtHp(>jvBN6Qs&;sz^g zT{_B!w;0qJUcRie8qduhQ^V~Q2X-tkzgf1h@bKcerkanNEYpTxeU87#vLWXOvVSL? zbcNQ;DI6W))3(^r?Plh9i62tWMQ`dK#|jAvKCdj=1#!NBNZ1S*7(>Rlhp)cuC3qh> zxWtaVojE8wGexhbJ!p8ZFfes0C(H_kkdz#JU0lp0Izl`Ug^QlbN=i0nZy(G@6u@uj zdL0LF0a(g@E~3p}zf5QIoTKOk`T4^@KH4}?tFEe&24u3k=h4G;1^B7VR`z)E{#*^X z$C05I!vz^5InXstgV9|`8-J0f@*eZNMnRI{&$z&CDPcO;y;mXR?)FV*dPF(=z_uXoTuYl(fxqF(OY%qnNJiBp6%*(uw z+}rt&+2)EfT1|_x+Hoxr7 zl~Ld;v;Vm*v|0$f9^-9dFO_qPh=iGdJGt3BAMDDkn*`4nrz`n@_y=fo+K>R4<0k7d zEGCE&O1BdOd{gQ2yOn;8zFI9JLIUv{oQ=s2e@jcWFJHb)FSmySHn_35dGW*$T>k3& z^d`Kq-NB@9@%ne~V|ZUjJXnVZ)CQhw>LUamyP)^H^2=2|p8+pBU10*+Qj6E(-UN+L z|0G%CJ~LL&SGs{cSscoV4T>sO2-TC)H&fx9ZF*;3WNS|@FG->9q5M0@oA z96W=NzaK<^i9fY1>jF6U*_e_vssJ30zHQRt7ZqYH1OA)lRYHJ}CnvL^m|Jt zyOz0`*^8zi0ti~MZHh=CB`^`K|9M{rdgnJQsyH<9B`rmwfiP zSVL-4KhZDo12^jOXwiHXBTy%yH)a-7>L7bEp8~^k)kM4y%K$(@yNS7Nm2BM4nynUg z3e(63s3VNY&yRegKZvk531K*J^t7?-NzN0GfD2)RuTivuB!arB&sl0m+2-cw%g%Lx z#GNEG2Plrl-Odq$blt`$^knppX*^qzy?A}Q zc^7c{wj;E1j(xC9ln;m9-V(F80Kp_2k%)X?)1(L?`)m+TC8qQ`H5A{b657l8_3Kv@ zcWw2_g#~Lb(|woNo~Q#MMktMoE5gIgO(i-H2Fk77ZC4@P#D~4D6{lY%m!mf*2CQw! zzM^^j6P~~+H0kLF@LkqF2D5kXsBLXWjxUlBx-GRQMmW9sL^pW-aTLSy9>5SCfxN(M z5dY%Ei|J(o$@Huvacc1@a?}9lJ|X&J0krEhMqvAS@Z24A5Y?&M+Sn8vS?XR$+x}O zxKFWn2&TD#|86;x7pM2hIqBTo9JsY9z4#B1TaZ{beyb9GgZ=Rg$PGPN`~x*a4!D@Bc}Ue#pVzUUSmQaO{Np!5=w2 zJG)ZH{9uTkRRr#gw0${G*NX+f@1=OmIxxFLCXbcuCR2HVgAWd83uH%~m-q2|)H{Wl zA&aM=pc5cZU9ozwPHs^@1I2h>?_;sboK1Qu2T~=s!SmJ}plbL}Gk<1#2K3+JS=(hB zK+#sjW?~Hs_RcC*X`JAmoahFSelM8nvGpvkHD@Eiv2m|X!vyA3y%35)dZv(S`4dpb z6cEv{{QC2`%AzCtWDG#SWb!HVd8}&I)EwzF&tGH#&^;xFrYk{*2;Z$S`vC$ZTIjVa;g#c+L9+0BI5)JMwq5)Cy&Xe7+Eri(kV`3X3 z&I*W>CsusAYviNR932s^+hfpsiki9TxHvq}qKSotG_;dvLm2XOTCz+g6xNQ>bfENV(=>U~a z-0g3pbL40fRXjQpnZTtf5Q0@t^nue8=wo^8+vKQ7V*3XXeWvpW&l;GVR#%KANUX(2 ze_uaLQmON)ziI%IFu`XNOWXXvRoLP+tRj->@E%Z()c@1g)Uapi+-Pee?%^#D?xH4)2fzEo!UFt2v8bhm7+gPj zL)-oQtKxu#c4vFLB3p;q182f+)LwRQ0m_G_C`;4;9;-26Ixz}BYk7thX$o=vejJAa z;o{^J|6<+#ct*1yM6&sUkpST2xFVIMePZ*6A~1?s(DN0=ehnTT-X5&by&|+MS(>I$ z8j}q|OOB^L9(fbdzh2PZZm{cGR$cwz8JISl%QP6`-W3>gqos^5WnHB&1PR_+aElL4 z+&XhT&?ptCj(nZwU+NB`_IUJ-4)B$Gi(>vJwGayG&fm0pj)Mm8nP&8yDn?Ft9 zqNyP${TTC3g(w>U=Go@`M%PHgyxEm5B`$_>#7i;G5TfEQ3jV$XuYQO zPcvs44rTxL@iEqzCL~eT3{g!DQrU{JHON|H*G%>``%)@ z?MqTbrQP)AnLPgBzAPrv5&Ugy&hIk7E{8bgH=`l$gruA}m+9rMsskT-F=*0Xr;v)x!iQ282D{S9p11Xm(9*0aoO}s-$%}qQK!B9LkuQnobHZ4D z@m!CsfIQ@SS@~wx*4Fw5zZe)8MC%s2tAeN#^0VRX-JF~chlc zjve-arq}OL8Cd)0-!*U+<3s-%EWm{~XAu>g@b{(PFYF*g9FAo*o_#>jZ5C@SJkA z-kr9!{OXh2rukp$p7Pr1pd<6TEGAPLB7@#P(&iu3)MRG6^I^7b%^1GY#F+8d7c6+3 zQ+sxT_}YFiPj@*494g=u7*7!;)X=A!2oovNQ%o>UvN<Xo*jfyc(AwAihYs~$ zFxa06NlFWkM+^f9#%ON0(5pe;`yK6YZY1K3Z7}VSw%rCcwUZM_U>qqEWcdpvKpA&E z{R|8waK|i1>9ErkRFFm(+*GB{2P`m?cV89h9R;m&#KTvCY?rbT!p#<0fRu}zxkw6%YUrktGJbXe}`+)|i7-bCkY=|sOjPrJFrYtcjT&k55llUV{rZ-qb&*cpEN;knK|C4T5j40{)sGmgqlb#>%9xja1N zzghi{agWJJdh#{TG=Hyd_d&lu6$q7C3(4|*Wk{y3JXkj2Xiv}7>Po2MPU_C=_xZG)A^a+UFY>rim zi%1?6kT?E(uBoO*%#T(!^1JWaB^ix8P@H~n+ydg_Vg7B&nrF}Ufp`|O7+G+JtJc%YkRpNA<#%W$PO-;ih z8A%b4tDy|ps~ipqW@stKho?fJ=(74mkj{0JI%|}h@jCUstiSe=y{-uo5)v;ilq`LU zlA8GTBms^;)Ilo95@+Q2Z(qLH>}tY0EkK>L?32F|kkV(~9Hs6{K*1`=To?fJaM_e^ zpLewtDb_y9`|IqZWq3F3!5v;L z4A{D@U-y?oQ1JoqKOTR7d%f?8G(67Lw5|;E+2DMg=-%K?apHijym83bxtF{r6{h)J zdnegq0r23E60k_TH1cc2n}7dx8yb*+6wo48k~Lfb>*{X^fY)`H2_R{0ZHs1m^)UFR zQA%f&k=)2?zbF!|ZED(VISwV0RjRSE64|P_n`DbNlk*`DL6#rk}H(IwyEc?^UDN% zTYixT?u9pXOCht#EDPs@J8K1QAw?b7a;u&^A>vK<-Qtoe0N6p$w|xz0%86KDJF$>8 zt-^&76&I!)(Nb@3K16+4grJ6iP11L%CMUL0e1+(yZed455%@-;edTScVTb~5pxG87 z58NtXMyykr?kqUR{FoKea8q=qV^&x$D(DY5SDb7Xj3>El9eiK)Mf2@9^`e$2vflG} zRfEO@iV+3;!0=-8HfL_hE#s*)bJPHTx69UY<-DtT2W_zE5Ui8n%D1&S_Jblf-pRpw zef-H5+96X>!j7W8sm$0iW!Wp6!JOAe=|leh1NC3LWp=QJJuhFDNk8$kVY}FPpXRtu zt=xwBaTOBtGfNgA57JKk22w#i*2@DvYc({s?A7jWFD{I&P{z`D4viQ7;DP3gN5S+36om+8k2=ZN66qsA+tN1D4`gE4!HHEHdM*1% zC^}b=0Cpe%#vJn>{*s;Q@mW$ls5~E${)BPn1k#QC_`a?^!_nbgeaT;VErv`(1#MxP zv5D?4Z7p?^O7btHR0?{>a~7>5>Sv!rJTUjj2Uj$}QmzpdK4jx4o(~!f@rK2@+L2gb zsZfrd&Hs3xSM&Tk;M}w(@PF#qeg4?YCFi)tTdFC*3IR~u$o;HSAVFEAJaKzM3AP@J z+2m~nR!e@=$1Tnc_XD^J@+1SJ_5 zA|rYW_Sv&rOJaZ0c)DEfjuHQKtCm1|OKyH_)%R>_9auhszAjUN=JleizqF@4ZqDYo z?F+bRBmHh1eg(b5H51uOV!$5(mdg1IDoJbExl0uuo9)1ZD$UfzPmStrvum-PhIeEZ z+$#}pLnfWj108Bvdwl+r!)+dS`#n+(3RjQ5kK#_({X)0pJc_-uoVcSXxr%l;S`d3` z{ppS$-@cBeYe&bup#i5S){#eP>;DxIH>5N_o?hQa+4q8*!ds?TjyokvFnjG>EdKXC zr`lzydEZ{_)zeAJ_J~yxJQ}?|??M;n__}JZ{#d@-X1a3Q-(|R&h`)9Q`fKDO;rF{* zsH`yoB}|EU>nBL>2whxXd=BG^yq1i2HaBl*#0hbcY3on2TY9QfL{Sy4%_&!Ytpky# z{nLwMC&rn1!?0~MM09_OoUddanCRpthT4~qxgP3s>;;I)c|&YYT;b475rMWyrv=Crh(maSea?PV z(ER+4C8iX5KWqGN%Ho%U)K2Oa!|h*Zg+@@=^d4(aZ}CILb2S(jPQoYD9S;9 z@ZFYEkaEu2bD-_?&35+d`08zBT4OLb(@l;pcKNRlGY%%O0?<~XMw505 z3nnRFz97Nej(WPhuJ)zXR4uX(HJ@~D-PF$yqSq(FKdg%1;W{GKq_7QeN*vB(t-&>P zmqzR(!EyO=+=4t`jnYF}+E3WYp&2e-40Tml{gZDhG22X8j0nlZlzXNlw^#Ge`sTNp z_PQPfjMMe0ta(ol`sZAoXi*R*CoK=O=gvvp&z!2FJ-tUlr5p6V<6$_w1-7G?n*<+x z^&UnHi?%c)iNeLb3bJHch<%*ohVR_LOiuai&6&W7a&2FMtLdLK@K8*cWvn3$S^ zm4{b_#Y~2zjlL8Wapl4M@|z?}V_}Vb&o)fn28$=-now zghxN;x$m72hui1vs;K#+6=S6HnWq`(@pY?mei#vk~;ai&XsE` zk?K`OVymy2E3)kLreR=qN_^p&fO_q)KD|syk`J|?BrTCFDX~1r`SowdoA3^_S~l+X z%LnZQ4Deyje~8IXm~n+wMYd439JfXR4i;Ve-3It}&NS}5gL`qBmdnV#1+x$~n~f@7 z`-9 z=gn9p^WbpDwLO>3|odWKoG5L5}hR>GN|kp7e(>F_BBh1aDHHp#3e2JMw9P zv4FKco~Q6A@E-LAM)}@wF;4-@R7_Z!C?E@j(H6ixUd=?A0?i3?qnM-Rygd6!3*I}3QOKt!WaCu9 zj#ia(X21B(oezHjJ+)Q=6u+B843CkOb#CrN_(l3sVPx6{&3qQyOwCEvwlBj$l z0TmWs=um55gbu00)jl*37)4HipG*s5b1N5$$2ZFESeMu^w{eOeVZ7{esiNWZ1Vnhe z-u`n7wwsgR&ch|Z9(K*fS6%}7K@Ip(EzEKisRr9+2?D1=D!2!3wm*a)$e{T7z0*>d zNO^hlS&q3ck#c?;H<@PIxZpYAP41?e(Hgry4P8G@M*}dP6xM7=5W3X)2dB-Ga;pya}bD*(85;td)B!c_(Z_M-u*3i#HVJ}U%!dwLJy z6-PB1%Ww)9kErfbp=-=YB(u%~)^RqZaT0KWkgn%iO z-j9+2P9TDfZ3Ggg-_v;b5((O435~{tXp|Gpp^d~17k!iSzaU|yqxK}v)`jw4wj&hj zWNNSaHud`b3>Rq(aDm5;0jUm?DXC8vSx!rUZO|Z5_&KVBs-yvq1y)uw0DJ}E@zQ`J zFawUx3B=m`MiEP`QtBVMQ6v34e}9vNK7lr80}1}NTkg9Og{kz&J(@nKc0%KF1N>qZ zc%Dq@m_Ouo&vFxt@jUH>8&h*AaKvL^(fP0ZOOxLGMV?s^F&@gc1#Y!sn2~*$TZjiW z%meQZ|4?c`4#g7=;|ZFlRgY+?t7)le?k5nm2!vCbGq3;u4FTufeLSQ8!y81e-TMx2 OK#`0r3@eC~`2PV>lr1a( literal 0 HcmV?d00001 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 000000000..b18dede82 --- /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 0000000000000000000000000000000000000000..b4114a6c19b5c84e6cf46a8d0635788f04eb0c93 GIT binary patch literal 30848 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 IaigIB17|baXaE2J literal 0 HcmV?d00001 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 000000000..52e1b4566 --- /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,22 @@ + + + + + + + \ 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 6dc91c927..f8c44edeb 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 000000000..0c3c6b1dc --- /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 @@ + + + +