diff --git a/app/src/main/java/com/example/greenwatch/models/Device.java b/app/src/main/java/com/example/greenwatch/models/Device.java new file mode 100644 index 0000000..d9155e9 --- /dev/null +++ b/app/src/main/java/com/example/greenwatch/models/Device.java @@ -0,0 +1,57 @@ +package com.example.greenwatch.models; + + +public class Device { + + private String timeStamp; + private String deviceID; + private boolean sensorStatus; + private String sensorType; + private int sensorMassage; + + public Device(String timeStamp, String deviceID, boolean sensorStatus, String sensorType, int sensorMassage) { + this.timeStamp = timeStamp; + this.deviceID = deviceID; + this.sensorStatus = sensorStatus; + this.sensorType = sensorType; + this.sensorMassage = sensorMassage; + } + public void setTimeStamp(String timeStamp) { + this.timeStamp = timeStamp; + } + + public String getTimeStamp() { + return timeStamp; + } + + public void setDeviceID(String deviceID) { + this.deviceID = deviceID; + } + + public String getDeviceID() { + return deviceID; + } + public void setSensorType(String sensorType) { + this.sensorType = sensorType; + } + + public String getSensorType() { + return sensorType; + } + + public void setSensorStatus(boolean sensorStatus) { + this.sensorStatus = sensorStatus; + } + + public Boolean getSensorStatus() { + return sensorStatus; + } + + public void setSensorMassage(int sensorMassage) { + this.sensorMassage = sensorMassage; + } + + public int getSensorMassage() { + return sensorMassage; + } +} diff --git a/app/src/main/java/com/example/greenwatch/mvc/Device.java b/app/src/main/java/com/example/greenwatch/mvc/Device.java deleted file mode 100644 index 60bd3d0..0000000 --- a/app/src/main/java/com/example/greenwatch/mvc/Device.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.example.greenwatch.mvc; - - -public class Device { - - private String sensor; - private Boolean isActive; - - public Device(String Sensor, Boolean Status) { - this.sensor = Sensor; - this.isActive = Status; - } - - public void setSensor(String Sensor) { - this.sensor = Sensor; - } - - public String getSensor() { - return sensor; - } - - public void setIsActive(Boolean Status) { - this.isActive = Status; - } - - public Boolean getIsActive() { - return isActive; - } -} diff --git a/app/src/main/java/com/example/greenwatch/mvc/DeviceController.java b/app/src/main/java/com/example/greenwatch/mvc/DeviceController.java deleted file mode 100644 index aa7a9ea..0000000 --- a/app/src/main/java/com/example/greenwatch/mvc/DeviceController.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.example.greenwatch.mvc; - -public class DeviceController { - - private DeviceModel deviceModel; - private DeviceView deviceView; - - public DeviceController(DeviceView view) { - this.deviceModel = DeviceModel.getInstance(); - this.deviceView = view; - } - - public void createDevice(String Sensor, Boolean Status) { - Device device = new Device(Sensor, Status); - deviceModel.addDevice(device); - // todo: Inform view and sender about changes - } - public void setDeviceSensor(String UUID, String Sensor) { - deviceModel.setDeviceSensor(UUID, Sensor); - } - - public String getDeviceSensor(String UUID) { - return deviceModel.getDeviceSensor(UUID); - } - - public void setDeviceStatus(String UUID, Boolean Status) { - deviceModel.setDeviceStatus(UUID, Status); - } - - public Boolean getDeviceStatus(String UUID) { - return deviceModel.getDeviceStatus(UUID); - } -} diff --git a/app/src/main/java/com/example/greenwatch/mvc/DeviceModel.java b/app/src/main/java/com/example/greenwatch/mvc/DeviceModel.java deleted file mode 100644 index be40f7f..0000000 --- a/app/src/main/java/com/example/greenwatch/mvc/DeviceModel.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.example.greenwatch.mvc; - -import java.util.Vector; - -public class DeviceModel { - private static DeviceModel itemModelInstance; - // todo: should be a hashmap with UUID Keys - private Vector connectetDevicesList; - - private DeviceModel() { - connectetDevicesList = new Vector(); - } - - public static synchronized DeviceModel getInstance() { - if (itemModelInstance == null){ - itemModelInstance = new DeviceModel(); - } - return itemModelInstance; - } - - public void addDevice(Device device) { - // todo: Check if divece already exist - connectetDevicesList.add(device); - } - - public Vector getConnectetDevicesList() { - return connectetDevicesList; - } - - public void setDeviceSensor(String UUID, String Sensor) { - // todo: iterate through HashMap and find Divece for UUID - } - - public String getDeviceSensor(String UUID) { - // todo: iterate through HashMap and find Divece for UUID - return "hasToBeDone"; - } - - public void setDeviceStatus(String UUID, Boolean Status) { - // todo: iterate through HashMap and find Divece for UUID - } - - public Boolean getDeviceStatus(String UUID) { - // todo: iterate through HashMap and find Divece for UUID - return false; - } -} diff --git a/app/src/main/java/com/example/greenwatch/mvc/DeviceView.java b/app/src/main/java/com/example/greenwatch/mvc/DeviceView.java deleted file mode 100644 index 55e62a9..0000000 --- a/app/src/main/java/com/example/greenwatch/mvc/DeviceView.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.greenwatch.mvc; - -import java.util.Vector; - -public class DeviceView { - - public void updateView(Vector deviceVector) { - // todo: what should be displayed - } -} diff --git a/app/src/main/java/com/example/greenwatch/repositories/DeviceRepository.java b/app/src/main/java/com/example/greenwatch/repositories/DeviceRepository.java new file mode 100644 index 0000000..31f3ee0 --- /dev/null +++ b/app/src/main/java/com/example/greenwatch/repositories/DeviceRepository.java @@ -0,0 +1,216 @@ +package com.example.greenwatch.repositories; + + +import androidx.lifecycle.MutableLiveData; + +import com.example.greenwatch.models.Device; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +public class DeviceRepository { + + private String delimiter = ", "; + private String deviceUUID; + private static DeviceRepository deviceRepositoryInstance; + private MutableLiveData> deviceList = new MutableLiveData<>(); + private HashMap connectedDevicesList = new HashMap<>(); + private HashMap deviceIDMapper = new HashMap<>(); + + public static synchronized DeviceRepository getInstance() { + if (deviceRepositoryInstance == null){ + deviceRepositoryInstance = new DeviceRepository(); + deviceRepositoryInstance.setDeviceUUID(); + } + return deviceRepositoryInstance; + } + + public MutableLiveData> getConnectedDeviceList() { + setMutableLiveDataValue(); + return deviceList; + } + + public void createNewDevice(String timeStamp, String deviceID, boolean sensorStatus, String sensorType, int sensorMassage){ + Device newDevice = new Device(timeStamp, deviceID, sensorStatus, sensorType, sensorMassage); + addToConnectedDeviceList(newDevice.getDeviceID(), newDevice); + setMutableLiveDataValue(); + } + + public void createNewRemoteDevice(String message) { + String[] messageString = messageStringSplitter(message); + String timeStamp = messageString[0]; + String deviceID = messageString[1]; + boolean sensorStatus = Boolean.valueOf(messageString[1]); + String sensorType = messageString[3]; + int sensorMassage = Integer.valueOf(messageString[4]); + + if(!connectedDevicesList.containsKey(deviceID)) { + createNewDevice(timeStamp, deviceID, sensorStatus, sensorType, sensorMassage); + } + } + + public String messageStringBuilder(String deviceID) { + StringBuilder message = new StringBuilder(); + Device device = connectedDevicesList.get(deviceID); + if(device != null) { + message.append(device.getTimeStamp()) + .append(delimiter) + .append(device.getDeviceID()) + .append(delimiter) + .append(device.getSensorStatus()) + .append(delimiter) + .append(device.getSensorType()) + .append(delimiter) + .append(device.getSensorMassage()); + return message.toString(); + } + return message.toString(); + } + + public String getLocalDeviceUUID() { + return deviceUUID; + } + + public void setDevice(String deviceID, String timeStamp, String newDeviceID, boolean sensorStatus, String sensorType, int sensorMassage) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + device.setTimeStamp(timeStamp); + device.setDeviceID(newDeviceID); + device.setSensorStatus(sensorStatus); + device.setSensorType(sensorType); + device.setSensorMassage(sensorMassage); + setDeviceIDMapper(newDeviceID); + connectedDevicesList.remove(checkedDeviceID); + addToConnectedDeviceList(newDeviceID, device); + setMutableLiveDataValue(); + } + } + + public void setTimeStamp(String deviceID, String timeStamp) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + device.setTimeStamp(timeStamp); + addToConnectedDeviceList(checkedDeviceID, device); + setMutableLiveDataValue(); + } + } + + public String getTimeStamp(String deviceID) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + return device.getTimeStamp(); + } + return ""; + } + + public void setDeviceID(String deviceID, String newDeviceID) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + device.setDeviceID(newDeviceID); + setDeviceIDMapper(newDeviceID); + connectedDevicesList.remove(checkedDeviceID); + addToConnectedDeviceList(newDeviceID, device); + setMutableLiveDataValue(); + } + } + + public String getDeviceID(String deviceID) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + return device.getDeviceID(); + } + return ""; + } + + public void setSensorStatus(String deviceID, boolean sensorStatus) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + device.setSensorStatus(sensorStatus); + addToConnectedDeviceList(checkedDeviceID, device); + setMutableLiveDataValue(); + } + } + + public boolean getSensorStatus(String deviceID) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + return device.getSensorStatus(); + } + return false; + } + + public void setSensorType(String deviceID, String sensorType) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + device.setSensorType(sensorType); + addToConnectedDeviceList(checkedDeviceID, device); + setMutableLiveDataValue(); + } + } + + public String getSensorType(String deviceID) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + return device.getSensorType(); + } + return ""; + } + + public void setSensorMassage(String deviceID, int sensorMessage) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + device.setSensorMassage(sensorMessage); + addToConnectedDeviceList(checkedDeviceID, device); + setMutableLiveDataValue(); + } + } + + public int getSensorMassage(String deviceID) { + String checkedDeviceID = checkDeviceID(deviceID); + Device device = connectedDevicesList.get(checkedDeviceID); + if(device != null) { + return device.getSensorMassage(); + } + return 0; + } + + private void setMutableLiveDataValue() { + List list = new ArrayList<>(connectedDevicesList.values()); + deviceList.setValue(list); + } + + private void addToConnectedDeviceList(String key, Device device) { + connectedDevicesList.put(key, device); + } + + private String checkDeviceID(String deviceID) { + if(!deviceIDMapper.isEmpty() && deviceID.equals(deviceUUID)) { + return deviceIDMapper.get(deviceID); + } + return deviceID; + } + + private void setDeviceIDMapper(String deviceID) { + deviceIDMapper.put(deviceUUID, deviceID); + } + + private void setDeviceUUID(){ + this.deviceUUID = UUID.randomUUID().toString(); + } + + private String[] messageStringSplitter(String message) { + return message.split(delimiter); + } +} diff --git a/app/src/main/java/com/example/greenwatch/viewmodels/MainActivityViewModel.java b/app/src/main/java/com/example/greenwatch/viewmodels/MainActivityViewModel.java new file mode 100644 index 0000000..8da05ef --- /dev/null +++ b/app/src/main/java/com/example/greenwatch/viewmodels/MainActivityViewModel.java @@ -0,0 +1,78 @@ +package com.example.greenwatch.viewmodels; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import com.example.greenwatch.models.Device; +import com.example.greenwatch.repositories.DeviceRepository; + +import java.util.List; + +public class MainActivityViewModel extends ViewModel { + + private MutableLiveData> mDeviceList; + private MutableLiveData mLocalDevice; + private DeviceRepository mDeviceRepository; + + public void init() { + if(mDeviceList != null) { + return; + } + mDeviceRepository = DeviceRepository.getInstance(); + mDeviceRepository.createNewDevice("", mDeviceRepository.getLocalDeviceUUID(), false, "", 0); + mDeviceList = mDeviceRepository.getConnectedDeviceList(); + } + + public LiveData> getConnectedDeviceList() { + return mDeviceList; + } + + public void setDevice(String deviceID, String timeStamp, String newDeviceID, boolean sensorStatus, String sensorType, int sensorMassage) { + mDeviceRepository.setDevice(deviceID, timeStamp,newDeviceID, sensorStatus, sensorType, sensorMassage); + } + + public void setTimeStamp(String deviceID, String timeStamp) { + mDeviceRepository.setTimeStamp(deviceID, timeStamp); + } + + public String getTimeStamp(String deviceID) { + return mDeviceRepository.getTimeStamp(deviceID); + } + + public void setDeviceID(String deviceID, String newDeviceID) { + mDeviceRepository.setDeviceID(deviceID, newDeviceID); + } + + public String getDeviceID(String deviceID) { + return mDeviceRepository.getDeviceID(deviceID); + } + + public void setSensorStatus(String deviceID, boolean sensorStatus) { + mDeviceRepository.setSensorStatus(deviceID, sensorStatus); + } + + public boolean getSensorStatus(String deviceID) { + return mDeviceRepository.getSensorStatus(deviceID); + } + + public void setSensorType(String deviceID, String sensorType) { + mDeviceRepository.setSensorType(deviceID, sensorType); + } + + public String getSensorType(String deviceID) { + return mDeviceRepository.getSensorType(deviceID); + } + + public void setSensorMassage(String deviceID, int sensorMessage) { + mDeviceRepository.setSensorMassage(deviceID, sensorMessage); + } + + public int getSensorMassage(String deviceID) { + return mDeviceRepository.getSensorMassage(deviceID); + } + + public String getLocalDeviceUUID() { + return mDeviceRepository.getLocalDeviceUUID(); + } +}