kopia lustrzana https://github.com/SP8EBC/MeteoSystem
162 wiersze
6.0 KiB
Java
162 wiersze
6.0 KiB
Java
package cc.pogoda.mobile.pogodacc.type;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.graphics.Color;
|
|
import android.widget.ImageView;
|
|
import android.widget.TextView;
|
|
|
|
import org.threeten.bp.Duration;
|
|
import org.threeten.bp.LocalDateTime;
|
|
import org.threeten.bp.ZonedDateTime;
|
|
import org.w3c.dom.Text;
|
|
|
|
import cc.pogoda.mobile.pogodacc.R;
|
|
import cc.pogoda.mobile.pogodacc.type.web.QualityFactor;
|
|
import cc.pogoda.mobile.pogodacc.type.web.Summary;
|
|
|
|
public class StationWindRoseActElements implements StationActivityElements {
|
|
|
|
public ImageView windArrow;
|
|
|
|
public TextView windSpeed;
|
|
|
|
public TextView windGusts;
|
|
|
|
public TextView windDirection;
|
|
|
|
public TextView temperature;
|
|
|
|
public TextView pressure;
|
|
|
|
public TextView maxGust;
|
|
|
|
/**
|
|
* This field is named 'minAverage' but in UX it is described as minimal wind speed which is
|
|
* not exactly precise.
|
|
*/
|
|
public TextView minAverage;
|
|
|
|
Activity activity;
|
|
|
|
public StationWindRoseActElements() {
|
|
windArrow = null;
|
|
windGusts = null;
|
|
windSpeed = null;
|
|
temperature = null;
|
|
pressure = null;
|
|
activity = null;
|
|
}
|
|
|
|
@Override
|
|
public void updateFromSummary(Summary s, AvailableParameters enabledForStation) {
|
|
|
|
// data to be displayed
|
|
Summary data;
|
|
|
|
// set to true if no_data string shall be displayed instead of parameters
|
|
boolean no_data = false;
|
|
|
|
LocalDateTime last_station_data;
|
|
|
|
// set to true if the data is old (older than 2 hours)
|
|
boolean old_data = false;
|
|
|
|
if (activity == null) {
|
|
return;
|
|
}
|
|
|
|
// check if any data has been passed to this method
|
|
if (s == null) {
|
|
data = new Summary();
|
|
|
|
// set to 180 to rotate the arrow towards the top of a screen
|
|
data.direction = 180;
|
|
|
|
// set the flag to true to show '---' or 'no data' instead of zeros
|
|
no_data = true;
|
|
} else {
|
|
data = s;
|
|
|
|
// convert the integer with unix epoch timestamp to LocalDateTime in current system Time Zone
|
|
last_station_data = LocalDateTime.ofEpochSecond(data.last_timestamp, 0, ZonedDateTime.now().getOffset());
|
|
|
|
// current date and time (in current time zone set in system configuration)
|
|
LocalDateTime current = LocalDateTime.now();
|
|
|
|
// calculate the duration between
|
|
Duration duration = Duration.between(last_station_data, current);
|
|
|
|
// if station is not communicating for longer than 2 hours
|
|
if (duration.getSeconds() > 7200) {
|
|
old_data = true;
|
|
}
|
|
}
|
|
|
|
// create strings with wind speed, gusts etc
|
|
String average_speed = String.format("%3.1f", data.average_speed);
|
|
String gusts_speed = String.format("%3.1f", data.gusts);
|
|
|
|
// check if wind data is avaliable in the input data set
|
|
if (!no_data && !data.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
|
|
windArrow.setRotation(data.direction - 225.0f);
|
|
} else {
|
|
// if now wind data is avaliable in the input set move the arrow
|
|
// to point towards the N
|
|
windArrow.setRotation(180.0f - 225.0f);
|
|
}
|
|
|
|
if (!no_data && !data.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
|
|
windSpeed.setText(activity.getResources().getString(R.string.mean_value) + '\n' + average_speed + "m/s");
|
|
} else {
|
|
windSpeed.setText(activity.getResources().getString(R.string.mean_value) + '\n' + "---");
|
|
}
|
|
|
|
if (!no_data && !data.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
|
|
windGusts.setText(activity.getResources().getString(R.string.wind_gust_short) + '\n' + gusts_speed + "m/s");
|
|
} else {
|
|
windGusts.setText(activity.getResources().getString(R.string.wind_gust_short) + '\n' + "---");
|
|
|
|
}
|
|
|
|
if (!no_data && !data.wind_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
|
|
windDirection.setText(activity.getResources().getString(R.string.wind_direction_short) + '\n' + data.direction + activity.getResources().getString(R.string.degrees_sign));
|
|
} else {
|
|
windDirection.setText(activity.getResources().getString(R.string.wind_direction_short) + '\n' + "---");
|
|
}
|
|
|
|
// check if temperature is avaliable in input data set
|
|
if (!no_data && !data.temperature_qf_native.equals(QualityFactor.NOT_AVALIABLE)) {
|
|
temperature.setText(activity.getResources().getString(R.string.temperature_short) + '\n' + String.format("%.1f", data.avg_temperature) + "°C");
|
|
} else {
|
|
temperature.setText(activity.getResources().getString(R.string.temperature_short) + '\n' + "---");
|
|
}
|
|
|
|
if (!no_data && !old_data) {
|
|
String hour_max_gusts = String.format("%3.1f", data.hour_gusts);
|
|
String hour_min_avg = String.format("%3.1f", data.hour_min_average_speed);
|
|
|
|
pressure.setText(activity.getResources().getString(R.string.qnh) + ": " + String.format("%d hPa", data.qnh));
|
|
maxGust.setText(activity.getResources().getString(R.string.max_1h_gust) + ": " + hour_max_gusts + "m/s");
|
|
minAverage.setText(activity.getResources().getString(R.string.min_1h_avg) + ": " + hour_min_avg + "m/s");
|
|
} else if (!no_data && old_data) {
|
|
maxGust.setText(activity.getResources().getString(R.string.warning));
|
|
maxGust.setTextColor(Color.RED);
|
|
minAverage.setText(activity.getResources().getString(R.string.station_doesnt_transmit));
|
|
pressure.setText(activity.getResources().getString(R.string.for_longer_than_2_hours));
|
|
} else {
|
|
maxGust.setText(activity.getResources().getString(R.string.no_data));
|
|
maxGust.setTextColor(Color.RED);
|
|
minAverage.setText("");
|
|
minAverage.setTextColor(Color.RED);
|
|
pressure.setText("");
|
|
pressure.setTextColor(Color.RED);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setActivity(Activity act) {
|
|
activity = act;
|
|
}
|
|
}
|