MeteoSystem/app/src/main/java/cc/pogoda/mobile/meteosystem/type/StationSummaryActElements.java

199 wiersze
6.9 KiB
Java

package cc.pogoda.mobile.meteosystem.type;
import android.app.Activity;
import android.graphics.Color;
import android.widget.TextView;
import org.threeten.bp.Duration;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.ZonedDateTime;
import org.threeten.bp.format.DateTimeFormatter;
import org.threeten.bp.temporal.ChronoUnit;
import org.tinylog.Logger;
import cc.pogoda.mobile.meteosystem.R;
import cc.pogoda.mobile.meteosystem.type.web.QualityFactor;
import cc.pogoda.mobile.meteosystem.type.web.Summary;
public class StationSummaryActElements implements StationActivityElements {
public TextView title = null;
public TextView wind_speed_val = null;
public TextView wind_gusts_val = null;
public TextView wind_dir_val = null;
public TextView temperature_val = null;
public TextView qnh_val = null;
public TextView humidity_val = null;
public TextView message = null;
public int goodColor = 0;
public int badColor = 0;
public static String convertDegreesToDir(int directionInDegrees) {
String out = null;
if (directionInDegrees <= 11 || directionInDegrees >= 349)
out = "N";
else if (directionInDegrees <= 34 && directionInDegrees > 11)
out = "N NE";
else if (directionInDegrees <= 56 && directionInDegrees > 34)
out = "NE";
else if (directionInDegrees <= 79 && directionInDegrees > 56)
out = "E NE";
else if (directionInDegrees <= 101 && directionInDegrees > 79)
out = "E";
else if (directionInDegrees <= 124 && directionInDegrees > 101)
out = "E SE";
else if (directionInDegrees <= 146 && directionInDegrees > 124)
out = "SE";
else if (directionInDegrees <= 169 && directionInDegrees > 146)
out = "S SE";
else if (directionInDegrees <= 191 && directionInDegrees > 169)
out = "S";
else if (directionInDegrees <= 214 && directionInDegrees > 191)
out = "S SW";
else if (directionInDegrees <= 236 && directionInDegrees > 214)
out = "SW";
else if (directionInDegrees <= 259 && directionInDegrees > 236)
out = "W SW";
else if (directionInDegrees <= 281 && directionInDegrees > 259)
out = "W";
else if (directionInDegrees <= 304 && directionInDegrees > 281)
out = "W NW";
else if (directionInDegrees <= 327 && directionInDegrees > 304)
out = "NW";
else if (directionInDegrees <= 349 && directionInDegrees > 327)
out = "N NW";
else;
return out;
}
public void updateFromSummary(Summary s, AvailableParameters enabledForStation) {
if (s == null) {
// print a message in case there is no data available
wind_speed_val.setText(R.string.no_data);
wind_gusts_val.setText(R.string.no_data);
wind_dir_val.setText(R.string.no_data);
temperature_val.setText(R.string.no_data);
qnh_val.setText(R.string.no_data);
humidity_val.setText(R.string.no_data);
message.setText(R.string.no_data);
return;
}
// convert the integer with unix epoch timestamp to LocalDateTime in current system Time Zone
LocalDateTime last_station_data = LocalDateTime.ofEpochSecond(s.last_timestamp, 0, ZonedDateTime.now().getOffset());
// current date and time (in current time zone set in system configuration)
LocalDateTime current = LocalDateTime.now();
long minutes_difference = last_station_data.until(current, ChronoUnit.MINUTES);
Logger.debug("[last_station_data = " + last_station_data.format(DateTimeFormatter. ISO_LOCAL_DATE_TIME) +"]");
// calculate the duration between
Duration duration = Duration.between(last_station_data, current);
// check how old the last data from stations is
if (duration.getSeconds() < 7200) {
// if the last data is no older than 2 hours
message.setText(R.string.auto_refresh);
message.setTextColor(Color.BLACK);
}
else {
message.setText(R.string.station_not_comm);
message.setTextColor(Color.argb(0xFF, 0xFF, 0x0, 0x0));
}
if (enabledForStation.windSpeed) {
wind_speed_val.setText(String.format("%s", s.getWindspeedStr(true)));
if (goodColor != 0 && !s.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
wind_speed_val.setTextColor(goodColor);
}
else if (badColor != 0) {
wind_speed_val.setTextColor(badColor);
}
}
else {
wind_speed_val.setText("---");
}
if (enabledForStation.windGusts) {
wind_gusts_val.setText(String.format("%s", s.getWindgustsStr(true)));
if (goodColor != 0 && !s.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
wind_gusts_val.setTextColor(goodColor);
}
else if (badColor != 0) {
wind_gusts_val.setText(badColor);
}
}
else {
wind_gusts_val.setText("---");
}
if (enabledForStation.windDirection) {
wind_dir_val.setText(this.convertDegreesToDir(s.direction));
if (goodColor != 0 && !s.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
wind_dir_val.setTextColor(goodColor);
}
else if (badColor != 0){
wind_dir_val.setTextColor(badColor);
}
}
else {
wind_dir_val.setText("---");
}
temperature_val.setText(String.format("%s", s.getTemperatureStr(true, false)));
if (goodColor != 0 && !s.temperature_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
temperature_val.setTextColor(goodColor);
}
else if (badColor != 0){
temperature_val.setTextColor(badColor);
}
// TODO
if (enabledForStation.qnh) {
qnh_val.setText(String.format("%d hPa", s.qnh));
if (goodColor != 0 && !s.qnh_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
qnh_val.setTextColor(goodColor);
}
else if (badColor != 0) {
qnh_val.setTextColor(badColor);
}
}
else {
qnh_val.setText("---");
}
if (enabledForStation.humidity) {
humidity_val.setText(String.format("%d %%", s.humidity));
if (goodColor != 0 && !s.humidity_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
humidity_val.setTextColor(goodColor);
}
else {
humidity_val.setTextColor(badColor);
}
}
else {
humidity_val.setText("---");
}
}
@Override
public void setActivity(Activity act) {
}
}