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

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