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.

AccelerometerActivity.java 8.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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.AccelerometerViewModel;
  21. import java.util.List;
  22. public class AccelerometerActivity extends AppCompatActivity implements SensorEventListener {
  23. private SensorManager accelerometerManager;
  24. private Sensor accelerometerSensor;
  25. private SurfaceView surfaceView;
  26. private TextView accelerometerStatusMessage;
  27. private TextView accelerometerDataTV;
  28. private TextView tvAccelerometerdeviceListRecyclerView;
  29. private TextView tvAccelerometeralarmHistoryListRecyclerView;
  30. private Button backToMainActivityButton;
  31. private AccelerometerViewModel mAccelerometerViewModel;
  32. private Permission permission = new Permission();
  33. @Override
  34. protected void onCreate(Bundle savedInstanceState) {
  35. super.onCreate(savedInstanceState);
  36. setContentView(R.layout.activity_accelerometer);
  37. surfaceView = (SurfaceView) findViewById(R.id.surfaceViewAccelerometer);
  38. accelerometerStatusMessage = (TextView) findViewById(R.id.tvAccelerometerStatusmessage);
  39. accelerometerDataTV = (TextView) findViewById(R.id.tvAccelerometerData);
  40. tvAccelerometerdeviceListRecyclerView = (TextView) findViewById(R.id.tvAccelerometerdeviceListRecyclerView);
  41. tvAccelerometeralarmHistoryListRecyclerView = (TextView) findViewById(R.id.tvAccelerometeralarmHistoryListRecyclerView);
  42. backToMainActivityButton = (Button) findViewById(R.id.accelerometerBackToMainActivity);
  43. RecyclerView recyclerView = findViewById(R.id.deviceListRecyclerView);
  44. recyclerView.setLayoutManager(new LinearLayoutManager(this));
  45. recyclerView.setHasFixedSize(true);
  46. final DeviceListAdapter deviceListAdapter = new DeviceListAdapter();
  47. recyclerView.setAdapter(deviceListAdapter);
  48. RecyclerView alarmHistoryListRecyclerView = findViewById(R.id.alarmHistoryListRecyclerView);
  49. alarmHistoryListRecyclerView.setLayoutManager(new LinearLayoutManager(this));
  50. alarmHistoryListRecyclerView.setHasFixedSize(true);
  51. final AlarmHistoryListAdapter alarmHistoryListAdapter = new AlarmHistoryListAdapter();
  52. alarmHistoryListRecyclerView.setAdapter(alarmHistoryListAdapter);
  53. backToMainActivityButton.setOnClickListener(new View.OnClickListener() {
  54. @Override
  55. public void onClick(View v) {
  56. finish();
  57. }
  58. });
  59. mAccelerometerViewModel = new ViewModelProvider(this).get(AccelerometerViewModel.class);
  60. mAccelerometerViewModel.init(surfaceView.getHolder());
  61. mAccelerometerViewModel.getConnectedDeviceList().observe(this, new Observer<List<Device>>() {
  62. @Override
  63. public void onChanged(List<Device> devices) {
  64. deviceListAdapter.setDevices(devices);
  65. }
  66. });
  67. mAccelerometerViewModel.getAlarmHistoryList().observe(this, new Observer<List<Device>>() {
  68. @Override
  69. public void onChanged(List<Device> devices) {
  70. alarmHistoryListAdapter.setAlarmHistoryList(devices);
  71. }
  72. });
  73. mAccelerometerViewModel.getStartAlarmRecording().observe(this, new Observer<Boolean>() {
  74. @Override
  75. public void onChanged(Boolean aBoolean) {
  76. if (aBoolean) {
  77. if(permission.alarmRechtePruefen(AccelerometerActivity.this, AccelerometerActivity.this)){
  78. Toast.makeText(AccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show();
  79. mAccelerometerViewModel.startAlarmRecording();
  80. //todo AlarmHandling einfügen
  81. }
  82. else {
  83. permission.alarmRechteAnfordern(AccelerometerActivity.this);
  84. if(permission.alarmRechtePruefen(AccelerometerActivity.this, AccelerometerActivity.this)){
  85. Toast.makeText(AccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show();
  86. mAccelerometerViewModel.startAlarmRecording();
  87. //todo Alarmhandling einfügen
  88. }
  89. else {
  90. Toast.makeText(AccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show();
  91. mAccelerometerViewModel.stopAlarmRecording(AccelerometerActivity.this);
  92. }
  93. }
  94. }
  95. else {
  96. mAccelerometerViewModel.stopAlarmRecording(AccelerometerActivity.this);
  97. Toast.makeText(AccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show();
  98. }
  99. }
  100. });
  101. mAccelerometerViewModel.getAccelerometerAlarmDetected().observe(this, new Observer<Boolean>() {
  102. @Override
  103. public void onChanged(Boolean aBoolean) {
  104. if (aBoolean) {
  105. mAccelerometerViewModel.updateDevice(mAccelerometerViewModel.getLocalDeviceUUID(), mAccelerometerViewModel.getSystemTimeStamp(), true, "Accelerometer", mAccelerometerViewModel.getAccelerometerSensorMeanValue());
  106. }
  107. else {
  108. mAccelerometerViewModel.updateDevice(mAccelerometerViewModel.getLocalDeviceUUID(), mAccelerometerViewModel.getSystemTimeStamp(), false, "Accelerometer", 0.0f);
  109. }
  110. }
  111. });
  112. accelerometerManager = (SensorManager) getSystemService(SENSOR_SERVICE);
  113. if (accelerometerManager.getSensorList(Sensor.TYPE_GYROSCOPE).size() == 0) {
  114. accelerometerSensor = null;
  115. Toast.makeText(AccelerometerActivity.this, "No accelerometer sensor available", Toast.LENGTH_LONG).show();
  116. }
  117. else {
  118. accelerometerSensor = accelerometerManager.getSensorList(Sensor.TYPE_GYROSCOPE).get(0);
  119. }
  120. }
  121. @Override
  122. public void onSensorChanged(SensorEvent event) {
  123. StringBuilder sb = new StringBuilder();
  124. sb.append("x=")
  125. .append(event.values[0])
  126. .append("\ny=")
  127. .append(event.values[1])
  128. .append("\nz=")
  129. .append(event.values[2]);
  130. accelerometerDataTV.setText(sb.toString());
  131. mAccelerometerViewModel.addValueToGesamtBE(event.values[0] + event.values[1] + event.values[2]);
  132. mAccelerometerViewModel.meanValueCalculation();
  133. mAccelerometerViewModel.calibrateAccelerometerSensor();
  134. mAccelerometerViewModel.checkAlarmCondition();
  135. }
  136. @Override
  137. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  138. }
  139. @Override
  140. protected void onResume() {
  141. super.onResume();
  142. if (accelerometerSensor != null) {
  143. if (accelerometerManager.registerListener(this, accelerometerSensor, SensorManager.SENSOR_DELAY_GAME)) {
  144. Toast.makeText(AccelerometerActivity.this, "We registered to the sensor", Toast.LENGTH_LONG).show();
  145. } else {
  146. Toast.makeText(AccelerometerActivity.this, "Registration did not work", Toast.LENGTH_LONG).show();
  147. }
  148. }
  149. }
  150. @Override
  151. protected void onPause() {
  152. super.onPause();
  153. if (accelerometerSensor != null) {
  154. accelerometerManager.unregisterListener(this, accelerometerSensor);
  155. }
  156. }
  157. }