From ac4e96dd6fe1391af5fd395379d266d202e57d1a Mon Sep 17 00:00:00 2001 From: "huayong.xu" Date: Tue, 21 Feb 2023 15:04:18 +0800 Subject: [PATCH] Implement Sensor using NUI Xaml. --- Mobile/NUI/Sensor/.gitignore | 261 +++++++++++++++++ Mobile/NUI/Sensor/LICENSE | 201 +++++++++++++ Mobile/NUI/Sensor/README.md | 25 ++ .../Screenshots/Tizen/Accelerometer.png | Bin 0 -> 44312 bytes Mobile/NUI/Sensor/Screenshots/Tizen/Main.png | Bin 0 -> 40568 bytes Mobile/NUI/Sensor/src/Sensor.sln | 25 ++ .../src/Sensor/Sensor.Tizen.Mobile/Log.cs | 75 +++++ .../Sensor.Tizen.Mobile/PrivacyChecker.cs | 57 ++++ .../Sensor - Backup.Tizen.Mobile.csproj | 168 +++++++++++ .../Sensor.Tizen.Mobile.cs | 59 ++++ .../Sensor.Tizen.Mobile.csproj | 169 +++++++++++ .../Sensor/Sensor.Tizen.Mobile/Sensor/ILog.cs | 53 ++++ .../Sensor/ISensorAdapter.cs | 44 +++ .../Sensor/ISensorManager.cs | 54 ++++ .../Sensor/Models/AccelerometerViewModel.cs | 71 +++++ .../FaceDownGestureDetectorViewModel.cs | 47 +++ .../Sensor/Models/GravitySensorViewModel.cs | 71 +++++ .../GyroscopeRotationVectorSensorViewModel.cs | 82 ++++++ .../Sensor/Models/GyroscopeViewModel.cs | 71 +++++ .../Models/HeartRateMonitorViewModel.cs | 49 ++++ .../Sensor/Models/HumiditySensorViewModel.cs | 49 ++++ .../InVehicleActivityDetectorViewModel.cs | 50 ++++ .../Sensor/Models/LightSensorViewModel.cs | 49 ++++ .../LinearAccelerationSensorViewModel.cs | 72 +++++ ...gnetometerRotationVectorSensorViewModel.cs | 82 ++++++ .../Sensor/Models/MagnetometerViewModel.cs | 71 +++++ .../Models/OrientationSensorViewModel.cs | 71 +++++ .../Sensor/Models/PedometerViewModel.cs | 116 ++++++++ .../Models/PickUpGestureDetectorViewModel.cs | 50 ++++ .../Sensor/Models/PressureSensorViewModel.cs | 49 ++++ .../Sensor/Models/ProximitySensorViewModel.cs | 50 ++++ .../Models/RotationVectorSensorViewModel.cs | 82 ++++++ .../RunningActivityDetectorViewModel.cs | 50 ++++ .../Sensor/Models/SleepMonitorViewModel.cs | 50 ++++ .../StationaryActivityDetectorViewModel.cs | 50 ++++ .../Models/TemperatureSensorViewModel.cs | 49 ++++ .../Models/UltravioletSensorViewModel.cs | 49 ++++ .../Models/UncalibratedGyroscopeViewModel.cs | 71 +++++ .../UncalibratedMagnetometerViewModel.cs | 71 +++++ .../WalkingActivityDetectorViewModel.cs | 50 ++++ .../Models/WristUpGestureDetectorViewModel.cs | 50 ++++ .../Sensor/Pages/SensorMain.xaml | 58 ++++ .../Sensor/Pages/SensorMain.xaml.cs | 270 ++++++++++++++++++ .../Sensor/Pages/SensorManager.cs | 225 +++++++++++++++ .../Pages/Sensors/AccelerometerPage.xaml | 113 ++++++++ .../Pages/Sensors/AccelerometerPage.xaml.cs | 93 ++++++ .../Sensors/FaceDownGestureDetectorPage.xaml | 87 ++++++ .../FaceDownGestureDetectorPage.xaml.cs | 92 ++++++ .../Pages/Sensors/GravitySensorPage.xaml | 109 +++++++ .../Pages/Sensors/GravitySensorPage.xaml.cs | 92 ++++++ .../Sensor/Pages/Sensors/GyroscopePage.xaml | 111 +++++++ .../Pages/Sensors/GyroscopePage.xaml.cs | 94 ++++++ .../GyroscopeRotationVectorSensorPage.xaml | 120 ++++++++ .../GyroscopeRotationVectorSensorPage.xaml.cs | 95 ++++++ .../Pages/Sensors/HeartRateMonitorPage.xaml | 90 ++++++ .../Sensors/HeartRateMonitorPage.xaml.cs | 108 +++++++ .../Pages/Sensors/HumiditySensorPage.xaml | 87 ++++++ .../Pages/Sensors/HumiditySensorPage.xaml.cs | 92 ++++++ .../InVehicleActivityDetectorPage.xaml | 88 ++++++ .../InVehicleActivityDetectorPage.xaml.cs | 93 ++++++ .../Sensor/Pages/Sensors/LightSensorPage.xaml | 88 ++++++ .../Pages/Sensors/LightSensorPage.xaml.cs | 92 ++++++ .../Sensors/LinearAccelerationSensorPage.xaml | 109 +++++++ .../LinearAccelerationSensorPage.xaml.cs | 95 ++++++ .../Pages/Sensors/MagnetometerPage.xaml | 109 +++++++ .../Pages/Sensors/MagnetometerPage.xaml.cs | 94 ++++++ .../MagnetometerRotationVectorSensorPage.xaml | 120 ++++++++ ...gnetometerRotationVectorSensorPage.xaml.cs | 95 ++++++ .../Pages/Sensors/OrientationSensorPage.xaml | 109 +++++++ .../Sensors/OrientationSensorPage.xaml.cs | 94 ++++++ .../Sensor/Pages/Sensors/PedometerPage.xaml | 153 ++++++++++ .../Pages/Sensors/PedometerPage.xaml.cs | 115 ++++++++ .../Sensors/PickUpGestureDetectorPage.xaml | 87 ++++++ .../Sensors/PickUpGestureDetectorPage.xaml.cs | 93 ++++++ .../Pages/Sensors/PressureSensorPage.xaml | 87 ++++++ .../Pages/Sensors/PressureSensorPage.xaml.cs | 92 ++++++ .../Pages/Sensors/ProximitySensorPage.xaml | 87 ++++++ .../Pages/Sensors/ProximitySensorPage.xaml.cs | 93 ++++++ .../Sensor/Pages/Sensors/Resource.xaml | 28 ++ .../Sensors/RotationVectorSensorPage.xaml | 120 ++++++++ .../Sensors/RotationVectorSensorPage.xaml.cs | 95 ++++++ .../Sensors/RunningActivityDetectorPage.xaml | 87 ++++++ .../RunningActivityDetectorPage.xaml.cs | 93 ++++++ .../Pages/Sensors/SleepMonitorPage.xaml | 87 ++++++ .../Pages/Sensors/SleepMonitorPage.xaml.cs | 93 ++++++ .../StationaryActivityDetectorPage.xaml | 87 ++++++ .../StationaryActivityDetectorPage.xaml.cs | 93 ++++++ .../Pages/Sensors/TemperatureSensorPage.xaml | 87 ++++++ .../Sensors/TemperatureSensorPage.xaml.cs | 93 ++++++ .../Pages/Sensors/UltravioletSensorPage.xaml | 87 ++++++ .../Sensors/UltravioletSensorPage.xaml.cs | 93 ++++++ .../Sensors/UncalibratedGyroscopePage.xaml | 109 +++++++ .../Sensors/UncalibratedGyroscopePage.xaml.cs | 94 ++++++ .../Sensors/UncalibratedMagnetometerPage.xaml | 109 +++++++ .../UncalibratedMagnetometerPage.xaml.cs | 94 ++++++ .../Sensors/WalkingActivityDetectorPage.xaml | 87 ++++++ .../WalkingActivityDetectorPage.xaml.cs | 93 ++++++ .../Sensors/WristUpGestureDetectorPage.xaml | 87 ++++++ .../WristUpGestureDetectorPage.xaml.cs | 93 ++++++ .../Sensor/Pages/Views/SensorInfoView.xaml | 106 +++++++ .../Sensor/Pages/Views/SensorInfoView.xaml.cs | 31 ++ .../Sensor/SensorEventArgs.cs | 132 +++++++++ .../Sensor.Tizen.Mobile/Sensor/SensorInfo.cs | 68 +++++ .../Sensor.Tizen.Mobile/Sensor/SensorTypes.cs | 56 ++++ .../Sensors/AccelerometerAdapter.cs | 92 ++++++ .../Sensors/FaceDownGestureDetectorAdapter.cs | 92 ++++++ .../Sensors/GravitySensorAdapter.cs | 92 ++++++ .../Sensors/GyroscopeAdapter.cs | 92 ++++++ .../GyroscopeRotationVectorSensorAdapter.cs | 92 ++++++ .../Sensors/HeartRateMonitorAdapter.cs | 106 +++++++ .../Sensors/HumiditySensorAdapter.cs | 92 ++++++ .../InVehicleActivityDetectorAdapter.cs | 92 ++++++ .../Sensors/LightSensorAdapter.cs | 92 ++++++ .../LinearAccelerationSensorAdapter.cs | 92 ++++++ .../Sensors/MagnetometerAdapter.cs | 92 ++++++ ...MagnetometerRotationVectorSensorAdapter.cs | 92 ++++++ .../Sensors/OrientationSensorAdapter.cs | 92 ++++++ .../Sensors/PedometerAdapter.cs | 114 ++++++++ .../Sensors/PickUpGestureDetectorAdapter.cs | 92 ++++++ .../Sensors/PressureSensorAdapter.cs | 92 ++++++ .../Sensors/ProximitySensorAdapter.cs | 92 ++++++ .../Sensors/RotationVectorSensorAdapter.cs | 92 ++++++ .../Sensors/RunningActivityDetectorAdapter.cs | 92 ++++++ .../Sensors/SleepMonitorAdapter.cs | 92 ++++++ .../StationaryActivityDetectorAdapter.cs | 92 ++++++ .../Sensors/TemperatureSensorAdapter.cs | 92 ++++++ .../Sensors/UltravioletSensorAdapter.cs | 92 ++++++ .../Sensors/UncalibratedGyroscopeAdapter.cs | 92 ++++++ .../UncalibratedMagnetometerAdapter.cs | 92 ++++++ .../Sensors/WalkingActivityDetectorAdapter.cs | 92 ++++++ .../Sensors/WristUpGestureDetectorAdapter.cs | 92 ++++++ .../Sensor/Sensor.Tizen.Mobile/res/bg_01.png | Bin 0 -> 22312 bytes .../shared/res/Sensor.Tizen.Mobile.png | Bin 0 -> 10097 bytes .../Sensor.Tizen.Mobile/tizen-manifest.xml | 19 ++ Mobile/NUI/Sensor/src/Sensor/Sensor/ILog.cs | 53 ++++ .../src/Sensor/Sensor/ISensorAdapter.cs | 47 +++ .../src/Sensor/Sensor/ISensorManager.cs | 56 ++++ .../Sensor/Models/AccelerometerViewModel.cs | 71 +++++ .../FaceDownGestureDetectorViewModel.cs | 47 +++ .../Sensor/Models/GravitySensorViewModel.cs | 71 +++++ .../GyroscopeRotationVectorSensorViewModel.cs | 82 ++++++ .../Sensor/Models/GyroscopeViewModel.cs | 71 +++++ .../Models/HeartRateMonitorViewModel.cs | 49 ++++ .../Sensor/Models/HumiditySensorViewModel.cs | 49 ++++ .../InVehicleActivityDetectorViewModel.cs | 50 ++++ .../Sensor/Models/LightSensorViewModel.cs | 49 ++++ .../LinearAccelerationSensorViewModel.cs | 72 +++++ ...gnetometerRotationVectorSensorViewModel.cs | 82 ++++++ .../Sensor/Models/MagnetometerViewModel.cs | 71 +++++ .../Models/OrientationSensorViewModel.cs | 71 +++++ .../Sensor/Models/PedometerViewModel.cs | 116 ++++++++ .../Models/PickUpGestureDetectorViewModel.cs | 50 ++++ .../Sensor/Models/PressureSensorViewModel.cs | 49 ++++ .../Sensor/Models/ProximitySensorViewModel.cs | 50 ++++ .../Models/RotationVectorSensorViewModel.cs | 82 ++++++ .../RunningActivityDetectorViewModel.cs | 50 ++++ .../Sensor/Models/SleepMonitorViewModel.cs | 50 ++++ .../StationaryActivityDetectorViewModel.cs | 50 ++++ .../Models/TemperatureSensorViewModel.cs | 49 ++++ .../Models/UltravioletSensorViewModel.cs | 49 ++++ .../Models/UncalibratedGyroscopeViewModel.cs | 71 +++++ .../UncalibratedMagnetometerViewModel.cs | 71 +++++ .../WalkingActivityDetectorViewModel.cs | 50 ++++ .../Models/WristUpGestureDetectorViewModel.cs | 50 ++++ .../src/Sensor/Sensor/Pages/SensorMain.xaml | 32 +++ .../Sensor/Sensor/Pages/SensorMain.xaml.cs | 243 ++++++++++++++++ .../Pages/Sensors/AccelerometerPage.xaml | 82 ++++++ .../Pages/Sensors/AccelerometerPage.xaml.cs | 102 +++++++ .../Sensors/FaceDownGestureDetectorPage.xaml | 56 ++++ .../FaceDownGestureDetectorPage.xaml.cs | 100 +++++++ .../Pages/Sensors/GravitySensorPage.xaml | 82 ++++++ .../Pages/Sensors/GravitySensorPage.xaml.cs | 101 +++++++ .../Sensor/Pages/Sensors/GyroscopePage.xaml | 84 ++++++ .../Pages/Sensors/GyroscopePage.xaml.cs | 101 +++++++ .../GyroscopeRotationVectorSensorPage.xaml | 95 ++++++ .../GyroscopeRotationVectorSensorPage.xaml.cs | 102 +++++++ .../Pages/Sensors/HeartRateMonitorPage.xaml | 59 ++++ .../Sensors/HeartRateMonitorPage.xaml.cs | 115 ++++++++ .../Pages/Sensors/HumiditySensorPage.xaml | 56 ++++ .../Pages/Sensors/HumiditySensorPage.xaml.cs | 99 +++++++ .../InVehicleActivityDetectorPage.xaml | 57 ++++ .../InVehicleActivityDetectorPage.xaml.cs | 100 +++++++ .../Sensor/Pages/Sensors/LightSensorPage.xaml | 57 ++++ .../Pages/Sensors/LightSensorPage.xaml.cs | 99 +++++++ .../Sensors/LinearAccelerationSensorPage.xaml | 82 ++++++ .../LinearAccelerationSensorPage.xaml.cs | 101 +++++++ .../Pages/Sensors/MagnetometerPage.xaml | 82 ++++++ .../Pages/Sensors/MagnetometerPage.xaml.cs | 101 +++++++ .../MagnetometerRotationVectorSensorPage.xaml | 95 ++++++ ...gnetometerRotationVectorSensorPage.xaml.cs | 102 +++++++ .../Pages/Sensors/OrientationSensorPage.xaml | 82 ++++++ .../Sensors/OrientationSensorPage.xaml.cs | 101 +++++++ .../Sensor/Pages/Sensors/PedometerPage.xaml | 134 +++++++++ .../Pages/Sensors/PedometerPage.xaml.cs | 122 ++++++++ .../Sensors/PickUpGestureDetectorPage.xaml | 56 ++++ .../Sensors/PickUpGestureDetectorPage.xaml.cs | 100 +++++++ .../Pages/Sensors/PressureSensorPage.xaml | 56 ++++ .../Pages/Sensors/PressureSensorPage.xaml.cs | 99 +++++++ .../Pages/Sensors/ProximitySensorPage.xaml | 56 ++++ .../Pages/Sensors/ProximitySensorPage.xaml.cs | 100 +++++++ .../Sensors/RotationVectorSensorPage.xaml | 95 ++++++ .../Sensors/RotationVectorSensorPage.xaml.cs | 102 +++++++ .../Sensors/RunningActivityDetectorPage.xaml | 57 ++++ .../RunningActivityDetectorPage.xaml.cs | 100 +++++++ .../Pages/Sensors/SleepMonitorPage.xaml | 56 ++++ .../Pages/Sensors/SleepMonitorPage.xaml.cs | 100 +++++++ .../StationaryActivityDetectorPage.xaml | 56 ++++ .../StationaryActivityDetectorPage.xaml.cs | 100 +++++++ .../Pages/Sensors/TemperatureSensorPage.xaml | 56 ++++ .../Sensors/TemperatureSensorPage.xaml.cs | 100 +++++++ .../Pages/Sensors/UltravioletSensorPage.xaml | 56 ++++ .../Sensors/UltravioletSensorPage.xaml.cs | 100 +++++++ .../Sensors/UncalibratedGyroscopePage.xaml | 82 ++++++ .../Sensors/UncalibratedGyroscopePage.xaml.cs | 101 +++++++ .../Sensors/UncalibratedMagnetometerPage.xaml | 82 ++++++ .../UncalibratedMagnetometerPage.xaml.cs | 101 +++++++ .../Sensors/WalkingActivityDetectorPage.xaml | 56 ++++ .../WalkingActivityDetectorPage.xaml.cs | 100 +++++++ .../Sensors/WristUpGestureDetectorPage.xaml | 56 ++++ .../WristUpGestureDetectorPage.xaml.cs | 100 +++++++ .../Sensor/Pages/Views/SensorInfoView.xaml | 106 +++++++ .../Sensor/Pages/Views/SensorInfoView.xaml.cs | 40 +++ Mobile/NUI/Sensor/src/Sensor/Sensor/Sensor.cs | 40 +++ .../Sensor/src/Sensor/Sensor/Sensor.csproj | 89 ++++++ .../src/Sensor/Sensor/SensorEventArgs.cs | 132 +++++++++ .../Sensor/src/Sensor/Sensor/SensorInfo.cs | 68 +++++ .../Sensor/src/Sensor/Sensor/SensorTypes.cs | 56 ++++ 227 files changed, 18939 insertions(+) create mode 100755 Mobile/NUI/Sensor/.gitignore create mode 100755 Mobile/NUI/Sensor/LICENSE create mode 100755 Mobile/NUI/Sensor/README.md create mode 100755 Mobile/NUI/Sensor/Screenshots/Tizen/Accelerometer.png create mode 100755 Mobile/NUI/Sensor/Screenshots/Tizen/Main.png create mode 100755 Mobile/NUI/Sensor/src/Sensor.sln create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Log.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/PrivacyChecker.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor - Backup.Tizen.Mobile.csproj create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor.Tizen.Mobile.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor.Tizen.Mobile.csproj create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ILog.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ISensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ISensorManager.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/AccelerometerViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/FaceDownGestureDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GravitySensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GyroscopeRotationVectorSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GyroscopeViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/HeartRateMonitorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/HumiditySensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/InVehicleActivityDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/LightSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/LinearAccelerationSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/MagnetometerRotationVectorSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/MagnetometerViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/OrientationSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PedometerViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PickUpGestureDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PressureSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/ProximitySensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/RotationVectorSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/RunningActivityDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/SleepMonitorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/StationaryActivityDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/TemperatureSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UltravioletSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UncalibratedGyroscopeViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UncalibratedMagnetometerViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/WalkingActivityDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/WristUpGestureDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorMain.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorMain.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorManager.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/AccelerometerPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/AccelerometerPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/FaceDownGestureDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/FaceDownGestureDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/GravitySensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/GravitySensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/GyroscopePage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/GyroscopePage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/GyroscopeRotationVectorSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/GyroscopeRotationVectorSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/HeartRateMonitorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/HeartRateMonitorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/HumiditySensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/HumiditySensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/InVehicleActivityDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/InVehicleActivityDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/LightSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/LightSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/LinearAccelerationSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/LinearAccelerationSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/MagnetometerPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/MagnetometerPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/MagnetometerRotationVectorSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/MagnetometerRotationVectorSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/OrientationSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/OrientationSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/PedometerPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/PedometerPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/PickUpGestureDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/PickUpGestureDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/PressureSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/PressureSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/ProximitySensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/ProximitySensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/Resource.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/RotationVectorSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/RotationVectorSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/RunningActivityDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/RunningActivityDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/SleepMonitorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/SleepMonitorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/StationaryActivityDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/StationaryActivityDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/TemperatureSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/TemperatureSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/UltravioletSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/UltravioletSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/UncalibratedGyroscopePage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/UncalibratedGyroscopePage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/UncalibratedMagnetometerPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/UncalibratedMagnetometerPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/WalkingActivityDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/WalkingActivityDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/WristUpGestureDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/WristUpGestureDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Views/SensorInfoView.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Views/SensorInfoView.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/SensorEventArgs.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/SensorInfo.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/SensorTypes.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/AccelerometerAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/FaceDownGestureDetectorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/GravitySensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/GyroscopeAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/GyroscopeRotationVectorSensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/HeartRateMonitorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/HumiditySensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/InVehicleActivityDetectorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/LightSensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/LinearAccelerationSensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/MagnetometerAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/MagnetometerRotationVectorSensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/OrientationSensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/PedometerAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/PickUpGestureDetectorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/PressureSensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/ProximitySensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/RotationVectorSensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/RunningActivityDetectorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/SleepMonitorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/StationaryActivityDetectorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/TemperatureSensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/UltravioletSensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/UncalibratedGyroscopeAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/UncalibratedMagnetometerAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/WalkingActivityDetectorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensors/WristUpGestureDetectorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/res/bg_01.png create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/shared/res/Sensor.Tizen.Mobile.png create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/tizen-manifest.xml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/ILog.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/ISensorAdapter.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/ISensorManager.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/AccelerometerViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/FaceDownGestureDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/GravitySensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/GyroscopeRotationVectorSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/GyroscopeViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/HeartRateMonitorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/HumiditySensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/InVehicleActivityDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/LightSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/LinearAccelerationSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/MagnetometerRotationVectorSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/MagnetometerViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/OrientationSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/PedometerViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/PickUpGestureDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/PressureSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/ProximitySensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/RotationVectorSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/RunningActivityDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/SleepMonitorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/StationaryActivityDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/TemperatureSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/UltravioletSensorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/UncalibratedGyroscopeViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/UncalibratedMagnetometerViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/WalkingActivityDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Models/WristUpGestureDetectorViewModel.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/SensorMain.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/SensorMain.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/AccelerometerPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/AccelerometerPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/FaceDownGestureDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/FaceDownGestureDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/GravitySensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/GravitySensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/GyroscopePage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/GyroscopePage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/GyroscopeRotationVectorSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/GyroscopeRotationVectorSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/HeartRateMonitorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/HeartRateMonitorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/HumiditySensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/HumiditySensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/InVehicleActivityDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/InVehicleActivityDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/LightSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/LightSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/LinearAccelerationSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/LinearAccelerationSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/MagnetometerPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/MagnetometerPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/MagnetometerRotationVectorSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/MagnetometerRotationVectorSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/OrientationSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/OrientationSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/PedometerPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/PedometerPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/PickUpGestureDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/PickUpGestureDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/PressureSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/PressureSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/ProximitySensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/ProximitySensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/RotationVectorSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/RotationVectorSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/RunningActivityDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/RunningActivityDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/SleepMonitorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/SleepMonitorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/StationaryActivityDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/StationaryActivityDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/TemperatureSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/TemperatureSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/UltravioletSensorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/UltravioletSensorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/UncalibratedGyroscopePage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/UncalibratedGyroscopePage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/UncalibratedMagnetometerPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/UncalibratedMagnetometerPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/WalkingActivityDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/WalkingActivityDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/WristUpGestureDetectorPage.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Sensors/WristUpGestureDetectorPage.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Views/SensorInfoView.xaml create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Pages/Views/SensorInfoView.xaml.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Sensor.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/Sensor.csproj create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/SensorEventArgs.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/SensorInfo.cs create mode 100755 Mobile/NUI/Sensor/src/Sensor/Sensor/SensorTypes.cs diff --git a/Mobile/NUI/Sensor/.gitignore b/Mobile/NUI/Sensor/.gitignore new file mode 100755 index 000000000..3c4efe206 --- /dev/null +++ b/Mobile/NUI/Sensor/.gitignore @@ -0,0 +1,261 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +project.fragment.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +#*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc \ No newline at end of file diff --git a/Mobile/NUI/Sensor/LICENSE b/Mobile/NUI/Sensor/LICENSE new file mode 100755 index 000000000..51a2cd23d --- /dev/null +++ b/Mobile/NUI/Sensor/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 Samsung + + 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. diff --git a/Mobile/NUI/Sensor/README.md b/Mobile/NUI/Sensor/README.md new file mode 100755 index 000000000..e30bbc1d3 --- /dev/null +++ b/Mobile/NUI/Sensor/README.md @@ -0,0 +1,25 @@ +# Sensor +The Sensor sample application demonstrates how you can manage sensors and retrieve sensor data from various tizen sensor types, such as acceleration, device orientation and gravity sensor. +This sample is following Portable Class Libraries (PCL) application model and using some NUI Xaml features such as XAML files for GUI. + + + + + + + +
+
+
+
+
+ + +### Verified Version +* Tizen.NET : 10.0.0.17606 + +### Supported Profile +* Mobile + +### Author +* Guowei Wang(guowei.wang@samsung.com) diff --git a/Mobile/NUI/Sensor/Screenshots/Tizen/Accelerometer.png b/Mobile/NUI/Sensor/Screenshots/Tizen/Accelerometer.png new file mode 100755 index 0000000000000000000000000000000000000000..5b4585d720f749aec5dbc0f990681b642139248d GIT binary patch literal 44312 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 Wepe26;W?;SAmT|2!eawc^gjR|cfYLw literal 0 HcmV?d00001 diff --git a/Mobile/NUI/Sensor/Screenshots/Tizen/Main.png b/Mobile/NUI/Sensor/Screenshots/Tizen/Main.png new file mode 100755 index 0000000000000000000000000000000000000000..0e10c44a826b1104d6872f01b39b7d79f15e82b2 GIT binary patch literal 40568 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ℜ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 m`20%zX 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 + /// Implementation class of ILog interface + /// + public class Log: ILog + { + /// + /// Log tag + /// + public static readonly string LogTag = "Sensor.Tizen.Mobile"; + + /// + /// Constructor of Log + /// + public Log() + { + } + + /// + /// Print a log message with error priority + /// + /// Log message + /// File name + /// Method name + /// Line Number + public void Error(string message, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0) + { + global::Tizen.Log.Error(LogTag, message, file, func, line); + } + + /// + /// Print a log message with info priority + /// + /// Log message + /// File name + /// Method name + /// Line Number + public void Info(string message, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0) + { + global::Tizen.Log.Info(LogTag, message, file, func, line); + } + + /// + /// Print a log message with debug priority + /// + /// Log message + /// File name + /// Method name + /// Line Number + public void Debug(string message, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0) + { + global::Tizen.Log.Debug(LogTag, message, file, func, line); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/PrivacyChecker.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/PrivacyChecker.cs new file mode 100755 index 000000000..b2583bcdd --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/PrivacyChecker.cs @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using Sensor.Tizen.Mobile; +using System; +using Tizen.Security; + +namespace Sensor.Tizen.Mobile +{ + /// + /// Check the privacy privilege permission + /// + public static class PrivacyChecker + { + /// + /// Check whether the application has the specific permission or not. + /// + /// Privilege + public static void CheckPermission(string privilege) + { + try + { + CheckResult result = PrivacyPrivilegeManager.CheckPermission(privilege); + + switch (result) + { + case CheckResult.Allow: + break; + case CheckResult.Deny: + break; + case CheckResult.Ask: + // Request permission to user + PrivacyPrivilegeManager.RequestPermission(privilege); + break; + } + } + catch (Exception e) + { + global::Tizen.Log.Error(Log.LogTag, e.Message); + } + } + } +} + diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor - Backup.Tizen.Mobile.csproj b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor - Backup.Tizen.Mobile.csproj new file mode 100755 index 000000000..d5cebb054 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor - Backup.Tizen.Mobile.csproj @@ -0,0 +1,168 @@ + + + + Exe + netcoreapp3.1 + Sensor.Tizen.Mobile + 1 + true + + + + portable + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + + + + + + + + + + + + + + + + SensorMain.xaml + + + GravitySensorPage.xaml + + + GyroscopeRotationVectorSensorPage.xaml + + + MagnetometerRotationVectorSensorPage.xaml + + + diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor.Tizen.Mobile.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor.Tizen.Mobile.cs new file mode 100755 index 000000000..4c757d114 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor.Tizen.Mobile.cs @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ +using Sensor.Pages; +using System; +using System.Threading; +using Tizen.NUI; +using Tizen.NUI.Components; + +namespace Sensor.Tizen.Mobile +{ + class Program : NUIApplication + { + public static Window window; + public static Navigator navigator; + public static SensorManager sensorManager; + protected override void OnCreate() + { + base.OnCreate(); + Initialize(); + navigator.Push(new SensorMain()); + } + + void Initialize() + { + window = GetDefaultWindow(); + window.Title = "Sensor"; + window.KeyEvent += OnKeyEvent; + navigator = window.GetDefaultNavigator(); + sensorManager = new SensorManager(); + } + + public void OnKeyEvent(object sender, Window.KeyEventArgs e) + { + if (e.Key.State == Key.StateType.Down && (e.Key.KeyPressedName == "XF86Back" || e.Key.KeyPressedName == "Escape")) + { + Exit(); + } + } + + static void Main(string[] args) + { + var app = new Program(); + app.Run(args); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor.Tizen.Mobile.csproj b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor.Tizen.Mobile.csproj new file mode 100755 index 000000000..6ebfe26ff --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor.Tizen.Mobile.csproj @@ -0,0 +1,169 @@ + + + + Exe + netcoreapp3.1 + Sensor.Tizen.Mobile + 1 + true + + + + portable + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + + + + + + + + + + + + SensorMain.xaml + + + GravitySensorPage.xaml + + + GyroscopeRotationVectorSensorPage.xaml + + + MagnetometerRotationVectorSensorPage.xaml + + + diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ILog.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ILog.cs new file mode 100755 index 000000000..0ed4144a0 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ILog.cs @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System.Runtime.CompilerServices; + +namespace Sensor +{ + /// + /// Interface to log a message + /// + public interface ILog + { + /// + /// Print a log message with error priority + /// + /// Log message + /// File name + /// Method name + /// Line Number + void Error(string message, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0); + + /// + /// Print a log message with info priority + /// + /// Log message + /// File name + /// Method name + /// Line Number + void Info(string message, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0); + + /// + /// Print a log message with debug priority + /// + /// Log message + /// File name + /// Method name + /// Line Number + void Debug(string message, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0); + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ISensorAdapter.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ISensorAdapter.cs new file mode 100755 index 000000000..375a726b1 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ISensorAdapter.cs @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; + +namespace Sensor +{ + /// + /// Interface to get information and control sensor. + /// + public interface ISensorAdapter + { + /// + /// Gets sensor information. + /// + /// Sensor information + SensorInfo GetSensorInfo(); + + /// + /// Starts sensor. + /// + /// Event handler to listen sensor events + void Start(EventHandler listener); + + /// + /// Stops sensor + /// + /// Event handler registered + void Stop(EventHandler listener); + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ISensorManager.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ISensorManager.cs new file mode 100755 index 000000000..cae175813 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/ISensorManager.cs @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; + +namespace Sensor +{ + /// + /// Interface to manage sensors. + /// + public interface ISensorManager + { + /// + /// Gets the supported sensor types on the current device. + /// + /// Supported sensor types + List GetSensorTypeList(); + + /// + /// Gets the specific sensor information. + /// + /// Sensor type + /// Sensor information + SensorInfo GetSensorInfo(string type); + + /// + /// Starts the sensor of the specific type. + /// + /// Sensor type + /// Event handler to listen sensor events + void StartSensor(string type, EventHandler listener); + + /// + /// Stops the sensor of the specific type. + /// + /// Sensor type + /// Event handler registered + void StopSensor(string type, EventHandler listener); + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/AccelerometerViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/AccelerometerViewModel.cs new file mode 100755 index 000000000..e5aceee5a --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/AccelerometerViewModel.cs @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Accelerometer Data View Model + /// + public class AccelerometerViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/FaceDownGestureDetectorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/FaceDownGestureDetectorViewModel.cs new file mode 100755 index 000000000..3cd1e6d2a --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/FaceDownGestureDetectorViewModel.cs @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System.ComponentModel; +using System.Runtime.CompilerServices; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The Face Down Gesture Detector Data View Model + /// + public class FaceDownGestureDetectorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private DetectorState state = DetectorState.Unknown; + + /// + /// Updates face down state view with the new value. + /// + /// The face down state. + public DetectorState State + { + get { return state; } + set { state = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GravitySensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GravitySensorViewModel.cs new file mode 100755 index 000000000..5189e1dcf --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GravitySensorViewModel.cs @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Gravity Sensor Data View Model + /// + public class GravitySensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GyroscopeRotationVectorSensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GyroscopeRotationVectorSensorViewModel.cs new file mode 100755 index 000000000..a985a0fe3 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GyroscopeRotationVectorSensorViewModel.cs @@ -0,0 +1,82 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Gyroscope Rotation Vector Sensor Data View Model + /// + public class GyroscopeRotationVectorSensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + private float w = 0.0f; + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + /// + /// Updates W value view with the new value. + /// + /// W + public float W + { + get { return w; } + set { w = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GyroscopeViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GyroscopeViewModel.cs new file mode 100755 index 000000000..c47b18e6c --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/GyroscopeViewModel.cs @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Gyroscope Data View Model + /// + public class GyroscopeViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/HeartRateMonitorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/HeartRateMonitorViewModel.cs new file mode 100755 index 000000000..7cd342b88 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/HeartRateMonitorViewModel.cs @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Heart Rate Monitor Data View Model + /// + public class HeartRateMonitorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float heartrate = 0.0f; + + /// + /// Updates heart rate value view with the new value. + /// + /// The heart rate. + public float HeartRate + { + get { return heartrate; } + set { heartrate = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/HumiditySensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/HumiditySensorViewModel.cs new file mode 100755 index 000000000..f9a048d3a --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/HumiditySensorViewModel.cs @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Humidity Sensor Data View Model + /// + public class HumiditySensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float humidity = 0.0f; + + /// + /// Updates humidity value view with the new value. + /// + /// The humidity. + public float Humidity + { + get { return humidity; } + set { humidity = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/InVehicleActivityDetectorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/InVehicleActivityDetectorViewModel.cs new file mode 100755 index 000000000..58149379e --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/InVehicleActivityDetectorViewModel.cs @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The In Vehicle Actvity Detector Data View Model + /// + public class InVehicleActivityDetectorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private DetectorState state = DetectorState.Unknown; + + /// + /// Updates in vehicle state view with the new value. + /// + /// The in vehicle state. + public DetectorState State + { + get { return state; } + set { state = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/LightSensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/LightSensorViewModel.cs new file mode 100755 index 000000000..cf1c22ef3 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/LightSensorViewModel.cs @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Light Sensor Data View Model + /// + public class LightSensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float level = 0.0f; + + /// + /// Updates light level value view with the new value. + /// + /// The light level. + public float Level + { + get { return level; } + set { level = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/LinearAccelerationSensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/LinearAccelerationSensorViewModel.cs new file mode 100755 index 000000000..e11d8dfd3 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/LinearAccelerationSensorViewModel.cs @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Linear Acceleration Sensor Data View Model + /// + public class LinearAccelerationSensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/MagnetometerRotationVectorSensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/MagnetometerRotationVectorSensorViewModel.cs new file mode 100755 index 000000000..328fedad0 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/MagnetometerRotationVectorSensorViewModel.cs @@ -0,0 +1,82 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Magnetometer Rotation Vector Sensor Data View Model + /// + public class MagnetometerRotationVectorSensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + private float w = 0.0f; + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + /// + /// Updates W value view with the new value. + /// + /// W + public float W + { + get { return w; } + set { w = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/MagnetometerViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/MagnetometerViewModel.cs new file mode 100755 index 000000000..fe1d26103 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/MagnetometerViewModel.cs @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Magnetometer Data View Model + /// + public class MagnetometerViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/OrientationSensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/OrientationSensorViewModel.cs new file mode 100755 index 000000000..0c32de7fb --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/OrientationSensorViewModel.cs @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Orientation Sensor Data View Model + /// + public class OrientationSensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float azimuth = 0.0f; + private float pitch = 0.0f; + private float roll = 0.0f; + + /// + /// Updates azimuth value view with the new value. + /// + /// The azimuth + public float Azimuth + { + get { return azimuth; } + set { azimuth = value; RaisePropertyChanged(); } + } + + /// + /// Updates pitch value view with the new value. + /// + /// The pitch. + public float Pitch + { + get { return pitch; } + set { pitch = value; RaisePropertyChanged(); } + } + + /// + /// Updates roll value view with the new value. + /// + /// The roll. + public float Roll + { + get { return roll; } + set { roll = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PedometerViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PedometerViewModel.cs new file mode 100755 index 000000000..50b0af018 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PedometerViewModel.cs @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The Pedometer Data View Model + /// + public class PedometerViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private uint stepCount = 0; + private uint walkStepCount = 0; + private uint runStepCount = 0; + private float movingDistance = 0.0f; + private float lastSpeed = 0.0f; + private float lastSteppingFrequency = 0.0f; + private PedometerState lastStepStatus = PedometerState.Unknown; + + /// + /// Updates step count value view with the new value. + /// + /// The step count. + public uint StepCount + { + get { return stepCount; } + set { stepCount = value; RaisePropertyChanged(); } + } + + /// + /// Updates walk step count value view with the new value. + /// + /// The walk step count. + public uint WalkStepCount + { + get { return walkStepCount; } + set { walkStepCount = value; RaisePropertyChanged(); } + } + + /// + /// Updates run step count value view with the new value. + /// + /// The run step count. + public uint RunStepCount + { + get { return runStepCount; } + set { runStepCount = value; RaisePropertyChanged(); } + } + + /// + /// Updates moving distance value view with the new value. + /// + /// The moving distance. + public float MovingDistance + { + get { return movingDistance; } + set { movingDistance = value; RaisePropertyChanged(); } + } + + /// + /// Updates last speed value view with the new value. + /// + /// The last speed. + public float LastSpeed + { + get { return lastSpeed; } + set { lastSpeed = value; RaisePropertyChanged(); } + } + + /// + /// Updates last stepping frequency value view with the new value. + /// + /// The last stepping frequency + public float LastSteppingFrequency + { + get { return lastSteppingFrequency; } + set { lastSteppingFrequency = value; RaisePropertyChanged(); } + } + + /// + /// Updates last step status value view with the new value. + /// + /// The last step status + public PedometerState LastStepStatus + { + get { return lastStepStatus; } + set { lastStepStatus = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PickUpGestureDetectorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PickUpGestureDetectorViewModel.cs new file mode 100755 index 000000000..dc576eb6a --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PickUpGestureDetectorViewModel.cs @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The PickUp Gesture Detector Data View Model + /// + public class PickUpGestureDetectorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private DetectorState state = DetectorState.Unknown; + + /// + /// Updates pick up state view with the new value. + /// + /// The pick up state + public DetectorState State + { + get { return state; } + set { state = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PressureSensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PressureSensorViewModel.cs new file mode 100755 index 000000000..8a69d28c9 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/PressureSensorViewModel.cs @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Pressure Sensor Data View Model + /// + public class PressureSensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float pressure = 0.0f; + + /// + /// Updates pressure value view with the new value. + /// + /// The pressure. + public float Pressure + { + get { return pressure; } + set { pressure = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/ProximitySensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/ProximitySensorViewModel.cs new file mode 100755 index 000000000..ee29db3ea --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/ProximitySensorViewModel.cs @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The Proximity Data View Model + /// + public class ProximitySensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private ProximityState state = ProximityState.Unknown; + + /// + /// Updates proximity state view with the new value. + /// + /// The proximity state. + public ProximityState State + { + get { return state; } + set { state = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/RotationVectorSensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/RotationVectorSensorViewModel.cs new file mode 100755 index 000000000..6521bacc8 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/RotationVectorSensorViewModel.cs @@ -0,0 +1,82 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Rotation Vector Sensor Data View Model + /// + public class RotationVectorSensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + private float w = 0.0f; + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + /// + /// Updates W value view with the new value. + /// + /// W + public float W + { + get { return w; } + set { w = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/RunningActivityDetectorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/RunningActivityDetectorViewModel.cs new file mode 100755 index 000000000..3a2e1f53f --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/RunningActivityDetectorViewModel.cs @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The Running Activity Detector Data View Model + /// + public class RunningActivityDetectorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private DetectorState state = DetectorState.Unknown; + + /// + /// Updates running state view with the new value. + /// + /// The running state. + public DetectorState State + { + get { return state; } + set { state = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/SleepMonitorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/SleepMonitorViewModel.cs new file mode 100755 index 000000000..18e7bb477 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/SleepMonitorViewModel.cs @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The Sleep Monitor Data View Model + /// + public class SleepMonitorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private SleepMonitorState state = SleepMonitorState.Unknown; + + /// + /// Updates sleep state view with the new value. + /// + /// The sleep state. + public SleepMonitorState State + { + get { return state; } + set { state = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/StationaryActivityDetectorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/StationaryActivityDetectorViewModel.cs new file mode 100755 index 000000000..ad619dccb --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/StationaryActivityDetectorViewModel.cs @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The Stationary Activity Detector Data View Model + /// + public class StationaryActivityDetectorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private DetectorState state = DetectorState.Unknown; + + /// + /// Updates stationary state view with the new value. + /// + /// The stationary state. + public DetectorState State + { + get { return state; } + set { state = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/TemperatureSensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/TemperatureSensorViewModel.cs new file mode 100755 index 000000000..f0bcb259a --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/TemperatureSensorViewModel.cs @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Temperature Sensor Data View Model + /// + public class TemperatureSensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float temperature = 0.0f; + + /// + /// Updates temperature value view with the new value. + /// + /// The temperature. + public float Temperature + { + get { return temperature; } + set { temperature = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UltravioletSensorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UltravioletSensorViewModel.cs new file mode 100755 index 000000000..49018915f --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UltravioletSensorViewModel.cs @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Ultraviolet Sensor Data View Model + /// + public class UltravioletSensorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float index = 0.0f; + + /// + /// Updates ultraviolet index value view with the new value. + /// + /// The ultraviolet index. + public float Index + { + get { return index; } + set { index = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UncalibratedGyroscopeViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UncalibratedGyroscopeViewModel.cs new file mode 100755 index 000000000..d724669ec --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UncalibratedGyroscopeViewModel.cs @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Uncalibrated Gyroscope Data View Model + /// + public class UncalibratedGyroscopeViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UncalibratedMagnetometerViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UncalibratedMagnetometerViewModel.cs new file mode 100755 index 000000000..ddf99b631 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/UncalibratedMagnetometerViewModel.cs @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Sensor.Models +{ + /// + /// The Uncalibrated Magnetometer Data View Model + /// + public class UncalibratedMagnetometerViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private float x = 0.0f; + private float y = 0.0f; + private float z = 0.0f; + + /// + /// Updates X value view with the new value. + /// + /// X + public float X + { + get { return x; } + set { x = value; RaisePropertyChanged(); } + } + + /// + /// Updates Y value view with the new value. + /// + /// Y + public float Y + { + get { return y; } + set { y = value; RaisePropertyChanged(); } + } + + /// + /// Updates Z value view with the new value. + /// + /// Z + public float Z + { + get { return z; } + set { z = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/WalkingActivityDetectorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/WalkingActivityDetectorViewModel.cs new file mode 100755 index 000000000..2d3150317 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/WalkingActivityDetectorViewModel.cs @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The Walking Activity Detector Data View Model + /// + public class WalkingActivityDetectorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private DetectorState state = DetectorState.Unknown; + + /// + /// Updates walking state view with the new value. + /// + /// The walking state. + public DetectorState State + { + get { return state; } + set { state = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/WristUpGestureDetectorViewModel.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/WristUpGestureDetectorViewModel.cs new file mode 100755 index 000000000..6c61e31eb --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Models/WristUpGestureDetectorViewModel.cs @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; +using static Sensor.SensorEventArgs; + +namespace Sensor.Models +{ + /// + /// The Wrist Up Gesture Detector Data View Model + /// + public class WristUpGestureDetectorViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private DetectorState state = DetectorState.Unknown; + + /// + /// Updates wrist up state view with the new value. + /// + /// The wrist up state. + public DetectorState State + { + get { return state; } + set { state = value; RaisePropertyChanged(); } + } + + public void RaisePropertyChanged([CallerMemberName]string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorMain.xaml b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorMain.xaml new file mode 100755 index 000000000..5b721f431 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorMain.xaml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorMain.xaml.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorMain.xaml.cs new file mode 100755 index 000000000..43c02d2de --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorMain.xaml.cs @@ -0,0 +1,270 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using System.Collections.Generic; +using System.Collections.ObjectModel; + +using Tizen.NUI; +using Tizen.NUI.Components; +using Sensor.Tizen.Mobile; +using System.ComponentModel; + +namespace Sensor.Pages +{ + public class ItemClass : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + private void OnPropertyChanged(string propertyName) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + + public ItemClass(string type, Color itemColor) + { + Text = type; + BgColor = itemColor; + } + + string text; + public string Text + { + get => text; + set + { + text = value; + OnPropertyChanged("Text"); + } + } + + Color color; + public Color BgColor + { + get => color; + set { color = value; OnPropertyChanged("BgColor"); } + } + } + + public class ViewModel + { + public ObservableCollection Items { get; private set; } + public ViewModel() + { + Items = new ObservableCollection(); + + List types = new SensorManager().GetSensorTypeList(); + global::Tizen.Log.Info("Sensor", "types count : " + types.Count); + + int i = 0; + foreach (var type in types) + { + global::Tizen.Log.Info("Sensor", "type : " + type); + + if (i % 2 == 0) + { + Items.Add(new ItemClass(type, new Color(0.0f, 0.0f, 0.0f, 0.0f))); + } + else + { + Items.Add(new ItemClass(type, new Color(0.0f, 0.0f, 0.0f, 0.02f))); + } + + i++; + } + } + } + + /// + /// Main Content Page with the supported sensor list on the current device. + /// + public partial class SensorMain : ContentPage + { + SensorManager sensorManager = new SensorManager(); + + public ObservableCollection Items { get; set; } + + /// + /// The constructor of SensorMain. + /// + public SensorMain() + { + InitializeComponent(); + BindingContext = new ViewModel(); + } + + /// + /// This method will be called when a list item is selected. + /// + /// Event sender + /// Event arguments + void OnItemSelected(object sender, SelectionChangedEventArgs e) + { + List cur = new List(e.CurrentSelection); + + foreach (ItemClass item in e.PreviousSelection) + { + if (cur.Contains(item)) continue; + + } + foreach (ItemClass item in cur) + { + SensorInfo info = sensorManager.GetSensorInfo((cur[0] as ItemClass).Text); + OpenSensorPage(info); + } + } + + /// + /// Opens specific sensor page. + /// + /// Sensor information + public void OpenSensorPage(SensorInfo info) + { + if (info.Type == SensorTypes.AccelerometerType) + { + Program.navigator.Push(new AccelerometerPage(info)); + } + + if (info.Type == SensorTypes.FaceDownGestureDetectorType) + { + Program.navigator.Push(new FaceDownGestureDetectorPage(info)); + } + + if (info.Type == SensorTypes.GravitySensorType) + { + Program.navigator.Push(new GravitySensorPage(info)); + } + + if (info.Type == SensorTypes.GyroscopeType) + { + Program.navigator.Push(new GyroscopePage(info)); + } + + if (info.Type == SensorTypes.GyroscopeRotationVectorType) + { + Program.navigator.Push(new GyroscopeRotationVectorSensorPage(info)); + } + + if (info.Type == SensorTypes.HeartRateMonitorType) + { + Program.navigator.Push(new HeartRateMonitorPage(info)); + } + + if (info.Type == SensorTypes.HumiditySensorType) + { + Program.navigator.Push(new HumiditySensorPage(info)); + } + + if (info.Type == SensorTypes.InVehicleActivityDetectorType) + { + Program.navigator.Push(new InVehicleActivityDetectorPage(info)); + } + + if (info.Type == SensorTypes.LightSensorType) + { + Program.navigator.Push(new LightSensorPage(info)); + } + + if (info.Type == SensorTypes.LinearAccelerationSensorType) + { + Program.navigator.Push(new LinearAccelerationSensorPage(info)); + } + + if (info.Type == SensorTypes.MagnetometerType) + { + Program.navigator.Push(new MagnetometerPage(info)); + } + + if (info.Type == SensorTypes.MagnetometerRotationVectorType) + { + Program.navigator.Push(new MagnetometerRotationVectorSensorPage(info)); + } + + if (info.Type == SensorTypes.OrientationSensorType) + { + Program.navigator.Push(new OrientationSensorPage(info)); + } + + if (info.Type == SensorTypes.PedometerType) + { + Program.navigator.Push(new PedometerPage(info)); + } + + if (info.Type == SensorTypes.PickUpGestureDetectorType) + { + Program.navigator.Push(new PickUpGestureDetectorPage(info)); + } + + if (info.Type == SensorTypes.PressureSensorType) + { + Program.navigator.Push(new PressureSensorPage(info)); + } + + if (info.Type == SensorTypes.ProximitySensorType) + { + Program.navigator.Push(new ProximitySensorPage(info)); + } + + if (info.Type == SensorTypes.RotationVectorSensorType) + { + Program.navigator.Push(new RotationVectorSensorPage(info)); + } + + if (info.Type == SensorTypes.RunningActivityDetectorType) + { + Program.navigator.Push(new RunningActivityDetectorPage(info)); + } + + if (info.Type == SensorTypes.SleepMonitorType) + { + Program.navigator.Push(new SleepMonitorPage(info)); + } + + if (info.Type == SensorTypes.StationaryActivityDetectorType) + { + Program.navigator.Push(new StationaryActivityDetectorPage(info)); + } + + if (info.Type == SensorTypes.TemperatureSensorType) + { + Program.navigator.Push(new TemperatureSensorPage(info)); + } + + if (info.Type == SensorTypes.UltravioletSensorType) + { + Program.navigator.Push(new UltravioletSensorPage(info)); + } + + if (info.Type == SensorTypes.UncalibratedGyroscopeType) + { + Program.navigator.Push(new UncalibratedGyroscopePage(info)); + } + + if (info.Type == SensorTypes.UncalibratedMagnetometerType) + { + Program.navigator.Push(new UncalibratedMagnetometerPage(info)); + } + + if (info.Type == SensorTypes.WalkingActivityDetectorType) + { + Program.navigator.Push(new WalkingActivityDetectorPage(info)); + } + + if (info.Type == SensorTypes.WristUpGestureDetectorType) + { + Program.navigator.Push(new WristUpGestureDetectorPage(info)); + } + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorManager.cs b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorManager.cs new file mode 100755 index 000000000..b29ecf336 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/SensorManager.cs @@ -0,0 +1,225 @@ +/* +* Copyright (c) 2017 Samsung Electronics Co., Ltd 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. +*/ + +using Sensor.Tizen.Mobile; +using Sensor.Tizen.Mobile.Sensors; +using System; +using System.Collections.Generic; +using Tizen.Sensor; +using Tizen.NUI.Binding; + +namespace Sensor.Tizen.Mobile +{ + /// + /// SensorManager Implementation class + /// + public class SensorManager : ISensorManager + { + private static Dictionary sensorList = new Dictionary(); + + /// + /// Initialize sensor list. + /// + private void Initialize() + { + if (Accelerometer.IsSupported) + { + sensorList.Add(SensorTypes.AccelerometerType, new AccelerometerAdapter()); + } + + if (FaceDownGestureDetector.IsSupported) + { + sensorList.Add(SensorTypes.FaceDownGestureDetectorType, new FaceDownGestureDetectorAdapter()); + } + + if (GravitySensor.IsSupported) + { + sensorList.Add(SensorTypes.GravitySensorType, new GravitySensorAdapter()); + } + + if (Gyroscope.IsSupported) + { + sensorList.Add(SensorTypes.GyroscopeType, new GyroscopeAdapter()); + } + + if (GyroscopeRotationVectorSensor.IsSupported) + { + sensorList.Add(SensorTypes.GyroscopeRotationVectorType, new GyroscopeRotationVectorSensorAdapter()); + } + + if (HeartRateMonitor.IsSupported) + { + sensorList.Add(SensorTypes.HeartRateMonitorType, new HeartRateMonitorAdapter()); + } + + if (HumiditySensor.IsSupported) + { + sensorList.Add(SensorTypes.HumiditySensorType, new HumiditySensorAdapter()); + } + + if (InVehicleActivityDetector.IsSupported) + { + sensorList.Add(SensorTypes.InVehicleActivityDetectorType, new InVehicleActivityDetectorAdapter()); + } + + if (LightSensor.IsSupported) + { + sensorList.Add(SensorTypes.LightSensorType, new LightSensorAdapter()); + } + + if (LinearAccelerationSensor.IsSupported) + { + sensorList.Add(SensorTypes.LinearAccelerationSensorType, new LinearAccelerationSensorAdapter()); + } + + if (Magnetometer.IsSupported) + { + sensorList.Add(SensorTypes.MagnetometerType, new MagnetometerAdapter()); + } + + if (MagnetometerRotationVectorSensor.IsSupported) + { + sensorList.Add(SensorTypes.MagnetometerRotationVectorType, new MagnetometerRotationVectorSensorAdapter()); + } + + if (OrientationSensor.IsSupported) + { + sensorList.Add(SensorTypes.OrientationSensorType, new OrientationSensorAdapter()); + } + + if (Pedometer.IsSupported) + { + sensorList.Add(SensorTypes.PedometerType, new PedometerAdapter()); + } + + if (PickUpGestureDetector.IsSupported) + { + sensorList.Add(SensorTypes.PickUpGestureDetectorType, new PickUpGestureDetectorAdapter()); + } + + if (PressureSensor.IsSupported) + { + sensorList.Add(SensorTypes.PressureSensorType, new PressureSensorAdapter()); + } + + if (ProximitySensor.IsSupported) + { + sensorList.Add(SensorTypes.ProximitySensorType, new ProximitySensorAdapter()); + } + + if (RotationVectorSensor.IsSupported) + { + sensorList.Add(SensorTypes.RotationVectorSensorType, new RotationVectorSensorAdapter()); + } + + if (RunningActivityDetector.IsSupported) + { + sensorList.Add(SensorTypes.RunningActivityDetectorType, new RunningActivityDetectorAdapter()); + } + + if (SleepMonitor.IsSupported) + { + sensorList.Add(SensorTypes.SleepMonitorType, new SleepMonitorAdapter()); + } + + if (StationaryActivityDetector.IsSupported) + { + sensorList.Add(SensorTypes.StationaryActivityDetectorType, new StationaryActivityDetectorAdapter()); + } + + if (TemperatureSensor.IsSupported) + { + sensorList.Add(SensorTypes.TemperatureSensorType, new TemperatureSensorAdapter()); + } + + if (UltravioletSensor.IsSupported) + { + sensorList.Add(SensorTypes.UltravioletSensorType, new UltravioletSensorAdapter()); + } + + if (UncalibratedGyroscope.IsSupported) + { + sensorList.Add(SensorTypes.UncalibratedGyroscopeType, new UncalibratedGyroscopeAdapter()); + } + + if (UncalibratedMagnetometer.IsSupported) + { + sensorList.Add(SensorTypes.UncalibratedMagnetometerType, new UncalibratedMagnetometerAdapter()); + } + + if (WalkingActivityDetector.IsSupported) + { + sensorList.Add(SensorTypes.WalkingActivityDetectorType, new WalkingActivityDetectorAdapter()); + } + + if (WristUpGestureDetector.IsSupported) + { + sensorList.Add(SensorTypes.WristUpGestureDetectorType, new WristUpGestureDetectorAdapter()); + } + } + + /// + /// Gets supported sensor types on the current device. + /// + /// Sensor types + public List GetSensorTypeList() + { + List sensorTypeList = new List(); + + PrivacyChecker.CheckPermission("http://tizen.org/privilege/healthinfo"); + + Initialize(); + + foreach (var sensor in sensorList) + { + sensorTypeList.Add(sensor.Key); + } + + return sensorTypeList; + } + + /// + /// Gets sensor information. + /// + /// Sensor type + /// Sensor Information + public SensorInfo GetSensorInfo(string type) + { + return sensorList[type].GetSensorInfo(); + } + + /// + /// Start sensor. + /// + /// Sensor type + /// Event handler + public void StartSensor(string type, EventHandler listener) + { + global::Tizen.Log.Error("Sensor", "type : " + type); + sensorList[type].Start(listener); + } + + /// + /// Stop sensor. + /// + /// Sensor type + /// Event handler + public void StopSensor(string type, EventHandler listener) + { + sensorList[type].Stop(listener); + } + } +} diff --git a/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/AccelerometerPage.xaml b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/AccelerometerPage.xaml new file mode 100755 index 000000000..15c7ff147 --- /dev/null +++ b/Mobile/NUI/Sensor/src/Sensor/Sensor.Tizen.Mobile/Sensor/Pages/Sensors/AccelerometerPage.xaml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +