package cc.pogoda.mobile.pogodacc.activity.trend.temperature; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import org.threeten.bp.LocalDateTime; import org.threeten.bp.ZoneOffset; import org.threeten.bp.format.DateTimeFormatter; import org.threeten.bp.format.FormatStyle; import cc.pogoda.mobile.pogodacc.dao.TrendDao; import cc.pogoda.mobile.pogodacc.type.web.Trend; public class TemperatureTrendViewModel extends ViewModel { public void setStation(String station) { this.station = station; } private String station = ""; private TrendDao trendDao; private MutableLiveData displayedStationName; public MutableLiveData getDisplayedStationName() { return displayedStationName; } public MutableLiveData getLastMeasuremenetTime() { return lastMeasuremenetTime; } public MutableLiveData getCurrentTemperatureValue() { return currentTemperatureValue; } public MutableLiveData getTwoHoursTemperatureValue() { return twoHoursTemperatureValue; } public MutableLiveData getFourHoursTemperatureValue() { return fourHoursTemperatureValue; } public MutableLiveData getSixHoursTemperatureValue() { return sixHoursTemperatureValue; } public MutableLiveData getEightHoursTemperatureValue() { return eightHoursTemperatureValue; } public MutableLiveData getCurrentHumidityValue() { return currentHumidityValue; } public MutableLiveData getTwoHoursHumidityValue() { return twoHoursHumidityValue; } public MutableLiveData getFourHoursHumidityValue() { return fourHoursHumidityValue; } public MutableLiveData getSixHoursHumidityValue() { return sixHoursHumidityValue; } public MutableLiveData getEightHoursHumidityValue() { return eightHoursHumidityValue; } private MutableLiveData lastMeasuremenetTime; private MutableLiveData currentTemperatureValue; private MutableLiveData twoHoursTemperatureValue; private MutableLiveData fourHoursTemperatureValue; private MutableLiveData sixHoursTemperatureValue; private MutableLiveData eightHoursTemperatureValue; private MutableLiveData currentHumidityValue; private MutableLiveData twoHoursHumidityValue; private MutableLiveData fourHoursHumidityValue; private MutableLiveData sixHoursHumidityValue; private MutableLiveData eightHoursHumidityValue; public TemperatureTrendViewModel() { trendDao = new TrendDao(); lastMeasuremenetTime = new MutableLiveData(); displayedStationName = new MutableLiveData(); currentTemperatureValue = new MutableLiveData(); twoHoursTemperatureValue = new MutableLiveData(); fourHoursTemperatureValue = new MutableLiveData(); sixHoursTemperatureValue = new MutableLiveData(); eightHoursTemperatureValue = new MutableLiveData(); currentHumidityValue = new MutableLiveData(); twoHoursHumidityValue = new MutableLiveData(); fourHoursHumidityValue = new MutableLiveData(); sixHoursHumidityValue = new MutableLiveData(); eightHoursHumidityValue = new MutableLiveData(); } public boolean getData() { Trend trend = trendDao.getStationTrend(this.station); if (trend != null) { // format the time and date according to current locale String dt = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM, FormatStyle.SHORT).format(LocalDateTime.ofEpochSecond(trend.last_timestamp, 0, ZoneOffset.UTC).atOffset(ZoneOffset.UTC).atZoneSameInstant(ZoneOffset.systemDefault())); lastMeasuremenetTime.postValue(dt); displayedStationName.postValue(trend.displayed_name); if (!trend.current_humidity_qf.equals("NOT_AVALIABLE") && !trend.current_humidity_qf.equals("NO_DATA")) { currentHumidityValue.postValue(String.format("%s%%", trend.humidity_trend.getCurrentVal(true, true))); twoHoursHumidityValue.postValue(String.format("%s%%", trend.humidity_trend.getTwoHoursVal(true, true))); fourHoursHumidityValue.postValue(String.format("%s%%", trend.humidity_trend.getFourHoursVal(true, true))); sixHoursHumidityValue.postValue(String.format("%s%%", trend.humidity_trend.getSixHoursVal(true, true))); eightHoursHumidityValue.postValue(String.format("%s%%", trend.humidity_trend.getEightHoursVal(true, true))); } else { currentHumidityValue.postValue("-- %"); twoHoursHumidityValue.postValue("-- %"); fourHoursHumidityValue.postValue("-- %"); sixHoursHumidityValue.postValue("-- %"); eightHoursHumidityValue.postValue("-- %"); } if (!trend.current_temperature_qf.equals("NOT_AVALIABLE") && !trend.current_temperature_qf.equals("NO_DATA")) { currentTemperatureValue.postValue(String.format("%s°C", trend.temperature_trend.getCurrentVal(true, false))); twoHoursTemperatureValue.postValue(String.format("%s°C", trend.temperature_trend.getTwoHoursVal(true, false))); fourHoursTemperatureValue.postValue(String.format("%s°C", trend.temperature_trend.getFourHoursVal(true, false))); sixHoursTemperatureValue.postValue(String.format("%s°C", trend.temperature_trend.getSixHoursVal(true, false))); eightHoursTemperatureValue.postValue(String.format("%s°C", trend.temperature_trend.getEightHoursVal(true, false))); } else { currentTemperatureValue.postValue("-- °C"); twoHoursTemperatureValue.postValue("-- °C"); fourHoursTemperatureValue.postValue("-- °C"); sixHoursTemperatureValue.postValue("-- °C"); eightHoursTemperatureValue.postValue("-- °C"); } return true; } else { currentTemperatureValue.postValue("-- °C"); twoHoursTemperatureValue.postValue("-- °C"); fourHoursTemperatureValue.postValue("-- °C"); sixHoursTemperatureValue.postValue("-- °C"); eightHoursTemperatureValue.postValue("-- °C"); currentHumidityValue.postValue("-- %"); twoHoursHumidityValue.postValue("-- %"); fourHoursHumidityValue.postValue("-- %"); sixHoursHumidityValue.postValue("-- %"); eightHoursHumidityValue.postValue("-- %"); return false; } } }