From 6c4b6b67a45851774205eeaa09d7b40d3e3fc003 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 18 Jun 2023 23:00:30 +0200 Subject: [PATCH] Move the acceleration sensor to its own class --- .../greenwatch/AccelerometerActivity.java | 2 +- .../sensors/AccelerometerSensor.java | 85 +++++++++++++++++++ .../greenwatch/sensors/CameraSensor.java | 8 +- .../viewmodels/AccelerometerViewModel.java | 69 +++++---------- 4 files changed, 111 insertions(+), 53 deletions(-) create mode 100644 app/src/main/java/com/example/greenwatch/sensors/AccelerometerSensor.java diff --git a/app/src/main/java/com/example/greenwatch/AccelerometerActivity.java b/app/src/main/java/com/example/greenwatch/AccelerometerActivity.java index 873a971..ec863b2 100644 --- a/app/src/main/java/com/example/greenwatch/AccelerometerActivity.java +++ b/app/src/main/java/com/example/greenwatch/AccelerometerActivity.java @@ -92,7 +92,7 @@ public class AccelerometerActivity extends AppCompatActivity implements SensorEv } }); - mAccelerometerViewModel.getMovementDetectedValue().observe(this, new Observer() { + mAccelerometerViewModel.getAccelerometerAlarmDetected().observe(this, new Observer() { @Override public void onChanged(Boolean aBoolean) { if (aBoolean) { diff --git a/app/src/main/java/com/example/greenwatch/sensors/AccelerometerSensor.java b/app/src/main/java/com/example/greenwatch/sensors/AccelerometerSensor.java new file mode 100644 index 0000000..70bc6a1 --- /dev/null +++ b/app/src/main/java/com/example/greenwatch/sensors/AccelerometerSensor.java @@ -0,0 +1,85 @@ +package com.example.greenwatch.sensors; + +import androidx.lifecycle.MutableLiveData; + +import java.util.ArrayList; + +public class AccelerometerSensor { + private MutableLiveData mAccelerometerAlarmDetected = new MutableLiveData<>(); + private static AccelerometerSensor accelerometerSensorInstance; + private boolean accelerometerAlarmDetected; + private ArrayList Gesamt_be; + int arraySize = 500; + int functionCallCount; + float meanValue; + float offsetValue; + float thresholdValue; + boolean startMeasuring; + + private AccelerometerSensor() { + initGesamtBE(); + accelerometerAlarmDetected = false; + setMutableLiveDataAccelerometerAlarmDetected(); + functionCallCount = 0; + meanValue = 0.0f; + offsetValue = 0.1f; + thresholdValue = 0.15f; + startMeasuring = false; + } + + public static synchronized AccelerometerSensor getInstance() { + if (accelerometerSensorInstance == null){ + accelerometerSensorInstance = new AccelerometerSensor(); + } + return accelerometerSensorInstance; + } + + public MutableLiveData getAccelerometerAlarmDetected() { + setMutableLiveDataAccelerometerAlarmDetected(); + return mAccelerometerAlarmDetected; + } + + private void setMutableLiveDataAccelerometerAlarmDetected() { + mAccelerometerAlarmDetected.setValue(accelerometerAlarmDetected); + } + + private void initGesamtBE() { + Gesamt_be = new ArrayList<>(arraySize); + for (int i = 0; i < arraySize; i++) { + Gesamt_be.add(0.0f); + } + } + + public void addValueToGesamtBE(float newValue) { + if (Gesamt_be.size() == arraySize) { + Gesamt_be.remove(Gesamt_be.size() -1); + } + Gesamt_be.add(0, newValue); + functionCallCount++; + } + + public void meanValueCalculation() { + for (float element : Gesamt_be) { + meanValue += Math.abs(element); + } + meanValue = meanValue/arraySize; + } + + public void calibrateAccelerometerSensor() { + if (functionCallCount <= arraySize) { + offsetValue = meanValue; + } + else { + startMeasuring = true; + } + } + + public void checkAlarmCondition() { + if (meanValue > (thresholdValue + offsetValue) && startMeasuring && !mAccelerometerAlarmDetected.getValue()) { + mAccelerometerAlarmDetected.setValue(true); + } + else if (meanValue < (thresholdValue + offsetValue) && mAccelerometerAlarmDetected.getValue()){ + mAccelerometerAlarmDetected.setValue(false); + } + } +} diff --git a/app/src/main/java/com/example/greenwatch/sensors/CameraSensor.java b/app/src/main/java/com/example/greenwatch/sensors/CameraSensor.java index 7933115..47cd07f 100644 --- a/app/src/main/java/com/example/greenwatch/sensors/CameraSensor.java +++ b/app/src/main/java/com/example/greenwatch/sensors/CameraSensor.java @@ -34,11 +34,11 @@ public class CameraSensor { } public MutableLiveData getVideoAlarmDetectedValue() { - setMutableLiveDataVideoMovementDetected(); + setMutableLiveDataVideoAlarmDetected(); return mVideoAlarmDetected; } - private void setMutableLiveDataVideoMovementDetected() { + private void setMutableLiveDataVideoAlarmDetected() { mVideoAlarmDetected.setValue(videoAlarmDetected); } @@ -117,10 +117,10 @@ public class CameraSensor { public void checkAlarmCondition() { if (videoAlarmDetected && !mVideoAlarmDetected.getValue()) { - setMutableLiveDataVideoMovementDetected(); + setMutableLiveDataVideoAlarmDetected(); } else if (!videoAlarmDetected && mVideoAlarmDetected.getValue()){ - setMutableLiveDataVideoMovementDetected(); + setMutableLiveDataVideoAlarmDetected(); } } } diff --git a/app/src/main/java/com/example/greenwatch/viewmodels/AccelerometerViewModel.java b/app/src/main/java/com/example/greenwatch/viewmodels/AccelerometerViewModel.java index 74070fc..344480f 100644 --- a/app/src/main/java/com/example/greenwatch/viewmodels/AccelerometerViewModel.java +++ b/app/src/main/java/com/example/greenwatch/viewmodels/AccelerometerViewModel.java @@ -6,86 +6,59 @@ import androidx.lifecycle.ViewModel; import com.example.greenwatch.models.Device; import com.example.greenwatch.repositories.DeviceRepository; +import com.example.greenwatch.sensors.AccelerometerSensor; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; import java.util.List; public class AccelerometerViewModel extends ViewModel implements ViewModelInterface { private MutableLiveData> mDeviceList; - private MutableLiveData mMovementDetected = new MutableLiveData<>(); + private MutableLiveData mAccelerometerAlarmDetected; private MutableLiveData> mAlarmHistoryList; private MutableLiveData mStartAlarmRecording; + private AccelerometerSensor mAccelerometerSensor; private DeviceRepository mDeviceRepository; - private ArrayList Gesamt_be; - int arraySize = 500; - int functionCallCount; - float meanValue; - float offsetValue; - float thresholdValue; - boolean startMeasuring; @Override public void init() { - if (mDeviceList == null) { + if (mDeviceRepository == null) { mDeviceRepository = DeviceRepository.getInstance(); + } + if (mAccelerometerSensor == null) { + mAccelerometerSensor = AccelerometerSensor.getInstance(); + } + if (mDeviceList == null) { mDeviceList = mDeviceRepository.getConnectedDeviceList(); + } + if (mAlarmHistoryList == null) { mAlarmHistoryList = mDeviceRepository.getAlarmHistoryDeviceList(); + } + if (mStartAlarmRecording == null) { mStartAlarmRecording = mDeviceRepository.getStartAlarmRecording(); } - initGesamtBE(); - mMovementDetected.setValue(false); - functionCallCount = 0; - meanValue = 0f; - offsetValue = 0.1f; - thresholdValue = 0.15f; - startMeasuring = false; - } - - public void initGesamtBE() { - Gesamt_be = new ArrayList<>(arraySize); - for (int i = 0; i < arraySize; i++) { - Gesamt_be.add(0f); + if (mAccelerometerAlarmDetected == null) { + mAccelerometerAlarmDetected = mAccelerometerSensor.getAccelerometerAlarmDetected(); } } public void addValueToGesamtBE(float newValue) { - if (Gesamt_be.size() == arraySize) { - Gesamt_be.remove(Gesamt_be.size() -1); - } - Gesamt_be.add(0, newValue); - functionCallCount++; + mAccelerometerSensor.addValueToGesamtBE(newValue); } public void meanValueCalculation() { - for (float element : Gesamt_be) { - meanValue += Math.abs(element); - } - meanValue = meanValue/arraySize; + mAccelerometerSensor.meanValueCalculation(); } public void calibrateAccelerometerSensor() { - if (functionCallCount <= arraySize) { - offsetValue = meanValue; - } - else { - startMeasuring = true; - } + mAccelerometerSensor.calibrateAccelerometerSensor(); } public void checkAlarmCondition() { - if (meanValue > (thresholdValue + offsetValue) && startMeasuring && !mMovementDetected.getValue()) { - mMovementDetected.setValue(true); - } - else if (meanValue < (thresholdValue + offsetValue) && mMovementDetected.getValue()){ - mMovementDetected.setValue(false); - } + mAccelerometerSensor.checkAlarmCondition(); } - public LiveData getMovementDetectedValue() { - return mMovementDetected; + public LiveData getAccelerometerAlarmDetected() { + return mAccelerometerAlarmDetected; } @Override