package com.example.greenwatch.viewmodels; import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; import android.view.SurfaceHolder; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.example.greenwatch.alarmrecorder.AlarmRecorder; import com.example.greenwatch.communication.WiFiCommunication; import com.example.greenwatch.models.Device; import com.example.greenwatch.repositories.DeviceRepository; import com.example.greenwatch.sensors.AccelerometerSensor; import java.util.List; public class MainActivityViewModel extends ViewModel implements ViewModelInterface { private MutableLiveData> mDeviceList; private MutableLiveData> mAlarmHistoryList; private MutableLiveData mStartAlarmRecording; private DeviceRepository mDeviceRepository; private WiFiCommunication mWiFiCommunication; private AlarmRecorder mAlarmRecorder; @Override public void init(SurfaceHolder previewHolder) { if (mDeviceRepository == null) { mDeviceRepository = DeviceRepository.getInstance(); } if (mWiFiCommunication == null) { mWiFiCommunication = WiFiCommunication.getInstance(); } if (mAlarmRecorder == null) { mAlarmRecorder = AlarmRecorder.getInstance(); } if (mDeviceList == null) { mDeviceList = mDeviceRepository.getConnectedDeviceList(); } if (mAlarmHistoryList == null) { mAlarmHistoryList = mDeviceRepository.getAlarmHistoryDeviceList(); } if (mStartAlarmRecording == null) { mStartAlarmRecording = mDeviceRepository.getStartAlarmRecording(); } mWiFiCommunication.setDeviceRepository(mDeviceRepository); mDeviceRepository.setWiFiCommunication(mWiFiCommunication); mDeviceRepository.createNewDevice(mDeviceRepository.getSystemTimeStamp(), mDeviceRepository.getLocalDeviceUUID(), false, "No Sensor selected", 0.0f); mDeviceRepository.setDeviceID(mDeviceRepository.getLocalDeviceUUID(), WiFiCommunication.getLocalIpAddress()); setAlarmRecordingPreviewHolder(previewHolder); mWiFiCommunication = null; } @Override public LiveData> getConnectedDeviceList() { return mDeviceList; } @Override public LiveData> getAlarmHistoryList() { return mAlarmHistoryList; } @Override public LiveData getStartAlarmRecording() { return mStartAlarmRecording; } @Override public void updateDevice(String deviceID, String timeStamp, boolean sensorStatus, String sensorType, float sensorMassage) { mDeviceRepository.updateDevice(deviceID, timeStamp, sensorStatus, sensorType, sensorMassage); } @Override public void setTimeStamp(String deviceID, String timeStamp) { mDeviceRepository.setTimeStamp(deviceID, timeStamp); } @Override public String getTimeStamp(String deviceID) { return mDeviceRepository.getTimeStamp(deviceID); } @Override public void setDeviceID(String deviceID, String newDeviceID) { mDeviceRepository.setDeviceID(deviceID, newDeviceID); } @Override public String getDeviceID(String deviceID) { return mDeviceRepository.getDeviceID(deviceID); } @Override public void setSensorStatus(String deviceID, boolean sensorStatus) { mDeviceRepository.setSensorStatus(deviceID, sensorStatus); } @Override public boolean getSensorStatus(String deviceID) { return mDeviceRepository.getSensorStatus(deviceID); } @Override public void setSensorType(String deviceID, String sensorType) { mDeviceRepository.setSensorType(deviceID, sensorType); } @Override public String getSensorType(String deviceID) { return mDeviceRepository.getSensorType(deviceID); } @Override public void setSensorMassage(String deviceID, float sensorMessage) { mDeviceRepository.setSensorMassage(deviceID, sensorMessage); } @Override public float getSensorMassage(String deviceID) { return mDeviceRepository.getSensorMassage(deviceID); } @Override public String getLocalDeviceUUID() { return mDeviceRepository.getLocalDeviceUUID(); } @Override public String getSystemTimeStamp() { return mDeviceRepository.getSystemTimeStamp(); } @Override public void startAlarmRecording() { mAlarmRecorder.startRecording(); } @Override public void stopAlarmRecording(Context context) { mAlarmRecorder.stopRecording(context); } @Override public void setAlarmRecordingPreviewHolder(SurfaceHolder previewHolder) { mAlarmRecorder.setPreviewHolder(previewHolder); } }