From 90843729a774063c483a29f86fd9a1bc06dfe5de Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Sat, 4 Jan 2020 11:19:58 +0530 Subject: [PATCH] Remove iot device types --- .../app/build.gradle | 65 - .../app/src/main/AndroidManifest.xml | 95 -- .../wso2/org/wso2_senseagent/BuildConfig.java | 8 - .../wso2/org/wso2_senseagent/Manifest.java | 7 - .../carbon/wso2/org/wso2_senseagent/R.java | 7 - .../iot/android/sense/RegisterActivity.java | 207 --- .../sense/beacon/BeaconDetactorService.java | 131 -- .../sense/beacon/BeaconScanedData.java | 80 - .../sense/beacon/BeaconServiceUtility.java | 71 - .../sense/beacon/MonitoringActivity.java | 252 --- .../bmonitor/BeaconMonitoringActivity.java | 121 -- .../bmonitor/BluetoothLeDeviceStore.java | 193 --- .../sense/bmonitor/BluetoothLeScanner.java | 65 - .../sense/bmonitor/BluetoothUtils.java | 60 - .../sense/bmonitor/CsvWriterHelper.java | 43 - .../sense/bmonitor/LeDeviceListAdapter.java | 154 -- .../android/sense/bmonitor/TimeFormatter.java | 35 - .../sense/bmonitor/UtcDateFormatter.java | 74 - .../sense/constants/SenseConstants.java | 34 - .../data/publisher/DataPublisherReceiver.java | 37 - .../data/publisher/DataPublisherService.java | 313 ---- .../android/sense/data/publisher/Event.java | 555 ------- .../mqtt/AndroidSenseMQTTHandler.java | 240 --- .../mqtt/transport/MQTTTransportHandler.java | 384 ----- .../mqtt/transport/TransportHandler.java | 108 -- .../transport/TransportHandlerException.java | 59 - .../sense/event/SenseScheduleReceiver.java | 41 - .../iot/android/sense/event/SenseService.java | 77 - .../sense/event/streams/DataReader.java | 21 - .../event/streams/SenseDataCollector.java | 53 - .../event/streams/activity/ActivityData.java | 67 - .../streams/activity/ActivityReceiver.java | 54 - .../streams/application/ApplicationData.java | 61 - .../application/ApplicationDataReceiver.java | 45 - .../sense/event/streams/audio/AudioData.java | 58 - .../event/streams/audio/AudioDataReader.java | 50 - .../event/streams/battery/BatteryData.java | 142 -- .../streams/battery/BatteryDataReceiver.java | 48 - .../streams/battery/BatteryReaderService.java | 63 - .../sense/event/streams/call/CallData.java | 70 - .../event/streams/call/CallDataReceiver.java | 87 - .../sense/event/streams/data/NetworkData.java | 67 - .../event/streams/data/NetworkDataReader.java | 96 -- .../event/streams/location/LocationData.java | 56 - .../streams/location/LocationDataReader.java | 251 --- .../event/streams/screen/ScreenData.java | 55 - .../streams/screen/ScreenDataReceiver.java | 32 - .../event/streams/sensor/SensorData.java | 102 -- .../streams/sensor/SensorDataReader.java | 114 -- .../sense/event/streams/sms/SmsData.java | 58 - .../event/streams/sms/SmsDataReceiver.java | 48 - .../sense/event/streams/speed/SpeedData.java | 56 - .../event/streams/speed/SpeedDataReader.java | 180 --- .../realtimeviewer/ActivitySelectSensor.java | 270 ---- .../realtimeviewer/datastore/TempStore.java | 36 - .../event/RealTimeSensorChangeReceiver.java | 40 - .../event/realtimesensor/RealTimeSensor.java | 88 - .../realtimesensor/RealTimeSensorReader.java | 61 - .../AvailableSensorsInDevice.java | 63 - .../sensorlisting/SupportedSensors.java | 122 -- .../view/adaptor/SensorViewAdaptor.java | 94 -- .../sensor/selector/SelectSensorDialog.java | 143 -- .../sense/speech/detector/IVoiceControl.java | 32 - .../detector/WordRecognitionActivity.java | 148 -- .../detector/util/ListeningActivity.java | 125 -- .../speech/detector/util/ProcessWords.java | 192 --- .../detector/util/StringSimilarity.java | 67 - .../util/VoiceRecognitionListener.java | 80 - .../sense/speech/detector/util/WordData.java | 60 - .../iot/android/sense/util/LocalRegistry.java | 270 ---- .../iot/android/sense/util/SenseClient.java | 82 - .../sense/util/SenseClientAsyncExecutor.java | 154 -- .../android/sense/util/SenseDataHolder.java | 204 --- .../sense/util/SenseDataReceiverManager.java | 197 --- .../iot/android/sense/util/SenseUtils.java | 46 - .../iot/android/sense/util/SenseWakeLock.java | 47 - .../sense/util/dto/AccessTokenInfo.java | 57 - .../sense/util/dto/AndroidConfiguration.java | 43 - .../util/dto/AndroidSenseManagerService.java | 30 - .../sense/util/dto/ApiApplicationKey.java | 43 - .../ApiApplicationRegistrationService.java | 25 - .../util/dto/ApiRegistrationProfile.java | 78 - .../dto/DynamicClientRegistrationService.java | 40 - .../sense/util/dto/OAuthApplicationInfo.java | 58 - .../util/dto/OAuthRequestInterceptor.java | 43 - .../android/sense/util/dto/RegisterInfo.java | 40 - .../sense/util/dto/RegistrationProfile.java | 67 - .../sense/util/dto/TokenIssuerService.java | 39 - .../app/src/main/res/drawable/beacon.png | Bin 23479 -> 0 bytes .../app/src/main/res/drawable/beacon_red.png | Bin 19250 -> 0 bytes .../app/src/main/res/drawable/mic.png | Bin 26775 -> 0 bytes .../src/main/res/drawable/pushtoserver.png | Bin 57808 -> 0 bytes .../src/main/res/drawable/round_button.xml | 13 - .../app/src/main/res/drawable/sensor.png | Bin 13854 -> 0 bytes .../src/main/res/drawable/side_nav_bar.xml | 9 - .../app/src/main/res/drawable/wso2logo.png | Bin 30848 -> 0 bytes .../activity_activity_select_sensor.xml | 18 - .../res/layout/activity_beacon_monitoring.xml | 34 - .../src/main/res/layout/activity_monitor.xml | 21 - .../src/main/res/layout/activity_register.xml | 56 - .../res/layout/activity_sense_settings.xml | 16 - .../res/layout/activity_speech_sense_main.xml | 86 - .../layout/app_bar_activity_select_sensor.xml | 90 -- .../main/res/layout/beacon_activity_list.xml | 40 - .../layout/content_activity_select_sensor.xml | 28 - .../main/res/layout/display_sensor_values.xml | 56 - .../layout/fragment_select_sensor_dialog.xml | 10 - .../src/main/res/layout/list_item_device.xml | 203 --- .../nav_header_activity_select_sensor.xml | 20 - .../src/main/res/layout/tupple_monitoring.xml | 80 - .../src/main/res/layout/web_view_activity.xml | 6 - ...activity_activity_select_sensor_drawer.xml | 22 - .../main/res/menu/activity_select_sensor.xml | 6 - .../src/main/res/menu/menu_sense_settings.xml | 7 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3418 -> 0 bytes .../app/src/main/res/mipmap-hdpi/wso2logo.png | Bin 30848 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2206 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4842 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7718 -> 0 bytes .../src/main/res/raw/client_truststore.bks | Bin 36583 -> 0 bytes .../app/src/main/res/raw/wso2carbon.cer | Bin 569 -> 0 bytes .../app/src/main/res/values-v21/styles.xml | 8 - .../app/src/main/res/values-w820dp/dimens.xml | 6 - .../app/src/main/res/values/device.xml | 4 - .../app/src/main/res/values/dimens.xml | 9 - .../app/src/main/res/values/strings.xml | 85 - .../res/values/strings_activity_register.xml | 13 - .../app/src/main/res/values/styles.xml | 14 - .../build.gradle | 21 - .../gradle/wrapper/gradle-wrapper.properties | 6 - .../gradlew | 164 -- .../gradlew.bat | 90 -- .../pom.xml | 120 -- .../settings.gradle | 1 - .../build.xml | 38 - .../pom.xml | 75 - .../src/assembly/src.xml | 36 - ...droid-Accelerometer-ExecutionPlan.siddhiql | 18 - .../artifact.xml | 23 - .../artifact.xml | 23 - ...ice_stream_android_accelerometer_stats.xml | 107 -- .../artifact.xml | 23 - ...eam.android.accelerometer.stats_1.0.0.json | 50 - .../artifact.xml | 23 - ...ce.stream.android.accelerometer_1.0.0.json | 30 - .../AndroidActivityScript.xml | 49 - .../android_activity_script/artifact.xml | 23 - .../artifact.xml | 23 - ...r_device_stream_android_activity_stats.xml | 107 -- .../artifact.xml | 23 - ...e.stream.android.activity.stats_1.0.0.json | 50 - .../android_activity_streams/artifact.xml | 23 - ....device.stream.android.activity_1.0.0.json | 26 - .../Android-Activity-ExecutionPlan.siddhiql | 22 - .../artifact.xml | 23 - .../Android-Audio-ExecutionPlan.siddhiql | 27 - .../artifact.xml | 23 - ...ndroid-Audio-Filter-ExecutionPlan.siddhiql | 16 - .../artifact.xml | 24 - .../Android-Battery-ExecutionPlan.siddhiql | 19 - .../artifact.xml | 24 - .../Android-Call-ExecutionPlan.siddhiql | 17 - .../artifact.xml | 23 - .../Android-Data-ExecutionPlan.siddhiql | 16 - .../artifact.xml | 23 - .../Android-Location-ExecutionPlan.siddhiql | 16 - .../artifact.xml | 23 - .../Android-Screen-ExecutionPlan.siddhiql | 19 - .../artifact.xml | 23 - .../Android-Sense-ExecutionPlan.siddhiql | 157 -- .../artifact.xml | 23 - .../Android-SMS-ExecutionPlan.siddhiql | 16 - .../artifact.xml | 23 - .../AndroidAudioScript.xml | 38 - .../android_audio_script/artifact.xml | 23 - .../android_audio_streams/artifact.xml | 23 - ...per.device.stream.android.audio_1.0.0.json | 34 - .../AndroidBatteryScript.xml | 39 - .../android_battery_script/artifact.xml | 23 - .../artifact.xml | 24 - ...er_device_stream_android_battery_stats.xml | 123 -- .../artifact.xml | 23 - ...ce.stream.android.battery.stats_1.0.0.json | 58 - .../android_battery_streams/artifact.xml | 23 - ...r.device.stream.android.battery_1.0.0.json | 38 - .../android_call_script/AndroidCallScript.xml | 38 - .../android_call_script/artifact.xml | 23 - .../artifact.xml | 23 - ...t_per_device_stream_android_call_stats.xml | 115 -- .../android_call_stats_streams/artifact.xml | 23 - ...evice.stream.android.call.stats_1.0.0.json | 54 - .../android_call_streams/artifact.xml | 23 - ....per.device.stream.android.call_1.0.0.json | 38 - .../android_data_script/AndroidDataScript.xml | 38 - .../android_data_script/artifact.xml | 23 - .../artifact.xml | 23 - ...t_per_device_stream_android_data_stats.xml | 107 -- .../android_data_stats_streams/artifact.xml | 23 - ...evice.stream.android.data.stats_1.0.0.json | 50 - .../android_data_streams/artifact.xml | 23 - ....per.device.stream.android.data_1.0.0.json | 34 - .../artifact.xml | 23 - ...r_device_stream_android_device_details.xml | 107 -- .../artifact.xml | 23 - ...e.stream.android.device.details_1.0.0.json | 50 - .../artifact.xml | 23 - ...e.stream.android.filtered.audio_1.0.0.json | 34 - .../AndroidFrequentContactsScript.xml | 72 - .../artifact.xml | 23 - .../Android-Gravity-ExecutionPlan.siddhiql | 18 - .../artifact.xml | 23 - .../artifact.xml | 23 - ...er_device_stream_android_gravity_stats.xml | 115 -- .../artifact.xml | 24 - ...ce.stream.android.gravity.stats_1.0.0.json | 54 - .../android_gravity_streams/artifact.xml | 23 - ...r.device.stream.android.gravity_1.0.0.json | 34 - .../Android-Gyroscope-ExecutionPlan.siddhiql | 18 - .../artifact.xml | 24 - .../artifact.xml | 24 - ..._device_stream_android_gyroscope_stats.xml | 107 -- .../artifact.xml | 23 - ....stream.android.gyroscope.stats_1.0.0.json | 50 - .../android_gyroscope_streams/artifact.xml | 23 - ...device.stream.android.gyroscope_1.0.0.json | 30 - .../android_headset_script/HeadsetScript.xml | 38 - .../android_headset_script/artifact.xml | 23 - .../artifact.xml | 23 - ...er_device_stream_android_headset_stats.xml | 99 -- .../artifact.xml | 23 - ...ce.stream.android.headset.stats_1.0.0.json | 46 - .../Android-Light-ExecutionPlan.siddhiql | 18 - .../android_light_executionplan/artifact.xml | 23 - .../artifact.xml | 23 - ..._per_device_stream_android_light_stats.xml | 99 -- .../android_light_stats_streams/artifact.xml | 23 - ...vice.stream.android.light.stats_1.0.0.json | 46 - .../android_light_streams/artifact.xml | 23 - ...per.device.stream.android.light_1.0.0.json | 26 - .../android_location_event_sink/artifact.xml | 23 - ...iot_per_device_stream_android_location.xml | 67 - .../LocationScript.xml | 45 - .../android_location_script/artifact.xml | 23 - .../artifact.xml | 23 - ...r_device_stream_android_location_stats.xml | 115 -- .../artifact.xml | 23 - ...e.stream.android.location.stats_1.0.0.json | 54 - .../android_location_streams/artifact.xml | 23 - ....device.stream.android.location_1.0.0.json | 30 - .../Android-Magnetic-ExecutionPlan.siddhiql | 17 - .../artifact.xml | 23 - .../artifact.xml | 23 - ...r_device_stream_android_magnetic_stats.xml | 107 -- .../artifact.xml | 24 - ...e.stream.android.magnetic.stats_1.0.0.json | 50 - .../android_magnetic_streams/artifact.xml | 23 - ....device.stream.android.magnetic_1.0.0.json | 30 - .../Android-Pressure-ExecutionPlan.siddhiql | 18 - .../artifact.xml | 24 - .../artifact.xml | 24 - ...r_device_stream_android_pressure_stats.xml | 99 -- .../artifact.xml | 24 - ...e.stream.android.pressure.stats_1.0.0.json | 46 - .../android_pressure_streams/artifact.xml | 23 - ....device.stream.android.pressure_1.0.0.json | 26 - .../Android-Proximity-ExecutionPlan.siddhiql | 18 - .../artifact.xml | 24 - .../artifact.xml | 24 - ..._device_stream_android_proximity_stats.xml | 99 -- .../artifact.xml | 24 - ....stream.android.proximity.stats_1.0.0.json | 46 - .../android_proximity_streams/artifact.xml | 23 - ...device.stream.android.proximity_1.0.0.json | 26 - .../Android-Rotation-ExecutionPlan.siddhiql | 18 - .../artifact.xml | 23 - .../artifact.xml | 23 - ...r_device_stream_android_rotation_stats.xml | 107 -- .../artifact.xml | 24 - ...e.stream.android.rotation.stats_1.0.0.json | 50 - .../android_rotation_streams/artifact.xml | 23 - ....device.stream.android.rotation_1.0.0.json | 30 - .../AndroidScreenScript.xml | 21 - .../android_screen_script/artifact.xml | 23 - .../artifact.xml | 23 - ...per_device_stream_android_screen_stats.xml | 99 -- .../android_screen_stats_streams/artifact.xml | 23 - ...ice.stream.android.screen.stats_1.0.0.json | 46 - .../android_screen_streams/artifact.xml | 23 - ...er.device.stream.android.screen_1.0.0.json | 26 - .../android_sense_publisher.xml | 25 - .../android_sense_publisher/artifact.xml | 22 - .../android_sms_script/AndroidSmsScript.xml | 21 - .../android_sms_script/artifact.xml | 23 - .../android_sms_stats_event_sink/artifact.xml | 23 - ...ot_per_device_stream_android_sms_stats.xml | 107 -- .../android_sms_stats_streams/artifact.xml | 23 - ...device.stream.android.sms.stats_1.0.0.json | 50 - .../android_sms_streams/artifact.xml | 23 - ...t.per.device.stream.android.sms_1.0.0.json | 34 - .../carbonapps/androidsense/artifacts.xml | 201 --- .../pom.xml | 204 --- .../service/impl/AndroidSenseService.java | 183 --- .../service/impl/AndroidSenseServiceImpl.java | 163 -- .../impl/constants/AndroidSenseConstants.java | 62 - .../AndroidSensePermissionUpdateListener.java | 104 -- .../service/impl/util/APIUtil.java | 223 --- .../impl/util/AndroidConfiguration.java | 53 - .../service/impl/util/SensorRecord.java | 86 - .../src/main/webapp/META-INF/permissions.xml | 66 - .../webapp/META-INF/webapp-classloading.xml | 33 - .../src/main/webapp/WEB-INF/cxf-servlet.xml | 37 - .../src/main/webapp/WEB-INF/web.xml | 37 - .../pom.xml | 59 - .../src/assembly/src.xml | 36 - .../analytics-view.hbs | 55 - .../analytics-view.js | 42 - .../analytics-view.json | 3 - .../public/css/custom.css | 56 - .../public/js/android_sense.js | 387 ----- .../device-view.hbs | 82 - .../device-view.js | 49 - .../device-view.json | 3 - .../public/images/android-sense-icon.png | Bin 8464 -> 0 bytes .../public/images/thumb.png | Bin 7888 -> 0 bytes .../configuration.hbs | 61 - .../configuration.js | 24 - .../configuration.json | 3 - .../public/js/platform-configuration.js | 124 -- .../analytics-view.hbs | 70 - .../analytics-view.js | 62 - .../analytics-view.json | 3 - .../public/css/custom.css | 70 - .../public/js/device-stats.js | 385 ----- .../public/js/moment.min.js | 25 - .../public/js/socket.io.min.js | 2 - .../private/config.json | 11 - .../public/asset/androidsense.apk | Bin 3137637 -> 0 bytes .../public/css/styles.css | 66 - .../public/images/android-sense-icon.png | Bin 8464 -> 0 bytes .../public/images/myDevices_analytics.png | Bin 286419 -> 0 bytes .../public/images/publishDataView.png | Bin 36622 -> 0 bytes .../public/images/registerView.png | Bin 17868 -> 0 bytes .../public/images/selectSensorView.png | Bin 38015 -> 0 bytes .../public/images/thumb.png | Bin 7888 -> 0 bytes .../public/js/download.js | 75 - .../public/js/jquery.validate.js | 1227 -------------- .../type-view.hbs | 304 ---- .../type-view.js | 28 - .../type-view.json | 3 - .../device-types/androidsense-plugin/pom.xml | 60 - .../build.xml | 38 - .../pom.xml | 75 - .../src/assembly/src.xml | 36 - .../arduino_execution.siddhiql | 17 - .../Arduino/arduino_execution/artifact.xml | 23 - .../arduino_receiver/arduino_receiver.xml | 26 - .../Arduino/arduino_receiver/artifact.xml | 22 - .../Arduino/arduino_stream/artifact.xml | 23 - .../org.wso2.iot.arduino_1.0.0.json | 22 - .../carbonapps/Arduino/artifacts.xml | 26 - .../pom.xml | 190 --- .../arduino/service/impl/ArduinoService.java | 135 -- .../service/impl/ArduinoServiceImpl.java | 285 ---- .../impl/constants/ArduinoConstants.java | 37 - .../service/impl/dto/SensorRecord.java | 68 - .../impl/exception/ArduinoException.java | 31 - .../ArduinoPermissionUpdateListener.java | 104 -- .../arduino/service/impl/util/APIUtil.java | 188 --- .../impl/util/ArduinoServiceUtils.java | 188 --- .../arduino/service/impl/util/ZipArchive.java | 43 - .../arduino/service/impl/util/ZipUtil.java | 305 ---- .../src/main/webapp/META-INF/permissions.xml | 61 - .../webapp/META-INF/webapp-classloading.xml | 33 - .../src/main/webapp/WEB-INF/cxf-servlet.xml | 37 - .../src/main/webapp/WEB-INF/web.xml | 38 - .../pom.xml | 60 - .../src/assembly/src.xml | 36 - .../analytics-view.hbs | 37 - .../analytics-view.js | 44 - .../analytics-view.json | 3 - .../public/js/arduino.js | 180 --- .../device-view.hbs | 96 -- .../device-view.js | 45 - .../device-view.json | 3 - .../public/images/ardunio-icon.png | Bin 21675 -> 0 bytes .../public/images/thumb.png | Bin 11936 -> 0 bytes .../configuration.hbs | 61 - .../configuration.js | 24 - .../configuration.json | 3 - .../public/js/platform-configuration.js | 132 -- .../analytics-view.hbs | 43 - .../analytics-view.js | 54 - .../analytics-view.json | 3 - .../public/js/device-stats.js | 117 -- .../public/js/moment.min.js | 25 - .../public/js/socket.io.min.js | 2 - .../private/config.json | 11 - .../public/css/styles.css | 67 - .../public/images/ardunio-icon.png | Bin 21675 -> 0 bytes .../public/images/myDevices_analytics.png | Bin 147394 -> 0 bytes .../public/images/schematicsGuide.jpg | Bin 173704 -> 0 bytes .../public/images/thumb.png | Bin 11936 -> 0 bytes .../public/js/download.js | 186 --- .../public/js/jquery.validate.js | 1234 -------------- .../type-view.hbs | 327 ---- .../type-view.json | 3 - .../device-types/arduino-plugin/pom.xml | 61 - components/device-types/pom.xml | 62 - .../build.xml | 38 - .../pom.xml | 75 - .../src/assembly/src.xml | 36 - .../carbonapps/raspberrypi/artifacts.xml | 27 - .../raspberrypi_execution/artifact.xml | 23 - .../raspberrypi_execution.siddhiql | 20 - .../temperature_publisher/artifact.xml | 22 - .../temperature_publisher.xml | 25 - .../temperature_store/artifact.xml | 22 - ..._device_stream_raspberrypi_temperature.xml | 62 - .../temperature_stream/artifact.xml | 23 - ....stream.raspberrypi.temperature_1.0.0.json | 20 - .../pom.xml | 171 -- .../service/impl/RaspberryPiService.java | 118 -- .../service/impl/RaspberryPiServiceImpl.java | 243 --- .../impl/constants/RaspberrypiConstants.java | 43 - .../service/impl/dto/SensorRecord.java | 68 - .../impl/exception/RaspberrypiException.java | 31 - .../RaspberryPIPermissionUpdateListener.java | 104 -- .../service/impl/util/APIUtil.java | 184 --- .../service/impl/util/ZipArchive.java | 41 - .../service/impl/util/ZipUtil.java | 324 ---- .../src/main/webapp/META-INF/permissions.xml | 54 - .../webapp/META-INF/webapp-classloading.xml | 33 - .../src/main/webapp/WEB-INF/cxf-servlet.xml | 38 - .../src/main/webapp/WEB-INF/web.xml | 38 - .../pom.xml | 60 - .../src/assembly/src.xml | 36 - .../analytics-view.hbs | 37 - .../analytics-view.js | 44 - .../analytics-view.json | 3 - .../public/js/raspberrypi.js | 180 --- .../device-view.hbs | 76 - .../device-view.js | 45 - .../device-view.json | 3 - .../public/images/respberry-icon.png | Bin 40558 -> 0 bytes .../public/images/thumb.png | Bin 44816 -> 0 bytes .../configuration.hbs | 61 - .../configuration.js | 24 - .../configuration.json | 3 - .../public/js/platform-configuration.js | 142 -- .../analytics-view.hbs | 43 - .../analytics-view.js | 59 - .../analytics-view.json | 3 - .../public/js/device-stats.js | 117 -- .../public/js/moment.min.js | 25 - .../public/js/socket.io.min.js | 2 - .../private/config.json | 10 - .../public/css/styles.css | 67 - .../public/images/myDevices_analytics.png | Bin 220158 -> 0 bytes .../public/images/respberry-icon.png | Bin 40558 -> 0 bytes .../public/images/schematicsGuide.png | Bin 142048 -> 0 bytes .../public/images/thumb.png | Bin 44816 -> 0 bytes .../public/js/download.js | 190 --- .../public/js/jquery.validate.js | 1227 -------------- .../type-view.hbs | 316 ---- .../type-view.json | 3 - .../device-types/raspberrypi-plugin/pom.xml | 60 - .../pom.xml | 237 --- .../iot/virtualfirealarm/agent/Bootstrap.java | 36 - .../http/FireAlarmHTTPCommunicator.java | 484 ------ .../mqtt/FireAlarmMQTTCommunicator.java | 293 ---- .../xmpp/FireAlarmXMPPCommunicator.java | 265 --- .../agent/core/AgentConfiguration.java | 164 -- .../agent/core/AgentConstants.java | 127 -- .../agent/core/AgentManager.java | 341 ---- .../agent/core/AgentUtilOperations.java | 439 ----- .../agent/enrollment/EnrollmentManager.java | 549 ------- .../AgentCoreOperationException.java | 57 - .../agent/transport/CommunicationUtils.java | 225 --- .../agent/transport/TransportHandler.java | 47 - .../transport/TransportHandlerException.java | 56 - .../agent/transport/TransportUtils.java | 303 ---- .../transport/http/HTTPTransportHandler.java | 91 -- .../transport/mqtt/MQTTTransportHandler.java | 361 ----- .../transport/xmpp/XMPPTransportHandler.java | 366 ----- .../agent/virtual/VirtualHardwareManager.java | 216 --- .../agent/virtual/ui/AgentUI.java | 910 ----------- .../src/main/resources/alarm-off.gif | Bin 4265 -> 0 bytes .../src/main/resources/alarm-on.gif | Bin 12067 -> 0 bytes .../main/resources/deviceConfig.properties | 35 - .../src/main/resources/fireAlarmSound.mid | Bin 6719 -> 0 bytes .../src/main/ui/build.xml | 73 - .../src/main/ui/manifest.mf | 3 - .../src/main/ui/nbproject/build-impl.xml | 1420 ----------------- .../src/main/ui/nbproject/genfiles.properties | 8 - .../ui/nbproject/private/private.properties | 2 - .../src/main/ui/nbproject/private/private.xml | 9 - .../src/main/ui/nbproject/project.properties | 73 - .../src/main/ui/nbproject/project.xml | 15 - .../src/main/ui/src/bulb-on.jpg | Bin 6942 -> 0 bytes .../mgt/iot/agent/virtual/VirtualAgentUI.java | 37 - .../mgt/iot/agent/virtual/ui/AgentUI.form | 779 --------- .../mgt/iot/agent/virtual/ui/AgentUI.java | 711 --------- .../build.xml | 38 - .../pom.xml | 75 - .../src/assembly/src.xml | 36 - .../carbonapps/virtualfirealarm/artifacts.xml | 27 - .../temperature_store/artifact.xml | 22 - ...ce_stream_virtualfirealarm_temperature.xml | 62 - .../temperature_stream/artifact.xml | 22 - ...am.virtualfirealarm.temperature_1.0.0.json | 20 - .../virtual_firealarm_publisher/artifact.xml | 22 - .../virtual_firealarm_publisher.xml | 25 - .../virtualfirealarm_execution/artifact.xml | 23 - .../virtualfirealarm_execution.siddhiql | 20 - .../pom.xml | 272 ---- .../service/impl/VirtualFireAlarmService.java | 133 -- .../impl/VirtualFireAlarmServiceImpl.java | 286 ---- .../constants/VirtualFireAlarmConstants.java | 89 -- .../service/impl/dto/SensorRecord.java | 68 - .../exception/VirtualFireAlarmException.java | 35 - ...tualFireAlarmPermissionUpdateListener.java | 104 -- .../service/impl/util/APIUtil.java | 183 --- .../util/VirtualFireAlarmUtilConstants.java | 25 - .../service/impl/util/ZipArchive.java | 43 - .../service/impl/util/ZipUtil.java | 341 ---- .../xmpp/VirtualFirealarmXMPPException.java | 56 - .../service/impl/xmpp/XmppAccount.java | 63 - .../service/impl/xmpp/XmppConfig.java | 124 -- .../service/impl/xmpp/XmppServerClient.java | 66 - .../src/main/webapp/META-INF/permissions.xml | 52 - .../webapp/META-INF/webapp-classloading.xml | 33 - .../src/main/webapp/WEB-INF/cxf-servlet.xml | 38 - .../src/main/webapp/WEB-INF/web.xml | 38 - .../src/main/webapp/WEB-INF/xmpp.properties | 25 - .../pom.xml | 60 - .../src/assembly/src.xml | 36 - .../analytics-view.hbs | 37 - .../analytics-view.js | 44 - .../analytics-view.json | 3 - .../public/js/virtual_firealarm.js | 180 --- .../device-view.hbs | 126 -- .../device-view.js | 37 - .../device-view.json | 3 - .../public/images/firealarm-icon.png | Bin 28584 -> 0 bytes .../public/images/thumb.png | Bin 31021 -> 0 bytes .../configuration.hbs | 63 - .../configuration.js | 24 - .../configuration.json | 3 - .../public/js/platform-configuration.js | 132 -- .../analytics-view.hbs | 40 - .../analytics-view.js | 58 - .../analytics-view.json | 3 - .../public/js/device-stats.js | 119 -- .../public/js/moment.min.js | 7 - .../public/js/socket.io.min.js | 2 - .../private/config.json | 31 - .../public/css/styles.css | 66 - .../public/images/firealarm-icon.png | Bin 28584 -> 0 bytes .../public/images/myDevices_analytics.png | Bin 759452 -> 0 bytes .../public/images/schematicsGuide.png | Bin 52343 -> 0 bytes .../public/images/thumb.png | Bin 31021 -> 0 bytes .../public/js/download.js | 137 -- .../public/js/jquery.validate.js | 1227 -------------- .../type-view.hbs | 285 ---- .../type-view.json | 3 - .../virtual-fire-alarm-plugin/pom.xml | 61 - .../pom.xml | 123 -- .../src/main/resources/build.properties | 1 - .../src/main/resources/p2.inf | 8 - .../android_sense_receiver-carbon.super.xml | 26 - .../org.wso2.iot.android.sense_1.0.0.json | 63 - .../pom.xml | 205 --- .../src/main/resources/build.properties | 1 - .../resources/devicetypes/android_sense.xml | 83 - .../src/main/resources/p2.inf | 17 - .../receiver/android_sense_receiver.xml | 26 - .../org.wso2.iot.android.sense_1.0.0.json | 63 - .../pom.xml | 129 -- .../src/main/resources/build.properties | 1 - .../resources/devicetypes/android_sense.xml | 65 - .../src/main/resources/p2.inf | 12 - .../androidsense-plugin-feature/pom.xml | 41 - .../pom.xml | 122 -- .../src/main/resources/build.properties | 1 - .../src/main/resources/p2.inf | 6 - .../pom.xml | 189 --- .../main/resources/agent/ArduinoBoardSketch.h | 77 - .../resources/agent/ArduinoBoardSketch.ino | 83 - .../src/main/resources/agent/Connect.ino | 163 -- .../src/main/resources/agent/PollServer.ino | 82 - .../src/main/resources/agent/PushData.ino | 133 -- .../src/main/resources/agent/deviceType.png | Bin 10418 -> 0 bytes .../main/resources/agent/sketch.properties | 20 - .../src/main/resources/build.properties | 1 - .../main/resources/devicetypes/arduino.xml | 67 - .../src/main/resources/p2.inf | 18 - .../pom.xml | 134 -- .../src/main/resources/build.properties | 1 - .../main/resources/devicetypes/arduino.xml | 43 - .../src/main/resources/p2.inf | 13 - .../arduino-plugin-feature/pom.xml | 41 - features/device-types-feature/pom.xml | 43 - .../pom.xml | 122 -- .../src/main/resources/build.properties | 1 - .../src/main/resources/p2.inf | 5 - .../raspberrypi_receiver-carbon.super.xml | 25 - ...t.per.device.stream.raspberrypi_1.0.0.json | 16 - .../pom.xml | 189 --- .../resources/agent/Adafruit_Python_DHT.zip | Bin 127572 -> 0 bytes .../src/main/resources/agent/README.md | 43 - .../main/resources/agent/RaspberryService.sh | 77 - .../resources/agent/deviceConfig.properties | 33 - .../agent/org.eclipse.paho.mqtt.python.tar | Bin 1157120 -> 0 bytes .../main/resources/agent/sketch.properties | 2 - .../resources/agent/src/RaspberryAgent.py | 346 ---- .../resources/agent/src/RaspberryStats.log | 0 .../main/resources/agent/src/httpServer.py | 118 -- .../src/main/resources/agent/src/iotUtils.py | 193 --- .../main/resources/agent/src/mqttConnector.py | 164 -- .../main/resources/agent/src/running_mode.py | 3 - .../main/resources/agent/src/token_updater.py | 53 - .../src/main/resources/agent/startService.sh | 59 - .../src/main/resources/agent/testAgent.sh | 130 -- .../src/main/resources/build.properties | 1 - .../resources/devicetypes/raspberrypi.xml | 71 - .../src/main/resources/p2.inf | 25 - .../receiver/raspberrypi_receiver.xml | 25 - .../org.wso2.iot.raspberrypi_1.0.0.json | 16 - .../pom.xml | 135 -- .../src/main/resources/build.properties | 1 - .../resources/devicetypes/raspberrypi.xml | 47 - .../src/main/resources/p2.inf | 13 - .../raspberrypi-plugin-feature/pom.xml | 41 - .../pom.xml | 123 -- .../src/main/resources/build.properties | 1 - .../src/main/resources/p2.inf | 8 - ...virtualfirealarm_receiver-carbon.super.xml | 25 - ....device.stream.virtualfirealarm_1.0.0.json | 16 - .../pom.xml | 186 --- .../resources/agent/deviceConfig.properties | 34 - .../main/resources/agent/sketch.properties | 2 - .../src/main/resources/agent/start-device.bat | 7 - .../src/main/resources/agent/start-device.sh | 190 --- .../resources/agent/virtual_firealarm.jks | Bin 635 -> 0 bytes .../src/main/resources/build.properties | 1 - .../devicetypes/virtual_firealarm.xml | 81 - .../src/main/resources/p2.inf | 19 - .../receiver/virtualfirealarm_receiver.xml | 25 - ....device.stream.virtualfirealarm_1.0.0.json | 16 - .../pom.xml | 136 -- .../src/main/resources/build.properties | 1 - .../devicetypes/virtual_firealarm.xml | 59 - .../src/main/resources/p2.inf | 17 - .../virtual-fire-alarm-plugin-feature/pom.xml | 41 - pom.xml | 58 +- 655 files changed, 2 insertions(+), 49775 deletions(-) delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/BuildConfig.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/Manifest.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/R.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/RegisterActivity.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BeaconMonitoringActivity.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeDeviceStore.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeScanner.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothUtils.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/CsvWriterHelper.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/LeDeviceListAdapter.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/TimeFormatter.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/UtcDateFormatter.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/constants/SenseConstants.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherReceiver.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/AndroidSenseMQTTHandler.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/MQTTTransportHandler.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandler.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandlerException.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseScheduleReceiver.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseService.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/DataReader.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/activity/ActivityData.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/activity/ActivityReceiver.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/application/ApplicationData.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/application/ApplicationDataReceiver.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/audio/AudioData.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/audio/AudioDataReader.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryData.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryDataReceiver.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryReaderService.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/call/CallData.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/call/CallDataReceiver.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/data/NetworkData.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/data/NetworkDataReader.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/location/LocationData.java delete mode 100755 components/device-types/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 delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/screen/ScreenData.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/screen/ScreenDataReceiver.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sensor/SensorData.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sensor/SensorDataReader.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sms/SmsData.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sms/SmsDataReceiver.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/speed/SpeedData.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/speed/SpeedDataReader.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/datastore/TempStore.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/RealTimeSensorChangeReceiver.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensor.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensorReader.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/AvailableSensorsInDevice.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/SupportedSensors.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/adaptor/SensorViewAdaptor.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/sensor/selector/SelectSensorDialog.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/IVoiceControl.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/WordRecognitionActivity.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ListeningActivity.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ProcessWords.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/StringSimilarity.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/VoiceRecognitionListener.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/WordData.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/LocalRegistry.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClientAsyncExecutor.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataReceiverManager.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseUtils.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseWakeLock.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AccessTokenInfo.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidConfiguration.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidSenseManagerService.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationKey.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationRegistrationService.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiRegistrationProfile.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/DynamicClientRegistrationService.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthApplicationInfo.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthRequestInterceptor.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegisterInfo.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegistrationProfile.java delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/TokenIssuerService.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon_red.png delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/mic.png delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/pushtoserver.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/sensor.png delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/side_nav_bar.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_activity_select_sensor.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_beacon_monitoring.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_register.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_sense_settings.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_speech_sense_main.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/content_activity_select_sensor.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/display_sensor_values.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/fragment_select_sensor_dialog.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/list_item_device.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/nav_header_activity_select_sensor.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_activity_select_sensor_drawer.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_select_sensor.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/menu_sense_settings.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/wso2logo.png delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/client_truststore.bks delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/wso2carbon.cer delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-v21/styles.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-w820dp/dimens.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/device.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings_activity_register.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/styles.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/build.gradle delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradle/wrapper/gradle-wrapper.properties delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew.bat delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/settings.gradle delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/build.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/assembly/src.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_executionplan/Android-Accelerometer-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_event_sink/iot_per_device_stream_android_accelerometer_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_streams/iot.per.device.stream.android.accelerometer.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_streams/iot.per.device.stream.android.accelerometer_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_activity_script/AndroidActivityScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_activity_script/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_activity_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_activity_stats_event_sink/iot_per_device_stream_android_activity_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_activity_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_activity_stats_streams/iot.per.device.stream.android.activity.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_activity_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_activity_streams/iot.per.device.stream.android.activity_1.0.0.json delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_activity_executionplan/Android-Activity-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_activity_executionplan/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_audio_executionplan/Android-Audio-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_audio_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_audio_filter_executionplan/Android-Audio-Filter-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_audio_filter_executionplan/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_battery_execution_plan/Android-Battery-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_battery_execution_plan/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_call_executionplan/Android-Call-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_call_executionplan/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_data_executionplan/Android-Data-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_data_executionplan/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_location_executionplan/Android-Location-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_location_executionplan/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_screen_executionplan/Android-Screen-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_screen_executionplan/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_sense_executionplan/Android-Sense-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_sense_executionplan/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_sms_executionplan/Android-SMS-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_sms_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_audio_script/AndroidAudioScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_audio_script/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_audio_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_audio_streams/iot.per.device.stream.android.audio_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_battery_script/AndroidBatteryScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_battery_script/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_battery_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_battery_stats_event_sink/iot_per_device_stream_android_battery_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_battery_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_battery_stats_streams/iot.per.device.stream.android.battery.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_battery_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_battery_streams/iot.per.device.stream.android.battery_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_call_script/AndroidCallScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_call_script/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_call_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_call_stats_event_sink/iot_per_device_stream_android_call_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_call_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_call_stats_streams/iot.per.device.stream.android.call.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_call_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_call_streams/iot.per.device.stream.android.call_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_data_script/AndroidDataScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_data_script/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_data_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_data_stats_event_sink/iot_per_device_stream_android_data_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_data_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_data_stats_streams/iot.per.device.stream.android.data.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_data_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_data_streams/iot.per.device.stream.android.data_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_device_details_event_sink/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_device_details_event_sink/iot_per_device_stream_android_device_details.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_device_details_streams/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_device_details_streams/iot.per.device.stream.android.device.details_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_filtered_audio_streams/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_filtered_audio_streams/iot.per.device.stream.android.filtered.audio_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_frequentcontacts_script/AndroidFrequentContactsScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_frequentcontacts_script/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_executionplan/Android-Gravity-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_event_sink/iot_per_device_stream_android_gravity_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_streams/iot.per.device.stream.android.gravity.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_streams/iot.per.device.stream.android.gravity_1.0.0.json delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_executionplan/Android-Gyroscope-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_event_sink/iot_per_device_stream_android_gyroscope_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_streams/iot.per.device.stream.android.gyroscope.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_streams/iot.per.device.stream.android.gyroscope_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_headset_script/HeadsetScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_headset_script/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_headset_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_headset_stats_event_sink/iot_per_device_stream_android_headset_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_headset_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_headset_stats_streams/iot.per.device.stream.android.headset.stats_1.0.0.json delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_executionplan/Android-Light-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_event_sink/iot_per_device_stream_android_light_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_streams/iot.per.device.stream.android.light.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_streams/iot.per.device.stream.android.light_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_event_sink/iot_per_device_stream_android_location.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_script/LocationScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_script/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_stats_event_sink/iot_per_device_stream_android_location_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_stats_streams/iot.per.device.stream.android.location.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_location_streams/iot.per.device.stream.android.location_1.0.0.json delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_executionplan/Android-Magnetic-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_event_sink/iot_per_device_stream_android_magnetic_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_streams/iot.per.device.stream.android.magnetic.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_streams/iot.per.device.stream.android.magnetic_1.0.0.json delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_executionplan/Android-Pressure-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_event_sink/iot_per_device_stream_android_pressure_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_streams/iot.per.device.stream.android.pressure.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_streams/iot.per.device.stream.android.pressure_1.0.0.json delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_executionplan/Android-Proximity-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_event_sink/iot_per_device_stream_android_proximity_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_streams/iot.per.device.stream.android.proximity.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_streams/iot.per.device.stream.android.proximity_1.0.0.json delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_executionplan/Android-Rotation-ExecutionPlan.siddhiql delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_executionplan/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_event_sink/iot_per_device_stream_android_rotation_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_streams/iot.per.device.stream.android.rotation.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_streams/iot.per.device.stream.android.rotation_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_screen_script/AndroidScreenScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_screen_script/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_screen_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_screen_stats_event_sink/iot_per_device_stream_android_screen_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_screen_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_screen_stats_streams/iot.per.device.stream.android.screen.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_screen_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_screen_streams/iot.per.device.stream.android.screen_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/android_sense_publisher.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sms_script/AndroidSmsScript.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sms_script/artifact.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sms_stats_event_sink/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sms_stats_event_sink/iot_per_device_stream_android_sms_stats.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sms_stats_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sms_stats_streams/iot.per.device.stream.android.sms.stats_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sms_streams/artifact.xml delete mode 100755 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sms_streams/iot.per.device.stream.android.sms_1.0.0.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseService.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/constants/AndroidSenseConstants.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/listener/AndroidSensePermissionUpdateListener.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/APIUtil.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/AndroidConfiguration.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/SensorRecord.java delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/permissions.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/webapp-classloading.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/cxf-servlet.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/web.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/assembly/src.xml delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.hbs delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/public/css/custom.css delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/public/js/android_sense.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.hbs delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/android-sense-icon.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/thumb.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.hbs delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.hbs delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/css/custom.css delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/moment.min.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/socket.io.min.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/private/config.json delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/asset/androidsense.apk delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/css/styles.css delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/android-sense-icon.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/myDevices_analytics.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/publishDataView.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/registerView.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/selectSensorView.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/thumb.png delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/download.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/jquery.validate.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.js delete mode 100644 components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.json delete mode 100644 components/device-types/androidsense-plugin/pom.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/build.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/assembly/src.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/arduino_execution.siddhiql delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/artifact.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/arduino_receiver.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/artifact.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/artifact.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/org.wso2.iot.arduino_1.0.0.json delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/artifacts.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoService.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoServiceImpl.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/constants/ArduinoConstants.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/dto/SensorRecord.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/exception/ArduinoException.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/listener/ArduinoPermissionUpdateListener.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/APIUtil.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ArduinoServiceUtils.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipArchive.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipUtil.java delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/permissions.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/webapp-classloading.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/cxf-servlet.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/assembly/src.xml delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.hbs delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.json delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/public/js/arduino.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.hbs delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.json delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/ardunio-icon.png delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/thumb.png delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.hbs delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.json delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.hbs delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.json delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/device-stats.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/moment.min.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/socket.io.min.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/private/config.json delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/css/styles.css delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/ardunio-icon.png delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/myDevices_analytics.png delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/schematicsGuide.jpg delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/thumb.png delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/download.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/jquery.validate.js delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.hbs delete mode 100644 components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.json delete mode 100644 components/device-types/arduino-plugin/pom.xml delete mode 100644 components/device-types/pom.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/build.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/assembly/src.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/artifacts.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/artifact.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/raspberrypi_execution.siddhiql delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/temperature_publisher/artifact.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/temperature_publisher/temperature_publisher.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/temperature_store/artifact.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/temperature_store/iot_per_device_stream_raspberrypi_temperature.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/temperature_stream/artifact.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/temperature_stream/iot.per.device.stream.raspberrypi.temperature_1.0.0.json delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiService.java delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiServiceImpl.java delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/constants/RaspberrypiConstants.java delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/dto/SensorRecord.java delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/exception/RaspberrypiException.java delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/listener/RaspberryPIPermissionUpdateListener.java delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/APIUtil.java delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipArchive.java delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipUtil.java delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/permissions.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/webapp-classloading.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/cxf-servlet.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/assembly/src.xml delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.hbs delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.json delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/public/js/raspberrypi.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.json delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/respberry-icon.png delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/thumb.png delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.hbs delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.json delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.hbs delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.json delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/device-stats.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/moment.min.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/socket.io.min.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/private/config.json delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/css/styles.css delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/myDevices_analytics.png delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/respberry-icon.png delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/schematicsGuide.png delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/thumb.png delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/download.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/jquery.validate.js delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.hbs delete mode 100644 components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.json delete mode 100644 components/device-types/raspberrypi-plugin/pom.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/Bootstrap.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/http/FireAlarmHTTPCommunicator.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/mqtt/FireAlarmMQTTCommunicator.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/xmpp/FireAlarmXMPPCommunicator.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConfiguration.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConstants.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentManager.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentUtilOperations.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/enrollment/EnrollmentManager.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/exception/AgentCoreOperationException.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/CommunicationUtils.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandler.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandlerException.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportUtils.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/http/HTTPTransportHandler.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/mqtt/MQTTTransportHandler.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/xmpp/XMPPTransportHandler.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/VirtualHardwareManager.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/ui/AgentUI.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-off.gif delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-on.gif delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/deviceConfig.properties delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/fireAlarmSound.mid delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/build.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/manifest.mf delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/build-impl.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/genfiles.properties delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.properties delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.properties delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/bulb-on.jpg delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/build.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/pom.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/assembly/src.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/artifacts.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_store/artifact.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_store/iot_per_device_stream_virtualfirealarm_temperature.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_stream/artifact.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_stream/iot.per.device.stream.virtualfirealarm.temperature_1.0.0.json delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtual_firealarm_publisher/artifact.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtual_firealarm_publisher/virtual_firealarm_publisher.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtualfirealarm_execution/artifact.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtualfirealarm_execution/virtualfirealarm_execution.siddhiql delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmService.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/constants/VirtualFireAlarmConstants.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/dto/SensorRecord.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/exception/VirtualFireAlarmException.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/listener/VirtualFireAlarmPermissionUpdateListener.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/APIUtil.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmUtilConstants.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/xmpp/VirtualFirealarmXMPPException.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/xmpp/XmppAccount.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/xmpp/XmppConfig.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/xmpp/XmppServerClient.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/permissions.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/webapp-classloading.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/xmpp.properties delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/assembly/src.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.hbs delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.js delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.json delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/public/js/virtual_firealarm.js delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.hbs delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.js delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.json delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/firealarm-icon.png delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/thumb.png delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.hbs delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.js delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.json delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js delete mode 100755 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.hbs delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.js delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.json delete mode 100755 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/device-stats.js delete mode 100755 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/moment.min.js delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/socket.io.min.js delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/private/config.json delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/css/styles.css delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/firealarm-icon.png delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/myDevices_analytics.png delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/schematicsGuide.png delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/thumb.png delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/download.js delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/jquery.validate.js delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.json delete mode 100644 components/device-types/virtual-fire-alarm-plugin/pom.xml delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature/pom.xml delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature/src/main/resources/receiver/android_sense_receiver-carbon.super.xml delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature/src/main/resources/streams/org.wso2.iot.android.sense_1.0.0.json delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/pom.xml delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/src/main/resources/devicetypes/android_sense.xml delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/src/main/resources/receiver/android_sense_receiver.xml delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/src/main/resources/streams/org.wso2.iot.android.sense_1.0.0.json delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/pom.xml delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/src/main/resources/devicetypes/android_sense.xml delete mode 100644 features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/androidsense-plugin-feature/pom.xml delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.analytics.feature/pom.xml delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.analytics.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.analytics.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/pom.xml delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/agent/ArduinoBoardSketch.h delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/agent/ArduinoBoardSketch.ino delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/agent/Connect.ino delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/agent/PollServer.ino delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/agent/PushData.ino delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/agent/deviceType.png delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/agent/sketch.properties delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/devicetypes/arduino.xml delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.ui.feature/pom.xml delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.ui.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.ui.feature/src/main/resources/devicetypes/arduino.xml delete mode 100644 features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.ui.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/arduino-plugin-feature/pom.xml delete mode 100644 features/device-types-feature/pom.xml delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics.feature/pom.xml delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics.feature/src/main/resources/receiver/raspberrypi_receiver-carbon.super.xml delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics.feature/src/main/resources/streams/iot.per.device.stream.raspberrypi_1.0.0.json delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/pom.xml delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/Adafruit_Python_DHT.zip delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/README.md delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/RaspberryService.sh delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/deviceConfig.properties delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/org.eclipse.paho.mqtt.python.tar delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/sketch.properties delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/src/RaspberryAgent.py delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/src/RaspberryStats.log delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/src/httpServer.py delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/src/iotUtils.py delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/src/mqttConnector.py delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/src/running_mode.py delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/src/token_updater.py delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/startService.sh delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/agent/testAgent.sh delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/devicetypes/raspberrypi.xml delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/receiver/raspberrypi_receiver.xml delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/streams/org.wso2.iot.raspberrypi_1.0.0.json delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/pom.xml delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/src/main/resources/devicetypes/raspberrypi.xml delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/raspberrypi-plugin-feature/pom.xml delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics.feature/pom.xml delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics.feature/src/main/resources/receiver/virtualfirealarm_receiver-carbon.super.xml delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics.feature/src/main/resources/streams/iot.per.device.stream.virtualfirealarm_1.0.0.json delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/pom.xml delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/agent/deviceConfig.properties delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/agent/sketch.properties delete mode 100755 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/agent/start-device.bat delete mode 100755 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/agent/start-device.sh delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/agent/virtual_firealarm.jks delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/devicetypes/virtual_firealarm.xml delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/receiver/virtualfirealarm_receiver.xml delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/streams/iot.per.device.stream.virtualfirealarm_1.0.0.json delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/pom.xml delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/src/main/resources/build.properties delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/src/main/resources/devicetypes/virtual_firealarm.xml delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/src/main/resources/p2.inf delete mode 100644 features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle deleted file mode 100755 index 9f6b11adf4..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle +++ /dev/null @@ -1,65 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 22 - buildToolsVersion '22.0.1' - defaultConfig { - applicationId "agent.sense.android.iot.carbon.wso2.org.wso2_senseagent" - minSdkVersion 19 - targetSdkVersion 22 - versionCode 1 - versionName "1.0" - - } - repositories { - maven { - url "https://dl.bintray.com/alt236/maven" - } - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - applicationVariants.all { variant -> - variant.outputs.each { output -> - def newName = output.outputFile.name - newName = newName.replace("app-", "androidsense") - newName = newName.replace("release", "") - //noinspection GroovyAssignabilityCheck - output.outputFile = new File(output.outputFile.parent, newName) - } - } - } - } - 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(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' - compile 'com.github.rholder:snowball-stemmer:1.3.0.581.1' - 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' - compile 'uk.co.alt236:easycursor-android:1.0.0' - compile 'uk.co.alt236:bluetooth-le-library-android:1.0.0' - compile 'com.google.android.gms:play-services-location:9.4.0' -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml deleted file mode 100755 index 9922eac4be..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/BuildConfig.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/BuildConfig.java deleted file mode 100644 index 5032b19a1d..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/BuildConfig.java +++ /dev/null @@ -1,8 +0,0 @@ -/*___Generated_by_IDEA___*/ - -package agent.sense.android.iot.carbon.wso2.org.wso2_senseagent; - -/* This stub is only used by the IDE. It is NOT the BuildConfig class actually packed into the APK */ -public final class BuildConfig { - public final static boolean DEBUG = Boolean.parseBoolean(null); -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/Manifest.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/Manifest.java deleted file mode 100644 index 6e03df3ca0..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/Manifest.java +++ /dev/null @@ -1,7 +0,0 @@ -/*___Generated_by_IDEA___*/ - -package agent.sense.android.iot.carbon.wso2.org.wso2_senseagent; - -/* This stub is only used by the IDE. It is NOT the Manifest class actually packed into the APK */ -public final class Manifest { -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/R.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/R.java deleted file mode 100644 index b047be4fc9..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/R.java +++ /dev/null @@ -1,7 +0,0 @@ -/*___Generated_by_IDEA___*/ - -package agent.sense.android.iot.carbon.wso2.org.wso2_senseagent; - -/* This stub is only used by the IDE. It is NOT the R class actually packed into the APK */ -public final class R { -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/RegisterActivity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/RegisterActivity.java deleted file mode 100755 index bf532d00b2..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/RegisterActivity.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2015, 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; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.annotation.TargetApi; -import android.app.Activity; -import android.content.Intent; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.text.TextUtils; -import android.view.KeyEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.Button; -import android.widget.EditText; -import android.widget.Toast; - -import org.wso2.carbon.iot.android.sense.data.publisher.DataPublisherReceiver; -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.event.SenseScheduleReceiver; -import org.wso2.carbon.iot.android.sense.realtimeviewer.ActivitySelectSensor; -import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.AvailableSensorsInDevice; -import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.SupportedSensors; -import org.wso2.carbon.iot.android.sense.util.LocalRegistry; -import org.wso2.carbon.iot.android.sense.util.SenseClient; -import org.wso2.carbon.iot.android.sense.util.SenseUtils; -import org.wso2.carbon.iot.android.sense.util.dto.RegisterInfo; - -import agent.sense.android.iot.carbon.wso2.org.wso2_senseagent.R; - -/** - * A login screen that offers to register the device. - */ -public class RegisterActivity extends Activity { - - private EditText mUsernameView; - private EditText mPasswordView; - private EditText mHostView; - private View mProgressView; - private View mLoginFormView; - private Button deviceRegisterButton; - private Handler mUiHandler = new Handler(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - getSharedPreferences(SupportedSensors.SELECTED_SENSORS, 0).edit().clear().apply(); - - if (LocalRegistry.isExist(getApplicationContext())) { - Intent intent = new Intent(getApplicationContext(), ActivitySelectSensor.class); - startActivity(intent); - } - setContentView(R.layout.activity_register); - mUsernameView = (EditText) findViewById(R.id.username); - mPasswordView = (EditText) findViewById(R.id.password); - mHostView = (EditText) findViewById(R.id.hostname); - AvailableSensorsInDevice availableSensorsInDevice = new AvailableSensorsInDevice(getApplicationContext()); - availableSensorsInDevice.setContent(); - - deviceRegisterButton = (Button) findViewById(R.id.device_register_button); - - - deviceRegisterButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - attemptLogin(); - } - }); - - mLoginFormView = findViewById(R.id.login_form); - mProgressView = findViewById(R.id.login_progress); - } - - public void attemptLogin() { - showProgress(true); - // Reset errors. - mUsernameView.setError(null); - mPasswordView.setError(null); - - // Store values at the time of the login attempt. - final String username = mUsernameView.getText().toString(); - final String password = mPasswordView.getText().toString(); - final String hostname = mHostView.getText().toString(); - boolean cancel = false; - View focusView = null; - - // Check for a valid password, if the user entered one. - if (!TextUtils.isEmpty(password)) { - // mPasswordView.setError(getString(R.string.error_invalid_password)); - focusView = mPasswordView; - //cancel = true; - } - // Check for a valid username . - if (TextUtils.isEmpty(username)) { - mUsernameView.setError(getString(R.string.error_field_required)); - focusView = mUsernameView; - cancel = true; - } - if (TextUtils.isEmpty(username)) { - mHostView.setError(getString(R.string.error_field_required)); - focusView = mHostView; - cancel = true; - } - - if (cancel) { - focusView.requestFocus(); - } else { - Thread myThread = new Thread(new Runnable() { - @Override - public void run() { - SenseClient client = new SenseClient(getApplicationContext()); - LocalRegistry.addServerURL(getBaseContext(), hostname); - String deviceId = SenseUtils.generateDeviceId(getBaseContext(), getContentResolver()); - final RegisterInfo registerStatus = client.register(username, password, deviceId, mUiHandler); - mUiHandler.post(new Runnable() { - @Override - public void run() { - Toast.makeText(getApplicationContext(), registerStatus.getMsg(), Toast.LENGTH_LONG).show(); - } - }); - - if (registerStatus.isRegistered()) { - LocalRegistry.setEnrolled(getApplicationContext(), true); - LocalRegistry.addUsername(getApplicationContext(), username); - LocalRegistry.addDeviceId(getApplicationContext(), deviceId); - MQTTTransportHandler mqttTransportHandler = AndroidSenseMQTTHandler.getInstance(getApplicationContext()); - if (!mqttTransportHandler.isConnected()) { - mqttTransportHandler.connect(); - } - SenseScheduleReceiver senseScheduleReceiver = new SenseScheduleReceiver(); - senseScheduleReceiver.clearAbortBroadcast(); - senseScheduleReceiver.onReceive(getApplicationContext(), null); - - DataPublisherReceiver dataUploaderReceiver = new DataPublisherReceiver(); - dataUploaderReceiver.clearAbortBroadcast(); - dataUploaderReceiver.onReceive(getApplicationContext(), null); - - mUiHandler.post(new Runnable() { - @Override - public void run() { - Intent intent = new Intent(getApplicationContext(), ActivitySelectSensor.class); - startActivity(intent); - } - }); - } - mUiHandler.post(new Runnable() { - @Override - public void run() { - showProgress(false); - } - }); - } - }); - myThread.start(); - } - } - - @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) - public void showProgress(final boolean show) { - // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow - // for very easy animations. If available, use these APIs to fade-in - // the progress spinner. - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { - int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); - - mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); - mLoginFormView.animate().setDuration(shortAnimTime).alpha( - show ? 0 : 1).setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); - } - }); - - mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); - mProgressView.animate().setDuration(shortAnimTime).alpha( - show ? 1 : 0).setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); - } - }); - } else { - // The ViewPropertyAnimator APIs are not available, so simply show - // and hide the relevant UI components. - mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); - mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); - deviceRegisterButton.setVisibility(show? View.VISIBLE : View.GONE); - } - } -} diff --git a/components/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java deleted file mode 100755 index 61e84c6809..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * 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) { - - new Thread(){ - @Override - public void run() { - iBeaconManager.bind(BeaconDetactorService.this); - } - }.start(); - - - return START_STICKY; - } - - @Override - public void onCreate() { - super.onCreate(); - - - 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/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java deleted file mode 100644 index e33e3f8e2c..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java deleted file mode 100755 index 1a4271b5e2..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java +++ /dev/null @@ -1,71 +0,0 @@ -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/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java deleted file mode 100644 index 5b24c38587..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * 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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BeaconMonitoringActivity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BeaconMonitoringActivity.java deleted file mode 100644 index 23785db26a..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BeaconMonitoringActivity.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * - * 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.bmonitor; - -import android.annotation.TargetApi; -import android.app.Activity; -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.os.AsyncTask; -import android.os.Build; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.widget.ListView; - -import java.util.HashMap; -import java.util.Map; - -import agent.sense.android.iot.carbon.wso2.org.wso2_senseagent.R; -import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; -import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; - -public class BeaconMonitoringActivity extends AppCompatActivity { - - private BluetoothLeScanner mScanner; - private BluetoothUtils mBluetoothUtils; - private LeDeviceListAdapter mLeDeviceListAdapter; - private BluetoothLeDeviceStore mDeviceStore; - - protected ListView mList; - - public static final int MINIMUM_DISTANCE = -70; - - public static Map itemMap; - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_beacon_monitoring); - - itemMap = new HashMap(); - itemMap.put("DC:5F:BD:68:88:D5", "Noodles"); - itemMap.put("EF:0F:50:D5:BA:A1", "Vegetables"); - itemMap.put("FA:F2:CF:84:C2:F7", "Oil"); - - mList = (ListView) this.findViewById(android.R.id.list); - - mDeviceStore = new BluetoothLeDeviceStore(); - mBluetoothUtils = new BluetoothUtils(this); - mScanner = new BluetoothLeScanner(mLeScanCallback, mBluetoothUtils); - startScan(); - } - - private final BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() { - @Override - public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) { - final BluetoothLeDevice deviceLe = new BluetoothLeDevice(device, rssi, scanRecord, System.currentTimeMillis()); - if(deviceLe!= null && deviceLe.getName()!= null && !deviceLe.getName().equals("Unknown Device")){ - mDeviceStore.addDevice(deviceLe); - - if(deviceLe.getRssi() > MINIMUM_DISTANCE){ - Object[] objects = new Object[4]; - objects[0] = deviceLe.getName(); - objects[1] = deviceLe.getAddress(); - objects[2] = deviceLe.getRssi(); - objects[3] = itemMap.get(device.getAddress()); - - new SendToSiddi().execute(objects); - } - - - final EasyObjectCursor c = mDeviceStore.getDeviceCursor(); - runOnUiThread(new Runnable() { - @Override - public void run() { - mLeDeviceListAdapter.swapCursor(c); - } - }); - } - } - }; - - private void startScan() { - - mLeDeviceListAdapter = new LeDeviceListAdapter(this, mDeviceStore.getDeviceCursor()); - mList.setAdapter(mLeDeviceListAdapter); - - final boolean mIsBluetoothOn = mBluetoothUtils.isBluetoothOn(); - final boolean mIsBluetoothLePresent = mBluetoothUtils.isBluetoothLeSupported(); - mBluetoothUtils.askUserToEnableBluetoothIfNeeded(); - if (mIsBluetoothOn && mIsBluetoothLePresent) { - mScanner.scanLeDevice(-1, true); - invalidateOptionsMenu(); - } - } - - - public class SendToSiddi extends AsyncTask{ - - @Override - protected Void doInBackground(Object... objects) { - - return null; - } - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeDeviceStore.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeDeviceStore.java deleted file mode 100644 index 1411575013..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeDeviceStore.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * - * 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.bmonitor; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; -import uk.co.alt236.bluetoothlelib.device.beacon.BeaconType; -import uk.co.alt236.bluetoothlelib.device.beacon.BeaconUtils; -import uk.co.alt236.bluetoothlelib.device.beacon.ibeacon.IBeaconDevice; -import uk.co.alt236.bluetoothlelib.util.ByteUtils; -import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; - -public class BluetoothLeDeviceStore { - private final Map mDeviceMap; - - - public BluetoothLeDeviceStore() { - mDeviceMap = new HashMap<>(); - } - - public void addDevice(final BluetoothLeDevice device) { - if (mDeviceMap.containsKey(device.getAddress())) { - mDeviceMap.get(device.getAddress()).updateRssiReading(device.getTimestamp(), device.getRssi()); - } else { - mDeviceMap.put(device.getAddress(), device); - } - } - - public void clear() { - mDeviceMap.clear(); - } - - public EasyObjectCursor getDeviceCursor() { - return new EasyObjectCursor<>( - BluetoothLeDevice.class, - getDeviceList(), - "address"); - } - - public List getDeviceList() { - final List methodResult = new ArrayList<>(mDeviceMap.values()); - - Collections.sort(methodResult, new Comparator() { - - @Override - public int compare(final BluetoothLeDevice arg0, final BluetoothLeDevice arg1) { - return arg0.getAddress().compareToIgnoreCase(arg1.getAddress()); - } - }); - - return methodResult; - } - - private String getListAsCsv() { - final List list = getDeviceList(); - final StringBuilder sb = new StringBuilder(); - sb.append(CsvWriterHelper.addStuff("mac")); - sb.append(CsvWriterHelper.addStuff("name")); - sb.append(CsvWriterHelper.addStuff("firstTimestamp")); - sb.append(CsvWriterHelper.addStuff("firstRssi")); - sb.append(CsvWriterHelper.addStuff("currentTimestamp")); - sb.append(CsvWriterHelper.addStuff("currentRssi")); - sb.append(CsvWriterHelper.addStuff("adRecord")); - sb.append(CsvWriterHelper.addStuff("iBeacon")); - sb.append(CsvWriterHelper.addStuff("uuid")); - sb.append(CsvWriterHelper.addStuff("major")); - sb.append(CsvWriterHelper.addStuff("minor")); - sb.append(CsvWriterHelper.addStuff("txPower")); - sb.append(CsvWriterHelper.addStuff("distance")); - sb.append(CsvWriterHelper.addStuff("accuracy")); - sb.append('\n'); - - for (final BluetoothLeDevice device : list) { - sb.append(CsvWriterHelper.addStuff(device.getAddress())); - sb.append(CsvWriterHelper.addStuff(device.getName())); - sb.append(CsvWriterHelper.addStuff(TimeFormatter.getIsoDateTime(device.getFirstTimestamp()))); - sb.append(CsvWriterHelper.addStuff(device.getFirstRssi())); - sb.append(CsvWriterHelper.addStuff(TimeFormatter.getIsoDateTime(device.getTimestamp()))); - sb.append(CsvWriterHelper.addStuff(device.getRssi())); - sb.append(CsvWriterHelper.addStuff(ByteUtils.byteArrayToHexString(device.getScanRecord()))); - final boolean isIBeacon = BeaconUtils.getBeaconType(device) == BeaconType.IBEACON; - final String uuid; - final String minor; - final String major; - final String txPower; - final String distance; - final String accuracy; - - if (isIBeacon) { - final IBeaconDevice beacon = new IBeaconDevice(device); - uuid = String.valueOf(beacon.getUUID()); - minor = String.valueOf(beacon.getMinor()); - major = String.valueOf(beacon.getMajor()); - txPower = String.valueOf(beacon.getCalibratedTxPower()); - distance = beacon.getDistanceDescriptor().toString().toLowerCase(Locale.US); - accuracy = String.valueOf(beacon.getAccuracy()); - } else { - uuid = ""; - minor = ""; - major = ""; - txPower = ""; - distance = ""; - accuracy = ""; - } - - sb.append(CsvWriterHelper.addStuff(isIBeacon)); - sb.append(CsvWriterHelper.addStuff(uuid)); - sb.append(CsvWriterHelper.addStuff(minor)); - sb.append(CsvWriterHelper.addStuff(major)); - sb.append(CsvWriterHelper.addStuff(txPower)); - sb.append(CsvWriterHelper.addStuff(distance)); - sb.append(CsvWriterHelper.addStuff(accuracy)); - - sb.append('\n'); - } - - return sb.toString(); - } - - public void shareDataAsEmail(final Context context) { - final long timeInMillis = System.currentTimeMillis(); - - final String to = null; - final String subject = ""; - - final String message = ""; - - final Intent i = new Intent(Intent.ACTION_SEND); - i.setType("plain/text"); - try { - final File outputDir = context.getCacheDir(); - final File outputFile = File.createTempFile("bluetooth_le_" + timeInMillis, ".csv", outputDir); - outputFile.setReadable(true, false); - generateFile(outputFile, getListAsCsv()); - i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(outputFile)); - i.putExtra(Intent.EXTRA_EMAIL, new String[]{to}); - i.putExtra(Intent.EXTRA_SUBJECT, subject); - i.putExtra(Intent.EXTRA_TEXT, message); - context.startActivity(Intent.createChooser(i, "Email Subject")); - - } catch (final IOException e) { - e.printStackTrace(); - } - } - - private static FileWriter generateFile(final File file, final String contents) { - FileWriter writer = null; - try { - writer = new FileWriter(file); - writer.append(contents); - writer.flush(); - - } catch (final IOException e) { - e.printStackTrace(); - } finally { - try { - writer.close(); - } catch (final IOException e) { - e.printStackTrace(); - } - } - return writer; - } -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeScanner.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeScanner.java deleted file mode 100644 index a132d53eec..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeScanner.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * - * 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.bmonitor; - -import android.bluetooth.BluetoothAdapter; -import android.os.Handler; -import android.util.Log; - -public class BluetoothLeScanner { - private final Handler mHandler; - private final BluetoothAdapter.LeScanCallback mLeScanCallback; - private final BluetoothUtils mBluetoothUtils; - private boolean mScanning; - - public BluetoothLeScanner(final BluetoothAdapter.LeScanCallback leScanCallback, final BluetoothUtils bluetoothUtils) { - mHandler = new Handler(); - mLeScanCallback = leScanCallback; - mBluetoothUtils = bluetoothUtils; - } - - public boolean isScanning() { - return mScanning; - } - - public void scanLeDevice(final int duration, final boolean enable) { - if (enable) { - if (mScanning) { - return; - } - Log.d("TAG", "~ Starting Scan"); - // Stops scanning after a pre-defined scan period. - if (duration > 0) { - mHandler.postDelayed(new Runnable() { - @Override - public void run() { - Log.d("TAG", "~ Stopping Scan (timeout)"); - mScanning = false; - mBluetoothUtils.getBluetoothAdapter().stopLeScan(mLeScanCallback); - } - }, duration); - } - mScanning = true; - mBluetoothUtils.getBluetoothAdapter().startLeScan(mLeScanCallback); - } else { - Log.d("TAG", "~ Stopping Scan"); - mScanning = false; - mBluetoothUtils.getBluetoothAdapter().stopLeScan(mLeScanCallback); - } - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothUtils.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothUtils.java deleted file mode 100644 index 5e664793c7..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothUtils.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * 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.bmonitor; - -import android.app.Activity; -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothManager; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; - -public final class BluetoothUtils { - public final static int REQUEST_ENABLE_BT = 2001; - private final Activity mActivity; - private final BluetoothAdapter mBluetoothAdapter; - - public BluetoothUtils(final Activity activity) { - mActivity = activity; - final BluetoothManager btManager = (BluetoothManager) mActivity.getSystemService(Context.BLUETOOTH_SERVICE); - mBluetoothAdapter = btManager.getAdapter(); - } - - public void askUserToEnableBluetoothIfNeeded() { - if (isBluetoothLeSupported() && (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled())) { - final Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); - mActivity.startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); - } - } - - public BluetoothAdapter getBluetoothAdapter() { - return mBluetoothAdapter; - } - - public boolean isBluetoothLeSupported() { - return mActivity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE); - } - - public boolean isBluetoothOn() { - if (mBluetoothAdapter == null) { - return false; - } else { - return mBluetoothAdapter.isEnabled(); - } - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/CsvWriterHelper.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/CsvWriterHelper.java deleted file mode 100644 index 6c10210a27..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/CsvWriterHelper.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * 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.bmonitor; - -public class CsvWriterHelper { - private static final String QUOTE = "\""; - - public static String addStuff(final Integer text) { - return QUOTE + text + QUOTE + ","; - } - - public static String addStuff(final Long text) { - return QUOTE + text + QUOTE + ","; - } - - public static String addStuff(final boolean value) { - return QUOTE + value + QUOTE + ","; - } - - public static String addStuff(String text) { - if (text == null) { - text = ""; - } - text = text.replace(QUOTE, "'"); - - return QUOTE + text.trim() + QUOTE + ","; - } -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/LeDeviceListAdapter.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/LeDeviceListAdapter.java deleted file mode 100644 index da4370b893..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/LeDeviceListAdapter.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * - * 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.bmonitor; - -import android.app.Activity; -import android.support.v4.widget.SimpleCursorAdapter; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import java.text.DecimalFormat; - -import agent.sense.android.iot.carbon.wso2.org.wso2_senseagent.R; -import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; -import uk.co.alt236.bluetoothlelib.device.beacon.BeaconType; -import uk.co.alt236.bluetoothlelib.device.beacon.BeaconUtils; -import uk.co.alt236.bluetoothlelib.device.beacon.ibeacon.IBeaconDevice; -import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; - -public class LeDeviceListAdapter extends SimpleCursorAdapter { - private final LayoutInflater mInflator; - private final Activity mActivity; - - public static final DecimalFormat DOUBLE_TWO_DIGIT_ACCURACY = new DecimalFormat("#.##"); - public static final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; - - public LeDeviceListAdapter(final Activity activity, final EasyObjectCursor cursor) { - super(activity, R.layout.list_item_device, cursor, new String[0], new int[0], 0); - mInflator = activity.getLayoutInflater(); - mActivity = activity; - } - - @SuppressWarnings("unchecked") - @Override - public EasyObjectCursor getCursor() { - return ((EasyObjectCursor) super.getCursor()); - } - - @Override - public BluetoothLeDevice getItem(final int i) { - return getCursor().getItem(i); - } - - @Override - public long getItemId(final int i) { - return i; - } - - @Override - public View getView(final int i, View view, final ViewGroup viewGroup) { - final ViewHolder viewHolder; - // General ListView optimization code. - if (view == null) { - view = mInflator.inflate(R.layout.list_item_device, null); - viewHolder = new ViewHolder(); - viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address); - viewHolder.deviceName = (TextView) view.findViewById(R.id.device_name); - viewHolder.deviceRssi = (TextView) view.findViewById(R.id.device_rssi); - viewHolder.deviceIcon = (ImageView) view.findViewById(R.id.device_icon); - viewHolder.deviceLastUpdated = (TextView) view.findViewById(R.id.device_last_update); - viewHolder.ibeaconMajor = (TextView) view.findViewById(R.id.ibeacon_major); - viewHolder.ibeaconMinor = (TextView) view.findViewById(R.id.ibeacon_minor); - viewHolder.ibeaconDistance = (TextView) view.findViewById(R.id.ibeacon_distance); - viewHolder.ibeaconUUID = (TextView) view.findViewById(R.id.ibeacon_uuid); - viewHolder.ibeaconTxPower = (TextView) view.findViewById(R.id.ibeacon_tx_power); - viewHolder.ibeaconSection = view.findViewById(R.id.ibeacon_section); - viewHolder.ibeaconDistanceDescriptor = (TextView) view.findViewById(R.id.ibeacon_distance_descriptor); - view.setTag(viewHolder); - } else { - viewHolder = (ViewHolder) view.getTag(); - } - - final BluetoothLeDevice device = getCursor().getItem(i); - final String deviceName = device.getName(); - - final double rssi = device.getRssi(); - - if (deviceName != null && deviceName.length() > 0) { - viewHolder.deviceName.setText(deviceName + " (" + BeaconMonitoringActivity.itemMap.get(device.getAddress()) + ")"); - } else { - viewHolder.deviceName.setText(R.string.unknown_device); - } - - - if (BeaconUtils.getBeaconType(device) == BeaconType.IBEACON) { - final IBeaconDevice iBeacon = new IBeaconDevice(device); - final String accuracy = DOUBLE_TWO_DIGIT_ACCURACY.format(iBeacon.getAccuracy()); - - viewHolder.deviceIcon.setImageResource(R.drawable.beacon); - viewHolder.ibeaconSection.setVisibility(View.VISIBLE); - viewHolder.ibeaconMajor.setText(String.valueOf(iBeacon.getMajor())); - viewHolder.ibeaconMinor.setText(String.valueOf(iBeacon.getMinor())); - viewHolder.ibeaconTxPower.setText(String.valueOf(iBeacon.getCalibratedTxPower())); - viewHolder.ibeaconUUID.setText(iBeacon.getUUID()); - viewHolder.ibeaconDistance.setText( - mActivity.getString(R.string.formatter_meters, accuracy)); - viewHolder.ibeaconDistanceDescriptor.setText(iBeacon.getDistanceDescriptor().toString()); - } else { - if(device.getRssi() > BeaconMonitoringActivity.MINIMUM_DISTANCE){ - viewHolder.deviceIcon.setImageResource(R.drawable.beacon_red); - }else{ - viewHolder.deviceIcon.setImageResource(R.drawable.beacon); - } - - viewHolder.ibeaconSection.setVisibility(View.GONE); - } - - - final String rssiString = - mActivity.getString(R.string.formatter_db, String.valueOf(rssi)); - final String runningAverageRssiString = - mActivity.getString(R.string.formatter_db, String.valueOf(device.getRunningAverageRssi())); - - viewHolder.deviceLastUpdated.setText( - android.text.format.DateFormat.format( - TIME_FORMAT, new java.util.Date(device.getTimestamp()))); - viewHolder.deviceAddress.setText(device.getAddress()); - viewHolder.deviceRssi.setText(rssiString + " / " + runningAverageRssiString); - return view; - } - - static class ViewHolder { - TextView deviceName; - TextView deviceAddress; - TextView deviceRssi; - TextView ibeaconUUID; - TextView ibeaconMajor; - TextView ibeaconMinor; - TextView ibeaconTxPower; - TextView ibeaconDistance; - TextView ibeaconDistanceDescriptor; - TextView deviceLastUpdated; - View ibeaconSection; - ImageView deviceIcon; - } - -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/TimeFormatter.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/TimeFormatter.java deleted file mode 100644 index 340a0211b1..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/TimeFormatter.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * - * 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.bmonitor; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; - -public class TimeFormatter { - private final static String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS zzz"; - private final static SimpleDateFormat ISO_FORMATTER = new UtcDateFormatter(ISO_FORMAT, Locale.US); - - public static String getIsoDateTime(final Date date) { - return ISO_FORMATTER.format(date); - } - - public static String getIsoDateTime(final long millis) { - return getIsoDateTime(new Date(millis)); - } -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/UtcDateFormatter.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/UtcDateFormatter.java deleted file mode 100644 index bb3f527590..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/UtcDateFormatter.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * **************************************************************************** - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - *

- * GenieConnect Ltd. ("COMPANY") CONFIDENTIAL - * Unpublished Copyright (c) 2010-2013 GenieConnect Ltd., All Rights Reserved. - *

- * NOTICE: - * All information contained herein is, and remains the property of COMPANY. - * The intellectual and technical concepts contained herein are proprietary to - * COMPANY and may be covered by U.S. and Foreign Patents, patents in process, and - * are protected by trade secret or copyright law. Dissemination of this - * information or reproduction of this material is strictly forbidden unless prior - * written permission is obtained from COMPANY. Access to the source code - * contained herein is hereby forbidden to anyone except current COMPANY employees, - * managers or contractors who have executed Confidentiality and Non-disclosure - * agreements explicitly covering such access. - *

- * The copyright notice above does not evidence any actual or intended publication - * or disclosure of this source code, which includes information that is - * confidential and/or proprietary, and is a trade secret, of COMPANY. - *

- * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, OR PUBLIC - * DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT THE EXPRESS WRITTEN - * CONSENT OF COMPANY IS STRICTLY PROHIBITED, AND IN VIOLATION OF APPLICABLE LAWS - * AND INTERNATIONAL TREATIES. THE RECEIPT OR POSSESSION OF THIS SOURCE CODE - * AND/OR RELATED INFORMATION DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, - * DISCLOSE OR DISTRIBUTE ITS CONTENTS, OR TO MANUFACTURE, USE, OR SELL ANYTHING - * THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. - * **************************************************************************** - */ -package org.wso2.carbon.iot.android.sense.bmonitor; - -import android.annotation.SuppressLint; - -import java.text.DateFormatSymbols; -import java.util.Locale; -import java.util.TimeZone; - -public class UtcDateFormatter extends java.text.SimpleDateFormat { - private static final long serialVersionUID = 1L; - - private static final String TIME_ZONE_STRING = "UTC"; - private static final TimeZone TIME_ZONE_UTC = TimeZone.getTimeZone(TIME_ZONE_STRING); - - @SuppressLint("SimpleDateFormat") - public UtcDateFormatter(final String template) { - super(template); - super.setTimeZone(TIME_ZONE_UTC); - } - - @SuppressLint("SimpleDateFormat") - public UtcDateFormatter(final String template, final DateFormatSymbols symbols) { - super(template, symbols); - super.setTimeZone(TIME_ZONE_UTC); - } - - public UtcDateFormatter(final String template, final Locale locale) { - super(template, locale); - super.setTimeZone(TIME_ZONE_UTC); - } - - /* - * This function will throw an UnsupportedOperationException. - * You are not be able to change the TimeZone of this object - * - * (non-Javadoc) - * @see java.text.DateFormat#setTimeZone(java.util.TimeZone) - */ - @Override - public void setTimeZone(final TimeZone timezone) { - throw new UnsupportedOperationException("This SimpleDateFormat can only be in " + TIME_ZONE_STRING); - } -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/constants/SenseConstants.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/constants/SenseConstants.java deleted file mode 100755 index 6ef46a7d3b..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/constants/SenseConstants.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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.constants; - -/** - * This hold constants related to android_sense. - */ -public class SenseConstants { - public final static String DEVICE_TYPE = "android_sense"; - public final static String REGISTER_CONTEXT = "/android_sense"; - public final static String DCR_CONTEXT = "/dynamic-client-web"; - public final static String TOKEN_ISSUER_CONTEXT = "/oauth2"; - public final static String API_APPLICATION_REGISTRATION_CONTEXT = "/api-application-registration"; - - public static final String EVENT_LISTENER_STARTED = "xxStartedxx"; - public static final String EVENT_LISTENER_FINISHED = "xxFinishedxx"; - public static final String EVENT_LISTENER_ONGOING = "xxOngoingxx"; - - public final class Request { - public final static String REQUEST_SUCCESSFUL = "200"; - public final static int MAX_ATTEMPTS = 2; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherReceiver.java deleted file mode 100755 index de4c14b3c0..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherReceiver.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.data.publisher; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -/** - * This creates and AlarmManagerService that triggers the data uploader service with a 30 seconds interval. - */ -public class DataPublisherReceiver extends BroadcastReceiver { - private static int ALARM_INTERVAL = 1000; - - @Override - public void onReceive(Context context, Intent intent) { - AlarmManager service = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - Log.i("Data Publisher", "triggered"); - Intent i = new Intent(context, DataPublisherService.class); - PendingIntent pending = PendingIntent.getService(context, 0, i, 0); - service.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), ALARM_INTERVAL, pending); - } -} \ No newline at end of file diff --git a/components/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java deleted file mode 100755 index 09f254ddb5..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * 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.data.publisher; - -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.hardware.Sensor; -import android.os.IBinder; -import android.support.annotation.Nullable; -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.constants.SenseConstants; -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; -import org.wso2.carbon.iot.android.sense.event.streams.activity.ActivityData; -import org.wso2.carbon.iot.android.sense.event.streams.application.ApplicationData; -import org.wso2.carbon.iot.android.sense.event.streams.audio.AudioData; -import org.wso2.carbon.iot.android.sense.event.streams.battery.BatteryData; -import org.wso2.carbon.iot.android.sense.event.streams.call.CallData; -import org.wso2.carbon.iot.android.sense.event.streams.data.NetworkData; -import org.wso2.carbon.iot.android.sense.event.streams.location.LocationData; -import org.wso2.carbon.iot.android.sense.event.streams.screen.ScreenData; -import org.wso2.carbon.iot.android.sense.event.streams.sensor.SensorData; -import org.wso2.carbon.iot.android.sense.event.streams.sms.SmsData; -import org.wso2.carbon.iot.android.sense.event.streams.speed.SpeedData; -import org.wso2.carbon.iot.android.sense.speech.detector.util.ProcessWords; -import org.wso2.carbon.iot.android.sense.speech.detector.util.WordData; -import org.wso2.carbon.iot.android.sense.util.LocalRegistry; -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -import java.util.ArrayList; -import java.util.List; - -/** - * This is an android service which publishes the data to the server. - */ -public class DataPublisherService extends Service { - private final String TAG = DataPublisherService.class.getName(); - private Context context; - - @Nullable - @Override - public IBinder onBind(Intent intent) { - return null; - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - context = this; - Log.d(TAG, "service started"); - try { - List events = new ArrayList<>(); - //retrieve sensor data. - List sensorDataMap = SenseDataHolder.getSensorDataHolder(); - if (!sensorDataMap.isEmpty()) { - for (SensorData sensorData : sensorDataMap) { - Event event = new Event(); - event.setTimestamp(sensorData.getTimestamp()); - switch (sensorData.getSensorType()) { - case Sensor.TYPE_ACCELEROMETER: - event.setAccelerometer(sensorData.getSensorValues()); - events.add(event); - break; - case Sensor.TYPE_MAGNETIC_FIELD: - event.setMagnetic(sensorData.getSensorValues()); - events.add(event); - break; - case Sensor.TYPE_GYROSCOPE: - event.setGyroscope(sensorData.getSensorValues()); - events.add(event); - break; - case Sensor.TYPE_LIGHT: - event.setLight(sensorData.getSensorValues()[0]); - break; - case Sensor.TYPE_PRESSURE: - event.setPressure(sensorData.getSensorValues()[0]); - events.add(event); - break; - case Sensor.TYPE_PROXIMITY: - event.setProximity(sensorData.getSensorValues()[0]); - events.add(event); - break; - case Sensor.TYPE_GRAVITY: - event.setGravity(sensorData.getSensorValues()); - events.add(event); - break; - case Sensor.TYPE_GAME_ROTATION_VECTOR: - event.setRotation(sensorData.getSensorValues()); - events.add(event); - break; - } - } - } - SenseDataHolder.resetSensorDataHolder(); - - //retrieve battery data. - List batteryDataMap = SenseDataHolder.getBatteryDataHolder(); - if (!batteryDataMap.isEmpty()) { - for (BatteryData batteryData : batteryDataMap) { - Event event = new Event(); - event.setTimestamp(batteryData.getTimestamp()); - event.setBattery(batteryData.getLevel()); - event.setBatteryTemperature(batteryData.getTemperature()); - event.setBatteryStatus(batteryData.getStatus()); - event.setBatteryState(batteryData.getState().toString()); - events.add(event); - } - } - SenseDataHolder.resetBatteryDataHolder(); - - //retrieve location data. - List locationDataMap = SenseDataHolder.getLocationDataHolder(); - - if (!locationDataMap.isEmpty()) { - for (LocationData locationData : locationDataMap) { - Event event = new Event(); - event.setTimestamp(locationData.getTimeStamp()); - event.setGps(new double[]{locationData.getLatitude(), locationData.getLongitude()}); - events.add(event); - } - } - SenseDataHolder.resetLocationDataHolder(); - - //retrieve speed data. - List speedDataMap = SenseDataHolder.getSpeedDataHolder(); - if (!speedDataMap.isEmpty()) { - for (SpeedData speedData : speedDataMap) { - Event event = new Event(); - event.setTimestamp(speedData.getTimeStamp()); - 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); - } - } - SenseDataHolder.resetSpeedDataHolder(); - - //retrieve words - ProcessWords.cleanAndPushToWordMap(); - List wordDatMap = SenseDataHolder.getWordDataHolder(); - for (WordData wordData : wordDatMap) { - if (wordData.getOccurences() == 0) { - continue; - } - for (int i = 0; i < wordData.getOccurences(); i++) { - Event event = new Event(); - event.setTimestamp(wordData.getTimestamp()); - event.setWord(wordData.getWord()); - String word = wordData.getWord(); - String status = word; - if ((!word.equals(SenseConstants.EVENT_LISTENER_STARTED)) && (!word.equals(SenseConstants - .EVENT_LISTENER_FINISHED))) { - status = SenseConstants.EVENT_LISTENER_ONGOING; - } - event.setWordStatus(status); - events.add(event); - } - } - SenseDataHolder.resetWordDataHolder(); - - // retrieve call data. - List callDataList = SenseDataHolder.getCallDataHolder(); - if (!callDataList.isEmpty()) { - for (CallData callData : callDataList) { - Event event = new Event(); - event.setCallNumber(callData.getPhoneNumber()); - event.setCallType(callData.getType().toString().toLowerCase()); - event.setCallStartTime(callData.getStartTime()); - event.setCallEndTime(callData.getEndTime()); - event.setTimestamp(callData.getStartTime()); - - events.add(event); - } - } - SenseDataHolder.resetCallDataHolder(); - - // retrieve screen data. - List screenDataList = SenseDataHolder.getScreenDataHolder(); - if (!screenDataList.isEmpty()) { - for (ScreenData screenData : screenDataList) { - Event event = new Event(); - event.setScreenState(screenData.getAction()); - event.setTimestamp(screenData.getTimestamp()); - - events.add(event); - } - } - SenseDataHolder.resetScreenDataHolder(); - - // retrieve audio data. - List audioDataList = SenseDataHolder.getAudioDataHolder(); - if (!audioDataList.isEmpty()) { - for (AudioData audioData : audioDataList) { - Event event = new Event(); - event.setTimestamp(audioData.getTimestamp()); - event.setAudioPlaying(audioData.isPlaying()); - event.setHeadsetOn(audioData.isHeadsetOn()); - event.setMusicVolume(audioData.getMusicVolume()); - events.add(event); - } - } - SenseDataHolder.resetAudioDataHolder(); - - // retrieve activity data. - List activityDataList = SenseDataHolder.getActivityDataHolder(); - if (!activityDataList.isEmpty()) { - for (ActivityData activityData : activityDataList) { - Event event = new Event(); - event.setTimestamp(activityData.getTimestamp()); - event.setActivityType(activityData.getActivity()); - event.setConfidence(activityData.getConfidence()); - events.add(event); - } - } - SenseDataHolder.resetActivityDataHolder(); - - // retrieve sms data. - List smsDataList = SenseDataHolder.getSmsDataHolder(); - if (!smsDataList.isEmpty()) { - for (SmsData smsData : smsDataList) { - Event event = new Event(); - event.setTimestamp(smsData.getTimestamp()); - event.setSmsNumber(smsData.getPhoneNumber()); - events.add(event); - } - } - SenseDataHolder.resetSmsDataHolder(); - - - // retrieve application data. - List appDataList = SenseDataHolder.getApplicationDataHolder(); - if (!appDataList.isEmpty()) { - for (ApplicationData appData : appDataList) { - Event event = new Event(); - event.setTimestamp(appData.getTimestamp()); - event.setPackageName(appData.getPackageName()); - event.setAction(appData.getAction().toString()); - events.add(event); - } - } - SenseDataHolder.resetApplicationDataHolder(); - - //Retrieve network data - List networkDataList = SenseDataHolder.getNetworkDataHolder(); - if (!networkDataList.isEmpty()) { - for (NetworkData networkData : networkDataList) { - Event event = new Event(); - event.setTimestamp(networkData.getTimeStamp()); - event.setDataType(networkData.getDataType()); - event.setDataReceived(networkData.getDataReceived()); - event.setDataSent(networkData.getDataSent()); - events.add(event); - } - } - SenseDataHolder.resetNetworkDataHolder(); - - //publish the data - if (events.size() > 0 && LocalRegistry.isEnrolled(context)) { - String user = LocalRegistry.getUsername(context); - String deviceId = LocalRegistry.getDeviceId(context); - JSONArray jsonArray = new JSONArray(); - for (Event event : events) { - event.setOwner(user); - event.setDeviceId(deviceId); - jsonArray.put(new JSONObject().put("event", event.getEvent())); - } - - MQTTTransportHandler mqttTransportHandler = AndroidSenseMQTTHandler.getInstance(context); - if (!mqttTransportHandler.isConnected()) { - mqttTransportHandler.connect(); - } - String topic = LocalRegistry.getTenantDomain(context) + "/" + SenseConstants.DEVICE_TYPE + "/" + deviceId + "/data"; - mqttTransportHandler.publishDeviceData(user, deviceId, jsonArray.toString(), topic); - } - } catch (JSONException e) { - Log.e(TAG, "Json Data Parsing Exception", e); - } catch (TransportHandlerException e) { - Log.e(TAG, "Data Publish Failed", e); - } - return Service.START_NOT_STICKY; - } -} \ No newline at end of file diff --git a/components/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java deleted file mode 100755 index cfce21dd97..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java +++ /dev/null @@ -1,555 +0,0 @@ -package org.wso2.carbon.iot.android.sense.data.publisher; - -import org.json.JSONException; -import org.json.JSONObject; - -/** - * This hold the definition of the stream that android sense is publishing to. - */ -public class Event { - - private String owner; - private String deviceId; - private String type; - private int battery; - private double gps[] = new double[]{0, 0}; //lat,long - private float accelerometer[] = new float[]{0, 0, 0}; //x,y,z - private float magnetic[] = new float[]{0, 0, 0};; //x,y,z - private float gyroscope[] = new float[]{0, 0, 0};; //x,y,z - private int batteryTemperature; - private int batteryStatus; - /** - * LOW or OK - */ - private String batteryState; - private float light; - private float pressure; - private float proximity; - private float gravity[] = new float[]{0, 0, 0};; - private float rotation[] = new float[]{0, 0, 0};; - private String wordSessionId; - private String word; - private String wordStatus; - private long timestamp; - 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 String callNumber; - private String callType; - private long callStartTime; - private long callEndTime; - - /** - * State of the phone display. - * Possible values are: - * on - * off - * unknown - */ - private String screenState; - - private boolean audioPlaying; - private boolean headsetOn; - private int musicVolume; - private int activityType; - private int confidence; - private String smsNumber; - private String packageName; - private String action; - - /** - * Network data - * Time stamp - * Data type - * Data sent - * Data received. - * */ - private String dataType; - private long dataSent; - private long dataReceived; - - private int getBattery() { - return battery; - } - - public void setBattery(int battery) { - this.type = "battery"; - this.battery = battery; - } - - public int getBatteryTemperature() { - return batteryTemperature; - } - - public void setBatteryTemperature(int batteryTemperature) { - this.type = "battery"; // Type is battery - this.batteryTemperature = batteryTemperature; - } - - public int getBatteryStatus() { - return batteryStatus; - } - - public void setBatteryStatus(int batteryStatus) { - this.type = "battery"; // Type is battery - this.batteryStatus = batteryStatus; - } - - public String getBatteryState() { - return batteryState != null ? batteryState : ""; - } - - public void setBatteryState(String batteryState) { - this.type = "battery"; // Type is battery - this.batteryState = batteryState; - } - - private double[] getGps() { - return gps; - } - - public void setGps(double[] gps) { - this.type = "gps"; - this.gps = gps; - } - - private float[] getAccelerometer() { - return accelerometer; - } - - public void setAccelerometer(float[] accelerometer) { - this.type = "accelerometer"; - this.accelerometer = accelerometer; - } - - private float[] getMagnetic() { - return magnetic; - } - - public void setMagnetic(float[] magnetic) { - this.type = "magnetic"; - this.magnetic = magnetic; - } - - private float[] getGyroscope() { - return gyroscope; - } - - public void setGyroscope(float[] gyroscope) { - this.type = "gyroscope"; - this.gyroscope = gyroscope; - } - - public float getLight() { - return light; - } - - public void setLight(float light) { - this.type = "light"; - this.light = light; - } - - public float getPressure() { - return pressure; - } - - public void setPressure(float pressure) { - this.type = "pressure"; - this.pressure = pressure; - } - - public float getProximity() { - return proximity; - } - - public void setProximity(float proximity) { - this.type = "proximity"; - this.proximity = proximity; - } - - private float[] getGravity() { - return gravity; - } - - public void setGravity(float gravity[]) { - this.type = "gravity"; - this.gravity = gravity; - } - - private float[] getRotation() { - return rotation; - } - - public void setRotation(float rotation[]) { - this.type = "rotation"; - this.rotation = rotation; - } - - public void setSmsNumber(String smsNumber) { - this.type = "sms"; - this.smsNumber = smsNumber; - } - - public String getSmsNumber() { - return smsNumber; - } - - private String getWordSessionId() { - return wordSessionId != null ? wordSessionId : ""; - } - - public void setWordSessionId(String wordSessionId) { - this.wordSessionId = wordSessionId; - } - - private String getWord() { - return word != null ? word : ""; - } - - public void setWord(String word) { - this.type = "word"; - this.word = word; - } - - public String getPackageName() { - return packageName; - } - - public void setPackageName(String packageName) { - this.type = "application"; - this.packageName = packageName; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.type = "application"; - this.action = action; - } - - private long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - private String getDeviceId() { - return deviceId; - } - - public void setDeviceId(String deviceId) { - this.deviceId = deviceId; - } - - private String getOwner() { - return owner; - } - - public void setOwner(String owner) { - this.owner = owner; - } - - public String getWordStatus() { - return wordStatus != null ? wordStatus : ""; - } - - public void setWordStatus(String wordStatus) { - this.wordStatus = wordStatus; - } - - public void setSpeed(float speed) { - this.type = "speed"; - this.speed = speed; - } - - public float getSpeed() { - this.type = "speed"; - if (Float.isInfinite(speed) || Float.isNaN(speed)) { - return -1.0f; - } - return speed; - } - - public void setTurns(String turn) { - - this.type = "turn"; - this.turn = turn; - } - - public String getTurns() { - - if (turn == null || turn.isEmpty() || turn.equals("null")) { - turn = "No Turns"; - } - 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() { - return beaconProximity != null ? beaconProximity : ""; - } - - public String getCallNumber() { - return callNumber != null ? callNumber : ""; - } - - public void setCallNumber(String callNumber) { - this.type = "call"; - this.callNumber = callNumber; - } - - public String getCallType() { - return callType != null ? callType : ""; - } - - public void setCallType(String callType) { - this.type = "call"; - this.callType = callType; - } - - public long getCallStartTime() { - return callStartTime; - } - - public void setCallStartTime(long callStartTime) { - this.type = "call"; - this.callStartTime = callStartTime; - } - - public long getCallEndTime() { - return callEndTime; - } - - public void setCallEndTime(long callEndTime) { - this.type = "call"; - this.callEndTime = callEndTime; - } - - public String getScreenState() { - return screenState != null ? screenState : ""; - } - - public void setScreenState(String screenState) { - this.type = "screen"; - this.screenState = screenState; - } - - public boolean isAudioPlaying() { - return audioPlaying; - } - - public void setAudioPlaying(boolean audioPlaying) { - this.type = "audio"; - this.audioPlaying = audioPlaying; - } - - public boolean isHeadsetOn() { - return headsetOn; - } - - public void setHeadsetOn(boolean headsetOn) { - this.type = "audio"; - this.headsetOn = headsetOn; - } - - public int getMusicVolume() { - return musicVolume; - } - - public void setMusicVolume(int musicVolume) { - this.type = "audio"; - this.musicVolume = musicVolume; - } - - public int getActivityType() { - return activityType; - } - - public void setActivityType(int activityType) { - this.type = "activity"; - this.activityType = activityType; - } - - public int getConfidence() { - return confidence; - } - - public void setConfidence(int confidence) { - // Do not set type here since it can be used for various types. - // However, now it is being used by activity only - this.confidence = confidence; - } - - public String getDataType() { - this.type = "data"; - return dataType; - } - - public void setDataType(String dataType) { - this.type = "data"; - this.dataType = dataType; - } - - public long getDataSent() { - this.type = "data"; - return dataSent; - } - - public void setDataSent(long dataSent) { - this.type = "data"; - this.dataSent = dataSent; - } - - public long getDataReceived() { - this.type = "data"; - return dataReceived; - } - - public void setDataReceived(long dataReceived) { - this.type = "data"; - this.dataReceived = dataReceived; - } - - public JSONObject getEvent() throws JSONException { - JSONObject jsonEvent = new JSONObject(); - JSONObject jsonMetaData = new JSONObject(); - jsonMetaData.put("owner", getOwner()); - jsonMetaData.put("deviceId", getDeviceId()); - jsonMetaData.put("type", type); - jsonMetaData.put("timestamp", getTimestamp()); - jsonEvent.put("metaData", jsonMetaData); - - JSONObject jsonPayloadData = new JSONObject(); - // battery - jsonPayloadData.put("battery", getBattery()); - jsonPayloadData.put("battery_state", getBatteryState()); - jsonPayloadData.put("battery_status", getBatteryStatus()); - jsonPayloadData.put("battery_temperature", getBatteryTemperature()); - - - //gps - double gpsEvents[] = getGps(); - jsonPayloadData.put("gps_lat", gpsEvents[0]); - jsonPayloadData.put("gps_long", gpsEvents[1]); - //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 - events = getMagnetic(); - jsonPayloadData.put("magnetic_x", events[0]); - jsonPayloadData.put("magnetic_y", events[1]); - jsonPayloadData.put("magnetic_z", events[2]); - //gyroscope - events = getGyroscope(); - jsonPayloadData.put("gyroscope_x", events[0]); - jsonPayloadData.put("gyroscope_y", events[1]); - jsonPayloadData.put("gyroscope_z", events[2]); - - jsonPayloadData.put("light", getLight()); - jsonPayloadData.put("pressure", getPressure()); - jsonPayloadData.put("proximity", getProximity()); - //gravity - events = getGravity(); - jsonPayloadData.put("gravity_x", events[0]); - jsonPayloadData.put("gravity_y", events[1]); - jsonPayloadData.put("gravity_z", events[2]); - //rotation - events = getRotation(); - jsonPayloadData.put("rotation_x", events[0]); - jsonPayloadData.put("rotation_y", events[1]); - jsonPayloadData.put("rotation_z", events[2]); - //word - jsonPayloadData.put("word", getWord()); - jsonPayloadData.put("word_sessionId", getWordSessionId()); - jsonPayloadData.put("word_status", getWordStatus()); - - // call - jsonPayloadData.put("call_number", getCallNumber()); - jsonPayloadData.put("call_type", getCallType()); - jsonPayloadData.put("call_start_time", getCallStartTime()); - jsonPayloadData.put("call_end_time", getCallEndTime()); - - // screen - jsonPayloadData.put("screen_state", getScreenState()); - - // headset - jsonPayloadData.put("audio_playing", isAudioPlaying()); - jsonPayloadData.put("headset_on", isHeadsetOn()); - jsonPayloadData.put("music_volume", getMusicVolume()); - - jsonPayloadData.put("activity_type", getActivityType()); - jsonPayloadData.put("confidence", getConfidence()); - - jsonPayloadData.put("sms_number", getSmsNumber()); - - jsonPayloadData.put("application_name", getPackageName()); - jsonPayloadData.put("action", getAction()); - - //Network data - jsonPayloadData.put("data_type", getDataType()); - jsonPayloadData.put("data_received", getDataReceived()); - jsonPayloadData.put("data_sent", getDataSent()); - - jsonEvent.put("payloadData", jsonPayloadData); - - return jsonEvent; - } -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/AndroidSenseMQTTHandler.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/AndroidSenseMQTTHandler.java deleted file mode 100755 index 10f32a8ad6..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/AndroidSenseMQTTHandler.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * 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.data.publisher.mqtt; - -import android.content.Context; -import android.util.Log; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.wso2.carbon.iot.android.sense.data.publisher.mqtt.transport.MQTTTransportHandler; -import org.wso2.carbon.iot.android.sense.data.publisher.mqtt.transport.TransportHandlerException; -import org.wso2.carbon.iot.android.sense.constants.SenseConstants; -import org.wso2.carbon.iot.android.sense.speech.detector.util.ProcessWords; -import org.wso2.carbon.iot.android.sense.util.LocalRegistry; - -import java.nio.charset.StandardCharsets; -import java.util.Arrays; - -/** - * This is an example for the use of the MQTT capabilities provided by the IoT-Server. This example depicts the use - * of MQTT Transport for the Android Sense device-type. This class extends the abstract class - * "MQTTTransportHandler". "MQTTTransportHandler" consists of the MQTT client specific functionality and implements - * the "TransportHandler" interface. The actual functionality related to the "TransportHandler" interface is - * implemented here, in this concrete class. Whilst the abstract class "MQTTTransportHandler" is intended to provide - * the common MQTT functionality, this class (which is its extension) provides the implementation specific to the - * MQTT communication of the Device-Type (Android Sense) in concern. - *

- * Hence, the methods of this class are implementation of the "TransportHandler" interface which handles the device - * specific logic to connect-to, publish-to, process-incoming-messages-from and disconnect-from the MQTT broker - * listed in the configurations. - */ -public class AndroidSenseMQTTHandler extends MQTTTransportHandler { - private static final String TAG = "AndroidSenseMQTTHandler"; - private static volatile AndroidSenseMQTTHandler mInstance; - private Context context; - - /** - * return a sigleton Instance - * @param context is the android context object. - * @return AndroidSenseMQTTHandler. - */ - public static AndroidSenseMQTTHandler getInstance(Context context) { - context = context; - if (mInstance == null) { - Class clazz = AndroidSenseMQTTHandler.class; - synchronized (clazz) { - if (mInstance == null) { - mInstance = new AndroidSenseMQTTHandler(context); - } - } - } - return mInstance; - } - - /** - * Default constructor for the AndroidSenseMQTTHandler. - */ - private AndroidSenseMQTTHandler(Context context) { - super(context); - } - - /** - * {@inheritDoc} - * AndroidSense device-type specific implementation to connect to the MQTT broker and subscribe to a topic. - * This method is called to initiate a MQTT communication. - */ - @Override - public void connect() { - Runnable connector = new Runnable() { - public void run() { - while (!isConnected()) { - try { - connectToQueue(); - } catch (TransportHandlerException e) { - Log.e(TAG, "Connection to MQTT Broker at: " + mqttBrokerEndPoint + " failed", e); - try { - Thread.sleep(timeoutInterval); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - Log.e(TAG, "MQTT-Connector: Thread Sleep Interrupt Exception.", ex); - } - } - - try { - subscribeToQueue(); - } catch (TransportHandlerException e) { - Log.w(TAG, "Subscription to MQTT Broker at: " + mqttBrokerEndPoint + " failed", e); - } - } - } - }; - - Thread connectorThread = new Thread(connector); - connectorThread.start(); - } - - /** - * {@inheritDoc} - * AndroidSense device-type specific implementation to process incoming messages. This is the specific - * method signature of the overloaded "processIncomingMessage" method that gets called from the messageArrived() - * callback of the "MQTTTransportHandler". - */ - @Override - public void processIncomingMessage(MqttMessage mqttMessage, String... messageParams) { - if (messageParams.length != 0) { - // owner and the deviceId are extracted from the MQTT topic to which the message was received. - // = [ServerName/Owner/DeviceType/DeviceId/#] - String topic = messageParams[0]; - String[] topicParams = topic.split("/"); - String owner = topicParams[1]; - String deviceId = topicParams[3]; - - Log.d(TAG, "Received MQTT message for: [OWNER-" + owner + "] & [DEVICE.ID-" + deviceId + "]"); - - String msg; - msg = mqttMessage.toString(); - Log.d(TAG, "MQTT: Received Message [" + msg + "] topic: [" + topic + "]"); - if (topic.contains("threshold")) { - try { - ProcessWords.setThreshold(Integer.parseInt(msg)); - } catch (NumberFormatException e) { - Log.e(TAG, "Invalid threshold value " + msg); - } - } else if (topic.contains("words")) { - String words[] = msg.split(" "); - ProcessWords.addWords(Arrays.asList(words)); - } else if (topic.contains("remove")) { - String words[] = msg.split(" "); - for (String word: words) { - ProcessWords.removeWord(word); - } - } - } else { - String errorMsg = - "MQTT message [" + mqttMessage.toString() + "] was received without the topic information."; - Log.w(TAG, errorMsg); - } - } - - /** - * {@inheritDoc} - * AndroidSense device-type specific implementation to publish data to the device. This method calls the - * {@link #publishToQueue(String, MqttMessage)} method of the "MQTTTransportHandler" class. - */ - @Override - public void publishDeviceData(String... publishData) throws TransportHandlerException { - if (publishData.length != 4) { - String errorMsg = "Incorrect number of arguments received to SEND-MQTT Message. " + - "Need to be [owner, deviceId, content]"; - Log.e(TAG, errorMsg); - throw new TransportHandlerException(errorMsg); - } - - String deviceOwner = publishData[0]; - String deviceId = publishData[1]; - String resource = publishData[2]; - - MqttMessage pushMessage = new MqttMessage(); - String publishTopic = publishData[3]; - String actualMessage = resource; - pushMessage.setPayload(actualMessage.getBytes(StandardCharsets.UTF_8)); - pushMessage.setQos(DEFAULT_MQTT_QUALITY_OF_SERVICE); - pushMessage.setRetained(false); - publishToQueue(publishTopic, pushMessage); - } - - - /** - * {@inheritDoc} - * Android Sense device-type specific implementation to disconnect from the MQTT broker. - */ - @Override - public void disconnect() { - Runnable stopConnection = new Runnable() { - public void run() { - while (isConnected()) { - try { - closeConnection(); - } catch (MqttException e) { - Log.w(TAG, "Unable to 'STOP' MQTT connection at broker at: " + mqttBrokerEndPoint - + " for device-type - " + SenseConstants.DEVICE_TYPE, e); - - try { - Thread.sleep(timeoutInterval); - } catch (InterruptedException e1) { - Thread.currentThread().interrupt(); - Log.e(TAG, "MQTT-Terminator: Thread Sleep Interrupt Exception at device-type - " + - SenseConstants.DEVICE_TYPE, e1); - } - } - } - } - }; - - Thread terminatorThread = new Thread(stopConnection); - terminatorThread.start(); - } - - - /** - * {@inheritDoc} - */ - @Override - public void publishDeviceData() { - // nothing to do - } - - @Override - public void publishDeviceData(MqttMessage publishData) throws TransportHandlerException { - } - - /** - * {@inheritDoc} - */ - @Override - public void processIncomingMessage() { - // nothing to do - } - - @Override - public void processIncomingMessage(MqttMessage message) throws TransportHandlerException { - - } -} - diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/MQTTTransportHandler.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/MQTTTransportHandler.java deleted file mode 100755 index 17884381c0..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/MQTTTransportHandler.java +++ /dev/null @@ -1,384 +0,0 @@ -/* - * 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.data.publisher.mqtt.transport; -import android.content.Context; -import android.util.Log; -import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; -import org.eclipse.paho.client.mqttv3.MqttCallback; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttConnectOptions; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.wso2.carbon.iot.android.sense.constants.SenseConstants; -import org.wso2.carbon.iot.android.sense.util.LocalRegistry; - -import java.nio.charset.StandardCharsets; - -/** - * This is an abstract class that implements the "TransportHandler" interface. The interface is an abstraction for - * the core functionality with regards to device-server communication regardless of the Transport protocol. This - * specific class contains the MQTT-Transport specific implementations. The class implements utility methods for the - * case of a MQTT communication. However, this "abstract class", even-though it implements the "TransportHandler" - * interface, does not contain the logic relevant to the interface methods. The specific functionality of the - * interface methods are intended to be implemented by the concrete class that extends this abstract class and - * utilizes the MQTT specific functionality (ideally a device API writer who would like to communicate to the device - * via MQTT Protocol). - *

- * This class contains the Device-Management specific implementation for all the MQTT functionality. This includes - * connecting to a MQTT Broker & subscribing to the appropriate MQTT-topic, action plan upon losing connection or - * successfully delivering a message to the broker and upon receiving a MQTT message. Makes use of the 'Paho-MQTT' - * library provided by Eclipse Org. - */ -public abstract class MQTTTransportHandler implements MqttCallback, TransportHandler { - private static final String TAG = "MQTTTransportHandler"; - - private MqttClient client; - private String clientId; - private MqttConnectOptions options; // options to be set to the client-connection. - // topic to which a will-message is automatically published by the broker upon the device losing its connection. - private String clientWillTopic; - - protected String mqttBrokerEndPoint; - protected int timeoutInterval; // interval to use for reconnection attempts etc. - protected String subscribeTopic; - - // Quality of Service Levels for MQTT Subscription and Publishing. - public static final int QoS_0 = 0; // At-Most Once - @SuppressWarnings("unused") - public static final int QoS_1 = 1; // At-Least Once - public static final int QoS_2 = 2; // Exactly Once - - public static final int DEFAULT_MQTT_QUALITY_OF_SERVICE = QoS_0; - // Prefix to the Will-Topic to which a message is published if client loses its connection. - private static final String DISCONNECTION_WILL_TOPIC_PREFIX = "Disconnection/"; - // Will-Message of the client to be published if connection is lost. - private static final String DISCONNECTION_WILL_MSG = "Lost-Connection"; - /** - * Constructor for the MQTTTransportHandler which takes in the owner, type of the device and the MQTT Broker URL - * and the topic to subscribe. - * @param context activity context. - */ - protected MQTTTransportHandler(Context context) { - String username = LocalRegistry.getUsername(context); - String deviceId = LocalRegistry.getDeviceId(context); - this.clientId = deviceId + ":" + SenseConstants.DEVICE_TYPE; - this.subscribeTopic = LocalRegistry.getTenantDomain(context)+ "/" + SenseConstants.DEVICE_TYPE + "/" + - deviceId + "/command/#"; - this.clientWillTopic = DISCONNECTION_WILL_TOPIC_PREFIX + SenseConstants.DEVICE_TYPE; - this.mqttBrokerEndPoint = LocalRegistry.getMqttEndpoint(context); - this.timeoutInterval = DEFAULT_TIMEOUT_INTERVAL; - this.initMQTTClient(); - setUsernameAndPassword(LocalRegistry.getAccessToken(context), ""); - } - - /** - * Constructor for the MQTTTransportHandler which takes in the owner, type of the device and the MQTT Broker URL - * and the topic to subscribe. Additionally this constructor takes in the reconnection-time interval between - * successive attempts to connect to the broker. - * - * @param deviceOwner the owner of the device. - * @param deviceType the CDMF Device-Type of the device. - * @param mqttBrokerEndPoint the IP/URL of the MQTT broker endpoint. - * @param subscribeTopic the MQTT topic to which the client is to be subscribed - * @param intervalInMillis the time interval in MILLI-SECONDS between attempts to connect to the broker. - */ - protected MQTTTransportHandler(String deviceOwner, String deviceType, - String mqttBrokerEndPoint, String subscribeTopic, int intervalInMillis) { - this.clientId = deviceOwner + ":" + deviceType; - this.subscribeTopic = subscribeTopic; - this.clientWillTopic = DISCONNECTION_WILL_TOPIC_PREFIX + deviceType; - this.mqttBrokerEndPoint = mqttBrokerEndPoint; - this.timeoutInterval = intervalInMillis; - this.initMQTTClient(); - } - - - /** - * Initializes the MQTT-Client. Creates a client using the given MQTT-broker endpoint and the clientId (which is - * constructed by a concatenation of [deviceOwner]:[deviceType]). Also sets the client's options parameter with - * the clientWillTopic (in-case of connection failure) and other info. Also sets the callback to this current class. - */ - private void initMQTTClient() { - try { - client = new MqttClient(this.mqttBrokerEndPoint, clientId, null); - Log.i(TAG, "MQTT client was created with ClientID : " + clientId); - } catch (MqttException ex) { - String errorMsg = "Initializing the MQTT Client failed."; - Log.e(TAG, errorMsg, ex); - } - - options = new MqttConnectOptions(); - options.setKeepAliveInterval(120); // set the keep alive interval to 120 seconds by default. - options.setCleanSession(true); // sets clean session to true by default. - setDisconnectionWillForClient(QoS_2, true); // sets default will-topic & msg with QoS 2 and retained true. - client.setCallback(this); // callback for MQTT events are set to `this` object. - } - - /** - * @param qos the Quality of Service at which the last-will-message is to be published. - * @param isRetained indicate whether to retain the last-will-message. - * @see MQTTTransportHandler#setDisconnectionWillForClient(String, String, int, boolean). Uses the default values - * for Will-Topic and Will-Message. - */ - protected void setDisconnectionWillForClient(int qos, boolean isRetained) { - this.setDisconnectionWillForClient(clientWillTopic, DISCONNECTION_WILL_MSG, qos, isRetained); - } - - /** - * Sets the [Will] option in the default options-set of the MQTT Client. A will-topic, will-message is parsed - * along with the QoS and the retained flag. When the client loses its connection to the broker, the broker - * publishes the will-message to the will-topic, to itself. - * - * @param willTopic the topic to which the last will message is to be published when client exists ungracefully. - * @param willMsg the message to be published upon client's ungraceful exit from the broker. - * @param qos the Quality of Service at which the last-will-message is to be published. - * @param isRetained indicate whether to retain the last-will-message. - */ - protected void setDisconnectionWillForClient(String willTopic, String willMsg, int qos, boolean isRetained) { - this.options.setWill(willTopic, willMsg.getBytes(StandardCharsets.UTF_8), qos, isRetained); - } - - /** - * Sets the [Clean-Session] option in the default options-set of the MQTT Client. It is set to `true` by default. - * - * @param setCleanSession `true` indicates that the session details can be cleared/cleaned upon disconnection, - * `false` indicates that the session details are to be persisted if the client disconnects. - */ - @SuppressWarnings("unused") - protected void setClientCleanSession(boolean setCleanSession) { - this.options.setCleanSession(setCleanSession); - } - - /** - * Sets the [Username] & [Password] options in the default options-set of the MQTT Client. By default these - * values are not set. - * - * @param username the username to be used by the client to connect to the broker. - * @param password the password to be used by the client to connect to the broker. - */ - @SuppressWarnings("unused") - protected void setUsernameAndPassword(String username, String password) { - this.options.setUserName(username); - this.options.setPassword(password.toCharArray()); - } - - /** - * Connects to the MQTT-Broker at the endpoint specified in the constructor to this class using default the - * MQTT-options. - * - * @throws TransportHandlerException in the event of 'Connecting to' the MQTT broker fails. - */ - protected void connectToQueue() throws TransportHandlerException { - this.connectToQueue(options); - } - - /** - * Connects to the MQTT-Broker at the endpoint specified in the constructor to this class using the MQTT-Options - * passed. - * - * @param options options to be used by the client for this connection. (username, password, clean-session, etc) - * @throws TransportHandlerException in the event of 'Connecting to' the MQTT broker fails. - */ - protected void connectToQueue(MqttConnectOptions options) throws TransportHandlerException { - try { - client.connect(options); - Log.d(TAG, "MQTT Client connected to queue at: " + this.mqttBrokerEndPoint); - } catch (MqttException ex) { - String errorMsg = "MQTT Exception occured whilst connecting to queue at [" + this.mqttBrokerEndPoint + "]"; - Log.e(TAG, errorMsg); - throw new TransportHandlerException(errorMsg, ex); - } - } - - /** - * @throws TransportHandlerException in the event of 'Subscribing to' the MQTT broker fails. - * @see MQTTTransportHandler#subscribeToQueue(int). Uses default QoS of 1. - */ - protected void subscribeToQueue() throws TransportHandlerException { - this.subscribeToQueue(QoS_0); - } - - /** - * Subscribes to the MQTT-Topic specified in the constructor to this class. - * - * @throws TransportHandlerException in the event of 'Subscribing to' the MQTT broker fails. - */ - protected void subscribeToQueue(int qos) throws TransportHandlerException { - try { - client.subscribe(subscribeTopic, qos); - Log.d(TAG, "Client [" + clientId + "] subscribed to topic: " + subscribeTopic); - } catch (MqttException ex) { - String errorMsg = "MQTT Exception occurred whilst client [" + clientId + "] tried to subscribe to " + - "topic: [" + subscribeTopic + "]"; - Log.e(TAG, errorMsg); - throw new TransportHandlerException(errorMsg, ex); - } - } - - /** - * @param topic the topic to which the message is to be published. - * @param payLoad the message (payload) of the MQTT publish action. - * @see MQTTTransportHandler#publishToQueue(String, String, int, boolean) - */ - @SuppressWarnings("unused") - protected void publishToQueue(String topic, String payLoad) throws TransportHandlerException { - publishToQueue(topic, payLoad, DEFAULT_MQTT_QUALITY_OF_SERVICE, false); - } - - /** - * @param topic the topic to which the message is to be published. - * @param message the message (payload) of the MQTT publish action as a `MQTTMessage`. - * @throws TransportHandlerException if any error occurs whilst trying to publish to the MQTT Queue. - * @see MQTTTransportHandler#publishToQueue(String, String, int, boolean) - */ - protected void publishToQueue(String topic, MqttMessage message) throws TransportHandlerException { - try { - client.publish(topic, message); - Log.d(TAG, "Message: " + message.toString() + " to MQTT topic [" + topic + "] published successfully"); - } catch (MqttException ex) { - String errorMsg = "MQTT Client Error whilst client [" + clientId + "] tried to publish to queue at " + - "[" + mqttBrokerEndPoint + "] under topic [" + topic + "]"; - Log.e(TAG, errorMsg); - throw new TransportHandlerException(errorMsg, ex); - } - } - - /** - * This method is used to publish messages to the MQTT-Endpoint to which this client is connected to. It is via - * publishing to this broker that the messages are communicated to the device. This is an overloaded method with - * different parameter combinations. This method invokes the publish method provided by the MQTT-Client library. - * - * @param topic the topic to which the message is to be published. - * @param payLoad the message (payload) of the MQTT publish action. - * @param qos the Quality-of-Service of the current publish action. - * Could be 0(At-most once), 1(At-least once) or 2(Exactly once) - * @param retained indicate whether to retain the publish-message in the event of no subscribers. - * @throws TransportHandlerException if any error occurs whilst trying to publish to the MQTT Queue. - */ - protected void publishToQueue(String topic, String payLoad, int qos, boolean retained) - throws TransportHandlerException { - try { - client.publish(topic, payLoad.getBytes(StandardCharsets.UTF_8), qos, retained); - Log.d(TAG, "Message: " + payLoad + " to MQTT topic [" + topic + "] published successfully"); - - } catch (MqttException ex) { - String errorMsg = "MQTT Client Error whilst client [" + clientId + "] tried to publish to queue at " + - "[" + mqttBrokerEndPoint + "] under topic [" + topic + "]"; - Log.e(TAG, errorMsg); - throw new TransportHandlerException(errorMsg, ex); - } - } - - /** - * Checks whether the connection to the MQTT-Broker exists. - * - * @return `true` if the client is connected to the MQTT-Broker, else `false`. - */ - @Override - public boolean isConnected() { - return client.isConnected(); - } - - /** - * Callback method which is triggered once the MQTT client losers its connection to the broker. Spawns a new - * thread that executes necessary actions to try and reconnect to the endpoint. - * - * @param throwable a Throwable Object containing the details as to why the failure occurred. - */ - @Override - public void connectionLost(Throwable throwable) { - Log.w(TAG, "Connection for client: " + this.clientId + " to " + this.mqttBrokerEndPoint + " was lost." + - "\nThis was due to - " + throwable.getMessage()); - Thread reconnectThread = new Thread() { - public void run() { - connect(); - } - }; - reconnectThread.start(); - } - - /** - * Callback method which is triggered upon receiving a MQTT Message from the broker. Spawns a new thread that - * executes any actions to be taken with the received message. - * - * @param topic the MQTT-Topic to which the received message was published to and the client subscribed to. - * @param mqttMessage the actual MQTT-Message that was received from the broker. - */ - @Override - public void messageArrived(final String topic, final MqttMessage mqttMessage) { - Log.d(TAG, "Got an MQTT message '" + mqttMessage.toString() + "' for topic '" + topic + "'."); - - Thread messageProcessorThread = new Thread() { - public void run() { - try { - processIncomingMessage(mqttMessage, topic); - } catch (TransportHandlerException e) { - Log.e(TAG, "An error occurred when trying to process received MQTT message [" + mqttMessage + "] " + - "for topic [" + topic + "].", e); - } - } - }; - messageProcessorThread.start(); - } - - /** - * Callback method which gets triggered upon successful completion of a message delivery to the broker. - * - * @param iMqttDeliveryToken the MQTT-DeliveryToken which includes the details about the specific message delivery. - */ - @Override - public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { - String topic = iMqttDeliveryToken.getTopics()[0]; - String client = iMqttDeliveryToken.getClient().getClientId(); - - try { - if (iMqttDeliveryToken.isComplete()) { - if (iMqttDeliveryToken.getMessage() != null) { - String message = iMqttDeliveryToken.getMessage().toString(); - Log.d(TAG, "Message to client [" + client + "] under topic (" + topic + - ") was delivered successfully with the delivery message: '" + message + "'"); - } else { - Log.d(TAG, "Message to client [" + client + "] under topic (" + topic + - ") was delivered successfully."); - } - } else { - Log.w(TAG, "FAILED: Delivery of MQTT message to [" + client + "] under topic [" + topic + "] failed."); - } - } catch (MqttException e) { - Log.w(TAG, "Error occurred whilst trying to read the message from the MQTT delivery token."); - } - } - - /** - * Closes the connection to the MQTT Broker. - */ - public void closeConnection() throws MqttException { - if (client != null && isConnected()) { - client.disconnect(); - } - } - - /** - * Fetches the default options set for the MQTT Client - * - * @return the options that are currently set for the client. - */ - public MqttConnectOptions getOptions() { - return options; - } -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandler.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandler.java deleted file mode 100755 index 88efba9a48..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandler.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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.data.publisher.mqtt.transport; - -/** - * This interface consists of the core functionality related to the transport between any device and the server. The - * interface is an abstraction, regardless of the underlying protocol used for the transport. Implementation of this - * interface by any class that caters a specific protocol (ex: HTTP, XMPP, MQTT, CoAP) would ideally have methods - * specific to the protocol used for communication and other methods that implement the logic related to the devices - * using the protocol. The methods of the interface are identified as generic ones for implementing transport - * protocols for device communication. The implementation can utilize the appropriate method signatures applicable for - * intended protocol. - * - * @param an object of the message type specific to the protocol implemented. To be set to 'String' if there - * isn't anything specific. - */ -public interface TransportHandler { - // a default timeout interval to be used for the protocol specific connections - int DEFAULT_TIMEOUT_INTERVAL = 5000; // millis ~ 5 sec - - /** - * Implements the underlying connect mechanism specific to the protocol enabled by the interface. An object of a - * class that implements this interface would call this method before any communication is started via the - * intended protocol. - */ - void connect(); - - /** - * Used to check whether a connection (via the implemented protocol) to the external-endpoint exists. Ideally - * used to verify that the connection persists and to spawn a reconnection attempt if not. - * - * @return 'true' if connection is already made & exists, else 'false'. - */ - boolean isConnected(); - - /** - * @throws TransportHandlerException in the event of any exceptions that occur whilst processing the message. - * @see TransportHandler#processIncomingMessage(Object, String...) - */ - void processIncomingMessage() throws TransportHandlerException; - - /** - * @param message the message (of the type specific to the protocol) received from the device. - * @throws TransportHandlerException - * @see TransportHandler#processIncomingMessage(Object, String...) - */ - void processIncomingMessage(T message) throws TransportHandlerException; - - /** - * This is an overloaded method with three different method-signatures. This method is used to process any - * incoming messages via the implemented protocol. It would ideally be invoked at a point where a message - * received event is activated (Ex: `MessageArrived` callback in Eclipse-Paho-MQTT Client & `PacketListener`(s) - * in XMPP). - *

- * - * @param message the message (of the type specific to the protocol) received from the device. - * @param messageParams one or more other parameters received as part-of & relevant-to the message (Ex: MQTT Topic). - * @throws TransportHandlerException in the event of any exceptions that occur whilst processing the message. - */ - void processIncomingMessage(T message, String... messageParams) throws TransportHandlerException; - - /** - * @throws TransportHandlerException in the event of any exceptions that occur whilst sending the message. - * @see TransportHandler#publishDeviceData(String...) - */ - void publishDeviceData() throws TransportHandlerException; - - /** - * @param publishData the message (of the type specific to the protocol) to be sent to the device. - * @throws TransportHandlerException in the event of any exceptions that occur whilst sending the message. - * @see TransportHandler#publishDeviceData(String...) - */ - void publishDeviceData(T publishData) throws TransportHandlerException; - - /** - * This is an overloaded method with three different method-signatures. This method is used to publish messages - * to an external-endpoint/device via the implemented protocol. It could in itself call the (communicating) - * external-endpoint or invoke any method provided by the protocol specific library. - *

- * - * @param publishData one or more parameters specific to the message and the data to be sent. - * @throws TransportHandlerException in the event of any exceptions that occur whilst sending the message. - */ - void publishDeviceData(String... publishData) throws TransportHandlerException; - - /** - * Implements the underlying disconnect mechanism specific to the protocol enabled by the interface. An object of a - * class that implements this interface would call this method upon completion of all communication. In the case of - * the IoT-Server invoking this would only be required if the server shuts-down. - */ - void disconnect(); -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandlerException.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandlerException.java deleted file mode 100755 index fe297b8284..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandlerException.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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.data.publisher.mqtt.transport; - -/** - * This exception will be thrown when the mqtt transport fails. - */ -public class TransportHandlerException extends Exception { - private static final long serialVersionUID = 2736466230451105440L; - - private String errorMessage; - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public TransportHandlerException(String msg, Exception nestedEx) { - super(msg, nestedEx); - setErrorMessage(msg); - } - - public TransportHandlerException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public TransportHandlerException(String msg) { - super(msg); - setErrorMessage(msg); - } - - public TransportHandlerException() { - super(); - } - - public TransportHandlerException(Throwable cause) { - super(cause); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseScheduleReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseScheduleReceiver.java deleted file mode 100755 index 4e41343585..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseScheduleReceiver.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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.event; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import java.util.Calendar; - -/** - * This is a service which triggers to collect - */ -public class SenseScheduleReceiver extends BroadcastReceiver { - private static final int ALARM_INTERVAL = 1000; - @Override - public void onReceive(Context context, Intent intent) { - - AlarmManager service = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - Intent i = new Intent(context, SenseService.class); - PendingIntent pending = PendingIntent.getService(context, 0, i, 0); - - Calendar cal = Calendar.getInstance(); - - cal.add(Calendar.SECOND, 10); - service.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), ALARM_INTERVAL, pending); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseService.java deleted file mode 100755 index 3ad384e754..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseService.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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.event; - -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.IBinder; - -import org.wso2.carbon.iot.android.sense.event.streams.SenseDataCollector; -import org.wso2.carbon.iot.android.sense.util.LocalRegistry; -import org.wso2.carbon.iot.android.sense.util.SenseDataReceiverManager; -import org.wso2.carbon.iot.android.sense.util.SenseWakeLock; - -/** - * This service caters to initiate the data collection. - */ -public class SenseService extends Service { - - public static Context context; - - @Override - public void onCreate() { - super.onCreate(); - SenseWakeLock.acquireWakeLock(this); - } - - @Override - public IBinder onBind(Intent arg0) { - return null; - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - context = this; - if (!LocalRegistry.isExist(context)) return Service.START_NOT_STICKY; - //Below triggers the data collection for sensors,location and battery. - SenseDataCollector Sensor = new SenseDataCollector(this, SenseDataCollector.DataType.SENSOR); - SenseDataCollector Location = new SenseDataCollector(this, SenseDataCollector.DataType.LOCATION); - SenseDataCollector speed = new SenseDataCollector(this, SenseDataCollector.DataType.SPEED); - SenseDataCollector audio = new SenseDataCollector(this, SenseDataCollector.DataType.AUDIO); - SenseDataReceiverManager.registerBatteryDataReceiver(this); - SenseDataReceiverManager.registerScreenDataReceiver(this); - SenseDataReceiverManager.registerCallDataReceiver(this); - SenseDataReceiverManager.registerActivityDataReceiver(this); - SenseDataReceiverManager.registerSmsDataReceiver(this); - SenseDataReceiverManager.registerAppDataReceiver(this); - SenseDataReceiverManager.registerNetworkDataReader(this); - //service will not be stopped until we manually stop the service - return Service.START_NOT_STICKY; - } - - @Override - public void onDestroy() { - SenseDataReceiverManager.unregisterBatteryDataReceiver(this); - SenseDataReceiverManager.unregisterScreenDataReceiver(this); - SenseDataReceiverManager.unregisterCallDataReceiver(this); - SenseDataReceiverManager.unregisterActivityDataReceiver(this); - SenseDataReceiverManager.unregisterSmsDataReceiver(this); - SenseDataReceiverManager.unregisterAppDataReceiver(this); - SenseDataReceiverManager.unregisterNetworkDataReader(); - - SenseWakeLock.releaseCPUWakeLock(); - super.onDestroy(); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/DataReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/DataReader.java deleted file mode 100755 index 1d8e422044..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/DataReader.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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.event.streams; - -/** - * this class extended by each data reader implementation, where the data store logic is implemented in thread. - */ -public abstract class DataReader implements Runnable { -} diff --git a/components/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java deleted file mode 100755 index 086f7d40ab..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.event.streams; - -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.event.streams.audio.AudioDataReader; - -/** - * This class triggered by service to collect the sensor data. - */ -public class SenseDataCollector { - public enum DataType { - SENSOR, LOCATION,SPEED, AUDIO - } - - public SenseDataCollector(Context ctx, DataType dt) { - DataReader dr = null; - switch (dt) { - case SENSOR: - dr = new SensorDataReader(ctx); - break; - case LOCATION: - dr = new LocationDataReader(ctx); - break; - case SPEED: - dr = new SpeedDataReader(ctx); - break; - case AUDIO: - dr = new AudioDataReader(ctx); - break; - - } - if (dr != null) { - Thread DataCollector = new Thread(dr); - DataCollector.start(); - } - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/activity/ActivityData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/activity/ActivityData.java deleted file mode 100644 index 772351c5bd..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/activity/ActivityData.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.event.streams.activity; - -import java.util.Date; - -public class ActivityData { - /** - * 0 - In vehicle - * 1 - Bicycle - * 2 - Foot - * 3 - Still - * 4 - Unknown - * 5 - Tilting - * 7 - Walking - * 8 - Running - */ - private int activity; - private int confidence; - private long timestamp; - - ActivityData(int activity, int confidence) { - this.activity = activity; - this.confidence = confidence; - this.timestamp = new Date().getTime(); - } - - public int getActivity() { - return activity; - } - - public void setActivity(int activity) { - this.activity = activity; - } - - public int getConfidence() { - return confidence; - } - - public void setConfidence(int confidence) { - this.confidence = confidence; - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/activity/ActivityReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/activity/ActivityReceiver.java deleted file mode 100644 index 3220491983..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/activity/ActivityReceiver.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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.event.streams.activity; - -import android.app.IntentService; -import android.content.Intent; - -import com.google.android.gms.location.ActivityRecognitionResult; -import com.google.android.gms.location.DetectedActivity; - -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -public class ActivityReceiver extends IntentService { - public static final int MINIMUM_CONFIDENCE = 75; - - /** - * Retrieve the information for every 10 seconds. - */ - public static final long UPDATE_INTERVAL = 10000; - - public ActivityReceiver() { - super(ActivityReceiver.class.getName()); - } - - @Override - protected void onHandleIntent(Intent intent) { - if (ActivityRecognitionResult.hasResult(intent)) { - ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent); - - for (DetectedActivity activity : result.getProbableActivities()) { - if (activity.getConfidence() >= MINIMUM_CONFIDENCE) { - ActivityData data = new ActivityData(activity.getType(), activity.getConfidence()); - SenseDataHolder.getActivityDataHolder().add(data); - } - } - } - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/application/ApplicationData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/application/ApplicationData.java deleted file mode 100644 index 1443e36b94..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/application/ApplicationData.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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.event.streams.application; - -import java.util.Date; - -public class ApplicationData { - public enum Action { - INSTALL, REMOVE - } - - private long timestamp; - private String packageName; - private Action action; - - ApplicationData(String packageName, Action action) { - this.packageName = packageName; - this.action = action; - this.timestamp = new Date().getTime(); - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public String getPackageName() { - return packageName; - } - - public void setPackageName(String packageName) { - this.packageName = packageName; - } - - public Action getAction() { - return action; - } - - public void setAction(Action action) { - this.action = action; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/application/ApplicationDataReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/application/ApplicationDataReceiver.java deleted file mode 100644 index 8cb52550fe..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/application/ApplicationDataReceiver.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.event.streams.application; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -/** - * Currently interested on package add and remove only. Can be extended for modification. - */ -public class ApplicationDataReceiver extends BroadcastReceiver { - - - @Override - public void onReceive(Context context, Intent intent) { - String packageName = intent.getData().toString().substring(8); - ApplicationData appData; - if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) { - appData = new ApplicationData(packageName, ApplicationData.Action.INSTALL); - } else { - // Removed - appData = new ApplicationData(packageName, ApplicationData.Action.REMOVE); - } - SenseDataHolder.getApplicationDataHolder().add(appData); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/audio/AudioData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/audio/AudioData.java deleted file mode 100644 index 0449d32919..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/audio/AudioData.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.event.streams.audio; - -public class AudioData { - private long timestamp; - private boolean headsetOn; - private int musicVolume; - private boolean playing; - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public boolean isHeadsetOn() { - return headsetOn; - } - - public void setHeadsetOn(boolean headsetOn) { - this.headsetOn = headsetOn; - } - - public int getMusicVolume() { - return musicVolume; - } - - public void setMusicVolume(int musicVolume) { - this.musicVolume = musicVolume; - } - - public boolean isPlaying() { - return playing; - } - - public void setPlaying(boolean playing) { - this.playing = playing; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/audio/AudioDataReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/audio/AudioDataReader.java deleted file mode 100644 index 1a5f85c092..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/audio/AudioDataReader.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.event.streams.audio; - -import android.content.Context; -import android.media.AudioManager; -import android.util.Log; - -import org.wso2.carbon.iot.android.sense.event.streams.DataReader; -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -import java.util.Date; - -public class AudioDataReader extends DataReader { - - private static final String TAG = AudioDataReader.class.getName(); - private Context context; - - public AudioDataReader(Context context) { - this.context = context; - } - - @Override - public void run() { - Log.d(TAG, "Running AudioDataReader"); - AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); - AudioData audioData = new AudioData(); - audioData.setTimestamp(new Date().getTime()); - audioData.setPlaying(manager.isMusicActive()); - audioData.setHeadsetOn(manager.isWiredHeadsetOn()); - audioData.setMusicVolume(manager.getStreamVolume(AudioManager.STREAM_MUSIC)); - SenseDataHolder.getAudioDataHolder().add(audioData); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryData.java deleted file mode 100755 index 7a4d7413aa..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryData.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * 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.event.streams.battery; - -import android.content.Intent; -import android.os.BatteryManager; - -import java.util.Date; - -/** - * This defines the data structure of the battery data that is been collected. - * look at http://developer.android.com/reference/android/os/BatteryManager.html for field description. - */ -public class BatteryData { - - public enum State { - LOW, OK - } - - private int health; - private int level; - private int plugged; - private int present; - private int scale; - private int status; - private int temperature; - private int voltage; - private long timestamp; - private State state; - - BatteryData(Intent intent) { - timestamp = new Date().getTime(); - health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, 0); - level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); - plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); - present = intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT) ? 1 : 0; - scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0); - status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, 0); - String technology = intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); - temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0); - voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0); - state = State.OK; - } - - BatteryData(State state) { - this.timestamp = new Date().getTime(); - this.state = state; - } - - public int getHealth() { - return health; - } - - public void setHealth(int health) { - this.health = health; - } - - public int getLevel() { - return level; - } - - public void setLevel(int level) { - this.level = level; - } - - public int getPlugged() { - return plugged; - } - - public void setPlugged(int plugged) { - this.plugged = plugged; - } - - public int getPresent() { - return present; - } - - public void setPresent(int present) { - this.present = present; - } - - public int getScale() { - return scale; - } - - public void setScale(int scale) { - this.scale = scale; - } - - public int getStatus() { - return status; - } - - public void setStatus(int status) { - this.status = status; - } - - public int getTemperature() { - return temperature; - } - - public void setTemperature(int temperature) { - this.temperature = temperature; - } - - public int getVoltage() { - return voltage; - } - - public void setVoltage(int voltage) { - this.voltage = voltage; - } - - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public State getState() { - return state; - } - - public void setState(State state) { - this.state = state; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryDataReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryDataReceiver.java deleted file mode 100755 index 0a971ab611..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryDataReceiver.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.event.streams.battery; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.BatteryManager; -import android.util.Log; - -import org.wso2.carbon.iot.android.sense.data.publisher.DataPublisherService; -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -/** - * Whenever the battery level changes This receiver will be triggered. - */ -public class BatteryDataReceiver extends BroadcastReceiver { - - private final long ALARM_INTERVAL = 1000; - /** - * When the data is retrieved then its added to a in memory map. - * - * @param context of the receiver. - * @param intent of the receiver - */ - @Override - public void onReceive(Context context, Intent intent) { - AlarmManager service = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - Log.i("Battery Data Receiver", "Triggered"); - Intent i = new Intent(context, BatteryReaderService.class); - PendingIntent pending = PendingIntent.getService(context, 0, i, 0); - service.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), ALARM_INTERVAL, pending); - } - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryReaderService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryReaderService.java deleted file mode 100644 index c2ea5db9fd..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryReaderService.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.event.streams.battery; - -import android.app.IntentService; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.BatteryManager; -import android.os.IBinder; -import android.support.annotation.Nullable; -import android.util.Log; - -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -public class BatteryReaderService extends IntentService { - - private Context context; - - public BatteryReaderService() { - super("BatteryReaderService"); - } - - @Nullable - @Override - public IBinder onBind(Intent intent) { - return null; - } - - @Override - protected void onHandleIntent(Intent intent) { - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(Intent.ACTION_BATTERY_LOW); - intentFilter.addAction(Intent.ACTION_BATTERY_OKAY); - intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); - Intent intent1 = registerReceiver(null, intentFilter); - - Log.i("Battery Data", String.valueOf(intent1.getIntExtra(BatteryManager.EXTRA_LEVEL, 0))); - if (Intent.ACTION_BATTERY_OKAY.equals(intent.getAction())) { - SenseDataHolder.getBatteryDataHolder().add(new BatteryData(BatteryData.State.OK)); - } else if (Intent.ACTION_BATTERY_LOW.equals(intent.getAction())) { - SenseDataHolder.getBatteryDataHolder().add(new BatteryData(BatteryData.State.LOW)); - } else { - SenseDataHolder.getBatteryDataHolder().add(new BatteryData(intent1)); - } - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/call/CallData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/call/CallData.java deleted file mode 100644 index 9f617cdb17..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/call/CallData.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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.event.streams.call; - -public class CallData { - - public enum Type { - INCOMING, OUTGOING, MISSED; - } - - private Type type; - private String phoneNumber; - private long startTime; - private long endTime; - - public CallData(Type type, String phoneNumber, long startTime, long endTime) { - this.type = type; - this.phoneNumber = phoneNumber; - this.startTime = startTime; - this.endTime = endTime; - } - - public Type getType() { - return type; - } - - public void setType(Type type) { - this.type = type; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public long getStartTime() { - return startTime; - } - - public void setStartTime(long startTime) { - this.startTime = startTime; - } - - public long getEndTime() { - return endTime; - } - - public void setEndTime(long endTime) { - this.endTime = endTime; - } -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/call/CallDataReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/call/CallDataReceiver.java deleted file mode 100644 index 1988914e81..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/call/CallDataReceiver.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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.event.streams.call; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.telephony.TelephonyManager; - -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -public class CallDataReceiver extends BroadcastReceiver { - private static int lastState = TelephonyManager.CALL_STATE_IDLE; - private static long startTime; - private static boolean isIncoming; - private static String lastNotifiedNumber; - - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { - lastNotifiedNumber = intent.getExtras().getString(Intent.EXTRA_PHONE_NUMBER); - } else { - String extraState = intent.getExtras().getString(TelephonyManager.EXTRA_STATE); - int state = 0; - if (extraState.equals(TelephonyManager.EXTRA_STATE_IDLE)) { - state = TelephonyManager.CALL_STATE_IDLE; - } else if (extraState.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { - state = TelephonyManager.CALL_STATE_OFFHOOK; - } else if (extraState.equals(TelephonyManager.EXTRA_STATE_RINGING)) { - state = TelephonyManager.CALL_STATE_RINGING; - } - - if (lastState == state) { - return; // Nothing has been changed - } - switch (state) { - case TelephonyManager.CALL_STATE_RINGING: - // Receiving a call - isIncoming = true; - startTime = System.currentTimeMillis(); - // If incoming call, get the incoming number - lastNotifiedNumber = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER); - break; - case TelephonyManager.CALL_STATE_OFFHOOK: - if (lastState == TelephonyManager.CALL_STATE_RINGING) { - // RINGING -> OFFHOOK = ANSWERED - isIncoming = true; - startTime = System.currentTimeMillis(); - } else { - // NOT RINGING -> OFFHOOK = OUTGOING - isIncoming = false; - startTime = System.currentTimeMillis(); - } - break; - case TelephonyManager.CALL_STATE_IDLE: - if (lastState == TelephonyManager.CALL_STATE_RINGING) { - // RINGING -> IDLE = MISSED - SenseDataHolder.getCallDataHolder().add(new CallData(CallData.Type.MISSED, lastNotifiedNumber, startTime, System.currentTimeMillis())); - } else if (isIncoming) { - // Incoming (OFFHOOK) -> IDLE = INCOMING CALL ENDED - SenseDataHolder.getCallDataHolder().add(new CallData(CallData.Type.INCOMING, lastNotifiedNumber, startTime, System.currentTimeMillis())); - } else { - // Not Incoming -> IDLE = OUTGOING CALL ENDED - SenseDataHolder.getCallDataHolder().add(new CallData(CallData.Type.OUTGOING, lastNotifiedNumber, startTime, System.currentTimeMillis())); - } - break; - } - lastState = state; - } - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/data/NetworkData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/data/NetworkData.java deleted file mode 100644 index 52695a5e1d..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/data/NetworkData.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.event.streams.data; - -public class NetworkData { - - //Mobile or Wifi - private String type; - private long dataReceived; - private long dataSent; - private long timeStamp; - - public NetworkData() { - } - - public String getDataType() { - return type; - } - - public long getDataReceived() { - return dataReceived; - } - - public void setDataReceived(long dataReceived) { - this.dataReceived = dataReceived; - } - - public long getDataSent() { - return dataSent; - } - - public void setDataSent(long dataSent) { - this.dataSent = dataSent; - } - - public long getTimeStamp() { - return timeStamp; - } - - public void setTimeStamp(long timeStamp) { - this.timeStamp = timeStamp; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/data/NetworkDataReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/data/NetworkDataReader.java deleted file mode 100644 index 885bd5c9b1..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/data/NetworkDataReader.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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.event.streams.data; - -import android.content.Context; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.net.TrafficStats; -import android.os.AsyncTask; -import android.os.Handler; -import android.util.Log; -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -import java.util.Date; - -/** - * Class to read data sent and received by the device. - */ -public class NetworkDataReader extends AsyncTask { - - private NetworkData networkData; - private Context context; - private Handler mHandler = new Handler(); - private long mStartRX = 0; - private long mStartTX = 0; - private final String WIFI = "WIFI"; - private final String MOBILE = "MOBILE"; - private String connectionType; - - public NetworkDataReader(Context context) { - this.context = context; - } - - @Override - protected Long doInBackground(Void... voids) { - - ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - networkData = new NetworkData(); - - if (getConnectionType(connectivityManager, ConnectivityManager.TYPE_WIFI)) { - connectionType = WIFI; - } else if (getConnectionType(connectivityManager, ConnectivityManager.TYPE_MOBILE)) { - connectionType = MOBILE; - } - - mStartRX = TrafficStats.getTotalRxBytes(); - mStartTX = TrafficStats.getTotalTxBytes(); - if (mStartRX == TrafficStats.UNSUPPORTED || mStartTX == TrafficStats.UNSUPPORTED) { - Log.e("ERROR", "Not connected."); - } else { - mHandler.postDelayed(mRunnable, 10000); - } - return null; - } - - /** - * Collect data sent and received with in 10 second time frames. - */ - private final Runnable mRunnable = new Runnable() { - public void run() { - long rxBytes = TrafficStats.getTotalRxBytes() - mStartRX; - long txBytes = TrafficStats.getTotalTxBytes() - mStartTX; - Log.i("Usage: ", String.valueOf(rxBytes) + " " + String.valueOf(txBytes) + " " + System.currentTimeMillis()); - networkData.setType(connectionType); - networkData.setTimeStamp(new Date().getTime()); - networkData.setDataSent(txBytes); - networkData.setDataReceived(rxBytes); - SenseDataHolder.getNetworkDataHolder().add(networkData); - mHandler.postDelayed(mRunnable, 10000); - } - }; - - /** - * Get the type of the connection currently have. - */ - private boolean getConnectionType(ConnectivityManager manager, Integer type) { - NetworkInfo networkInfo = manager.getNetworkInfo(type); - return networkInfo.isConnected(); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/location/LocationData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/location/LocationData.java deleted file mode 100755 index c534990609..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/location/LocationData.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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.event.streams.location; - -import java.util.Date; - -/** - * This defines the data structure of the location data that is been collected. - */ -public class LocationData { - private double latitude; // latitude - private double longitude; // longitude - private long timestamp; - - LocationData(double latitude, double longitude) { - this.latitude = latitude; - this.longitude = longitude; - timestamp = new Date().getTime(); - - } - - public double getLatitude() { - return latitude; - } - - public void setLatitude(double latitude) { - this.latitude = latitude; - } - - public double getLongitude() { - return longitude; - } - - public void setLongitude(double longitude) { - this.longitude = longitude; - } - - public long getTimeStamp() { - return timestamp; - } - - public void setTimeStamp(long timeStamp) { - timestamp = timeStamp; - } -} diff --git a/components/device-types/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/device-types/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 deleted file mode 100755 index f79cc64f52..0000000000 --- a/components/device-types/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 +++ /dev/null @@ -1,251 +0,0 @@ -/* - * 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.event.streams.location; - -import android.content.Context; -import android.content.Intent; -import android.location.Location; -import android.location.LocationListener; -import android.location.LocationManager; -import android.os.Bundle; -import android.support.v4.content.LocalBroadcastManager; -import android.util.Log; -import android.widget.Toast; - -import org.wso2.carbon.iot.android.sense.event.streams.DataReader; -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -import java.util.Calendar; -import java.util.concurrent.TimeUnit; - -/** - * This is used to retrieve the location data using GPS and used Network connection to increase the accuracy. - */ -public class LocationDataReader extends DataReader implements LocationListener { - protected LocationManager locationManager; - private final Context mContext; - - LocationData gps; - - static final Double EARTH_RADIUS = 6371.00; - - // flag for GPS status - private boolean isGPSEnabled = false; - - // flag for network status - private boolean isNetworkEnabled = false; - - // flag for GPS status - private boolean canGetLocation = false; - //private boolean canGetLocation = false; - private static final String TAG = LocationDataReader.class.getName(); - - Location location; // location - double latitude; // latitude - double longitude; // longitude - - double lat_old=0.0; - double lon_old=0.0; - double time; - float speed = 0.0f; - private long lastUpdate; - - // The minimum distance to change Updates in meters - private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters - - // The minimum time between updates in milliseconds - private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute - - public LocationDataReader(Context context) { - this.mContext = context; - getLocation(); - } - - public Location getLocation() { - try { - - locationManager = (LocationManager) mContext - .getSystemService(mContext.LOCATION_SERVICE); - - // getting GPS status - isGPSEnabled = locationManager - .isProviderEnabled(LocationManager.GPS_PROVIDER); - - // getting network status - isNetworkEnabled = locationManager - .isProviderEnabled(LocationManager.NETWORK_PROVIDER); - - if (!isGPSEnabled && !isNetworkEnabled) { - // no network provider is enabled - } else { - this.canGetLocation = true; - if (isNetworkEnabled) { - locationManager.requestLocationUpdates( - LocationManager.NETWORK_PROVIDER, - MIN_TIME_BW_UPDATES, - MIN_DISTANCE_CHANGE_FOR_UPDATES, this); - Log.d("Network", "Network"); - if (locationManager != null) { - location = locationManager - .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); - if (location != null) { - latitude = location.getLatitude(); - longitude = location.getLongitude(); - } - } - } - // if GPS Enabled get lat/long using GPS Services - if (isGPSEnabled) { - if (location == null) { - locationManager.requestLocationUpdates( - LocationManager.GPS_PROVIDER, - MIN_TIME_BW_UPDATES, - MIN_DISTANCE_CHANGE_FOR_UPDATES, this); - Log.d("GPS Enabled", "GPS Enabled"); - if (locationManager != null) { - location = locationManager - .getLastKnownLocation(LocationManager.GPS_PROVIDER); - if (location != null) { - latitude = location.getLatitude(); - longitude = location.getLongitude(); - } - } - } - } - } - - } catch (Exception e) { - Log.e(TAG, "Failed to capture location data."); - } - - return location; - } - - public boolean canGetLocation() { - return this.canGetLocation; - } - - public void stopUsingGPS() { - if (locationManager != null) { - locationManager.removeUpdates(LocationDataReader.this); - } - } - - public double getLatitude() { - if (location != null) { - latitude = location.getLatitude(); - } - // return latitude - return latitude; - } - - /** - * Function to get longitude - */ - public double getLongitude() { - if (location != null) { - longitude = location.getLongitude(); - } - // return longitude - return longitude; - } - - @Override - public void onLocationChanged(Location arg0) { - // TODO Auto-generated method stub - Log.v("Debug", "in onLocation changed.."); - if(location!=null){ - long curTime = System.currentTimeMillis(); - - long diffTime = (curTime - lastUpdate); - lastUpdate = curTime; - Calendar c=Calendar.getInstance(); - c.setTimeInMillis(diffTime); - - time=c.get(Calendar.HOUR); - - locationManager.removeUpdates(LocationDataReader.this); - //String Speed = "Device Speed: " +location.getSpeed(); - latitude=location.getLongitude(); - longitude =location.getLatitude(); - - 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(); - - - Intent intent = new Intent("speedUpdate"); - intent.putExtra("speed", speed); - LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); - - lat_old=latitude; - lon_old=longitude; - } - - } - - @Override - public void onProviderDisabled(String arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void onProviderEnabled(String arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void onStatusChanged(String arg0, int arg1, Bundle arg2) { - // TODO Auto-generated method stub - - } - - @Override - public void run() { - Log.d(TAG, "running -Location"); - try { - TimeUnit.MILLISECONDS.sleep(10000); - double lat = getLatitude(); - double longit = getLongitude(); - if (lat != 0 && longit != 0) { - Log.d(TAG, "YYY " + getLatitude() + ", XXX " + getLongitude()); - gps = new LocationData(getLatitude(), getLongitude()); - SenseDataHolder.getLocationDataHolder().add(gps); - - } - } catch (InterruptedException e) { - // Restore the interrupted status - Thread.currentThread().interrupt(); - Log.e(TAG, " Location Data Retrieval Failed", e); - } - } - - public double CalculationByDistance(double lat1, double lon1, double lat2, double lon2) { - double Radius = EARTH_RADIUS; - double dLat = Math.toRadians(lat2-lat1); - double dLon = Math.toRadians(lon2-lon1); - double a = Math.sin(dLat/2) * Math.sin(dLat/2) + - Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * - Math.sin(dLon/2) * Math.sin(dLon/2); - double c = 2 * Math.asin(Math.sqrt(a)); - return Radius * c; - } - - - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/screen/ScreenData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/screen/ScreenData.java deleted file mode 100644 index 0c124611f7..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/screen/ScreenData.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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.event.streams.screen; - -import android.content.Intent; - -import java.util.Date; - -public class ScreenData { - private String action; - private long timestamp; - - ScreenData(Intent intent) { - if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) { - this.action = "on"; - } else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) { - this.action = "off"; - } else { - this.action = "unknown"; - } - this.timestamp = new Date().getTime(); - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/screen/ScreenDataReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/screen/ScreenDataReceiver.java deleted file mode 100644 index ace9d98faa..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/screen/ScreenDataReceiver.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.event.streams.screen; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -public class ScreenDataReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - SenseDataHolder.getScreenDataHolder().add(new ScreenData(intent)); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sensor/SensorData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sensor/SensorData.java deleted file mode 100755 index a8c0d03643..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sensor/SensorData.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * 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.event.streams.sensor; - -import android.hardware.SensorEvent; - -import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.SupportedSensors; - -import java.util.Date; - -/** - * This defines the data structure of the sensor data that is been collected. - * look at http://developer.android.com/guide/topics/sensors/sensors_overview.html for field description. - */ -public class SensorData { - private int sensorType; - private String sensorName; - private String sensorVendor; - private float sensorValues[]; - private int accuracyStatus; - private long timestamp; - private String collectTimestamp; - private SupportedSensors supportedSensors = SupportedSensors.getInstance(); - - SensorData(SensorEvent event) { - sensorValues = event.values; - accuracyStatus = event.accuracy; - collectTimestamp = String.valueOf(event.timestamp); - timestamp = new Date().getTime(); - sensorName = supportedSensors.getType(event.sensor.getType()).toUpperCase(); - sensorVendor = event.sensor.getVendor(); - sensorType = event.sensor.getType(); - } - - public int getSensorType() { - return sensorType; - } - - public void setSensorType(int sensorType) { - this.sensorType = sensorType; - } - - public String getSensorName() { - return sensorName; - } - - public void setSensorName(String sensorName) { - this.sensorName = sensorName; - } - - public String getSensorVendor() { - return sensorVendor; - } - - public void setSensorVendor(String sensorVendor) { - this.sensorVendor = sensorVendor; - } - - public float[] getSensorValues() { - return sensorValues; - } - - public void setSensorValues(float sensorValues[]) { - this.sensorValues = sensorValues; - } - - public int getAccuracyStatus() { - return accuracyStatus; - } - - public void setAccuracyStatus(int accuracyStatus) { - this.accuracyStatus = accuracyStatus; - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public String getCollectTimestamp() { - return collectTimestamp; - } - - public void setCollectTimestamp(String collectTimestamp) { - this.collectTimestamp = collectTimestamp; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sensor/SensorDataReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sensor/SensorDataReader.java deleted file mode 100755 index b72754f44e..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sensor/SensorDataReader.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * 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.event.streams.sensor; - -import android.content.Context; -import android.content.SharedPreferences; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import android.util.Log; - -import org.wso2.carbon.iot.android.sense.event.streams.DataReader; -import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.SupportedSensors; -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Vector; -import java.util.concurrent.TimeUnit; - -/** - * This is used to retrieve the sensor data. - */ -public class SensorDataReader extends DataReader implements SensorEventListener { - private SensorManager mSensorManager; - private Map senseDataStruct = new HashMap<>(); - private Vector sensorVector = new Vector<>(); - Context ctx; - private List sensorList = new ArrayList<>(); - private SupportedSensors supportedSensors = SupportedSensors.getInstance(); - private static final String TAG = SensorDataReader.class.getName(); - - public SensorDataReader(Context context) { - ctx = context; - SharedPreferences sharedPreferences = ctx.getSharedPreferences(SupportedSensors.SELECTED_SENSORS, Context - .MODE_MULTI_PROCESS); - Set selectedSet = sharedPreferences.getStringSet(SupportedSensors.SELECTED_SENSORS_BY_USER, null); - mSensorManager = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE); - selectedSensorList(selectedSet); - for (Sensor sensor : sensorList) { - mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL); - } - } - - private void collectSensorData() { - for (Sensor sensor : sensorList) { - try { - if (senseDataStruct.containsKey(sensor.getName())) { - SensorData sensorInfo = senseDataStruct.get(sensor.getName()); - sensorVector.add(sensorInfo); - Log.d(TAG, "Sensor Name " + sensor.getName() + ", Type " + sensor.getType() + " " + - ", sensorValue :" + Arrays.toString(sensorInfo.getSensorValues())); - } - } catch (Throwable e) { - Log.d(TAG, "error on sensors"); - } - } - mSensorManager.unregisterListener(this); - } - - public Vector getSensorData() { - try { - TimeUnit.MILLISECONDS.sleep(1000); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - Log.e(TAG, e.getMessage()); - } - collectSensorData(); - return sensorVector; - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - } - - @Override - public void onSensorChanged(SensorEvent event) { - senseDataStruct.put(event.sensor.getName(), new SensorData(event)); - } - - @Override - public void run() { - Log.d(TAG, "running -sensorDataMap"); - Vector sensorDetails = getSensorData(); - for (SensorData data : sensorDetails) { - SenseDataHolder.getSensorDataHolder().add(data); - } - } - - public void selectedSensorList(Set set) { - if (set != null) { - String[] sensorsSet = set.toArray(new String[set.size()]); - for (String s : sensorsSet) { - sensorList.add(mSensorManager.getDefaultSensor(supportedSensors.getType(s.toLowerCase()))); - } - } - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sms/SmsData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sms/SmsData.java deleted file mode 100644 index 607ca2a857..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sms/SmsData.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.event.streams.sms; - -import java.util.Date; - -public class SmsData { - - private String phoneNumber; - private long timestamp; - private String message; - - SmsData(String phoneNumber, String message) { - this.phoneNumber = phoneNumber; - this.message = message; - this.timestamp = new Date().getTime(); - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sms/SmsDataReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sms/SmsDataReceiver.java deleted file mode 100644 index d107ab0a93..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/sms/SmsDataReceiver.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.event.streams.sms; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.telephony.SmsMessage; - -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -public class SmsDataReceiver extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - final Bundle bundle = intent.getExtras(); - - if (bundle != null) { - final Object[] pdusObj = (Object[]) bundle.get("pdus"); - - for (int i = 0; i < pdusObj.length; i++) { - SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); - String phoneNumber = currentMessage.getDisplayOriginatingAddress(); - String message = currentMessage.getDisplayMessageBody(); - - SmsData smsData = new SmsData(phoneNumber, message); - SenseDataHolder.getSmsDataHolder().add(smsData); - } - } - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/speed/SpeedData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/speed/SpeedData.java deleted file mode 100644 index 2093fcbd44..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/speed/SpeedData.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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.event.streams.speed; - -import java.util.Date; - -public class SpeedData { - private float speed; // speed - private String turnAxis; // turns - private long timestamp; - - SpeedData(float speed, String turnAxis) { - this.speed = speed; - this.turnAxis = turnAxis; - timestamp = new Date().getTime(); - - } - - public float getSpeed() { - return speed; - } - - public void setSpeed(float speed) { - this.speed = speed; - } - - public String getTurns() { - return turnAxis; - } - - public void setTurns(String turnAxis) { - this.turnAxis = turnAxis; - } - - public long getTimeStamp() { - return timestamp; - } - - public void setTimeStamp(long timeStamp) { - timestamp = timeStamp; - } - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/speed/SpeedDataReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/speed/SpeedDataReader.java deleted file mode 100644 index f667391258..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/speed/SpeedDataReader.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * 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.event.streams.speed; - -import org.wso2.carbon.iot.android.sense.event.streams.DataReader; -import org.wso2.carbon.iot.android.sense.event.streams.sensor.SensorData; -import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.SupportedSensors; -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; -import android.content.Context; -import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import android.support.v4.content.LocalBroadcastManager; -import android.util.Log; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Vector; -import java.util.concurrent.TimeUnit; -import android.content.BroadcastReceiver; - -import android.content.Intent; - - -public class SpeedDataReader extends DataReader implements SensorEventListener { - - SpeedData data; - private SensorManager mSensorManager; - private Map senseDataStruct = new HashMap<>(); - private Vector sensorVector = new Vector<>(); - private static final String TAG = SpeedDataReader.class.getName(); - private float last_x, last_y, last_z; - private long lastUpdate; - private String xTurnAxis; - float speed; - private float x,y,z; - Context ctx; - private List sensorList = new ArrayList<>(); - private SupportedSensors supportedSensors = SupportedSensors.getInstance(); - - @Override - public void onSensorChanged(SensorEvent event) { - - Sensor devSensor = event.sensor; - - if (devSensor.getType() == Sensor.TYPE_ACCELEROMETER) { - x = event.values[0]; - y = event.values[1]; - z = event.values[2]; - - } - } - - public SpeedDataReader(Context context) { - ctx = context; - SharedPreferences sharedPreferences = ctx.getSharedPreferences(SupportedSensors.SELECTED_SENSORS, Context - .MODE_MULTI_PROCESS); - Set selectedSet = sharedPreferences.getStringSet(SupportedSensors.SELECTED_SENSORS_BY_USER, null); - mSensorManager = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE); - selectedSensorList(selectedSet); - for (Sensor sensor : sensorList) { - mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL); - } - - LocalBroadcastManager.getInstance(ctx).registerReceiver(mMessageReceiver, - new IntentFilter("speedUpdate")); - - } - - private void collectSensorData() { - for (Sensor sensor : sensorList) { - try { - if (senseDataStruct.containsKey(sensor.getName())) { - SensorData sensorInfo = senseDataStruct.get(sensor.getName()); - sensorVector.add(sensorInfo); - Log.d(TAG, "Sensor Name " + sensor.getName() + ", Type " + sensor.getType() + " " + - ", sensorValue :" + sensorInfo.getSensorValues()); - } - } catch (Throwable e) { - Log.d(TAG, "error on sensors"); - } - } - mSensorManager.unregisterListener(this); - } - - - public String getTurns() { - - if(Round(x,4)>10.0000){ - Log.d("sensor", "X Right axis: " + x); - xTurnAxis = "Right"; - return xTurnAxis; - }else if(Round(x,4)<-10.0000){ - Log.d("sensor", "X Left axis: " + x); - xTurnAxis = "Left"; - return xTurnAxis; - }else { - xTurnAxis = "No Turns"; - - } - return xTurnAxis; - } - - public float getSpeed(){ - - return speed; - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - // can be safely ignored for this demo - } - - public static float Round(float Rval, int Rpl) { - float p = (float)Math.pow(10,Rpl); - Rval = Rval * p; - float tmp = Math.round(Rval); - Log.d("round", "round: " + tmp/p); - - return tmp/p; - } - - @Override - public void run() { - Log.d(TAG, "running - Device Speed"); - try { - TimeUnit.MILLISECONDS.sleep(10000); - // String trn = getTurns(); - // double spd = getSpeed(); - //if (trn != 0 && spd != 0) { - data = new SpeedData(getSpeed(), getTurns()); - SenseDataHolder.getSpeedDataHolder().add(data); - collectSensorData(); - - //} - } catch (InterruptedException e) { - // Restore the interrupted status - Thread.currentThread().interrupt(); - Log.e(TAG, " Speed Data Retrieval Failed"); - } - } - - public void selectedSensorList(Set set) { - if (set != null) { - String[] sensorsSet = set.toArray(new String[set.size()]); - for (String s : sensorsSet) { - sensorList.add(mSensorManager.getDefaultSensor(supportedSensors.getType(s.toLowerCase()))); - } - } - } - - private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - // Get extra data included in the Intent - speed = intent.getFloatExtra("speed",speed); - - Log.d("receiver", "Got message: " + speed); - } - }; - - -} diff --git a/components/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java deleted file mode 100755 index 41b661ec60..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (c) 2015, 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.realtimeviewer; - -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.hardware.Sensor; -import android.hardware.SensorManager; -import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.NavigationView; -import android.support.design.widget.Snackbar; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; -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.bmonitor.BeaconMonitoringActivity; -import org.wso2.carbon.iot.android.sense.data.publisher.DataPublisherReceiver; -import org.wso2.carbon.iot.android.sense.data.publisher.DataPublisherService; -import org.wso2.carbon.iot.android.sense.event.SenseScheduleReceiver; -import org.wso2.carbon.iot.android.sense.event.SenseService; -import org.wso2.carbon.iot.android.sense.realtimeviewer.datastore.TempStore; -import org.wso2.carbon.iot.android.sense.realtimeviewer.event.RealTimeSensorChangeReceiver; -import org.wso2.carbon.iot.android.sense.realtimeviewer.event.realtimesensor.RealTimeSensorReader; -import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.SupportedSensors; -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.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; - -/** - * Activity for selecting sensors available in the device - */ - -public class ActivitySelectSensor extends AppCompatActivity - implements NavigationView.OnNavigationItemSelectedListener, SelectSensorDialog.SensorListListener { - - private SharedPreferences sharedPreferences; - private SelectSensorDialog sensorDialog = new SelectSensorDialog(); - private Set selectedSensorSet = new HashSet<>(); - private ListView listView; - private SensorManager sensorManager; - private ArrayList sensors = new ArrayList<>(); - 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) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_activity_select_sensor); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); - listView = (ListView) findViewById(R.id.senseListContainer); - - registerReceiver(realTimeSensorChangeReceiver, new IntentFilter("sensorDataMap")); - - //Publish data - FloatingActionButton fbtnPublishData = (FloatingActionButton) findViewById(R.id.publish); - - fbtnPublishData.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Snackbar.make(view, "Publishing data started", Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); - - DataPublisherReceiver dataPublisherReceiver = new DataPublisherReceiver(); - dataPublisherReceiver.clearAbortBroadcast(); - dataPublisherReceiver.onReceive(getApplicationContext(), null); - } - }); - - FloatingActionButton fbtnAddSensors = (FloatingActionButton) findViewById(R.id.addSensors); - fbtnAddSensors.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - sensorDialog.show(getFragmentManager(), "Sensor List"); - } - }); - - sharedPreferences = getSharedPreferences(SupportedSensors.SELECTED_SENSORS, 0); - - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( - this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); - drawer.setDrawerListener(toggle); - toggle.syncState(); - - NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); - navigationView.setNavigationItemSelectedListener(this); - } - - @Override - public void onBackPressed() { - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - if (drawer.isDrawerOpen(GravityCompat.START)) { - drawer.closeDrawer(GravityCompat.START); - } else { - super.onBackPressed(); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.activity_select_sensor, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_deEnroll) { - - /** - * unregister the sensors and broadcast receivers. - * */ - unregisterSensors(); - unregisterReceivers(); - - if (!LocalRegistry.isExist(getApplicationContext())) { - Intent activity = new Intent(getApplicationContext(), RegisterActivity.class); - startActivity(activity); - } - LocalRegistry.setEnrolled(getApplicationContext(), false); - LocalRegistry.removeUsername(getApplicationContext()); - LocalRegistry.removeDeviceId(getApplicationContext()); - LocalRegistry.removeServerURL(getApplicationContext()); - LocalRegistry.removeAccessToken(getApplicationContext()); - LocalRegistry.removeRefreshToken(getApplicationContext()); - LocalRegistry.removeMqttEndpoint(getApplicationContext()); - LocalRegistry.removeTenantDomain(getApplicationContext()); - LocalRegistry.setExist(false); - //Stop the current running background services. - stopService(new Intent(this, SenseService.class)); //Stop sensor reading service - stopService(new Intent(this, DataPublisherService.class)); //Stop data uploader service - - Intent registerActivity = new Intent(getApplicationContext(), RegisterActivity.class); - registerActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(registerActivity); - finish(); - return true; - } - return super.onOptionsItemSelected(item); - } - - @SuppressWarnings("StatementWithEmptyBody") - @Override - public boolean onNavigationItemSelected(MenuItem item) { - // Handle navigation view item clicks here. - int id = item.getItemId(); - - if (id == R.id.select) { - sensorDialog.show(getFragmentManager(), "Sensor List"); - } - - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - drawer.closeDrawer(GravityCompat.START); - return true; - } - - - - @Override - public void onDialogPositiveClick(SelectSensorDialog dialog) { - - Log.d("Selected sensors", dialog.getSet().toString()); - selectedSensorSet = dialog.getSet(); - update(); - unregisterSensors(); - - SenseScheduleReceiver senseScheduleReceiver = new SenseScheduleReceiver(); - senseScheduleReceiver.clearAbortBroadcast(); - senseScheduleReceiver.onReceive(this, null); - - /** - * Get the selected sensors - * Register them - * */ - SensorViewAdaptor adaptor1 = new SensorViewAdaptor(getApplicationContext(), TempStore.sensorArrayList); - adaptor1.notifyDataSetChanged(); - - sensorReader = new RealTimeSensorReader(this, adaptor1); - getSensors(); - - for (Sensor s : sensors) { - sensorManager.registerListener(sensorReader, s, SensorManager.SENSOR_DELAY_NORMAL); - } - - realTimeSensorChangeReceiver.updateOnChange(adaptor1); - listView.setAdapter(adaptor1); - } - - public void update() { - Log.d("Update", "Set the values to Shared Preferences"); - - TempStore.sensorArrayList.clear(); - TempStore.sensorDataMap.clear(); - - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putStringSet(SupportedSensors.SELECTED_SENSORS_BY_USER, selectedSensorSet); - editor.apply(); - } - - public void getSensors() { - sensors.clear(); - for (String sensor : selectedSensorSet.toArray(new String[selectedSensorSet.size()])) { - sensors.add(sensorManager.getDefaultSensor(supportedSensors.getType(sensor.toLowerCase()))); - } - } - - /** - * This method will unregister all the registered sensors. - */ - public void unregisterSensors() { - if (sensors.size() > 0) { - for (Sensor s : sensors) { - System.out.println(s.getName() + " Unregistered!"); - sensorManager.unregisterListener(sensorReader, s); - } - } - } - - /** - * This method unregisters the real-time broadcast receiver. - */ - public void unregisterReceivers() { - unregisterReceiver(realTimeSensorChangeReceiver); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/datastore/TempStore.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/datastore/TempStore.java deleted file mode 100755 index dd5a9f86a0..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/datastore/TempStore.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2015, 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.realtimeviewer.datastore; - -import org.wso2.carbon.iot.android.sense.realtimeviewer.event.realtimesensor.RealTimeSensor; - -import java.util.ArrayList; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -/** - * Class to store the real time sensor readings. - */ -public class TempStore { - - /** - * Hash map which is used to store sensor values with the sensor names. - */ - public static ConcurrentMap sensorDataMap = new ConcurrentHashMap<>(); - - /** - * Array List which is used to populate the List view. - */ - public static ArrayList sensorArrayList = new ArrayList<>(); -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/RealTimeSensorChangeReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/RealTimeSensorChangeReceiver.java deleted file mode 100755 index 3413f4e433..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/RealTimeSensorChangeReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2015, 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.realtimeviewer.event; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import org.wso2.carbon.iot.android.sense.realtimeviewer.datastore.TempStore; -import org.wso2.carbon.iot.android.sense.realtimeviewer.view.adaptor.SensorViewAdaptor; - -/** - * This class is to detect the sensor change event and update the sensor array list. - * And update the view adaptor which is used to show the sensors list in the Android List view. - */ -public class RealTimeSensorChangeReceiver extends BroadcastReceiver { - - SensorViewAdaptor adaptor; - - public void updateOnChange(SensorViewAdaptor adaptor) { - this.adaptor = adaptor; - } - - @Override - public void onReceive(Context context, Intent intent) { - TempStore.sensorArrayList.clear(); - TempStore.sensorArrayList.addAll(TempStore.sensorDataMap.values()); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensor.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensor.java deleted file mode 100755 index 6a71739dc7..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensor.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2015, 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.realtimeviewer.event.realtimesensor; - -import android.support.annotation.NonNull; - -/** - * The class to store the sensor data captured by the RealTimeSensorReader. - */ -public class RealTimeSensor implements Comparable { - - - /** - * Name of the sensor. - */ - private String name; - - /** - * The X value reading of the sensor. - */ - private String valueX; - - /** - * The Y value reading of the sensor. - */ - private String valueY; - - /** - * The Y value reading of the sensor. - */ - private String valueZ; - - public RealTimeSensor() { - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getValueX() { - return valueX; - } - - public void setValueX(String valueX) { - this.valueX = valueX; - } - - public String getValueY() { - return valueY; - } - - public void setValueY(String valueY) { - this.valueY = valueY; - } - - public String getValueZ() { - return valueZ; - } - - public void setValueZ(String valueZ) { - this.valueZ = valueZ; - } - - @Override - public String toString() { - return this.valueX + ", " + valueY + ", " + valueZ; - } - - @Override - public int compareTo(@NonNull Object another) { - return this.toString().contains(another.toString()) ? 1 : 0; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensorReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensorReader.java deleted file mode 100755 index 441b251954..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensorReader.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2015, 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.realtimeviewer.event.realtimesensor; - -import android.content.Context; -import android.content.Intent; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; - -import org.wso2.carbon.iot.android.sense.realtimeviewer.datastore.TempStore; -import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.SupportedSensors; -import org.wso2.carbon.iot.android.sense.realtimeviewer.view.adaptor.SensorViewAdaptor; - -/** - * This class reads the sensor values in real time. - */ -public class RealTimeSensorReader implements SensorEventListener { - - private Context context; - private SensorViewAdaptor adaptor; - private SupportedSensors supportedSensors = SupportedSensors.getInstance(); - - public RealTimeSensorReader(Context context, SensorViewAdaptor adaptor) { - this.context = context; - this.adaptor = adaptor; - } - - @Override - public void onSensorChanged(SensorEvent event) { - RealTimeSensor realTimeSensor = new RealTimeSensor(); - realTimeSensor.setName(supportedSensors.getType(event.sensor.getType()).toUpperCase()); - - realTimeSensor.setValueX(event.values == null ? "" : event.values[0] + ""); - realTimeSensor.setValueY(event.values == null || event.values.length <= 1 ? "" : event.values[1] + ""); - realTimeSensor.setValueZ(event.values == null || event.values.length <= 1 ? "" : event.values[2] + ""); - - TempStore.sensorDataMap.put(supportedSensors.getType(event.sensor.getType()), realTimeSensor); - - Intent intent = new Intent(); - intent.setAction("sensorDataMap"); - context.sendBroadcast(intent); - - adaptor.notifyDataSetChanged(); - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/AvailableSensorsInDevice.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/AvailableSensorsInDevice.java deleted file mode 100755 index e8cdfc8082..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/AvailableSensorsInDevice.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2015, 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.realtimeviewer.sensorlisting; - -import android.content.Context; -import android.content.SharedPreferences; -import android.hardware.Sensor; -import android.hardware.SensorManager; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * Class to save the list of sensors that are available in the device, which are supported by the iot server. - * This list will be saved in Shared preferences so that app can use this data when needed. - */ -public class AvailableSensorsInDevice { - - private SharedPreferences sensorPreference; - - /** - * The Android sensor manager which is used to get the sensors available in device. - */ - private SensorManager mSensorManager; - - public AvailableSensorsInDevice(Context context) { - this.sensorPreference = context.getSharedPreferences(SupportedSensors.AVAILABLE_SENSORS, 0); - this.mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); - } - - /** - * This method filters the pre defined sensor types from sensors available in device and sets them in Shared - * preferences. - */ - public void setContent() { - SupportedSensors supportedSensors = SupportedSensors.getInstance(); - List sensor_List = supportedSensors.getSensorList(); - Set sensorSet = new HashSet<>(); - List sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL); - - for (String sen : sensor_List) { - if (sensors.contains(mSensorManager.getDefaultSensor(supportedSensors.getType(sen.toLowerCase())))) { - sensorSet.add(sen); - } - } - - SharedPreferences.Editor editor = this.sensorPreference.edit(); - editor.putStringSet(SupportedSensors.GET_AVAILABLE_SENSORS, sensorSet); - editor.apply(); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/SupportedSensors.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/SupportedSensors.java deleted file mode 100755 index d5113eb334..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/SupportedSensors.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2015, 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.realtimeviewer.sensorlisting; - -import android.hardware.Sensor; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -/** - * Class to store the supported sensorDataMap types. - */ -public class SupportedSensors { - - //For set user selected sensors. Will be used by sensorDataMap reading and dialog - public static String SELECTED_SENSORS = "Selected"; - public static String SELECTED_SENSORS_BY_USER = "userSelection"; - - //For setting the available sensors in the device in dialog and AvailableSensorsInDevice - public static String AVAILABLE_SENSORS = "Sensors"; - public static String GET_AVAILABLE_SENSORS = "getAvailableSensors"; - - public static final int SUPPORTED_SENSOR_COUNT = 10; - private static List sensorList = new ArrayList<>(); - private static HashMap sensorTypeMap = new HashMap<>(); - private static HashMap typeSensorMap = new HashMap<>(); - private static SupportedSensors supportedSensors = new SupportedSensors(); - - private SupportedSensors() { - this.setList(); - this.setSensorTypeMap(); - this.setTypeSensorMap(); - } - - public static SupportedSensors getInstance() { - return supportedSensors; - } - - /** - * Set the supported sensor types by the IOT server. - */ - private void setList() { - sensorList.add("Accelerometer"); - sensorList.add("Magnetometer"); - sensorList.add("Gravity"); - sensorList.add("Rotation Vector"); - sensorList.add("Pressure"); - sensorList.add("Light"); - sensorList.add("Gyroscope"); - sensorList.add("Proximity"); - sensorList.add("Pedometer"); - } - - /** - * Populate the hash map which has Sensor name as the key and the sensor type as the value. - */ - private void setSensorTypeMap() { - sensorTypeMap.put("accelerometer", Sensor.TYPE_ACCELEROMETER); - sensorTypeMap.put("magnetometer", Sensor.TYPE_MAGNETIC_FIELD); - sensorTypeMap.put("gravity", Sensor.TYPE_GRAVITY); - sensorTypeMap.put("rotation vector", Sensor.TYPE_GAME_ROTATION_VECTOR); - sensorTypeMap.put("pressure", Sensor.TYPE_PRESSURE); - sensorTypeMap.put("gyroscope", Sensor.TYPE_GYROSCOPE); - sensorTypeMap.put("light", Sensor.TYPE_LIGHT); - sensorTypeMap.put("proximity", Sensor.TYPE_PROXIMITY); - sensorTypeMap.put("pedometer", Sensor.TYPE_STEP_COUNTER); - } - - /** - * Populates the hash map which has Sensor type as the key and sensor name as the value. - */ - private void setTypeSensorMap() { - typeSensorMap.put(Sensor.TYPE_ACCELEROMETER, "accelerometer"); - typeSensorMap.put(Sensor.TYPE_MAGNETIC_FIELD, "magnetometer"); - typeSensorMap.put(Sensor.TYPE_GRAVITY, "gravity"); - typeSensorMap.put(Sensor.TYPE_GAME_ROTATION_VECTOR, "rotation vector"); - typeSensorMap.put(Sensor.TYPE_PRESSURE, "pressure"); - typeSensorMap.put(Sensor.TYPE_GYROSCOPE, "gyroscope"); - typeSensorMap.put(Sensor.TYPE_LIGHT, "light"); - typeSensorMap.put(Sensor.TYPE_PROXIMITY, "proximity"); - typeSensorMap.put(Sensor.TYPE_STEP_COUNTER, "pedometer"); - } - - /** - * Method to get the supported sensor list. - * - * @return the list of sensors supported by the iot server. - */ - public List getSensorList() { - return sensorList; - } - - - /** - * @param sensor The name of the sensor. - * @return The integer representing the type of the sensor, - */ - public int getType(String sensor) { - return sensorTypeMap.get(sensor); - } - - - /** - * @param type The type of the sensor. - * @return The sensor name related to the given sensor type. - */ - public String getType(int type) { - return typeSensorMap.get(type); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/adaptor/SensorViewAdaptor.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/adaptor/SensorViewAdaptor.java deleted file mode 100755 index c526ab36b8..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/adaptor/SensorViewAdaptor.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2015, 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.realtimeviewer.view.adaptor; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; - -import org.wso2.carbon.iot.android.sense.realtimeviewer.event.realtimesensor.RealTimeSensor; - -import java.util.List; - -import agent.sense.android.iot.carbon.wso2.org.wso2_senseagent.R; - -/** - * Adaptor for populate the ListView. - * Takes list of Sensor readings - */ -public class SensorViewAdaptor extends BaseAdapter { - - private Context context; - private List data; - - public SensorViewAdaptor(Context context, List data) { - this.context = context; - this.data = data; - } - - @Override - public int getCount() { - return data.size(); - } - - @Override - public Object getItem(int position) { - return data.get(position); - } - - @Override - public long getItemId(int position) { - return 0; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder holder; - - LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View view; - - if (convertView == null) { - view = inflater.inflate(R.layout.display_sensor_values, parent, false); - holder = new ViewHolder(); - holder.name = (TextView) view.findViewById(R.id.name); - holder.valuesX = (TextView) view.findViewById(R.id.X); - holder.valuesY = (TextView) view.findViewById(R.id.Y); - holder.valuesZ = (TextView) view.findViewById(R.id.Z); - view.setTag(holder); - } else { - view = convertView; - holder = (ViewHolder) view.getTag(); - } - - RealTimeSensor data = this.data.get(position); - - holder.name.setText(data.getName()); - holder.valuesX.setText(data.getValueX()); - holder.valuesY.setText(data.getValueY()); - holder.valuesZ.setText(data.getValueZ()); - - return view; - } - - private class ViewHolder { - public TextView name; - public TextView valuesX; - public TextView valuesY; - public TextView valuesZ; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/sensor/selector/SelectSensorDialog.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/sensor/selector/SelectSensorDialog.java deleted file mode 100755 index f04463353d..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/sensor/selector/SelectSensorDialog.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (c) 2015, 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.realtimeviewer.view.sensor.selector; - -import android.app.Activity; -import android.app.Dialog; -import android.app.DialogFragment; -import android.content.Context; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.support.v7.app.AlertDialog; -import android.util.Log; - -import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.SupportedSensors; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -/** - * Functionality - *

- * Show the list of available sensors in a list - * Get the user selections - * Put them in to shared preferences - */ -public class SelectSensorDialog extends DialogFragment { - - protected boolean[] selections = new boolean[SupportedSensors.SUPPORTED_SENSOR_COUNT]; - Activity activity; - SensorListListener sensorListListener; - private Set selectedSensorSet = new HashSet<>(); - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setTitle("Select Sensors"); - activity = getActivity(); - - SharedPreferences preferences = getActivity().getSharedPreferences(SupportedSensors.AVAILABLE_SENSORS, Context. - MODE_MULTI_PROCESS); - - Set set = preferences.getStringSet(SupportedSensors.GET_AVAILABLE_SENSORS, null); - final CharSequence[] sequence = getSequence(set); - - final boolean[] pos = new boolean[selections.length]; - final boolean[] neg = new boolean[selections.length]; - - builder.setMultiChoiceItems(sequence, selections, new DialogInterface.OnMultiChoiceClickListener() { - @Override - public void onClick(DialogInterface dialog, int which, boolean isChecked) { - if (isChecked) { - selectedSensorSet.add(sequence[which].toString()); - - pos[which] = true; - } else { - selectedSensorSet.remove(sequence[which].toString()); - neg[which] = true; - } - } - }); - - builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Log.d("Click", "Ok"); - //call sensorDataMap reading class - sensorListListener.onDialogPositiveClick(SelectSensorDialog.this); - } - }); - - builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Log.d("Click", "Cancel"); - for (int i = 0; i < SupportedSensors.SUPPORTED_SENSOR_COUNT; i++) { - - if (pos[i]) - selections[i] = false; - if (neg[i]) - selections[i] = true; - } - } - }); - return builder.create(); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - @Override - public void onDetach() { - super.onDetach(); - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - - try { - sensorListListener = (SensorListListener) getActivity(); - } catch (ClassCastException ex) { - throw new ClassCastException(activity.toString() + " must implement the SensorListener"); - } - } - - @Override - public void onStart() { - super.onStart(); - } - - /** - * Interface to be implemented by the parent - */ - public CharSequence[] getSequence(Set sensorset) { - CharSequence[] seq; - String[] seq2 = sensorset.toArray(new String[sensorset.size()]); - seq = Arrays.copyOf(seq2, seq2.length); - return seq; - } - - public Set getSet() { - return this.selectedSensorSet; - } - - public interface SensorListListener { - void onDialogPositiveClick(SelectSensorDialog dialog); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/IVoiceControl.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/IVoiceControl.java deleted file mode 100755 index 83b702d456..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/IVoiceControl.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.speech.detector; - -/** - * This interface is used to retrieve the voice commands and restart the listenting service - */ -public interface IVoiceControl { - /** - * This will be executed when a voice command was found - * @param voiceCommands - */ - public abstract void processVoiceCommands(String... voiceCommands); - - /** - * This will be executed after a voice command was processed to keep the recognition service activated - */ - public void restartListeningService(); - - public void finish(); -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/WordRecognitionActivity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/WordRecognitionActivity.java deleted file mode 100755 index a3521f9caf..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/WordRecognitionActivity.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * 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.speech.detector; - -import android.content.Intent; -import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.WindowManager; -import android.widget.Button; -import android.widget.EditText; -import android.widget.Toast; - -import org.wso2.carbon.iot.android.sense.constants.SenseConstants; -import org.wso2.carbon.iot.android.sense.realtimeviewer.ActivitySelectSensor; -import org.wso2.carbon.iot.android.sense.speech.detector.util.ListeningActivity; -import org.wso2.carbon.iot.android.sense.speech.detector.util.ProcessWords; -import org.wso2.carbon.iot.android.sense.speech.detector.util.VoiceRecognitionListener; -import org.wso2.carbon.iot.android.sense.speech.detector.util.WordData; -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -import agent.sense.android.iot.carbon.wso2.org.wso2_senseagent.R; - -/** - * This is main activity for word recognition. - */ -public class WordRecognitionActivity extends ListeningActivity { - Button setThreasholdButton; - Button addWordButton; - Button removeWordButton; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_speech_sense_main); - context = getApplicationContext(); // Needs to be set - - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - VoiceRecognitionListener.getInstance().setListener(this); // Here we set the current listener - addListenerOnSetThreasholdButton(); - addListenerOnAddWordButton(); - addListenerOnRemoveWordButton(); - String sessionId = getIntent().getStringExtra("sessionId"); - ProcessWords.setSessionId(sessionId); - FloatingActionButton fbtnSpeechRecongnizer = (FloatingActionButton) findViewById(R.id.sensorChange); - fbtnSpeechRecongnizer.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - WordData wordData = new WordData(ProcessWords.getSessionId(), SenseConstants.EVENT_LISTENER_FINISHED, 1); - SenseDataHolder.getWordDataHolder().add(wordData); - stopListening(); - Intent intent = new Intent(getApplicationContext(), ActivitySelectSensor.class); - startActivity(intent); - } - }); - Long tsLong = System.currentTimeMillis() / 1000; - WordData wordData = new WordData(sessionId, SenseConstants.EVENT_LISTENER_STARTED, 1); - SenseDataHolder.getWordDataHolder().add(wordData); - startListening(); // starts listening - } - - @Override - public void onBackPressed() { - } - - @Override - public void processVoiceCommands(String... voiceCommands) { - if(voiceCommands==null || voiceCommands.length==0){ - return; - } - ProcessWords processWords = new ProcessWords(this); - processWords.execute(voiceCommands); - restartListeningService(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - // getMenuInflater().inflate(R.menu.menu_main, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_deEnroll) { - return true; - } - return super.onOptionsItemSelected(item); - } - - public void addListenerOnSetThreasholdButton() { - setThreasholdButton = (Button) findViewById(R.id.setThreshold); - setThreasholdButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View arg0) { - String thresholdString = ((EditText) findViewById(R.id.editThreashold)).getText().toString(); - try{ - ProcessWords.setThreshold(Integer.parseInt(thresholdString)); - } catch (NumberFormatException e) { - Toast.makeText(WordRecognitionActivity.this, "Invalid Threshold - " + thresholdString, Toast.LENGTH_SHORT).show(); - } - } - }); - } - - public void addListenerOnAddWordButton() { - addWordButton = (Button) findViewById(R.id.addWord); - addWordButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View arg0) { - String word = ((EditText) findViewById(R.id.wordText)).getText().toString(); - ProcessWords.addWord(word); - Toast.makeText(WordRecognitionActivity.this, word + " is added to the list", Toast.LENGTH_SHORT).show(); - } - }); - } - - public void addListenerOnRemoveWordButton() { - removeWordButton = (Button) findViewById(R.id.removeWord); - removeWordButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View arg0) { - String word = ((EditText) findViewById(R.id.wordText)).getText().toString(); - Toast.makeText(WordRecognitionActivity.this, word + " is removed from the list", Toast.LENGTH_SHORT).show(); - ProcessWords.removeWord(word); - } - - }); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ListeningActivity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ListeningActivity.java deleted file mode 100755 index db37583b58..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ListeningActivity.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * 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.speech.detector.util; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.speech.RecognizerIntent; -import android.speech.SpeechRecognizer; -import android.widget.Toast; - -import org.wso2.carbon.iot.android.sense.speech.detector.IVoiceControl; - -/** - * This Activity Contols the Speech Recognizer Activity. - */ -public abstract class ListeningActivity extends Activity implements IVoiceControl { - - protected SpeechRecognizer sr; - protected Context context; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - /** - * Starts the listening service. - */ - protected void startListening() { - initSpeech(); - Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); - intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); - sr.startListening(intent); - } - - /** - * Stop the listening service. - */ - protected void stopListening() { - if (sr != null) { - sr.stopListening(); - sr.cancel(); - sr.destroy(); - } - sr = null; - } - - /** - * Initialize the speech. - */ - protected void initSpeech() { - if (sr == null) { - sr = SpeechRecognizer.createSpeechRecognizer(this); - if (!SpeechRecognizer.isRecognitionAvailable(context)) { - Toast.makeText(context, "Speech Recognition is not available", - Toast.LENGTH_LONG).show(); - finish(); - } - sr.setRecognitionListener(VoiceRecognitionListener.getInstance()); - } - } - - @Override - public void finish() { - stopListening(); - super.finish(); - } - - @Override - protected void onStop() { - stopListening(); - super.onStop(); - } - - @Override - protected void onDestroy() { - if (sr != null) { - sr.stopListening(); - sr.cancel(); - sr.destroy(); - } - super.onDestroy(); - } - - @Override - protected void onPause() { - if(sr!=null){ - sr.stopListening(); - sr.cancel(); - sr.destroy(); - - } - sr = null; - - super.onPause(); - } - - /** - * Is abstract so the inheriting classes need to implement it. Here you put your code which should be executed once - * a command was found - */ - @Override - public abstract void processVoiceCommands(String ... voiceCommands); - - @Override - public void restartListeningService() { - stopListening(); - startListening(); - } -} - - diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ProcessWords.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ProcessWords.java deleted file mode 100755 index cbd1ed2b52..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ProcessWords.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * 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.speech.detector.util; - -import android.app.Activity; -import android.os.AsyncTask; -import android.widget.EditText; - -import org.apache.commons.codec.language.Soundex; -import org.wso2.carbon.iot.android.sense.util.SenseDataHolder; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import org.tartarus.snowball.ext.englishStemmer; - -import agent.sense.android.iot.carbon.wso2.org.wso2_senseagent.R; - -/** - * This class process the words form required words with the recongnized words to check whether it matches with the - * certain threshold. - */ -public class ProcessWords extends AsyncTask { - private static volatile double threshold = 80; - private static volatile Map wordDataMap = new ConcurrentHashMap<>(); - private static String sessionId = "default"; - private static Soundex soundex = new Soundex(); - Activity activity; - - public ProcessWords(Activity activity) { - this.activity = activity; - } - - /** - * Add the list of words which are used for reference. - * @param wordlist that needs to be looked upon in the speech - */ - public static void addWords(List wordlist) { - for (String word : wordlist) { - if (!wordDataMap.keySet().contains(word) && !word.isEmpty()) { - wordDataMap.put(word, new WordData(sessionId, word, 0)); - } - } - } - - /** - * Process the recognized word list. - * @param voiceCommands word lists. - */ - private void processTexts(String... voiceCommands) { - for (String requiredWord : wordDataMap.keySet()) { - int maxOccurunce = 0; - for (String command : voiceCommands) { - int occurence = 0; - for (String word : command.split(" ")) { - if (StringSimilarity.similarity(requiredWord, word) > threshold) { - occurence++; - continue; - } - if (soundex.encode(requiredWord).equals(soundex.encode(word))) { - occurence++; - continue; - } - if (StringSimilarity.similarity(requiredWord, stem(word)) > threshold) { - occurence++; - continue; - } - } - if (maxOccurunce < occurence) { - maxOccurunce = occurence; - } - } - if (maxOccurunce > 0) { - WordData wordData = wordDataMap.get(requiredWord); - wordData.addOccurences(maxOccurunce); - wordDataMap.put(requiredWord, wordData); - } - } - } - - /** - * Check for distance between the referenced and recognized words. - * @param params - * @return - */ - @Override - protected String doInBackground(String... params) { - processTexts(params); - publishProgress(); - return ""; - } - - /** - * update it in the UI. - * @param values words list. - */ - @Override - protected void onProgressUpdate(Void... values) { - super.onProgressUpdate(values); - EditText content = (EditText) activity.findViewById(R.id.command); - String text = ""; - for (String key : ProcessWords.wordDataMap.keySet()) { - text = text + key + " - " + ProcessWords.wordDataMap.get(key).getOccurences() + "\n"; - } - content.setText(text); - EditText thresholdText = (EditText) activity.findViewById(R.id.editThreashold); - thresholdText.setText("" + threshold); - } - - /** - * set the threshold to determine the distance. - * @param threshold to determine the distance. - */ - public static synchronized void setThreshold(int threshold) { - ProcessWords.threshold = threshold; - } - - /** - * - * @param sessionId for each listening session. - */ - public static synchronized void setSessionId(String sessionId) { - ProcessWords.sessionId = sessionId; - } - - /** - * - * retrieve sessionId for each listening session. - */ - public static synchronized String getSessionId() { - return ProcessWords.sessionId; - } - - /** - * @param word that is used for refrerence. - */ - public static synchronized void addWord(String word) { - if (!wordDataMap.keySet().contains(word) && !word.isEmpty()) { - wordDataMap.put(word, new WordData(sessionId, word, 0)); - } - } - - /** - * - * @param word that needs to be removed from the reference list. - */ - public static synchronized void removeWord(String word) { - cleanAndPushToWordMap(); - wordDataMap.remove(word); - } - - /** - * clean in memory content and pubish it to the server. - */ - public static synchronized void cleanAndPushToWordMap() { - for (String word : wordDataMap.keySet()) { - WordData wordData = wordDataMap.get(word); - SenseDataHolder.getWordDataHolder().add(wordData); - wordDataMap.put(word, new WordData(sessionId, word, 0)); - } - } - - /** - * apply porter stem algorithm - * @param word to be stemmed. - * @return - */ - private static String stem(String word) - { - englishStemmer stemmer = new englishStemmer(); - stemmer.setCurrent(word); - boolean result = stemmer.stem(); - if (!result) - { - return word; - } - return stemmer.getCurrent(); - } - - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/StringSimilarity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/StringSimilarity.java deleted file mode 100755 index a44e304f42..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/StringSimilarity.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.speech.detector.util; - -/** - * Calculates the similarity of strings. - */ -public class StringSimilarity { - - /** - * Calculates the similarity (a number within 0 and 1) between two strings. - */ - public static double similarity(String s1, String s2) { - String longer = s1, shorter = s2; - if (s1.length() < s2.length()) { // longer should always have greater length - longer = s2; - shorter = s1; - } - int longerLength = longer.length(); - if (longerLength == 0) { - return 1.0; /* both strings are zero length */ - } - return ((longerLength - editDistance(longer, shorter)) / (double) longerLength) * 100; - } - - // Example implementation of the Levenshtein Edit Distance - // See http://rosettacode.org/wiki/Levenshtein_distance#Java - private static int editDistance(String s1, String s2) { - s1 = s1.toLowerCase(); - s2 = s2.toLowerCase(); - - int[] costs = new int[s2.length() + 1]; - for (int i = 0; i <= s1.length(); i++) { - int lastValue = i; - for (int j = 0; j <= s2.length(); j++) { - if (i == 0) - costs[j] = j; - else { - if (j > 0) { - int newValue = costs[j - 1]; - if (s1.charAt(i - 1) != s2.charAt(j - 1)) - newValue = Math.min(Math.min(newValue, lastValue), - costs[j]) + 1; - costs[j - 1] = lastValue; - lastValue = newValue; - } - } - } - if (i > 0) - costs[s2.length()] = lastValue; - } - return costs[s2.length()]; - } - - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/VoiceRecognitionListener.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/VoiceRecognitionListener.java deleted file mode 100755 index 52ce8d52ff..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/VoiceRecognitionListener.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.speech.detector.util; - -import android.os.Bundle; -import android.speech.RecognitionListener; -import android.speech.SpeechRecognizer; -import org.wso2.carbon.iot.android.sense.speech.detector.IVoiceControl; -import java.util.ArrayList; - -/** - * This triggers android voice recognition listener. - */ -public class VoiceRecognitionListener implements RecognitionListener { - private static VoiceRecognitionListener instance = null; - - IVoiceControl listener; // This is your running activity (we will initialize it later) - - public static VoiceRecognitionListener getInstance() { - if (instance == null) { - instance = new VoiceRecognitionListener(); - } - return instance; - } - - private VoiceRecognitionListener() { } - - public void setListener(IVoiceControl listener) { - this.listener = listener; - } - - public void processVoiceCommands(String... voiceCommands) { - listener.processVoiceCommands(voiceCommands); - } - - // This method will be executed when voice commands were found - public void onResults(Bundle data) { - ArrayList matches = data.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); - String[] commands = new String[matches.size()]; - commands = matches.toArray(commands); - processVoiceCommands(commands); - } - - // User starts speaking - public void onBeginningOfSpeech() { - System.out.println("Starting to listen"); - } - - public void onBufferReceived(byte[] buffer) { } - - // User finished speaking - public void onEndOfSpeech() { - System.out.println("Waiting for result..."); - } - - // If the user said nothing the service will be restarted - public void onError(int error) { - if (listener != null) { - listener.restartListeningService(); - } - } - public void onEvent(int eventType, Bundle params) { } - - public void onPartialResults(Bundle partialResults) { } - - public void onReadyForSpeech(Bundle params) { } - - public void onRmsChanged(float rmsdB) { } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/WordData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/WordData.java deleted file mode 100755 index a112cbd817..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/WordData.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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.speech.detector.util; - -/** - * This defines the data structure of the word data. - */ -public class WordData { - /** - * timestamp for all the occurences - */ - private long timestamp; - private int occurences; - private String word; - private String sessionId; - - public WordData(String sessionId, String word, int occurences) { - this.timestamp = System.currentTimeMillis() / 1000; - this.occurences = occurences; - this.word = word; - this.sessionId = sessionId; - } - - public long getTimestamp() { - return timestamp; - } - - public int getOccurences() { - return occurences; - } - - public String getWord() { - return word; - } - - public String getSessionId() { - return sessionId; - } - - /** - * @param occurences for the word and then add the timestamp for each occurences. - */ - public void addOccurences(int occurences) { - this.occurences = this.occurences + occurences; - this.timestamp = System.currentTimeMillis() / 1000; - } - - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/LocalRegistry.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/LocalRegistry.java deleted file mode 100755 index 8f26a91b99..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/LocalRegistry.java +++ /dev/null @@ -1,270 +0,0 @@ -/* - * 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.util; - -import android.content.Context; -import android.content.SharedPreferences; -import android.util.Log; - -import org.wso2.carbon.iot.android.sense.constants.SenseConstants; -import org.wso2.carbon.iot.android.sense.data.publisher.mqtt.transport.MQTTTransportHandler; - -import java.net.MalformedURLException; -import java.net.URL; - -/** - * This is used to store the values in either in memory or in shared preferences. - */ -public class LocalRegistry { - - private static final String SENSE_SHARED_PREFERENCES = "senseSharedPreferences"; - private static final String USERNAME_KEY = "usernameKey"; - private static final String DEVICE_ID_KEY = "deviceIdKey"; - private static final String SERVER_HOST_KEY = "serverHostKey"; - private static final String ACCESS_TOKEN_KEY = "accessTokenKey"; - private static final String REFRESH_TOKEN_KEY = "refreshTokenKey"; - private static final String MQTT_ENDPOINT_KEY = "mqttEndpointKey"; - private static final String IS_ENROLLED_KEY = "enrolledKey"; - private static final String TENANT_DOMAIN_KEY = "tenantDomainKey"; - private static boolean exists = false; - private static String username; - private static String deviceId; - private static String serverURL; - private static MQTTTransportHandler mqttTransportHandler; - private static String accessToken; - private static String refreshToken; - private static String mqttEndpoint; - private static boolean enrolled; - private static String tenantDomain; - - public static boolean isExist(Context context) { - if (!exists) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - String username = sharedpreferences.getString(USERNAME_KEY, ""); - String deviceId = sharedpreferences.getString(DEVICE_ID_KEY, ""); - exists = (username != null && !username.isEmpty() && deviceId != null && !deviceId.isEmpty()); - } - return exists; - } - - public static void setExist(boolean status) { - exists = status; - } - - - public static void addUsername(Context context, String username) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putString(USERNAME_KEY, username); - editor.commit(); - LocalRegistry.username = username; - } - - public static String getUsername(Context context) { - if (LocalRegistry.username == null || username.isEmpty()) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - LocalRegistry.username = sharedpreferences.getString(USERNAME_KEY, ""); - } - return LocalRegistry.username; - } - - public static void removeUsername(Context context) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.clear(); - editor.remove(USERNAME_KEY); - editor.commit(); - LocalRegistry.username = null; - } - - public static void addDeviceId(Context context, String deviceId) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putString(DEVICE_ID_KEY, deviceId); - editor.commit(); - LocalRegistry.deviceId = deviceId; - } - - public static void removeDeviceId(Context context) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.remove(DEVICE_ID_KEY); - editor.clear(); - editor.commit(); - LocalRegistry.deviceId = null; - } - - public static String getDeviceId(Context context) { - if (LocalRegistry.deviceId == null || LocalRegistry.deviceId.isEmpty()) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - LocalRegistry.deviceId = sharedpreferences.getString(DEVICE_ID_KEY, ""); - } - return LocalRegistry.deviceId; - } - - public static void addServerURL(Context context, String host) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putString(SERVER_HOST_KEY, host); - editor.commit(); - LocalRegistry.serverURL = host; - } - - public static void removeServerURL(Context context) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.remove(SERVER_HOST_KEY); - editor.clear(); - editor.commit(); - LocalRegistry.serverURL = null; - } - - public static String getServerURL(Context context) { - if (LocalRegistry.serverURL == null || LocalRegistry.serverURL.isEmpty()) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - LocalRegistry.serverURL = sharedpreferences.getString(SERVER_HOST_KEY, ""); - } - return LocalRegistry.serverURL; - } - - public static void addAccessToken(Context context, String accessToken) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putString(ACCESS_TOKEN_KEY, accessToken); - editor.commit(); - LocalRegistry.accessToken = accessToken; - } - - public static void removeAccessToken(Context context) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.remove(ACCESS_TOKEN_KEY); - editor.clear(); - editor.commit(); - LocalRegistry.accessToken = null; - } - - public static String getAccessToken(Context context) { - if (LocalRegistry.accessToken == null || LocalRegistry.accessToken.isEmpty()) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - LocalRegistry.accessToken = sharedpreferences.getString(ACCESS_TOKEN_KEY, ""); - } - return LocalRegistry.accessToken; - } - - public static void addRefreshToken(Context context, String refreshToken) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putString(REFRESH_TOKEN_KEY, refreshToken); - editor.commit(); - LocalRegistry.refreshToken = refreshToken; - } - - public static void removeRefreshToken(Context context) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.remove(REFRESH_TOKEN_KEY); - editor.clear(); - editor.commit(); - LocalRegistry.refreshToken = null; - } - - public static String getRefreshToken(Context context) { - if (LocalRegistry.refreshToken == null || LocalRegistry.refreshToken.isEmpty()) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - LocalRegistry.refreshToken = sharedpreferences.getString(REFRESH_TOKEN_KEY, ""); - } - return LocalRegistry.refreshToken; - } - - public static void addMqttEndpoint(Context context, String endpoint) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putString(MQTT_ENDPOINT_KEY, endpoint); - editor.commit(); - LocalRegistry.mqttEndpoint = endpoint; - } - - public static void removeMqttEndpoint(Context context) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.remove(MQTT_ENDPOINT_KEY); - editor.clear(); - editor.commit(); - LocalRegistry.mqttEndpoint = null; - } - - public static String getMqttEndpoint(Context context) { - if (LocalRegistry.mqttEndpoint == null) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - LocalRegistry.mqttEndpoint = sharedpreferences.getString(MQTT_ENDPOINT_KEY, ""); - } - return LocalRegistry.mqttEndpoint; - } - - public static void setEnrolled(Context context, boolean enrolled) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putBoolean(IS_ENROLLED_KEY, enrolled); - editor.commit(); - LocalRegistry.enrolled = enrolled; - } - - public static boolean isEnrolled(Context context) { - if (!LocalRegistry.enrolled) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - return LocalRegistry.enrolled = sharedpreferences.getBoolean(IS_ENROLLED_KEY, false); - } - return LocalRegistry.enrolled; - } - - public static void addTenantDomain(Context context, String tenantDomain) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putString(TENANT_DOMAIN_KEY, tenantDomain); - editor.commit(); - LocalRegistry.tenantDomain = tenantDomain; - } - - public static void removeTenantDomain(Context context) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.remove(TENANT_DOMAIN_KEY); - editor.clear(); - editor.commit(); - LocalRegistry.tenantDomain = null; - } - - public static String getTenantDomain(Context context) { - if (LocalRegistry.tenantDomain == null) { - SharedPreferences sharedpreferences = context.getSharedPreferences(SENSE_SHARED_PREFERENCES, Context.MODE_PRIVATE); - LocalRegistry.tenantDomain = sharedpreferences.getString(TENANT_DOMAIN_KEY, ""); - } - return LocalRegistry.tenantDomain; - } - - public static String getServerHost(Context context) { - - URL url = null; - String urlString = getServerURL(context); - try { - url = new URL(urlString); - return url.getHost(); - } catch (MalformedURLException e) { - Log.e("Host ", "Invalid urlString :" + urlString); - return null; - } - } - -} diff --git a/components/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java deleted file mode 100755 index 2d1cbce9d1..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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.util; - - -import android.content.Context; -import android.os.Build; -import android.util.Log; -import android.widget.Toast; - -import org.wso2.carbon.iot.android.sense.constants.SenseConstants; -import org.wso2.carbon.iot.android.sense.util.dto.RegisterInfo; - -import java.util.Map; -import java.util.concurrent.ExecutionException; -import java.util.logging.Handler; - -/** - * This Client is used for http communication with the server. - */ -public class SenseClient { - private final static String TAG = "SenseService Client"; - - private Context context; - - public SenseClient(Context context) { - this.context = context; - } - - /** - * Enroll the device. - * - * @param username - * @param password - * @param deviceId - * @return - */ - public RegisterInfo register(String username, String password, String deviceId, android.os.Handler mUiHandler) { - Map response = registerWithTimeWait(username, password, deviceId); - String responseStatus = response.get("status"); - RegisterInfo registerInfo = new RegisterInfo(); - if (responseStatus.trim().contains(SenseConstants.Request.REQUEST_SUCCESSFUL)) { - registerInfo.setMsg("Login Successful"); - registerInfo.setIsRegistered(true); - return registerInfo; - } else { - registerInfo.setMsg("Authentication failed, please check your credentials and try again."); - registerInfo.setIsRegistered(false); - return registerInfo; - } - } - - public Map registerWithTimeWait(String username, String password, String deviceId) { - try { - SenseClientAsyncExecutor senseClientAsyncExecutor = new SenseClientAsyncExecutor(context); - String endpoint = LocalRegistry.getServerURL(context); - senseClientAsyncExecutor.execute(username, password, deviceId, endpoint); - Map response = senseClientAsyncExecutor.get(); - if (response != null) { - return response; - } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - Log.e("Send Sensor Data", "Thread Interruption for endpoint " + LocalRegistry.getServerURL(context)); - } catch (ExecutionException e) { - Log.e("Send Sensor Data", "Failed to push data to the endpoint " + LocalRegistry.getServerURL(context)); - } - return null; - } - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClientAsyncExecutor.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClientAsyncExecutor.java deleted file mode 100755 index fbfa0c014e..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClientAsyncExecutor.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * 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.util; - - -import android.content.Context; -import android.os.AsyncTask; -import android.os.Build; -import android.util.Log; - -import org.wso2.carbon.iot.android.sense.constants.SenseConstants; -import org.wso2.carbon.iot.android.sense.util.dto.AccessTokenInfo; -import org.wso2.carbon.iot.android.sense.util.dto.AndroidConfiguration; -import org.wso2.carbon.iot.android.sense.util.dto.AndroidSenseManagerService; -import org.wso2.carbon.iot.android.sense.util.dto.ApiApplicationKey; -import org.wso2.carbon.iot.android.sense.util.dto.ApiApplicationRegistrationService; -import org.wso2.carbon.iot.android.sense.util.dto.ApiRegistrationProfile; -import org.wso2.carbon.iot.android.sense.util.dto.DynamicClientRegistrationService; -import org.wso2.carbon.iot.android.sense.util.dto.OAuthApplicationInfo; -import org.wso2.carbon.iot.android.sense.util.dto.OAuthRequestInterceptor; -import org.wso2.carbon.iot.android.sense.util.dto.RegistrationProfile; -import org.wso2.carbon.iot.android.sense.util.dto.TokenIssuerService; - -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.util.HashMap; -import java.util.Map; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSession; -import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -import feign.Client; -import feign.Feign; -import feign.FeignException; -import feign.auth.BasicAuthRequestInterceptor; -import feign.jackson.JacksonDecoder; -import feign.jackson.JacksonEncoder; -import feign.jaxrs.JAXRSContract; - -public class SenseClientAsyncExecutor extends AsyncTask> { - - private final static String TAG = "SenseService Client"; - private static final String STATUS = "status"; - private final String PASSWORD_GRANT_TYPE = "password"; - private final String SCOPE = "perm:android-sense:enroll"; - private final static String DEVICE_NAME = Build.MANUFACTURER + " " + Build.MODEL; - private Context context; - - public SenseClientAsyncExecutor(Context context) { - this.context = context; - - } - - TrustManager[] trustAllCerts = new TrustManager[]{ - new X509TrustManager() { - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return null; - } - public void checkClientTrusted( - java.security.cert.X509Certificate[] certs, String authType) { - } - public void checkServerTrusted( - java.security.cert.X509Certificate[] certs, String authType) { - } - } - }; - - Client disableHostnameVerification = new Client.Default(getTrustedSSLSocketFactory(), new HostnameVerifier() { - @Override - public boolean verify(String s, SSLSession sslSession) { - return true; - } - }); - - @Override - protected Map doInBackground(String... parameters) { - if (android.os.Debug.isDebuggerConnected()) - android.os.Debug.waitForDebugger(); - String response; - Map response_params = new HashMap<>(); - String username = parameters[0]; - String password = parameters[1]; - String deviceId = parameters[2]; - String endpoint = parameters[3]; - Map responseMap = new HashMap<>(); - responseMap.put(STATUS, "200"); - AccessTokenInfo accessTokenInfo = null; - try { - //ApiApplicationRegistration - ApiApplicationRegistrationService apiApplicationRegistrationService = Feign.builder().client(disableHostnameVerification) - .requestInterceptor(new BasicAuthRequestInterceptor(username, password)) - .contract(new JAXRSContract()).encoder(new JacksonEncoder()).decoder(new JacksonDecoder()) - .target(ApiApplicationRegistrationService.class, endpoint + SenseConstants.API_APPLICATION_REGISTRATION_CONTEXT); - ApiRegistrationProfile apiRegistrationProfile = new ApiRegistrationProfile(); - apiRegistrationProfile.setApplicationName("android_sense_" + deviceId); - apiRegistrationProfile.setIsAllowedToAllDomains(false); - apiRegistrationProfile.setIsMappingAnExistingOAuthApp(false); - apiRegistrationProfile.setTags(new String[]{SenseConstants.DEVICE_TYPE}); - ApiApplicationKey apiApplicationKey = apiApplicationRegistrationService.register(apiRegistrationProfile); - - //PasswordGrantType - TokenIssuerService tokenIssuerService = Feign.builder().client(disableHostnameVerification).requestInterceptor( - new BasicAuthRequestInterceptor(apiApplicationKey.getConsumerKey(), apiApplicationKey.getConsumerSecret())) - .contract(new JAXRSContract()).encoder(new JacksonEncoder()).decoder(new JacksonDecoder()) - .target(TokenIssuerService.class, endpoint); - accessTokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password, "device_" - + deviceId + " " + SCOPE); - - //DeviceRegister - AndroidSenseManagerService androidSenseManagerService = Feign.builder().client(disableHostnameVerification) - .requestInterceptor(new OAuthRequestInterceptor(accessTokenInfo.getAccess_token())) - .contract(new JAXRSContract()).encoder(new JacksonEncoder()).decoder(new JacksonDecoder()) - .target(AndroidSenseManagerService.class, endpoint + SenseConstants.REGISTER_CONTEXT); - AndroidConfiguration androidConfiguration = androidSenseManagerService.register(deviceId, DEVICE_NAME); - if (androidConfiguration != null) { - LocalRegistry.addAccessToken(context, accessTokenInfo.getAccess_token()); - LocalRegistry.addRefreshToken(context, accessTokenInfo.getRefresh_token()); - LocalRegistry.addMqttEndpoint(context, androidConfiguration.getMqttEndpoint()); - LocalRegistry.addTenantDomain(context, androidConfiguration.getTenantDomain()); - } - return responseMap; - } catch (FeignException e) { - responseMap.put(STATUS, "" + e.status()); - return responseMap; - } - } - - private SSLSocketFactory getTrustedSSLSocketFactory() { - try { - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, new java.security.SecureRandom()); - return sc.getSocketFactory(); - } catch (KeyManagementException | NoSuchAlgorithmException e) { - Log.e(SenseClientAsyncExecutor.class.getName(), "Invalid Certificate"); - return null; - } - - } -} diff --git a/components/device-types/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/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java deleted file mode 100755 index 3e2335e91a..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * 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.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; -import org.wso2.carbon.iot.android.sense.event.streams.activity.ActivityData; -import org.wso2.carbon.iot.android.sense.event.streams.application.ApplicationData; -import org.wso2.carbon.iot.android.sense.event.streams.audio.AudioData; -import org.wso2.carbon.iot.android.sense.event.streams.battery.BatteryData; -import org.wso2.carbon.iot.android.sense.event.streams.call.CallData; -import org.wso2.carbon.iot.android.sense.event.streams.data.NetworkData; -import org.wso2.carbon.iot.android.sense.event.streams.screen.ScreenData; -import org.wso2.carbon.iot.android.sense.event.streams.sms.SmsData; -import org.wso2.carbon.iot.android.sense.speech.detector.util.WordData; - -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; - - -/** - * This holds the sensor,battery and location data inmemory. - */ -public class SenseDataHolder { - - private static List sensorDataHolder; - private static List batteryDataHolder; - private static List callDataHolder; - private static List locationDataHolder; - private static List wordDataHolder; - private static List speedDataHolder; - private static List beaconScanedDataHolder; - private static List screenDataHolder; - private static List audioDataHolder; - private static List activityDataHolder; - private static List smsDataHolder; - private static List applicationDataHolder; - private static List networkDataHolder; - //LocationData gps; - - - private static final String TAG = SenseDataHolder.class.getName(); - - - public static List getSensorDataHolder() { - if (sensorDataHolder == null) { - sensorDataHolder = new CopyOnWriteArrayList<>(); - } - return sensorDataHolder; - } - - public static List getBatteryDataHolder() { - if (batteryDataHolder == null) { - batteryDataHolder = new CopyOnWriteArrayList<>(); - } - return batteryDataHolder; - } - - public static List getCallDataHolder() { - if (callDataHolder == null) { - callDataHolder = new CopyOnWriteArrayList<>(); - } - return callDataHolder; - } - - public static List getLocationDataHolder() { - - - if (locationDataHolder == null) { - - locationDataHolder = new CopyOnWriteArrayList<>(); - } - return locationDataHolder; - - } - - public static List getWordDataHolder() { - if (wordDataHolder == null) { - wordDataHolder = new CopyOnWriteArrayList<>(); - } - return wordDataHolder; - } - - public static List getSpeedDataHolder() { - if (speedDataHolder == null) { - speedDataHolder = new CopyOnWriteArrayList<>(); - } - return speedDataHolder; - } - - public static List getBeaconScanedDataHolder() { - if (beaconScanedDataHolder == null) { - beaconScanedDataHolder = new CopyOnWriteArrayList<>(); - } - return beaconScanedDataHolder; - } - - public static List getScreenDataHolder() { - if (screenDataHolder == null) { - screenDataHolder = new CopyOnWriteArrayList<>(); - } - return screenDataHolder; - } - - public static List getAudioDataHolder() { - if (audioDataHolder == null) { - audioDataHolder = new CopyOnWriteArrayList<>(); - } - return audioDataHolder; - } - - public static List getActivityDataHolder() { - if (activityDataHolder == null) { - activityDataHolder = new CopyOnWriteArrayList<>(); - } - return activityDataHolder; - } - - public static List getSmsDataHolder() { - if (smsDataHolder == null) { - smsDataHolder = new CopyOnWriteArrayList<>(); - } - return smsDataHolder; - } - - public static List getApplicationDataHolder() { - if (applicationDataHolder == null) { - applicationDataHolder = new CopyOnWriteArrayList<>(); - } - return applicationDataHolder; - } - - public static List getNetworkDataHolder() { - if (networkDataHolder == null) { - networkDataHolder = new CopyOnWriteArrayList<>(); - } - return networkDataHolder; - } - - public static void resetSensorDataHolder() { - sensorDataHolder = null; - } - - public static void resetBatteryDataHolder() { - batteryDataHolder = null; - } - - public static void resetCallDataHolder() { - callDataHolder = null; - } - - public static void resetLocationDataHolder() { - locationDataHolder = null; - } - - public static void resetWordDataHolder() { - wordDataHolder = null; - } - - public static void resetSpeedDataHolder() { - speedDataHolder = null; - } - - public static void resetBeaconScanedDataHolder() { - beaconScanedDataHolder = null; - } - - public static void resetScreenDataHolder() { - screenDataHolder = null; - } - - public static void resetAudioDataHolder() { - audioDataHolder = null; - } - - public static void resetActivityDataHolder() { - activityDataHolder = null; - } - - public static void resetSmsDataHolder() { - smsDataHolder = null; - } - - public static void resetApplicationDataHolder() { - applicationDataHolder = null; - } - - public static void resetNetworkDataHolder() { - networkDataHolder = null; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataReceiverManager.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataReceiverManager.java deleted file mode 100644 index e74362b4e5..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataReceiverManager.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * 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.util; - -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Bundle; -import android.provider.Telephony; -import android.support.annotation.Nullable; -import android.telephony.TelephonyManager; - -import com.google.android.gms.common.api.GoogleApiClient; -import com.google.android.gms.location.ActivityRecognition; - -import org.wso2.carbon.iot.android.sense.event.streams.activity.ActivityReceiver; -import org.wso2.carbon.iot.android.sense.event.streams.application.ApplicationDataReceiver; -import org.wso2.carbon.iot.android.sense.event.streams.battery.BatteryDataReceiver; -import org.wso2.carbon.iot.android.sense.event.streams.call.CallDataReceiver; -import org.wso2.carbon.iot.android.sense.event.streams.data.NetworkDataReader; -import org.wso2.carbon.iot.android.sense.event.streams.screen.ScreenDataReceiver; -import org.wso2.carbon.iot.android.sense.event.streams.sms.SmsDataReceiver; - -public class SenseDataReceiverManager { - private static BroadcastReceiver batteryDataReceiver; - - private static BroadcastReceiver screenDataReceiver; - - private static BroadcastReceiver callDataReceiver; - - private static GoogleApiClient apiClient; - - private static SmsDataReceiver smsDataReceiver; - - private static ApplicationDataReceiver appDataReceiver; - - private static NetworkDataReader networkDataReader; - - private SenseDataReceiverManager() { - - } - - public static void registerBatteryDataReceiver(Context context) { - if (batteryDataReceiver == null) { - batteryDataReceiver = new BatteryDataReceiver(); - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(Intent.ACTION_BATTERY_LOW); - intentFilter.addAction(Intent.ACTION_BATTERY_OKAY); - intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); - - context.registerReceiver(batteryDataReceiver, intentFilter); - } - } - - public static void unregisterBatteryDataReceiver(Context context) { - if (batteryDataReceiver != null) { - context.unregisterReceiver(batteryDataReceiver); - batteryDataReceiver = null; - } - } - - public static void registerScreenDataReceiver(Context context) { - if (screenDataReceiver == null) { - screenDataReceiver = new ScreenDataReceiver(); - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(Intent.ACTION_SCREEN_ON); - intentFilter.addAction(Intent.ACTION_SCREEN_OFF); - - context.registerReceiver(screenDataReceiver, intentFilter); - } - } - - public static void unregisterScreenDataReceiver(Context context) { - if (screenDataReceiver != null) { - context.unregisterReceiver(screenDataReceiver); - screenDataReceiver = null; - } - } - - public static void registerCallDataReceiver(Context context) { - if (callDataReceiver == null) { - callDataReceiver = new CallDataReceiver(); - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); - intentFilter.addAction(Intent.ACTION_NEW_OUTGOING_CALL); - intentFilter.setPriority(1000); - - context.registerReceiver(callDataReceiver, intentFilter); - } - } - - public static void unregisterCallDataReceiver(Context context) { - if (callDataReceiver != null) { - context.unregisterReceiver(callDataReceiver); - callDataReceiver = null; - } - } - - public static void registerActivityDataReceiver(Context context) { - if (apiClient == null) { - Intent intent = new Intent(context, ActivityReceiver.class); - final PendingIntent pendingIntent = PendingIntent.getService(context, 888971, intent, PendingIntent.FLAG_UPDATE_CURRENT); - apiClient = new GoogleApiClient.Builder(context) - .addApi(ActivityRecognition.API) - .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { - @Override - public void onConnected(@Nullable Bundle bundle) { - ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(apiClient, ActivityReceiver.UPDATE_INTERVAL, pendingIntent); - } - - @Override - public void onConnectionSuspended(int i) { - ActivityRecognition.ActivityRecognitionApi.removeActivityUpdates(apiClient, pendingIntent); - } - }) - .build(); - - apiClient.connect(); - } - } - - public static void unregisterActivityDataReceiver(Context context) { - if (apiClient != null) { - apiClient.disconnect(); - apiClient = null; - } - } - - public static void registerSmsDataReceiver(Context context) { - if (smsDataReceiver == null) { - smsDataReceiver = new SmsDataReceiver(); - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION); - intentFilter.addAction(Telephony.Sms.Intents.SMS_DELIVER_ACTION); - intentFilter.setPriority(1000); - context.registerReceiver(smsDataReceiver, intentFilter); - } - } - - public static void unregisterSmsDataReceiver(Context context) { - if (smsDataReceiver != null) { - context.unregisterReceiver(smsDataReceiver); - smsDataReceiver = null; - } - } - - public static void registerAppDataReceiver(Context context) { - if (appDataReceiver == null) { - appDataReceiver = new ApplicationDataReceiver(); - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); - intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); - context.registerReceiver(appDataReceiver, intentFilter); - } - } - - public static void unregisterAppDataReceiver(Context context) { - if (appDataReceiver != null) { - context.unregisterReceiver(appDataReceiver); - appDataReceiver = null; - } - } - - public static void registerNetworkDataReader(Context context) { - if (networkDataReader == null) { - networkDataReader = new NetworkDataReader(context); - networkDataReader.execute(); - } - } - - public static void unregisterNetworkDataReader() { - if (networkDataReader != null) { - networkDataReader.cancel(true); - } - networkDataReader = null; - } - - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseUtils.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseUtils.java deleted file mode 100755 index 956e780def..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseUtils.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.util; - - -import android.content.ContentResolver; -import android.content.Context; -import android.telephony.TelephonyManager; - -import java.util.UUID; - -public class SenseUtils { - - /** - * this generate the device Id - * - * @param baseContext - * @param contentResolver - * @return - */ - //http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id - public static String generateDeviceId(Context baseContext, ContentResolver contentResolver) { - - final TelephonyManager tm = (TelephonyManager) baseContext.getSystemService(Context.TELEPHONY_SERVICE); - - final String tmDevice, tmSerial, androidId; - tmDevice = String.valueOf(tm.getDeviceId()); - tmSerial = String.valueOf(tm.getSimSerialNumber()); - androidId = String.valueOf(android.provider.Settings.Secure.getString(contentResolver, android.provider.Settings.Secure.ANDROID_ID)); - - UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode()); - return deviceUuid.toString(); - - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseWakeLock.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseWakeLock.java deleted file mode 100755 index 1a6a36bbbe..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseWakeLock.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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.util; - - -import android.content.Context; -import android.os.PowerManager; -import android.util.Log; - -/** - * It doesnt let the phone goto sleep. - */ -public class SenseWakeLock { - - private static PowerManager.WakeLock wakeLock; - private static String TAG = "Wake Lock"; - - public static void acquireWakeLock(Context context) { - Log.i(SenseWakeLock.class.getSimpleName(), "Acquire CPU wakeup lock start"); - if (wakeLock == null) { - Log.i(TAG, "CPU wakeUp log is not null"); - PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); - wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SenseWakeLock"); - } - wakeLock.acquire(); - } - - public static void releaseCPUWakeLock() { - if (wakeLock != null) { - wakeLock.release(); - wakeLock = null; - } - Log.i(TAG, "Release wakeup"); - } - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AccessTokenInfo.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AccessTokenInfo.java deleted file mode 100755 index 6b3400fb5a..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AccessTokenInfo.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.util.dto; - -/** - * This hold access token info that returned from the api call - */ -public class AccessTokenInfo { - public String token_type; - public String expires_in; - public String refresh_token; - public String access_token; - - public String getToken_type() { - return token_type; - } - - public void setToken_type(String token_type) { - this.token_type = token_type; - } - - public String getExpires_in() { - return expires_in; - } - - public void setExpires_in(String expires_in) { - this.expires_in = expires_in; - } - - public String getRefresh_token() { - return refresh_token; - } - - public void setRefresh_token(String refresh_token) { - this.refresh_token = refresh_token; - } - - public String getAccess_token() { - return access_token; - } - - public void setAccess_token(String access_token) { - this.access_token = access_token; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidConfiguration.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidConfiguration.java deleted file mode 100755 index 4ca6bf807a..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidConfiguration.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.util.dto; - -/** - * This holds the required configuration for agent to connect to the server. - */ -public class AndroidConfiguration { - - public String tenantDomain; - public String mqttEndpoint; - - public String getTenantDomain() { - return tenantDomain; - } - - public void setTenantDomain(String tenantDomain) { - this.tenantDomain = tenantDomain; - } - - public String getMqttEndpoint() { - return mqttEndpoint; - } - - public void setMqttEndpoint(String mqttEndpoint) { - this.mqttEndpoint = mqttEndpoint; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidSenseManagerService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidSenseManagerService.java deleted file mode 100755 index 6bdd63c135..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidSenseManagerService.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.util.dto; - -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * This holds the android manager service definition that is used with netflix feign. - */ -public interface AndroidSenseManagerService { - - @Path("/device/{device_id}/register") - @POST - AndroidConfiguration register(@PathParam("device_id") String deviceId, @QueryParam("deviceName") String deviceName); -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationKey.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationKey.java deleted file mode 100644 index e4130755e4..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationKey.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.util.dto; - -/** - * This holds api application consumer key and secret. - */ -public class ApiApplicationKey { - private String client_id; - private String client_secret; - - public String getConsumerKey() { - return this.client_id; - } - - public void setClient_id(String consumerKey) { - this.client_id = consumerKey; - } - - public String getConsumerSecret() { - return this.client_secret; - } - - public void setClient_secret(String consumerSecret) { - this.client_secret = consumerSecret; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationRegistrationService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationRegistrationService.java deleted file mode 100755 index 64d4aa66f9..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationRegistrationService.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.wso2.carbon.iot.android.sense.util.dto; - -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -/** - * This is the application registration service that exposed for apimApplicationRegistration - */ - -@Path("/register") -public interface ApiApplicationRegistrationService { - - /** - * This method is used to register api application - * - * @param registrationProfile contains the necessary attributes that are needed in order to register an app. - */ - @POST - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - ApiApplicationKey register(ApiRegistrationProfile registrationProfile); -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiRegistrationProfile.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiRegistrationProfile.java deleted file mode 100755 index 98db81fb86..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiRegistrationProfile.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.util.dto; - - -/** - * This class represents the data that are required to register - * the oauth application. - */ -public class ApiRegistrationProfile { - - public String applicationName; - public String tags[]; - public boolean isAllowedToAllDomains; - public String consumerKey; - public String consumerSecret; - public boolean isMappingAnExistingOAuthApp; - - public String getApplicationName() { - return applicationName; - } - - public void setApplicationName(String applicationName) { - this.applicationName = applicationName; - } - - public String[] getTags() { - return tags; - } - - public void setTags(String[] tags) { - this.tags = tags; - } - - public boolean isAllowedToAllDomains() { - return isAllowedToAllDomains; - } - - public void setIsAllowedToAllDomains(boolean isAllowedToAllDomains) { - this.isAllowedToAllDomains = isAllowedToAllDomains; - } - - public boolean isMappingAnExistingOAuthApp() { - return isMappingAnExistingOAuthApp; - } - - public void setIsMappingAnExistingOAuthApp(boolean isMappingAnExistingOAuthApp) { - this.isMappingAnExistingOAuthApp = isMappingAnExistingOAuthApp; - } - - public String getConsumerKey() { - return consumerKey; - } - - public void setConsumerKey(String consumerKey) { - this.consumerKey = consumerKey; - } - - public String getConsumerSecret() { - return consumerSecret; - } - - public void setConsumerSecret(String consumerSecret) { - this.consumerSecret = consumerSecret; - } -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/DynamicClientRegistrationService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/DynamicClientRegistrationService.java deleted file mode 100755 index aa409673a8..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/DynamicClientRegistrationService.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.util.dto; - -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -@Path("/register") -public interface DynamicClientRegistrationService { - - /** - * This method is used to register an Oauth application. - * - * @param profile contains the necessary attributes that are - * needed in order to register an app. - * @return Status 200 if success including consumerKey and consumerSecret. - */ - @POST - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - OAuthApplicationInfo register(RegistrationProfile profile); -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthApplicationInfo.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthApplicationInfo.java deleted file mode 100755 index 5ad8541be8..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthApplicationInfo.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.util.dto; - -/** - * This class represents an OAuth application populated with necessary data. - */ -public class OAuthApplicationInfo { - - public String client_id; - public String client_name; - public String callback_url; - public String client_secret; - - public String getClient_id() { - return client_id; - } - - public void setClient_id(String client_id) { - this.client_id = client_id; - } - - public String getClient_name() { - return client_name; - } - - public void setClient_name(String client_name) { - this.client_name = client_name; - } - - public String getCallback_url() { - return callback_url; - } - - public void setCallback_url(String callback_url) { - this.callback_url = callback_url; - } - - public String getClient_secret() { - return client_secret; - } - - public void setClient_secret(String client_secret) { - this.client_secret = client_secret; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthRequestInterceptor.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthRequestInterceptor.java deleted file mode 100755 index b84a1add87..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthRequestInterceptor.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.util.dto; - - -import feign.RequestInterceptor; -import feign.RequestTemplate; - -import static feign.Util.checkNotNull; - -/** - * This is a request interceptor to add oauth token header. - */ -public class OAuthRequestInterceptor implements RequestInterceptor { - - private final String headerValue; - - /** - * Creates an interceptor that authenticates all requests with the specified OAUTH token - * - * @param token the access token to use for authentication - */ - public OAuthRequestInterceptor(String token) { - checkNotNull(token, "access_token"); - headerValue = "Bearer " + token; - } - @Override - public void apply(RequestTemplate template) { - template.header("Authorization", headerValue); - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegisterInfo.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegisterInfo.java deleted file mode 100755 index b3052e4e1c..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegisterInfo.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.util.dto; - -/** - * This holds the data related to registration. - */ -public class RegisterInfo { - - private boolean isRegistered; - private String msg; - - public boolean isRegistered() { - return isRegistered; - } - - public void setIsRegistered(boolean isRegistered) { - this.isRegistered = isRegistered; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegistrationProfile.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegistrationProfile.java deleted file mode 100755 index 046c112a38..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegistrationProfile.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.wso2.carbon.iot.android.sense.util.dto; - - -/** - * This class represents the data that are required to register - * the oauth application. - */ -public class RegistrationProfile { - - public String callbackUrl; - public String clientName; - public String tokenScope; - public String owner; - public String grantType; - public String applicationType; - - private static final String TAG = RegistrationProfile.class.getSimpleName(); - - public String getCallbackUrl() { - return callbackUrl; - } - - public void setCallbackUrl(String callBackUrl) { - this.callbackUrl = callBackUrl; - } - - public String getClientName() { - return clientName; - } - - public void setClientName(String clientName) { - this.clientName = clientName; - } - - public String getTokenScope() { - return tokenScope; - } - - public void setTokenScope(String tokenScope) { - this.tokenScope = tokenScope; - } - - public String getOwner() { - return owner; - } - - public void setOwner(String owner) { - this.owner = owner; - } - - public String getGrantType() { - return grantType; - } - - public void setGrantType(String grantType) { - this.grantType = grantType; - } - - public String getApplicationType() { - return applicationType; - } - - public void setApplicationType(String applicationType) { - this.applicationType = applicationType; - } - -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/TokenIssuerService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/TokenIssuerService.java deleted file mode 100755 index ea2c85cd1c..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/TokenIssuerService.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.util.dto; - -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; - -/** - * This hold the api definition that is used as a contract with netflix feign. - */ -@Path("/token") -public interface TokenIssuerService { - - @POST - @Produces(MediaType.APPLICATION_JSON) - AccessTokenInfo getToken(@QueryParam("grant_type") String grant, @QueryParam("username") String username, - @QueryParam("password") String password, @QueryParam("scope") String scope); - - @POST - @Produces(MediaType.APPLICATION_JSON) - AccessTokenInfo getRefreshToken(@QueryParam("grant_type") String grantType, @QueryParam("refreshToken") String refreshToken); - - -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png deleted file mode 100644 index 1ed9d05d7b5cb4c59384b8bcd8ec2e2f7872cb32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23479 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 OK#`0r3@eC~`2PV>lr1a( diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon_red.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon_red.png deleted file mode 100644 index b86775de6f4e4559926817fd6a67ec74fda0dd14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19250 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

gz%YCiQxXTmn5NU9w;Ao2 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

8wQEx_ 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 z - - - - - - - - - - - - \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/sensor.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/sensor.png deleted file mode 100755 index a73fb4ee5b6f6922420830760ea24bd84c64bcce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13854 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 - - \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png deleted file mode 100755 index b4114a6c19b5c84e6cf46a8d0635788f04eb0c93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30848 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 IaigIB17|baXaE2J diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_activity_select_sensor.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_activity_select_sensor.xml deleted file mode 100755 index 0650eddb59..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_activity_select_sensor.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_beacon_monitoring.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_beacon_monitoring.xml deleted file mode 100644 index 852bc76e9f..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_beacon_monitoring.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml deleted file mode 100755 index b10638db6d..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_register.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_register.xml deleted file mode 100755 index 0409c62b0c..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_register.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - -

-{{#zone "bottomJs"}} - {{js "js/platform-configuration.js"}} -{{/zone}} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.js deleted file mode 100644 index 74111c2448..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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. - */ - -function onRequest(context){ - var viewModel = {}; - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - viewModel["permissions"] = userModule.getUIPermissions(); - return viewModel; -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.json deleted file mode 100644 index fd25901297..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version" : "1.0.0" -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js deleted file mode 100644 index 7c522fe6f3..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js +++ /dev/null @@ -1,124 +0,0 @@ -/* - * 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. - */ - -$(document).ready(function () { - invokerUtil.get( - "/api/device-mgt/android_sense/v1.0/configuration", - function (data) { - data = JSON.parse(data); - if (data && data.configuration) { - for (var i = 0; i < data.configuration.length; i++) { - var config = data.configuration[i]; - if (config.name == "ARDUINO_HTTP_IP") { - $("input#http-endpoint").val(config.value); - } else if (config.name == "ARDUINO_HTTP_PORT") { - $("input#https-endpoint").val(config.value); - } - } - } - }, function (data) { - console.log(data); - }); - -}); - - -// Start of HTML embedded invoke methods -var showAdvanceOperation = function (operation, button) { - $(button).addClass('selected'); - $(button).siblings().removeClass('selected'); - var hiddenOperation = ".wr-hidden-operations-content > div"; - $(hiddenOperation + '[data-operation="' + operation + '"]').show(); - $(hiddenOperation + '[data-operation="' + operation + '"]').siblings().hide(); -}; - -// Start of HTML embedded invoke methods -var addConfiguration = function () { - var errorMsgWrapper = "#android_sense-config-error-msg"; - var errorMsg = "#android_sense-config-error-msg span"; - var addConfigFormData = {}; - var configList = []; - var mqttEp = $("input#mqtt-endpoint").val(); - var mqttConfig = { - "name": "ANDROID_SENSE_MQTT_EP", - "value": String(mqttEp), - "contentType": "text" - }; - - configList.push(mqttConfig); - addConfigFormData.type = "android_sense"; - addConfigFormData.configuration = configList; - - var addConfigAPI = "/api/device-mgt/android_sense/v1.0/configuration"; - invokerUtil.post( - addConfigAPI, - addConfigFormData, - function (data) { - data = JSON.parse(data); - if (data.statusCode == 201) { - $("#config-save-form").addClass("hidden"); - $("#record-created-msg").removeClass("hidden"); - } else if (data == 500) { - $(errorMsg).text("Exception occurred at backend."); - } else if (data == 403) { - $(errorMsg).text("Action was not permitted."); - } else { - $(errorMsg).text("An unexpected error occurred."); - } - - $(errorMsgWrapper).removeClass("hidden"); - }, function (data) { - data = data.status; - if (data == 500) { - $(errorMsg).text("Exception occurred at backend."); - } else if (data == 403) { - $(errorMsg).text("Action was not permitted."); - } else { - $(errorMsg).text("An unexpected error occurred."); - } - $(errorMsgWrapper).removeClass("hidden"); - } - ); -}; - -var artifactUpload = function () { - var contentType = "application/json"; - var backendEndBasePath = "/api/device-mgt/v1.0"; - var urix = backendEndBasePath + "/admin/publish-artifact/deploy/android_sense"; - var defaultStatusClasses = "fw fw-stack-1x"; - var content = $("#androidsense-statistic-response-template").find(".content"); - var title = content.find("#title"); - var statusIcon = content.find("#status-icon"); - var data = {} - invokerUtil.post(urix, data, function (data) { - title.html("Deploying statistic artifacts. Please wait..."); - statusIcon.attr("class", defaultStatusClasses + " fw-check"); - $(modalPopupContent).html(content.html()); - showPopup(); - setTimeout(function () { - hidePopup(); - location.reload(true); - }, 5000); - - }, function (jqXHR) { - title.html("Failed to deploy artifacts, Please contact administrator."); - statusIcon.attr("class", defaultStatusClasses + " fw-error"); - $(modalPopupContent).html(content.html()); - showPopup(); - }, contentType); -}; \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.hbs b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.hbs deleted file mode 100644 index 4f18f97aa1..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.hbs +++ /dev/null @@ -1,70 +0,0 @@ -{{! - 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. -}} -{{unit "cdmf.unit.lib.rickshaw-graph"}} - -{{#zone "topCss"}} - {{css "css/custom.css"}} -{{/zone}} - -
- - {{#each graphData}} -
- {{#each this}} -
-
- -

{{this}}

-
-
-
{{this}}
-
-
-
-
-
Time
-
- - - - - - - - - - - -
-
-
- {{/each}} -
- {{/each}} - -
-
- Realtime Analytics is not available. Failed to connect to the websocket. Please make sure; '$webSocketURL' is available and re-try again. -
- -{{#zone "bottomJs"}} - {{js "js/moment.min.js"}} - {{js "js/socket.io.min.js"}} - {{js "js/device-stats.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js deleted file mode 100644 index 27dd4d4358..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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. - */ - -function onRequest(context) { - var log = new Log("stats.js"); - var carbonServer = require("carbon").server; - var device = context.unit.params.device; - - // graph configuration - var graphData = { - Sensors:["accelerometer","magnetic", "gravity", "pressure", "proximity", "gyroscope"], - Realtime_Data:['battery','light','rotation'] - }; - var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - var constants = require("/app/modules/constants.js"); - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var websocketEndpoint = devicemgtProps["wssURL"].replace("https", "wss"); - var jwtService = carbonServer.osgiService( - 'org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService'); - var jwtClient = jwtService.getJWTClient(); - var encodedClientKeys = session.get(constants["ENCODED_TENANT_BASED_WEB_SOCKET_CLIENT_CREDENTIALS"]); - var token = ""; - var tokenPair = null; - var user = userModule.getCarbonUser(); - var tenantDomain = user.domain; - if (encodedClientKeys) { - var tokenUtil = require("/app/modules/oauth/token-handler-utils.js")["utils"]; - var resp = tokenUtil.decode(encodedClientKeys).split(":"); - if (tenantDomain == "carbon.super") { - tokenPair = jwtClient.getAccessToken(resp[0], resp[1], context.user.username,"default", {}); - if (tokenPair) { - token = tokenPair.accessToken; - } - websocketEndpoint = websocketEndpoint + "/secured-websocket-proxy/org.wso2.iot.android.sense/1.0.0?" + - "deviceId=" + device.deviceIdentifier + "&deviceType=" + device.type + "&websocketToken=" + token; - } else { - tokenPair = jwtClient.getAccessToken(resp[0], resp[1], context.user.username + "@" + tenantDomain,"default", {}); - if (tokenPair) { - token = tokenPair.accessToken; - } - websocketEndpoint = websocketEndpoint + "/secured-websocket-proxy/t/"+tenantDomain+"/org.wso2.iot.android.sense/1.0.0?" + - "deviceId=" + device.deviceIdentifier + "&deviceType=" + device.type + "&websocketToken=" + token; - } - - } - return {"device": device, "websocketEndpoint": websocketEndpoint, "graphData":graphData}; -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.json deleted file mode 100644 index 688e939808..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/css/custom.css b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/css/custom.css deleted file mode 100644 index 0b018a2678..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/css/custom.css +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2017, 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. - */ - -.no-gutters { - margin-right: 0; - margin-left: 0; -} - -.no-gutters > .col, -.no-gutters > [class*="col-"] { - padding-right: 0; - padding-left: 0; -} - -.details-view-toggle-button { - display: inline-block; -} - -.custom_x_axis { - position: static; -} - -.rickshaw_legend { - color: #000000; - background: #FFFFFF; - padding: 1px 2px; -} - -.sensor_graph{ - border:0.5px solid #cecece; - margin-bottom: 30px; - padding: 20px; -} - -.sensor_graph > h3 { - text-transform: capitalize; - margin-top: 5px; -} - -.chartWrapper { - padding-top: 20px; -} - -.col-md-6 { - transition: all 400ms ease; - opacity: 1; -} - -.max{ - width: 100%; -} - -.max_hide{ - display: none; -} \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js deleted file mode 100644 index b7ac7f6926..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright (c) 2017, 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. - */ - -var ws; -var typeId = 3; -var batteryId = 5; - -var accelerometer_xId = 11; -var accelerometer_yId = 12; -var accelerometer_zId = 13; - -var magnetic_xId = 16; -var magnetic_yId = 17; -var magnetic_zId = 18; - -var gyroscope_xId = 19; -var gyroscope_yId = 20; -var gyroscope_zId = 21; - -var lightId = 22; - -var pressureId = 23; - -var proximityId = 24; - -var gravity_xId = 25; -var gravity_yId = 26; -var gravity_zId = 27; - -var rotation_xId = 28; -var rotation_yId = 29; -var rotation_zId = 30; - -var batteryData = []; - -var lightData = []; - -var pressureData = []; - -var proximityData = []; - -var accelerometer_xData = []; -var accelerometer_yData = []; -var accelerometer_zData = []; - -var magnetic_xData = []; -var magnetic_yData = []; -var magnetic_zData = []; - -var gyroscope_xData = []; -var gyroscope_yData = []; -var gyroscope_zData = []; - -var gravity_xData = []; -var gravity_yData = []; -var gravity_zData = []; - -var rotation_xData = []; -var rotation_yData = []; -var rotation_zData = []; - -var graphMap = {}; -var graphSettingsMap = {}; - -var palette = new Rickshaw.Color.Palette({scheme: "munin"}); - -var elemTop; - -$(window).load(function () { - - graphMap["battery"]=lineGraph("battery", batteryData); - graphMap["light"]=lineGraph("light", lightData); - graphMap["pressure"]=lineGraph("pressure", pressureData); - graphMap["proximity"]=lineGraph("proximity", proximityData); - graphMap["accelerometer"]=threeDlineGraph("accelerometer", accelerometer_xData, accelerometer_yData, accelerometer_zData); - graphMap["magnetic"]=threeDlineGraph("magnetic", magnetic_xData, magnetic_yData, magnetic_zData); - graphMap["gyroscope"]=threeDlineGraph("gyroscope", gyroscope_xData, gyroscope_yData, gyroscope_zData); - graphMap["gravity"]=threeDlineGraph("gravity", gravity_xData, gravity_yData, gravity_zData); - graphMap["rotation"]=threeDlineGraph("rotation", rotation_xData, rotation_yData, rotation_zData); - - var websocketUrl = $("#stat-section").data("websocketurl"); - connect(websocketUrl) -}); - -window.onbeforeunload = function() { - disconnect(); -}; - -function threeDlineGraph(type, xChartData, yChartData, zChartData) { - var tNow = new Date().getTime() / 1000; - for (var i = 0; i < 30; i++) { - xChartData.push({ - x: tNow - (30 - i) * 15, - y: parseFloat(0) - }); - yChartData.push({ - x: tNow - (30 - i) * 15, - y: parseFloat(0) - }); - zChartData.push({ - x: tNow - (30 - i) * 15, - y: parseFloat(0) - }); - } - - var $elem = $("#chart-" + type); - - var graph = new Rickshaw.Graph({ - element: $elem[0], - width: $elem.width() - 100, - height: 300, - renderer: "line", - interpolation: "linear", - padding: {top: 0.2, left: 0.0, right: 0.0, bottom: 0.2}, - xScale: d3.time.scale(), - series: [ - {'color': palette.color(), 'data': xChartData, 'name': "x - " + type}, - {'color': palette.color(), 'data': yChartData, 'name': "y - " + type}, - {'color': palette.color(), 'data': zChartData, 'name': "z - " + type} - ] - }); - - var xAxis = new Rickshaw.Graph.Axis.Time({ - graph: graph - }); - - xAxis.render(); - - new Rickshaw.Graph.Axis.Y({ - graph: graph, - orientation: 'left', - height: 300, - tickFormat: Rickshaw.Fixtures.Number.formatKMBT, - element: document.getElementById("y-axis-"+type) - }); - - new Rickshaw.Graph.Legend({ - graph: graph, - element: document.getElementById('legend-' + type) - }); - - var detail = new Rickshaw.Graph.HoverDetail({ - graph: graph - }); - - new Rickshaw.Graph.HoverDetail({ - graph: graph, - formatter: function (series, x, y) { - var date = '' + moment(x * 1000).format('Do MMM YYYY h:mm:ss a') + ''; - var swatch = ''; - return swatch + series.name + ": " + parseInt(y) + '
' + date; - } - }); - - graph.render(); - - return graph; -} - -function lineGraph(type, chartData) { - var tNow = new Date().getTime() / 1000; - for (var i = 0; i < 30; i++) { - chartData.push({ - x: tNow - (30 - i) * 15, - y: parseFloat(0) - }); - } - - var $elem = $("#chart-" + type); - - var graph = new Rickshaw.Graph({ - element: $elem[0], - width: $elem.width() - 100, - height: 300, - renderer: "line", - interpolation: "linear", - padding: {top: 0.2, left: 0.0, right: 0.0, bottom: 0.2}, - xScale: d3.time.scale(), - series: [{ - 'color': palette.color(), - 'data': chartData, - 'name': type - }] - }); - - var xAxis = new Rickshaw.Graph.Axis.Time({ - graph: graph - }); - - xAxis.render(); - - new Rickshaw.Graph.Axis.Y({ - graph: graph, - orientation: 'left', - height: 300, - tickFormat: Rickshaw.Fixtures.Number.formatKMBT, - element: document.getElementById('y-axis-'+type) - }); - - new Rickshaw.Graph.Legend({ - graph: graph, - element: document.getElementById('legend-' + type) - }); - - new Rickshaw.Graph.HoverDetail({ - graph: graph, - formatter: function (series, x, y) { - var date = '' + moment(x * 1000).format('Do MMM YYYY h:mm:ss a') + ''; - var swatch = ''; - return swatch + series.name + ": " + parseInt(y) + '
' + date; - } - }); - - graph.render(); - - return graph; -} - -//websocket connection -function connect(target) { - if ('WebSocket' in window) { - ws = new WebSocket(target); - } else if ('MozWebSocket' in window) { - ws = new MozWebSocket(target); - } else { - console.log('WebSocket is not supported by this browser.'); - } - if (ws) { - ws.onmessage = function (event) { - var dataPoint = JSON.parse(event.data); - if (dataPoint) { - var time = parseInt(dataPoint[4]) / 1000; - switch (dataPoint[typeId]) { - case "battery": - graphUpdate(batteryData, time, dataPoint[batteryId]); - graphMap["battery"].update(); - break; - - case "light": - graphUpdate(lightData, time, dataPoint[lightId]); - graphMap["light"].update(); - break; - - case "pressure": - graphUpdate(pressureData, time, dataPoint[pressureId]); - graphMap["pressure"].update(); - break; - - case "proximity": - graphUpdate(proximityData, time, dataPoint[proximityId]); - graphMap["proximity"].update(); - break; - - case "accelerometer": - graphUpdate(accelerometer_xData, time, dataPoint[accelerometer_xId]); - graphUpdate(accelerometer_yData, time, dataPoint[accelerometer_yId]); - graphUpdate(accelerometer_zData, time, dataPoint[accelerometer_zId]); - graphMap["accelerometer"].update(); - break; - - case "magnetic": - graphUpdate(magnetic_xData, time, dataPoint[magnetic_xId]); - graphUpdate(magnetic_yData, time, dataPoint[magnetic_yId]); - graphUpdate(magnetic_zData, time, dataPoint[magnetic_zId]); - graphMap["magnetic"].update(); - break; - - case "gyroscope": - graphUpdate(gyroscope_xData, time, dataPoint[gyroscope_xId]); - graphUpdate(gyroscope_yData, time, dataPoint[gyroscope_yId]); - graphUpdate(gyroscope_zData, time, dataPoint[gyroscope_zId]); - graphMap["gyroscope"].update(); - break; - - case "rotation": - graphUpdate(magnetic_xData, time, dataPoint[rotation_xId]); - graphUpdate(magnetic_yData, time, dataPoint[rotation_yId]); - graphUpdate(magnetic_zData, time, dataPoint[rotation_zId]); - graphMap["rotation"].update(); - break; - - case "gravity": - graphUpdate(gravity_xData, time, dataPoint[gravity_xId]); - graphUpdate(gravity_yData, time, dataPoint[gravity_yId]); - graphUpdate(gravity_zData, time, dataPoint[gravity_zId]); - graphMap["gravity"].update(); - break; - } - } - }; - ws.onerror = function (event) { - var websocketURL = event.currentTarget.url; - websocketURL = websocketURL.replace("wss://","https://"); - var uriParts = websocketURL.split("/"); - websocketURL = uriParts[0] + "//" + uriParts[2]; - var errorMsg = $("#websocker-onerror").html(); - errorMsg = errorMsg.replace(new RegExp('\\$webSocketURL', 'g'), websocketURL); - $("#stat-section").html("
" + errorMsg + "
"); - }; - } -} - -function graphUpdate(chartData, xValue, yValue) { - chartData.push({ - x: parseInt(xValue), - y: parseFloat(yValue) - }); - chartData.shift(); -} - -function disconnect() { - if (ws != null) { - ws.close(); - ws = null; - } -} - -function maximizeGraph(graph, width,height){ - graphSettingsMap[graph.element.id] = {'width': graph.width, 'height': graph.height}; - graph.configure({ - width: width*2, - height: height*2 - - }); - graph.update(); -} - -function minimizeGraph(graph){ - var graphSettings = graphSettingsMap[graph.element.id]; - graph.configure({ - width: graphSettings.width, - height: graphSettings.height - }); - graph.update(); -} - -//maximize minimize functionality -$(".fw-expand").click(function(e) { - var innerGraph= graphMap[e.target.nextElementSibling.innerHTML]; - var width = $(".chartWrapper").width(); - var height = $(".chartWrapper").height(); - - if($(this).hasClass("default-view")){ - elemTop = $('#'+innerGraph.element.id).parents('.graph')[0].offsetTop; - $(this).removeClass("default-view"); - $(this).removeClass("fw-expand"); - $(this).addClass("fw-contract"); - maximizeGraph(innerGraph,width,height); - $(this).parent().parent().addClass("max"); - $(this).closest(".graph").siblings().addClass("max_hide"); - $(this).closest(".graph").parent().siblings().addClass("max_hide"); - }else{ - $(this).addClass("default-view"); - $(this).addClass("fw-expand"); - $(this).removeClass("fw-contract"); - minimizeGraph(innerGraph); - $(this).parent().parent().removeClass("max"); - $(this).closest(".graph").siblings().removeClass("max_hide"); - $(this).closest(".graph").parent().siblings().removeClass("max_hide"); - focusToArea() - } -}); - -//graph focusing function -function focusToArea(){ - var container = $("body"); - container.animate({ - scrollTop: elemTop - }); -} diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/moment.min.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/moment.min.js deleted file mode 100644 index 78e5aaadc7..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/moment.min.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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. - */ - -//! moment.js -//! version : 2.10.2 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return Ac.apply(null,arguments)}function b(a){Ac=a}function c(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function d(a){return"[object Array]"===Object.prototype.toString.call(a)}function e(a){return"[object Date]"===Object.prototype.toString.call(a)||a instanceof Date}function f(a,b){var c,d=[];for(c=0;c0)for(c in Cc)d=Cc[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function m(b){l(this,b),this._d=new Date(+b._d),Dc===!1&&(Dc=!0,a.updateOffset(this),Dc=!1)}function n(a){return a instanceof m||null!=a&&g(a,"_isAMomentObject")}function o(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function p(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&o(a[d])!==o(b[d]))&&g++;return g+f}function q(){}function r(a){return a?a.toLowerCase().replace("_","-"):a}function s(a){for(var b,c,d,e,f=0;f0;){if(d=t(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&p(e,c,!0)>=b-1)break;b--}f++}return null}function t(a){var b=null;if(!Ec[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Bc._abbr,require("./locale/"+a),u(b)}catch(c){}return Ec[a]}function u(a,b){var c;return a&&(c="undefined"==typeof b?w(a):v(a,b),c&&(Bc=c)),Bc._abbr}function v(a,b){return null!==b?(b.abbr=a,Ec[a]||(Ec[a]=new q),Ec[a].set(b),u(a),Ec[a]):(delete Ec[a],null)}function w(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Bc;if(!d(a)){if(b=t(a))return b;a=[a]}return s(a)}function x(a,b){var c=a.toLowerCase();Fc[c]=Fc[c+"s"]=Fc[b]=a}function y(a){return"string"==typeof a?Fc[a]||Fc[a.toLowerCase()]:void 0}function z(a){var b,c,d={};for(c in a)g(a,c)&&(b=y(c),b&&(d[b]=a[c]));return d}function A(b,c){return function(d){return null!=d?(C(this,b,d),a.updateOffset(this,c),this):B(this,b)}}function B(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function C(a,b,c){return a._d["set"+(a._isUTC?"UTC":"")+b](c)}function D(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else if(a=y(a),"function"==typeof this[a])return this[a](b);return this}function E(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.lengthb;b++)d[b]=Jc[d[b]]?Jc[d[b]]:G(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function I(a,b){return a.isValid()?(b=J(b,a.localeData()),Ic[b]||(Ic[b]=H(b)),Ic[b](a)):a.localeData().invalidDate()}function J(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Hc.lastIndex=0;d>=0&&Hc.test(a);)a=a.replace(Hc,c),Hc.lastIndex=0,d-=1;return a}function K(a,b,c){Yc[a]="function"==typeof b?b:function(a){return a&&c?c:b}}function L(a,b){return g(Yc,a)?Yc[a](b._strict,b._locale):new RegExp(M(a))}function M(a){return a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function N(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),"number"==typeof b&&(d=function(a,c){c[b]=o(a)}),c=0;cd;d++){if(e=i([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function U(a,b){var c;return"string"==typeof b&&(b=a.localeData().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),Q(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function V(b){return null!=b?(U(this,b),a.updateOffset(this,!0),this):B(this,"Month")}function W(){return Q(this.year(),this.month())}function X(a){var b,c=a._a;return c&&-2===a._pf.overflow&&(b=c[_c]<0||c[_c]>11?_c:c[ad]<1||c[ad]>Q(c[$c],c[_c])?ad:c[bd]<0||c[bd]>24||24===c[bd]&&(0!==c[cd]||0!==c[dd]||0!==c[ed])?bd:c[cd]<0||c[cd]>59?cd:c[dd]<0||c[dd]>59?dd:c[ed]<0||c[ed]>999?ed:-1,a._pf._overflowDayOfYear&&($c>b||b>ad)&&(b=ad),a._pf.overflow=b),a}function Y(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function Z(a,b){var c=!0;return h(function(){return c&&(Y(a),c=!1),b.apply(this,arguments)},b)}function $(a,b){hd[a]||(Y(b),hd[a]=!0)}function _(a){var b,c,d=a._i,e=id.exec(d);if(e){for(a._pf.iso=!0,b=0,c=jd.length;c>b;b++)if(jd[b][1].exec(d)){a._f=jd[b][0]+(e[6]||" ");break}for(b=0,c=kd.length;c>b;b++)if(kd[b][1].exec(d)){a._f+=kd[b][0];break}d.match(Vc)&&(a._f+="Z"),sa(a)}else a._isValid=!1}function aa(b){var c=ld.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(_(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function ba(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function ca(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function da(a){return ea(a)?366:365}function ea(a){return a%4===0&&a%100!==0||a%400===0}function fa(){return ea(this.year())}function ga(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=za(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function ha(a){return ga(a,this._week.dow,this._week.doy).week}function ia(){return this._week.dow}function ja(){return this._week.doy}function ka(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function la(a){var b=ga(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function ma(a,b,c,d,e){var f,g,h=ca(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:da(a-1)+g}}function na(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function oa(a,b,c){return null!=a?a:null!=b?b:c}function pa(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function qa(a){var b,c,d,e,f=[];if(!a._d){for(d=pa(a),a._w&&null==a._a[ad]&&null==a._a[_c]&&ra(a),a._dayOfYear&&(e=oa(a._a[$c],d[$c]),a._dayOfYear>da(e)&&(a._pf._overflowDayOfYear=!0),c=ca(e,0,a._dayOfYear),a._a[_c]=c.getUTCMonth(),a._a[ad]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[bd]&&0===a._a[cd]&&0===a._a[dd]&&0===a._a[ed]&&(a._nextDay=!0,a._a[bd]=0),a._d=(a._useUTC?ca:ba).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[bd]=24)}}function ra(a){var b,c,d,e,f,g,h;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=oa(b.GG,a._a[$c],ga(za(),1,4).year),d=oa(b.W,1),e=oa(b.E,1)):(f=a._locale._week.dow,g=a._locale._week.doy,c=oa(b.gg,a._a[$c],ga(za(),f,g).year),d=oa(b.w,1),null!=b.d?(e=b.d,f>e&&++d):e=null!=b.e?b.e+f:f),h=ma(c,d,e,g,f),a._a[$c]=h.year,a._dayOfYear=h.dayOfYear}function sa(b){if(b._f===a.ISO_8601)return void _(b);b._a=[],b._pf.empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=J(b._f,b._locale).match(Gc)||[],c=0;c0&&b._pf.unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),Jc[f]?(d?b._pf.empty=!1:b._pf.unusedTokens.push(f),P(f,d,b)):b._strict&&!d&&b._pf.unusedTokens.push(f);b._pf.charsLeftOver=i-j,h.length>0&&b._pf.unusedInput.push(h),b._pf.bigHour===!0&&b._a[bd]<=12&&(b._pf.bigHour=void 0),b._a[bd]=ta(b._locale,b._a[bd],b._meridiem),qa(b),X(b)}function ta(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function ua(a){var b,d,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;fg)&&(e=g,d=b));h(a,d||b)}function va(a){if(!a._d){var b=z(a._i);a._a=[b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],qa(a)}}function wa(a){var b,c=a._i,e=a._f;return a._locale=a._locale||w(a._l),null===c||void 0===e&&""===c?k({nullInput:!0}):("string"==typeof c&&(a._i=c=a._locale.preparse(c)),n(c)?new m(X(c)):(d(e)?ua(a):e?sa(a):xa(a),b=new m(X(a)),b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b))}function xa(b){var c=b._i;void 0===c?b._d=new Date:e(c)?b._d=new Date(+c):"string"==typeof c?aa(b):d(c)?(b._a=f(c.slice(0),function(a){return parseInt(a,10)}),qa(b)):"object"==typeof c?va(b):"number"==typeof c?b._d=new Date(c):a.createFromInputFallback(b)}function ya(a,b,d,e,f){var g={};return"boolean"==typeof d&&(e=d,d=void 0),g._isAMomentObject=!0,g._useUTC=g._isUTC=f,g._l=d,g._i=a,g._f=b,g._strict=e,g._pf=c(),wa(g)}function za(a,b,c,d){return ya(a,b,c,d,!1)}function Aa(a,b){var c,e;if(1===b.length&&d(b[0])&&(b=b[0]),!b.length)return za();for(c=b[0],e=1;ea&&(a=-a,c="-"),c+E(~~(a/60),2)+b+E(~~a%60,2)})}function Ga(a){var b=(a||"").match(Vc)||[],c=b[b.length-1]||[],d=(c+"").match(qd)||["-",0,0],e=+(60*d[1])+o(d[2]);return"+"===d[0]?e:-e}function Ha(b,c){var d,f;return c._isUTC?(d=c.clone(),f=(n(b)||e(b)?+b:+za(b))-+d,d._d.setTime(+d._d+f),a.updateOffset(d,!1),d):za(b).local();return c._isUTC?za(b).zone(c._offset||0):za(b).local()}function Ia(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Ja(b,c){var d,e=this._offset||0;return null!=b?("string"==typeof b&&(b=Ga(b)),Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Ia(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?Za(this,Ua(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Ia(this)}function Ka(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function La(a){return this.utcOffset(0,a)}function Ma(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Ia(this),"m")),this}function Na(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Ga(this._i)),this}function Oa(a){return a=a?za(a).utcOffset():0,(this.utcOffset()-a)%60===0}function Pa(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Qa(){if(this._a){var a=this._isUTC?i(this._a):za(this._a);return this.isValid()&&p(this._a,a.toArray())>0}return!1}function Ra(){return!this._isUTC}function Sa(){return this._isUTC}function Ta(){return this._isUTC&&0===this._offset}function Ua(a,b){var c,d,e,f=a,h=null;return Ea(a)?f={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(f={},b?f[b]=a:f.milliseconds=a):(h=rd.exec(a))?(c="-"===h[1]?-1:1,f={y:0,d:o(h[ad])*c,h:o(h[bd])*c,m:o(h[cd])*c,s:o(h[dd])*c,ms:o(h[ed])*c}):(h=sd.exec(a))?(c="-"===h[1]?-1:1,f={y:Va(h[2],c),M:Va(h[3],c),d:Va(h[4],c),h:Va(h[5],c),m:Va(h[6],c),s:Va(h[7],c),w:Va(h[8],c)}):null==f?f={}:"object"==typeof f&&("from"in f||"to"in f)&&(e=Xa(za(f.from),za(f.to)),f={},f.ms=e.milliseconds,f.M=e.months),d=new Da(f),Ea(a)&&g(a,"_locale")&&(d._locale=a._locale),d}function Va(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function Wa(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Xa(a,b){var c;return b=Ha(b,a),a.isBefore(b)?c=Wa(a,b):(c=Wa(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function Ya(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||($(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Ua(c,d),Za(this,e,a),this}}function Za(b,c,d,e){var f=c._milliseconds,g=c._days,h=c._months;e=null==e?!0:e,f&&b._d.setTime(+b._d+f*d),g&&C(b,"Date",B(b,"Date")+g*d),h&&U(b,B(b,"Month")+h*d),e&&a.updateOffset(b,g||h)}function $a(a){var b=a||za(),c=Ha(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this,za(b)))}function _a(){return new m(this)}function ab(a,b){var c;return b=y("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=n(a)?a:za(a),+this>+a):(c=n(a)?+a:+za(a),c<+this.clone().startOf(b))}function bb(a,b){var c;return b=y("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=n(a)?a:za(a),+a>+this):(c=n(a)?+a:+za(a),+this.clone().endOf(b)a?Math.ceil(a):Math.floor(a)}function fb(a,b,c){var d,e,f=Ha(a,this),g=6e4*(f.utcOffset()-this.utcOffset());return b=y(b),"year"===b||"month"===b||"quarter"===b?(e=gb(this,f),"quarter"===b?e/=3:"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:eb(e)}function gb(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)}function hb(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ib(){var a=this.clone().utc();return 0b;b++)if(this._weekdaysParse[b]||(c=za([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b}function Jb(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Eb(a,this.localeData()),this.add(a-b,"d")):b}function Kb(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Lb(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)}function Mb(a,b){F(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Nb(a,b){return b._meridiemParse}function Ob(a){return"p"===(a+"").toLowerCase().charAt(0)}function Pb(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Qb(a){F(0,[a,3],0,"millisecond")}function Rb(){return this._isUTC?"UTC":""}function Sb(){return this._isUTC?"Coordinated Universal Time":""}function Tb(a){return za(1e3*a)}function Ub(){return za.apply(null,arguments).parseZone()}function Vb(a,b,c){var d=this._calendar[a];return"function"==typeof d?d.call(b,c):d}function Wb(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b}function Xb(){return this._invalidDate}function Yb(a){return this._ordinal.replace("%d",a)}function Zb(a){return a}function $b(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)}function _b(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)}function ac(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function bc(a,b,c,d){var e=w(),f=i().set(d,b);return e[c](f,a)}function cc(a,b,c,d,e){if("number"==typeof a&&(b=a,a=void 0),a=a||"",null!=b)return bc(a,b,c,e);var f,g=[];for(f=0;d>f;f++)g[f]=bc(a,f,c,e);return g}function dc(a,b){return cc(a,b,"months",12,"month")}function ec(a,b){return cc(a,b,"monthsShort",12,"month")}function fc(a,b){return cc(a,b,"weekdays",7,"day")}function gc(a,b){return cc(a,b,"weekdaysShort",7,"day")}function hc(a,b){return cc(a,b,"weekdaysMin",7,"day")}function ic(){var a=this._data;return this._milliseconds=Od(this._milliseconds),this._days=Od(this._days),this._months=Od(this._months),a.milliseconds=Od(a.milliseconds),a.seconds=Od(a.seconds),a.minutes=Od(a.minutes),a.hours=Od(a.hours),a.months=Od(a.months),a.years=Od(a.years),this}function jc(a,b,c,d){var e=Ua(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function kc(a,b){return jc(this,a,b,1)}function lc(a,b){return jc(this,a,b,-1)}function mc(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;return g.milliseconds=d%1e3,a=eb(d/1e3),g.seconds=a%60,b=eb(a/60),g.minutes=b%60,c=eb(b/60),g.hours=c%24,e+=eb(c/24),h=eb(nc(e)),e-=eb(oc(h)),f+=eb(e/30),e%=30,h+=eb(f/12),f%=12,g.days=e,g.months=f,g.years=h,this}function nc(a){return 400*a/146097}function oc(a){return 146097*a/400}function pc(a){var b,c,d=this._milliseconds;if(a=y(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+12*nc(b),"month"===a?c:c/12;switch(b=this._days+Math.round(oc(this._months/12)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 24*b*60+d/6e4;case"second":return 24*b*60*60+d/1e3;case"millisecond":return Math.floor(24*b*60*60*1e3)+d;default:throw new Error("Unknown unit "+a)}}function qc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*o(this._months/12)}function rc(a){return function(){return this.as(a)}}function sc(a){return a=y(a),this[a+"s"]()}function tc(a){return function(){return this._data[a]}}function uc(){return eb(this.days()/7)}function vc(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function wc(a,b,c){var d=Ua(a).abs(),e=ce(d.as("s")),f=ce(d.as("m")),g=ce(d.as("h")),h=ce(d.as("d")),i=ce(d.as("M")),j=ce(d.as("y")),k=e0,k[4]=c,vc.apply(null,k)}function xc(a,b){return void 0===de[a]?!1:void 0===b?de[a]:(de[a]=b,!0)}function yc(a){var b=this.localeData(),c=wc(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function zc(){var a=ee(this.years()),b=ee(this.months()),c=ee(this.days()),d=ee(this.hours()),e=ee(this.minutes()),f=ee(this.seconds()+this.milliseconds()/1e3),g=this.asSeconds();return g?(0>g?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"}var Ac,Bc,Cc=a.momentProperties=[],Dc=!1,Ec={},Fc={},Gc=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,Hc=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ic={},Jc={},Kc=/\d/,Lc=/\d\d/,Mc=/\d{3}/,Nc=/\d{4}/,Oc=/[+-]?\d{6}/,Pc=/\d\d?/,Qc=/\d{1,3}/,Rc=/\d{1,4}/,Sc=/[+-]?\d{1,6}/,Tc=/\d+/,Uc=/[+-]?\d+/,Vc=/Z|[+-]\d\d:?\d\d/gi,Wc=/[+-]?\d+(\.\d{1,3})?/,Xc=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Yc={},Zc={},$c=0,_c=1,ad=2,bd=3,cd=4,dd=5,ed=6;F("M",["MM",2],"Mo",function(){return this.month()+1}),F("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),F("MMMM",0,0,function(a){return this.localeData().months(this,a)}),x("month","M"),K("M",Pc),K("MM",Pc,Lc),K("MMM",Xc),K("MMMM",Xc),N(["M","MM"],function(a,b){b[_c]=o(a)-1}),N(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[_c]=e:c._pf.invalidMonth=a});var fd="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),gd="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),hd={};a.suppressDeprecationWarnings=!1;var id=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,jd=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],kd=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],ld=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=Z("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),F(0,["YY",2],0,function(){return this.year()%100}),F(0,["YYYY",4],0,"year"),F(0,["YYYYY",5],0,"year"),F(0,["YYYYYY",6,!0],0,"year"),x("year","y"),K("Y",Uc),K("YY",Pc,Lc),K("YYYY",Rc,Nc),K("YYYYY",Sc,Oc),K("YYYYYY",Sc,Oc),N(["YYYY","YYYYY","YYYYYY"],$c),N("YY",function(b,c){c[$c]=a.parseTwoDigitYear(b)}),a.parseTwoDigitYear=function(a){return o(a)+(o(a)>68?1900:2e3)};var md=A("FullYear",!1);F("w",["ww",2],"wo","week"),F("W",["WW",2],"Wo","isoWeek"),x("week","w"),x("isoWeek","W"),K("w",Pc),K("ww",Pc,Lc),K("W",Pc),K("WW",Pc,Lc),O(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=o(a)});var nd={dow:0,doy:6};F("DDD",["DDDD",3],"DDDo","dayOfYear"),x("dayOfYear","DDD"),K("DDD",Qc),K("DDDD",Mc),N(["DDD","DDDD"],function(a,b,c){c._dayOfYear=o(a)}),a.ISO_8601=function(){};var od=Z("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var a=za.apply(null,arguments);return this>a?this:a}),pd=Z("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var a=za.apply(null,arguments);return a>this?this:a});Fa("Z",":"),Fa("ZZ",""),K("Z",Vc),K("ZZ",Vc),N(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ga(a)});var qd=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var rd=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,sd=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ua.fn=Da.prototype;var td=Ya(1,"add"),ud=Ya(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var vd=Z("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});F(0,["gg",2],0,function(){return this.weekYear()%100}),F(0,["GG",2],0,function(){return this.isoWeekYear()%100}),xb("gggg","weekYear"),xb("ggggg","weekYear"),xb("GGGG","isoWeekYear"),xb("GGGGG","isoWeekYear"),x("weekYear","gg"),x("isoWeekYear","GG"),K("G",Uc),K("g",Uc),K("GG",Pc,Lc),K("gg",Pc,Lc),K("GGGG",Rc,Nc),K("gggg",Rc,Nc),K("GGGGG",Sc,Oc),K("ggggg",Sc,Oc),O(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=o(a)}),O(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),F("Q",0,0,"quarter"),x("quarter","Q"),K("Q",Kc),N("Q",function(a,b){b[_c]=3*(o(a)-1)}),F("D",["DD",2],"Do","date"),x("date","D"),K("D",Pc),K("DD",Pc,Lc),K("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),N(["D","DD"],ad),N("Do",function(a,b){b[ad]=o(a.match(Pc)[0],10)});var wd=A("Date",!0);F("d",0,"do","day"),F("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),F("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),F("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),F("e",0,0,"weekday"),F("E",0,0,"isoWeekday"),x("day","d"),x("weekday","e"),x("isoWeekday","E"),K("d",Pc),K("e",Pc),K("E",Pc),K("dd",Xc),K("ddd",Xc),K("dddd",Xc),O(["dd","ddd","dddd"],function(a,b,c){var d=c._locale.weekdaysParse(a);null!=d?b.d=d:c._pf.invalidWeekday=a}),O(["d","e","E"],function(a,b,c,d){b[d]=o(a)});var xd="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),yd="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),zd="Su_Mo_Tu_We_Th_Fr_Sa".split("_");F("H",["HH",2],0,"hour"),F("h",["hh",2],0,function(){return this.hours()%12||12}),Mb("a",!0),Mb("A",!1),x("hour","h"),K("a",Nb),K("A",Nb),K("H",Pc),K("h",Pc),K("HH",Pc,Lc),K("hh",Pc,Lc),N(["H","HH"],bd),N(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),N(["h","hh"],function(a,b,c){b[bd]=o(a),c._pf.bigHour=!0});var Ad=/[ap]\.?m?\.?/i,Bd=A("Hours",!0);F("m",["mm",2],0,"minute"),x("minute","m"),K("m",Pc),K("mm",Pc,Lc),N(["m","mm"],cd);var Cd=A("Minutes",!1);F("s",["ss",2],0,"second"),x("second","s"),K("s",Pc),K("ss",Pc,Lc),N(["s","ss"],dd);var Dd=A("Seconds",!1);F("S",0,0,function(){return~~(this.millisecond()/100)}),F(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Qb("SSS"),Qb("SSSS"),x("millisecond","ms"),K("S",Qc,Kc),K("SS",Qc,Lc),K("SSS",Qc,Mc),K("SSSS",Tc),N(["S","SS","SSS","SSSS"],function(a,b){b[ed]=o(1e3*("0."+a))});var Ed=A("Milliseconds",!1);F("z",0,0,"zoneAbbr"),F("zz",0,0,"zoneName");var Fd=m.prototype;Fd.add=td,Fd.calendar=$a,Fd.clone=_a,Fd.diff=fb,Fd.endOf=pb,Fd.format=jb,Fd.from=kb,Fd.fromNow=lb,Fd.get=D,Fd.invalidAt=wb,Fd.isAfter=ab,Fd.isBefore=bb,Fd.isBetween=cb,Fd.isSame=db,Fd.isValid=ub,Fd.lang=vd,Fd.locale=mb,Fd.localeData=nb,Fd.max=pd,Fd.min=od,Fd.parsingFlags=vb,Fd.set=D,Fd.startOf=ob,Fd.subtract=ud,Fd.toArray=tb,Fd.toDate=sb,Fd.toISOString=ib,Fd.toJSON=ib,Fd.toString=hb,Fd.unix=rb,Fd.valueOf=qb,Fd.year=md,Fd.isLeapYear=fa,Fd.weekYear=zb,Fd.isoWeekYear=Ab,Fd.quarter=Fd.quarters=Db,Fd.month=V,Fd.daysInMonth=W,Fd.week=Fd.weeks=ka,Fd.isoWeek=Fd.isoWeeks=la,Fd.weeksInYear=Cb,Fd.isoWeeksInYear=Bb,Fd.date=wd,Fd.day=Fd.days=Jb,Fd.weekday=Kb,Fd.isoWeekday=Lb,Fd.dayOfYear=na,Fd.hour=Fd.hours=Bd,Fd.minute=Fd.minutes=Cd,Fd.second=Fd.seconds=Dd,Fd.millisecond=Fd.milliseconds=Ed,Fd.utcOffset=Ja,Fd.utc=La,Fd.local=Ma,Fd.parseZone=Na,Fd.hasAlignedHourOffset=Oa,Fd.isDST=Pa,Fd.isDSTShifted=Qa,Fd.isLocal=Ra,Fd.isUtcOffset=Sa,Fd.isUtc=Ta,Fd.isUTC=Ta,Fd.zoneAbbr=Rb,Fd.zoneName=Sb,Fd.dates=Z("dates accessor is deprecated. Use date instead.",wd),Fd.months=Z("months accessor is deprecated. Use month instead",V),Fd.years=Z("years accessor is deprecated. Use year instead",md),Fd.zone=Z("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ka);var Gd=Fd,Hd={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Id={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},Jd="Invalid date",Kd="%d",Ld=/\d{1,2}/,Md={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Nd=q.prototype;Nd._calendar=Hd,Nd.calendar=Vb,Nd._longDateFormat=Id,Nd.longDateFormat=Wb,Nd._invalidDate=Jd,Nd.invalidDate=Xb,Nd._ordinal=Kd,Nd.ordinal=Yb,Nd._ordinalParse=Ld, -Nd.preparse=Zb,Nd.postformat=Zb,Nd._relativeTime=Md,Nd.relativeTime=$b,Nd.pastFuture=_b,Nd.set=ac,Nd.months=R,Nd._months=fd,Nd.monthsShort=S,Nd._monthsShort=gd,Nd.monthsParse=T,Nd.week=ha,Nd._week=nd,Nd.firstDayOfYear=ja,Nd.firstDayOfWeek=ia,Nd.weekdays=Fb,Nd._weekdays=xd,Nd.weekdaysMin=Hb,Nd._weekdaysMin=zd,Nd.weekdaysShort=Gb,Nd._weekdaysShort=yd,Nd.weekdaysParse=Ib,Nd.isPM=Ob,Nd._meridiemParse=Ad,Nd.meridiem=Pb,u("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===o(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=Z("moment.lang is deprecated. Use moment.locale instead.",u),a.langData=Z("moment.langData is deprecated. Use moment.localeData instead.",w);var Od=Math.abs,Pd=rc("ms"),Qd=rc("s"),Rd=rc("m"),Sd=rc("h"),Td=rc("d"),Ud=rc("w"),Vd=rc("M"),Wd=rc("y"),Xd=tc("milliseconds"),Yd=tc("seconds"),Zd=tc("minutes"),$d=tc("hours"),_d=tc("days"),ae=tc("months"),be=tc("years"),ce=Math.round,de={s:45,m:45,h:22,d:26,M:11},ee=Math.abs,fe=Da.prototype;fe.abs=ic,fe.add=kc,fe.subtract=lc,fe.as=pc,fe.asMilliseconds=Pd,fe.asSeconds=Qd,fe.asMinutes=Rd,fe.asHours=Sd,fe.asDays=Td,fe.asWeeks=Ud,fe.asMonths=Vd,fe.asYears=Wd,fe.valueOf=qc,fe._bubble=mc,fe.get=sc,fe.milliseconds=Xd,fe.seconds=Yd,fe.minutes=Zd,fe.hours=$d,fe.days=_d,fe.weeks=uc,fe.months=ae,fe.years=be,fe.humanize=yc,fe.toISOString=zc,fe.toString=zc,fe.toJSON=zc,fe.locale=mb,fe.localeData=nb,fe.toIsoString=Z("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",zc),fe.lang=vd,F("X",0,0,"unix"),F("x",0,0,"valueOf"),K("x",Uc),K("X",Wc),N("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),N("x",function(a,b,c){c._d=new Date(o(a))}),a.version="2.10.2",b(za),a.fn=Gd,a.min=Ba,a.max=Ca,a.utc=i,a.unix=Tb,a.months=dc,a.isDate=e,a.locale=u,a.invalid=k,a.duration=Ua,a.isMoment=n,a.weekdays=fc,a.parseZone=Ub,a.localeData=w,a.isDuration=Ea,a.monthsShort=ec,a.weekdaysMin=hc,a.defineLocale=v,a.weekdaysShort=gc,a.normalizeUnits=y,a.relativeTimeThreshold=xc;var ge=a;return ge}); \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/socket.io.min.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/socket.io.min.js deleted file mode 100644 index 7e870c9864..0000000000 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/socket.io.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! Socket.IO.min.js build:0.9.16, production. Copyright(c) 2011 LearnBoost MIT Licensed */ -var io="undefined"==typeof module?{}:module.exports;(function(){(function(a,b){var c=a;c.version="0.9.16",c.protocol=1,c.transports=[],c.j=[],c.sockets={},c.connect=function(a,d){var e=c.util.parseUri(a),f,g;b&&b.location&&(e.protocol=e.protocol||b.location.protocol.slice(0,-1),e.host=e.host||(b.document?b.document.domain:b.location.hostname),e.port=e.port||b.location.port),f=c.util.uniqueUri(e);var h={host:e.host,secure:"https"==e.protocol,port:e.port||("https"==e.protocol?443:80),query:e.query||""};c.util.merge(h,d);if(h["force new connection"]||!c.sockets[f])g=new c.Socket(h);return!h["force new connection"]&&g&&(c.sockets[f]=g),g=g||c.sockets[f],g.of(e.path.length>1?e.path:"")}})("object"==typeof module?module.exports:this.io={},this),function(a,b){var c=a.util={},d=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,e=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];c.parseUri=function(a){var b=d.exec(a||""),c={},f=14;while(f--)c[e[f]]=b[f]||"";return c},c.uniqueUri=function(a){var c=a.protocol,d=a.host,e=a.port;return"document"in b?(d=d||document.domain,e=e||(c=="https"&&document.location.protocol!=="https:"?443:document.location.port)):(d=d||"localhost",!e&&c=="https"&&(e=443)),(c||"http")+"://"+d+":"+(e||80)},c.query=function(a,b){var d=c.chunkQuery(a||""),e=[];c.merge(d,c.chunkQuery(b||""));for(var f in d)d.hasOwnProperty(f)&&e.push(f+"="+d[f]);return e.length?"?"+e.join("&"):""},c.chunkQuery=function(a){var b={},c=a.split("&"),d=0,e=c.length,f;for(;db.length?a:b,f=a.length>b.length?b:a;for(var g=0,h=f.length;g0&&a.splice(0,1)[0]!=c.transport.name);a.length?h(a):c.publish("connect_failed")}}},c.options["connect timeout"]))})}c.sessionid=d,c.closeTimeout=f*1e3,c.heartbeatTimeout=e*1e3,c.transports||(c.transports=c.origTransports=g?b.util.intersect(g.split(","),c.options.transports):c.options.transports),c.setHeartbeatTimeout(),h(c.transports),c.once("connect",function(){clearTimeout(c.connectTimeoutTimer),a&&typeof a=="function"&&a()})}),this},d.prototype.setHeartbeatTimeout=function(){clearTimeout(this.heartbeatTimeoutTimer);if(this.transport&&!this.transport.heartbeats())return;var a=this;this.heartbeatTimeoutTimer=setTimeout(function(){a.transport.onClose()},this.heartbeatTimeout)},d.prototype.packet=function(a){return this.connected&&!this.doBuffer?this.transport.packet(a):this.buffer.push(a),this},d.prototype.setBuffer=function(a){this.doBuffer=a,!a&&this.connected&&this.buffer.length&&(this.options.manualFlush||this.flushBuffer())},d.prototype.flushBuffer=function(){this.transport.payload(this.buffer),this.buffer=[]},d.prototype.disconnect=function(){if(this.connected||this.connecting)this.open&&this.of("").packet({type:"disconnect"}),this.onDisconnect("booted");return this},d.prototype.disconnectSync=function(){var a=b.util.request(),c=["http"+(this.options.secure?"s":"")+":/",this.options.host+":"+this.options.port,this.options.resource,b.protocol,"",this.sessionid].join("/")+"/?disconnect=1";a.open("GET",c,!1),a.send(null),this.onDisconnect("booted")},d.prototype.isXDomain=function(){var a=c.location.port||("https:"==c.location.protocol?443:80);return this.options.host!==c.location.hostname||this.options.port!=a},d.prototype.onConnect=function(){this.connected||(this.connected=!0,this.connecting=!1,this.doBuffer||this.setBuffer(!1),this.emit("connect"))},d.prototype.onOpen=function(){this.open=!0},d.prototype.onClose=function(){this.open=!1,clearTimeout(this.heartbeatTimeoutTimer)},d.prototype.onPacket=function(a){this.of(a.endpoint).onPacket(a)},d.prototype.onError=function(a){a&&a.advice&&a.advice==="reconnect"&&(this.connected||this.connecting)&&(this.disconnect(),this.options.reconnect&&this.reconnect()),this.publish("error",a&&a.reason?a.reason:a)},d.prototype.onDisconnect=function(a){var b=this.connected,c=this.connecting;this.connected=!1,this.connecting=!1,this.open=!1;if(b||c)this.transport.close(),this.transport.clearTimeouts(),b&&(this.publish("disconnect",a),"booted"!=a&&this.options.reconnect&&!this.reconnecting&&this.reconnect())},d.prototype.reconnect=function(){function e(){if(a.connected){for(var b in a.namespaces)a.namespaces.hasOwnProperty(b)&&""!==b&&a.namespaces[b].packet({type:"connect"});a.publish("reconnect",a.transport.name,a.reconnectionAttempts)}clearTimeout(a.reconnectionTimer),a.removeListener("connect_failed",f),a.removeListener("connect",f),a.reconnecting=!1,delete a.reconnectionAttempts,delete a.reconnectionDelay,delete a.reconnectionTimer,delete a.redoTransports,a.options["try multiple transports"]=c}function f(){if(!a.reconnecting)return;if(a.connected)return e();if(a.connecting&&a.reconnecting)return a.reconnectionTimer=setTimeout(f,1e3);a.reconnectionAttempts++>=b?a.redoTransports?(a.publish("reconnect_failed"),e()):(a.on("connect_failed",f),a.options["try multiple transports"]=!0,a.transports=a.origTransports,a.transport=a.getTransport(),a.redoTransports=!0,a.connect()):(a.reconnectionDelay=10:!1},c.xdomainCheck=function(){return!0},typeof window!="undefined"&&(WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=!0),b.transports.push("flashsocket")}("undefined"!=typeof io?io.Transport:module.exports,"undefined"!=typeof io?io:module.parent.exports);if("undefined"!=typeof window)var swfobject=function(){function A(){if(t)return;try{var a=i.getElementsByTagName("body")[0].appendChild(Q("span"));a.parentNode.removeChild(a)}catch(b){return}t=!0;var c=l.length;for(var d=0;d0)for(var c=0;c0){var g=P(d);if(g)if(S(m[c].swfVersion)&&!(y.wk&&y.wk<312))U(d,!0),e&&(f.success=!0,f.ref=G(d),e(f));else if(m[c].expressInstall&&H()){var h={};h.data=m[c].expressInstall,h.width=g.getAttribute("width")||"0",h.height=g.getAttribute("height")||"0",g.getAttribute("class")&&(h.styleclass=g.getAttribute("class")),g.getAttribute("align")&&(h.align=g.getAttribute("align"));var i={},j=g.getElementsByTagName("param"),k=j.length;for(var l=0;l');h.outerHTML='"+k+"",n[n.length]=c.id,g=P(c.id)}else{var m=Q(b);m.setAttribute("type",e);for(var o in c)c[o]!=Object.prototype[o]&&(o.toLowerCase()=="styleclass"?m.setAttribute("class",c[o]):o.toLowerCase()!="classid"&&m.setAttribute(o,c[o]));for(var p in d)d[p]!=Object.prototype[p]&&p.toLowerCase()!="movie"&&M(m,p,d[p]);h.parentNode.replaceChild(m,h),g=m}}return g}function M(a,b,c){var d=Q("param");d.setAttribute("name",b),d.setAttribute("value",c),a.appendChild(d)}function N(a){var b=P(a);b&&b.nodeName=="OBJECT"&&(y.ie&&y.win?(b.style.display="none",function(){b.readyState==4?O(a):setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function O(a){var b=P(a);if(b){for(var c in b)typeof b[c]=="function"&&(b[c]=null);b.parentNode.removeChild(b)}}function P(a){var b=null;try{b=i.getElementById(a)}catch(c){}return b}function Q(a){return i.createElement(a)}function R(a,b,c){a.attachEvent(b,c),o[o.length]=[a,b,c]}function S(a){var b=y.pv,c=a.split(".");return c[0]=parseInt(c[0],10),c[1]=parseInt(c[1],10)||0,c[2]=parseInt(c[2],10)||0,b[0]>c[0]||b[0]==c[0]&&b[1]>c[1]||b[0]==c[0]&&b[1]==c[1]&&b[2]>=c[2]?!0:!1}function T(c,d,e,f){if(y.ie&&y.mac)return;var g=i.getElementsByTagName("head")[0];if(!g)return;var h=e&&typeof e=="string"?e:"screen";f&&(v=null,w=null);if(!v||w!=h){var j=Q("style");j.setAttribute("type","text/css"),j.setAttribute("media",h),v=g.appendChild(j),y.ie&&y.win&&typeof i.styleSheets!=a&&i.styleSheets.length>0&&(v=i.styleSheets[i.styleSheets.length-1]),w=h}y.ie&&y.win?v&&typeof v.addRule==b&&v.addRule(c,d):v&&typeof i.createTextNode!=a&&v.appendChild(i.createTextNode(c+" {"+d+"}"))}function U(a,b){if(!x)return;var c=b?"visible":"hidden";t&&P(a)?P(a).style.visibility=c:T("#"+a,"visibility:"+c)}function V(b){var c=/[\\\"<>\.;]/,d=c.exec(b)!=null;return d&&typeof encodeURIComponent!=a?encodeURIComponent(b):b}var a="undefined",b="object",c="Shockwave Flash",d="ShockwaveFlash.ShockwaveFlash",e="application/x-shockwave-flash",f="SWFObjectExprInst",g="onreadystatechange",h=window,i=document,j=navigator,k=!1,l=[D],m=[],n=[],o=[],p,q,r,s,t=!1,u=!1,v,w,x=!0,y=function(){var f=typeof i.getElementById!=a&&typeof i.getElementsByTagName!=a&&typeof i.createElement!=a,g=j.userAgent.toLowerCase(),l=j.platform.toLowerCase(),m=l?/win/.test(l):/win/.test(g),n=l?/mac/.test(l):/mac/.test(g),o=/webkit/.test(g)?parseFloat(g.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,p=!1,q=[0,0,0],r=null;if(typeof j.plugins!=a&&typeof j.plugins[c]==b)r=j.plugins[c].description,r&&(typeof j.mimeTypes==a||!j.mimeTypes[e]||!!j.mimeTypes[e].enabledPlugin)&&(k=!0,p=!1,r=r.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),q[0]=parseInt(r.replace(/^(.*)\..*$/,"$1"),10),q[1]=parseInt(r.replace(/^.*\.(.*)\s.*$/,"$1"),10),q[2]=/[a-zA-Z]/.test(r)?parseInt(r.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0);else if(typeof h[["Active"].concat("Object").join("X")]!=a)try{var s=new(window[["Active"].concat("Object").join("X")])(d);s&&(r=s.GetVariable("$version"),r&&(p=!0,r=r.split(" ")[1].split(","),q=[parseInt(r[0],10),parseInt(r[1],10),parseInt(r[2],10)]))}catch(t){}return{w3:f,pv:q,wk:o,ie:p,win:m,mac:n}}(),z=function(){if(!y.w3)return;(typeof i.readyState!=a&&i.readyState=="complete"||typeof i.readyState==a&&(i.getElementsByTagName("body")[0]||i.body))&&A(),t||(typeof i.addEventListener!=a&&i.addEventListener("DOMContentLoaded",A,!1),y.ie&&y.win&&(i.attachEvent(g,function(){i.readyState=="complete"&&(i.detachEvent(g,arguments.callee),A())}),h==top&&function(){if(t)return;try{i.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}A()}()),y.wk&&function(){if(t)return;if(!/loaded|complete/.test(i.readyState)){setTimeout(arguments.callee,0);return}A()}(),C(A))}(),W=function(){y.ie&&y.win&&window.attachEvent("onunload",function(){var a=o.length;for(var b=0;b= 10.0.0 is required.");return}location.protocol=="file:"&&a.error("WARNING: web-socket-js doesn't work in file:///... URL unless you set Flash Security Settings properly. Open the page via Web server i.e. http://..."),WebSocket=function(a,b,c,d,e){var f=this;f.__id=WebSocket.__nextId++,WebSocket.__instances[f.__id]=f,f.readyState=WebSocket.CONNECTING,f.bufferedAmount=0,f.__events={},b?typeof b=="string"&&(b=[b]):b=[],setTimeout(function(){WebSocket.__addTask(function(){WebSocket.__flash.create(f.__id,a,b,c||null,d||0,e||null)})},0)},WebSocket.prototype.send=function(a){if(this.readyState==WebSocket.CONNECTING)throw"INVALID_STATE_ERR: Web Socket connection has not been established";var b=WebSocket.__flash.send(this.__id,encodeURIComponent(a));return b<0?!0:(this.bufferedAmount+=b,!1)},WebSocket.prototype.close=function(){if(this.readyState==WebSocket.CLOSED||this.readyState==WebSocket.CLOSING)return;this.readyState=WebSocket.CLOSING,WebSocket.__flash.close(this.__id)},WebSocket.prototype.addEventListener=function(a,b,c){a in this.__events||(this.__events[a]=[]),this.__events[a].push(b)},WebSocket.prototype.removeEventListener=function(a,b,c){if(!(a in this.__events))return;var d=this.__events[a];for(var e=d.length-1;e>=0;--e)if(d[e]===b){d.splice(e,1);break}},WebSocket.prototype.dispatchEvent=function(a){var b=this.__events[a.type]||[];for(var c=0;c"),this.doc.close(),this.doc.parentWindow.s=this;var a=this.doc.createElement("div");a.className="socketio",this.doc.body.appendChild(a),this.iframe=this.doc.createElement("iframe"),a.appendChild(this.iframe);var c=this,d=b.util.query(this.socket.options.query,"t="+ +(new Date));this.iframe.src=this.prepareUrl()+d,b.util.on(window,"unload",function(){c.destroy()})},c.prototype._=function(a,b){a=a.replace(/\\\//g,"/"),this.onData(a);try{var c=b.getElementsByTagName("script")[0];c.parentNode.removeChild(c)}catch(d){}},c.prototype.destroy=function(){if(this.iframe){try{this.iframe.src="about:blank"}catch(a){}this.doc=null,this.iframe.parentNode.removeChild(this.iframe),this.iframe=null,CollectGarbage()}},c.prototype.close=function(){return this.destroy(),b.Transport.XHR.prototype.close.call(this)},c.check=function(a){if(typeof window!="undefined"&&["Active"].concat("Object").join("X")in window)try{var c=new(window[["Active"].concat("Object").join("X")])("htmlfile");return c&&b.Transport.XHR.check(a)}catch(d){}return!1},c.xdomainCheck=function(){return!1},b.transports.push("htmlfile")}("undefined"!=typeof io?io.Transport:module.exports,"undefined"!=typeof io?io:module.parent.exports),function(a,b,c){function d(){b.Transport.XHR.apply(this,arguments)}function e(){}a["xhr-polling"]=d,b.util.inherit(d,b.Transport.XHR),b.util.merge(d,b.Transport.XHR),d.prototype.name="xhr-polling",d.prototype.heartbeats=function(){return!1},d.prototype.open=function(){var a=this;return b.Transport.XHR.prototype.open.call(a),!1},d.prototype.get=function(){function b(){this.readyState==4&&(this.onreadystatechange=e,this.status==200?(a.onData(this.responseText),a.get()):a.onClose())}function d(){this.onload=e,this.onerror=e,a.retryCounter=1,a.onData(this.responseText),a.get()}function f(){a.retryCounter++,!a.retryCounter||a.retryCounter>3?a.onClose():a.get()}if(!this.isOpen)return;var a=this;this.xhr=this.request(),c.XDomainRequest&&this.xhr instanceof XDomainRequest?(this.xhr.onload=d,this.xhr.onerror=f):this.xhr.onreadystatechange=b,this.xhr.send(null)},d.prototype.onClose=function(){b.Transport.XHR.prototype.onClose.call(this);if(this.xhr){this.xhr.onreadystatechange=this.xhr.onload=this.xhr.onerror=e;try{this.xhr.abort()}catch(a){}this.xhr=null}},d.prototype.ready=function(a,c){var d=this;b.util.defer(function(){c.call(d)})},b.transports.push("xhr-polling")}("undefined"!=typeof io?io.Transport:module.exports,"undefined"!=typeof io?io:module.parent.exports,this),function(a,b,c){function e(a){b.Transport["xhr-polling"].apply(this,arguments),this.index=b.j.length;var c=this;b.j.push(function(a){c._(a)})}var d=c.document&&"MozAppearance"in c.document.documentElement.style;a["jsonp-polling"]=e,b.util.inherit(e,b.Transport["xhr-polling"]),e.prototype.name="jsonp-polling",e.prototype.post=function(a){function i(){j(),c.socket.setBuffer(!1)}function j(){c.iframe&&c.form.removeChild(c.iframe);try{h=document.createElement('