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

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