package com.example.greenwatch; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.example.greenwatch.adapters.AlarmHistoryListAdapter; import com.example.greenwatch.adapters.DeviceListAdapter; import com.example.greenwatch.models.Device; import com.example.greenwatch.viewmodels.MicrofonViewModel; import java.util.List; public class AudiodetectionActivity extends AppCompatActivity { private TextView microfonStatusMessage; private TextView tvAAudiodetectionAlarmHistoryListRecyclerView; private TextView tvAudiodetectionDeviceListRecyclerView; private Button backToMainActivityButton; private SurfaceView surfaceView; private Permission permission = new Permission(); private MicrofonViewModel mMicrofonViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_audiodetection); surfaceView = (SurfaceView) findViewById(R.id.surfaceViewAudio); microfonStatusMessage = (TextView) findViewById(R.id.tvAudiodetectionStatusmessage); tvAAudiodetectionAlarmHistoryListRecyclerView = (TextView) findViewById(R.id.tvAudiodetectionAlarmHistoryListRecyclerView); tvAudiodetectionDeviceListRecyclerView = (TextView) findViewById(R.id.tvAudiodetectionDeviceListRecyclerView); backToMainActivityButton = (Button) findViewById(R.id.audiodetectorBackToMainActivity); RecyclerView recyclerView = findViewById(R.id.deviceListRecyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setHasFixedSize(true); final DeviceListAdapter deviceListAdapter = new DeviceListAdapter(); recyclerView.setAdapter(deviceListAdapter); RecyclerView alarmHistoryListRecyclerView = findViewById(R.id.alarmHistoryListRecyclerView); alarmHistoryListRecyclerView.setLayoutManager(new LinearLayoutManager(this)); alarmHistoryListRecyclerView.setHasFixedSize(true); final AlarmHistoryListAdapter alarmHistoryListAdapter = new AlarmHistoryListAdapter(); alarmHistoryListRecyclerView.setAdapter(alarmHistoryListAdapter); backToMainActivityButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); mMicrofonViewModel = new ViewModelProvider(this).get(MicrofonViewModel.class); mMicrofonViewModel.init(surfaceView.getHolder()); mMicrofonViewModel.getConnectedDeviceList().observe(this, new Observer>() { @Override public void onChanged(List devices) { deviceListAdapter.setDevices(devices); } }); mMicrofonViewModel.getAlarmHistoryList().observe(this, new Observer>() { @Override public void onChanged(List devices) { alarmHistoryListAdapter.setAlarmHistoryList(devices); } }); mMicrofonViewModel.getStartAlarmRecording().observe(this, new Observer() { @Override public void onChanged(Boolean aBoolean) { if (aBoolean) { if(permission.alarmRechtePruefen(AudiodetectionActivity.this, AudiodetectionActivity.this)){ Toast.makeText(AudiodetectionActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); mMicrofonViewModel.startAlarmRecording(); //todo AlarmHandling einfügen } else { permission.alarmRechteAnfordern(AudiodetectionActivity.this); if(permission.alarmRechtePruefen(AudiodetectionActivity.this, AudiodetectionActivity.this)){ Toast.makeText(AudiodetectionActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); mMicrofonViewModel.startAlarmRecording(); //todo Alarmhandling einfügen } else { Toast.makeText(AudiodetectionActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); mMicrofonViewModel.stopAlarmRecording(AudiodetectionActivity.this); } } } else { Toast.makeText(AudiodetectionActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); mMicrofonViewModel.stopAlarmRecording(AudiodetectionActivity.this); } } }); mMicrofonViewModel.getMicrofonAlarmDetected().observe(this, new Observer() { @Override public void onChanged(Boolean aBoolean) { if (aBoolean) { mMicrofonViewModel.updateDevice(mMicrofonViewModel.getLocalDeviceUUID(), mMicrofonViewModel.getSystemTimeStamp(), true, "Audio", mMicrofonViewModel.getAmplitudeInDB()); } else { mMicrofonViewModel.updateDevice(mMicrofonViewModel.getLocalDeviceUUID(), mMicrofonViewModel.getSystemTimeStamp(), false, "Audio", 0.0f); } } }); } @Override protected void onResume() { super.onResume(); mMicrofonViewModel.startMicrofonSensor(); } @Override protected void onPause() { super.onPause(); if (isFinishing()){ mMicrofonViewModel.recalibrationMicrofonSensor(); } mMicrofonViewModel.stopMicrofonSensor(); } }