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.

VideodetectionAndAccelerometerViewModel.java 8.3KB

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