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 8.3KB

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