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.

AudiodetectionAndAccelerometerActivity.java 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package com.example.greenwatch;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import androidx.lifecycle.Observer;
  4. import androidx.lifecycle.ViewModelProvider;
  5. import androidx.recyclerview.widget.LinearLayoutManager;
  6. import androidx.recyclerview.widget.RecyclerView;
  7. import android.hardware.Sensor;
  8. import android.hardware.SensorEvent;
  9. import android.hardware.SensorEventListener;
  10. import android.hardware.SensorManager;
  11. import android.os.Bundle;
  12. import android.view.SurfaceView;
  13. import android.view.View;
  14. import android.widget.Button;
  15. import android.widget.TextView;
  16. import android.widget.Toast;
  17. import com.example.greenwatch.adapters.AlarmHistoryListAdapter;
  18. import com.example.greenwatch.adapters.DeviceListAdapter;
  19. import com.example.greenwatch.models.Device;
  20. import com.example.greenwatch.viewmodels.AudiodetectionAndAccelerometerViewModel;
  21. import java.util.List;
  22. public class AudiodetectionAndAccelerometerActivity extends AppCompatActivity implements SensorEventListener {
  23. private SensorManager accelerometerManager;
  24. private Sensor accelerometerSensor;
  25. private SurfaceView surfaceView;
  26. private TextView audiodetectionAndAccelerometerStatusMessage;
  27. private TextView tvAudiodetectionAndAccelerometerDeviceListRecyclerView;
  28. private TextView tvAudiodetectionAndAccelerometerAlarmHistoryListRecyclerView;
  29. private AudiodetectionAndAccelerometerViewModel mAudiodetectionAndAccelerometerViewModel;
  30. private Button backToMainActivity;
  31. private Permission permission = new Permission();
  32. @Override
  33. protected void onCreate(Bundle savedInstanceState) {
  34. super.onCreate(savedInstanceState);
  35. setContentView(R.layout.activity_audiodetection_and_accelerometer);
  36. surfaceView = (SurfaceView) findViewById(R.id.surfaceViewAudiodetectionAndAccelerometer);
  37. audiodetectionAndAccelerometerStatusMessage = (TextView) findViewById(R.id.tvAudiodetectionAndAccelerometerStatusmessage);
  38. tvAudiodetectionAndAccelerometerDeviceListRecyclerView = (TextView) findViewById(R.id.tvAudiodetectionAndAccelerometerDeviceListRecyclerView);
  39. tvAudiodetectionAndAccelerometerAlarmHistoryListRecyclerView = (TextView) findViewById(R.id.tvAudiodetectionAndAccelerometerAlarmHistoryListRecyclerView);
  40. backToMainActivity = (Button) findViewById(R.id.audiodetectionAndAccelerometerBackToMainActivity);
  41. RecyclerView recyclerView = findViewById(R.id.deviceListRecyclerView);
  42. recyclerView.setLayoutManager(new LinearLayoutManager(this));
  43. recyclerView.setHasFixedSize(true);
  44. final DeviceListAdapter deviceListAdapter = new DeviceListAdapter();
  45. recyclerView.setAdapter(deviceListAdapter);
  46. RecyclerView alarmHistoryListRecyclerView = findViewById(R.id.alarmHistoryListRecyclerView);
  47. alarmHistoryListRecyclerView.setLayoutManager(new LinearLayoutManager(this));
  48. alarmHistoryListRecyclerView.setHasFixedSize(true);
  49. final AlarmHistoryListAdapter alarmHistoryListAdapter = new AlarmHistoryListAdapter();
  50. alarmHistoryListRecyclerView.setAdapter(alarmHistoryListAdapter);
  51. backToMainActivity.setOnClickListener(new View.OnClickListener() {
  52. @Override
  53. public void onClick(View v) {
  54. finish();
  55. }
  56. });
  57. mAudiodetectionAndAccelerometerViewModel = new ViewModelProvider(this).get(AudiodetectionAndAccelerometerViewModel.class);
  58. mAudiodetectionAndAccelerometerViewModel.init(surfaceView.getHolder());
  59. mAudiodetectionAndAccelerometerViewModel.getConnectedDeviceList().observe(this, new Observer<List<Device>>() {
  60. @Override
  61. public void onChanged(List<Device> devices) {
  62. deviceListAdapter.setDevices(devices);
  63. }
  64. });
  65. mAudiodetectionAndAccelerometerViewModel.getAlarmHistoryList().observe(this, new Observer<List<Device>>() {
  66. @Override
  67. public void onChanged(List<Device> devices) {
  68. alarmHistoryListAdapter.setAlarmHistoryList(devices);
  69. }
  70. });
  71. mAudiodetectionAndAccelerometerViewModel.getStartAlarmRecording().observe(this, new Observer<Boolean>() {
  72. @Override
  73. public void onChanged(Boolean aBoolean) {
  74. if (aBoolean) {
  75. if(permission.alarmRechtePruefen(AudiodetectionAndAccelerometerActivity.this, AudiodetectionAndAccelerometerActivity.this)){
  76. Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show();
  77. mAudiodetectionAndAccelerometerViewModel.startAlarmRecording();
  78. //todo AlarmHandling einfügen
  79. } else {
  80. permission.alarmRechteAnfordern(AudiodetectionAndAccelerometerActivity.this);
  81. if(permission.alarmRechtePruefen(AudiodetectionAndAccelerometerActivity.this, AudiodetectionAndAccelerometerActivity.this)){
  82. Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show();
  83. mAudiodetectionAndAccelerometerViewModel.startAlarmRecording();
  84. //todo Alarmhandling einfügen
  85. } else {
  86. Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show();
  87. mAudiodetectionAndAccelerometerViewModel.stopAlarmRecording(AudiodetectionAndAccelerometerActivity.this);
  88. }
  89. }
  90. }
  91. else {
  92. Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show();
  93. mAudiodetectionAndAccelerometerViewModel.stopAlarmRecording(AudiodetectionAndAccelerometerActivity.this);
  94. }
  95. }
  96. });
  97. mAudiodetectionAndAccelerometerViewModel.getAudiodetectionAndAccelerometerAlarmDetected().observe(this, new Observer<Boolean>() {
  98. @Override
  99. public void onChanged(Boolean aBoolean) {
  100. if (aBoolean) {
  101. Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "onChangedTrue", Toast.LENGTH_LONG).show();
  102. if (mAudiodetectionAndAccelerometerViewModel.getAccelerometerAlarmDetected() && !mAudiodetectionAndAccelerometerViewModel.getMicrofonAlarmDetected()) {
  103. mAudiodetectionAndAccelerometerViewModel.updateDevice(mAudiodetectionAndAccelerometerViewModel.getLocalDeviceUUID(), mAudiodetectionAndAccelerometerViewModel.getSystemTimeStamp(), true, "Accelerometer", mAudiodetectionAndAccelerometerViewModel.getAccelerometerSensorMeanValue());
  104. }
  105. else if (mAudiodetectionAndAccelerometerViewModel.getMicrofonAlarmDetected() && !mAudiodetectionAndAccelerometerViewModel.getAccelerometerAlarmDetected()) {
  106. mAudiodetectionAndAccelerometerViewModel.updateDevice(mAudiodetectionAndAccelerometerViewModel.getLocalDeviceUUID(), mAudiodetectionAndAccelerometerViewModel.getSystemTimeStamp(), true, "Audio", mAudiodetectionAndAccelerometerViewModel.getAmplitudeInDB());
  107. }
  108. else if (mAudiodetectionAndAccelerometerViewModel.getMicrofonAlarmDetected() && mAudiodetectionAndAccelerometerViewModel.getAccelerometerAlarmDetected()) {
  109. mAudiodetectionAndAccelerometerViewModel.updateDevice(mAudiodetectionAndAccelerometerViewModel.getLocalDeviceUUID(), mAudiodetectionAndAccelerometerViewModel.getSystemTimeStamp(), true, "AudioAndAccelerometer", mAudiodetectionAndAccelerometerViewModel.getAmplitudeInDB());
  110. }
  111. }
  112. else {
  113. Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "onChangedFalse", Toast.LENGTH_LONG).show();
  114. mAudiodetectionAndAccelerometerViewModel.updateDevice(mAudiodetectionAndAccelerometerViewModel.getLocalDeviceUUID(), mAudiodetectionAndAccelerometerViewModel.getSystemTimeStamp(), false, "AudioAndAccelerometer", 0.0f);
  115. }
  116. }
  117. });
  118. accelerometerManager = (SensorManager) getSystemService(SENSOR_SERVICE);
  119. if (accelerometerManager.getSensorList(Sensor.TYPE_GYROSCOPE).size() == 0) {
  120. accelerometerSensor = null;
  121. Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "No accelerometer sensor available", Toast.LENGTH_LONG).show();
  122. }
  123. else {
  124. accelerometerSensor = accelerometerManager.getSensorList(Sensor.TYPE_GYROSCOPE).get(0);
  125. }
  126. }
  127. @Override
  128. public void onSensorChanged(SensorEvent event) {
  129. StringBuilder sb = new StringBuilder();
  130. sb.append("x=")
  131. .append(event.values[0])
  132. .append("\ny=")
  133. .append(event.values[1])
  134. .append("\nz=")
  135. .append(event.values[2]);
  136. audiodetectionAndAccelerometerStatusMessage.setText(sb.toString());
  137. mAudiodetectionAndAccelerometerViewModel.addValueToGesamtBE(event.values[0] + event.values[1] + event.values[2]);
  138. mAudiodetectionAndAccelerometerViewModel.meanValueCalculation();
  139. mAudiodetectionAndAccelerometerViewModel.calibrateAccelerometerSensor();
  140. mAudiodetectionAndAccelerometerViewModel.checkAlarmCondition();
  141. }
  142. @Override
  143. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  144. }
  145. @Override
  146. protected void onResume() {
  147. super.onResume();
  148. mAudiodetectionAndAccelerometerViewModel.startMicrofonSensor();
  149. if (accelerometerSensor != null) {
  150. if (accelerometerManager.registerListener(this, accelerometerSensor, SensorManager.SENSOR_DELAY_GAME)) {
  151. Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "We registered to the sensor", Toast.LENGTH_LONG).show();
  152. } else {
  153. Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Registration did not work", Toast.LENGTH_LONG).show();
  154. }
  155. }
  156. }
  157. @Override
  158. protected void onPause() {
  159. super.onPause();
  160. if (isFinishing()){
  161. mAudiodetectionAndAccelerometerViewModel.recalibrationMicrofonSensor();
  162. }
  163. mAudiodetectionAndAccelerometerViewModel.stopMicrofonSensor();
  164. if (accelerometerSensor != null) {
  165. accelerometerManager.unregisterListener(this, accelerometerSensor);
  166. }
  167. }
  168. }