You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AudiodetectionAndAccelerometerViewModel.java 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. package com.example.greenwatch.viewmodels;
  2. import androidx.lifecycle.LiveData;
  3. import androidx.lifecycle.MutableLiveData;
  4. import androidx.lifecycle.Observer;
  5. import androidx.lifecycle.ViewModel;
  6. import com.example.greenwatch.models.Device;
  7. import com.example.greenwatch.repositories.DeviceRepository;
  8. import com.example.greenwatch.sensors.AccelerometerSensor;
  9. import com.example.greenwatch.sensors.MicrofonSensor;
  10. import java.util.List;
  11. public class AudiodetectionAndAccelerometerViewModel extends ViewModel implements ViewModelInterface {
  12. private MutableLiveData<List<Device>> mDeviceList;
  13. private MutableLiveData<Boolean> mAccelerometerAlarmDetected;
  14. private MutableLiveData<Boolean> mMicrofonAlarmDetected;
  15. private MutableLiveData<Boolean> mAudiodetectionAndAccelerometerAlarmDetected = new MutableLiveData<>();
  16. private MutableLiveData<List<Device>> mAlarmHistoryList;
  17. private MutableLiveData<Boolean> mStartAlarmRecording;
  18. private AccelerometerSensor mAccelerometerSensor;
  19. private MicrofonSensor mMicrofonSensor;
  20. private DeviceRepository mDeviceRepository;
  21. private boolean microfonAlarmDetected;
  22. private boolean accelerometerAlarmDetected;
  23. private boolean microfondetectionAndAccelerometerAlarmDetected;
  24. @Override
  25. public void init() {
  26. if (mDeviceRepository == null) {
  27. mDeviceRepository = DeviceRepository.getInstance();
  28. }
  29. if (mAccelerometerSensor == null) {
  30. mAccelerometerSensor = AccelerometerSensor.getInstance();
  31. }
  32. if (mMicrofonSensor == null) {
  33. mMicrofonSensor = MicrofonSensor.getInstance();
  34. }
  35. if (mDeviceList == null) {
  36. mDeviceList = mDeviceRepository.getConnectedDeviceList();
  37. }
  38. if (mAlarmHistoryList == null) {
  39. mAlarmHistoryList = mDeviceRepository.getAlarmHistoryDeviceList();
  40. }
  41. if (mStartAlarmRecording == null) {
  42. mStartAlarmRecording = mDeviceRepository.getStartAlarmRecording();
  43. }
  44. if (mAccelerometerAlarmDetected == null) {
  45. mAccelerometerAlarmDetected = mAccelerometerSensor.getAccelerometerAlarmDetected();
  46. }
  47. if (mMicrofonAlarmDetected == null) {
  48. mMicrofonAlarmDetected = mMicrofonSensor.getAccelerometerAlarmDetected();
  49. }
  50. microfondetectionAndAccelerometerAlarmDetected = false;
  51. accelerometerAlarmDetected = false;
  52. microfonAlarmDetected = false;
  53. registerAlarmObserver();
  54. }
  55. public void addValueToGesamtBE(float newValue) {
  56. mAccelerometerSensor.addValueToGesamtBE(newValue);
  57. }
  58. public void meanValueCalculation() {
  59. mAccelerometerSensor.meanValueCalculation();
  60. }
  61. public void calibrateAccelerometerSensor() {
  62. mAccelerometerSensor.calibrateAccelerometerSensor();
  63. }
  64. public void checkAlarmCondition() {
  65. mAccelerometerSensor.checkAlarmCondition();
  66. }
  67. public LiveData<Boolean> getAudiodetectionAndAccelerometerAlarmDetected() {
  68. setMutableLiveDataMicrofondetectionAndAccelerometerAlarmDetected();
  69. return mAudiodetectionAndAccelerometerAlarmDetected;
  70. }
  71. public void startMicrofonSensor() {
  72. mMicrofonSensor.start();
  73. }
  74. public void stopMicrofonSensor() {
  75. mMicrofonSensor.stop();
  76. }
  77. public void recalibrationMicrofonSensor() {
  78. mMicrofonSensor.doRecalibration();
  79. }
  80. public float getAmplitudeInDB() {
  81. return mMicrofonSensor.getAmplitudeInDB();
  82. }
  83. private void setMutableLiveDataMicrofondetectionAndAccelerometerAlarmDetected() {
  84. mAudiodetectionAndAccelerometerAlarmDetected.setValue(microfondetectionAndAccelerometerAlarmDetected);
  85. }
  86. private void setAccelerometerAlarmDetected(boolean accelerometerAlarmDetected) {
  87. this.accelerometerAlarmDetected = accelerometerAlarmDetected;
  88. }
  89. public boolean getAccelerometerAlarmDetected() {
  90. return accelerometerAlarmDetected;
  91. }
  92. private void setMicrofonAlarmDetected(boolean microfonAlarmDetected) {
  93. this.microfonAlarmDetected = microfonAlarmDetected;
  94. }
  95. public boolean getMicrofonAlarmDetected() {
  96. return microfonAlarmDetected;
  97. }
  98. Observer<Boolean> observer = new Observer<Boolean>() {
  99. @Override
  100. public void onChanged(Boolean aBoolean) {
  101. setAccelerometerAlarmDetected(mAccelerometerAlarmDetected.getValue());
  102. setMicrofonAlarmDetected(mMicrofonAlarmDetected.getValue());
  103. if (microfonAlarmDetected || accelerometerAlarmDetected && !microfondetectionAndAccelerometerAlarmDetected) {
  104. microfondetectionAndAccelerometerAlarmDetected = true;
  105. setMutableLiveDataMicrofondetectionAndAccelerometerAlarmDetected();
  106. }
  107. else if (!microfonAlarmDetected && !accelerometerAlarmDetected && microfondetectionAndAccelerometerAlarmDetected) {
  108. microfondetectionAndAccelerometerAlarmDetected = false;
  109. setMutableLiveDataMicrofondetectionAndAccelerometerAlarmDetected();
  110. }
  111. }
  112. };
  113. private void registerAlarmObserver() {
  114. mMicrofonAlarmDetected.observeForever(observer);
  115. mAccelerometerAlarmDetected.observeForever(observer);
  116. }
  117. @Override
  118. protected void onCleared() {
  119. super.onCleared();
  120. mMicrofonAlarmDetected.removeObserver(observer);
  121. mAccelerometerAlarmDetected.removeObserver(observer);
  122. }
  123. @Override
  124. public LiveData<List<Device>> getConnectedDeviceList() {
  125. return mDeviceList;
  126. }
  127. @Override
  128. public LiveData<List<Device>> getAlarmHistoryList() {
  129. return mAlarmHistoryList;
  130. }
  131. @Override
  132. public LiveData<Boolean> getStartAlarmRecording() {
  133. return mStartAlarmRecording;
  134. }
  135. @Override
  136. public void updateDevice(String deviceID, String timeStamp, boolean sensorStatus, String sensorType, int sensorMassage) {
  137. mDeviceRepository.updateDevice(deviceID, timeStamp, sensorStatus, sensorType, sensorMassage);
  138. }
  139. @Override
  140. public void setTimeStamp(String deviceID, String timeStamp) {
  141. mDeviceRepository.setTimeStamp(deviceID, timeStamp);
  142. }
  143. @Override
  144. public String getTimeStamp(String deviceID) {
  145. return mDeviceRepository.getTimeStamp(deviceID);
  146. }
  147. @Override
  148. public void setDeviceID(String deviceID, String newDeviceID) {
  149. mDeviceRepository.setDeviceID(deviceID, newDeviceID);
  150. }
  151. @Override
  152. public String getDeviceID(String deviceID) {
  153. return mDeviceRepository.getDeviceID(deviceID);
  154. }
  155. @Override
  156. public void setSensorStatus(String deviceID, boolean sensorStatus) {
  157. mDeviceRepository.setSensorStatus(deviceID, sensorStatus);
  158. }
  159. @Override
  160. public boolean getSensorStatus(String deviceID) {
  161. return mDeviceRepository.getSensorStatus(deviceID);
  162. }
  163. @Override
  164. public void setSensorType(String deviceID, String sensorType) {
  165. mDeviceRepository.setSensorType(deviceID, sensorType);
  166. }
  167. @Override
  168. public String getSensorType(String deviceID) {
  169. return mDeviceRepository.getSensorType(deviceID);
  170. }
  171. @Override
  172. public void setSensorMassage(String deviceID, int sensorMessage) {
  173. mDeviceRepository.setSensorMassage(deviceID, sensorMessage);
  174. }
  175. @Override
  176. public int getSensorMassage(String deviceID) {
  177. return mDeviceRepository.getSensorMassage(deviceID);
  178. }
  179. @Override
  180. public String getLocalDeviceUUID() {
  181. return mDeviceRepository.getLocalDeviceUUID();
  182. }
  183. @Override
  184. public String getSystemTimeStamp() {
  185. return mDeviceRepository.getSystemTimeStamp();
  186. }
  187. }