diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/WeatherNotificationReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/WeatherNotificationReceiver.java index 8a02294df..102bd22a5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/WeatherNotificationReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/WeatherNotificationReceiver.java @@ -39,26 +39,21 @@ public class WeatherNotificationReceiver extends BroadcastReceiver { LOG.info("Wrong action"); return; } - ParcelableWeather2 weather = null; + ParcelableWeather2 parcelableWeather2 = null; try { - weather = intent.getParcelableExtra("ru.gelin.android.weather.notification.EXTRA_WEATHER"); + parcelableWeather2 = intent.getParcelableExtra("ru.gelin.android.weather.notification.EXTRA_WEATHER"); } catch (RuntimeException e) { - e.printStackTrace(); + LOG.error("cannot get ParcelableWeather2", e); } - if (weather != null) { - Weather.getInstance().setWeather2(weather); - LOG.info("weather in " + weather.location + " is " + weather.currentCondition + " (" + (weather.currentTemp - 273) + "°C)"); + if (parcelableWeather2 != null) { + Weather weather = Weather.getInstance(); + weather.setReconstructedOWMWeather(parcelableWeather2.reconstructedOWMWeather); + weather.setReconstructedOWMForecast(parcelableWeather2.reconstructedOWMForecast); + + WeatherSpec weatherSpec = parcelableWeather2.weatherSpec; + LOG.info("weather in " + weatherSpec.location + " is " + weatherSpec.currentCondition + " (" + (weatherSpec.currentTemp - 273) + "°C)"); - WeatherSpec weatherSpec = new WeatherSpec(); - weatherSpec.timestamp = (int) (weather.queryTime / 1000); - weatherSpec.location = weather.location; - weatherSpec.currentTemp = weather.currentTemp; - weatherSpec.currentCondition = weather.currentCondition; - weatherSpec.currentConditionCode = weather.currentConditionCode; - weatherSpec.todayMaxTemp = weather.todayHighTemp; - weatherSpec.todayMinTemp = weather.todayLowTemp; - weatherSpec.forecasts = weather.forecasts; Weather.getInstance().setWeatherSpec(weatherSpec); GBApplication.deviceService().onSendWeather(weatherSpec); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java index a5aa9daf0..d85308099 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java @@ -16,19 +16,13 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.model; -import ru.gelin.android.weather.notification.ParcelableWeather2; +import org.json.JSONObject; public class Weather { - private ParcelableWeather2 weather2 = null; private WeatherSpec weatherSpec = null; - public ParcelableWeather2 getWeather2() { - return weather2; - } - - public void setWeather2(ParcelableWeather2 weather2) { - this.weather2 = weather2; - } + private JSONObject reconstructedOWMWeather = null; + private JSONObject reconstructedOWMForecast = null; public WeatherSpec getWeatherSpec() { return weatherSpec; @@ -38,6 +32,22 @@ public class Weather { this.weatherSpec = weatherSpec; } + public JSONObject getReconstructedOWMWeather() { + return reconstructedOWMWeather; + } + + public void setReconstructedOWMWeather(JSONObject reconstructedOWMWeather) { + this.reconstructedOWMWeather = reconstructedOWMWeather; + } + + public JSONObject getReconstructedOWMForecast() { + return reconstructedOWMForecast; + } + + public void setReconstructedOWMForecast(JSONObject reconstructedOWMForecast) { + this.reconstructedOWMForecast = reconstructedOWMForecast; + } + private static final Weather weather = new Weather(); public static Weather getInstance() {return weather;} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/WeatherSpec.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/WeatherSpec.java index 267c5c98a..8ea43c05d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/WeatherSpec.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/WeatherSpec.java @@ -37,7 +37,7 @@ public class WeatherSpec implements Parcelable { public int timestamp; public String location; public int currentTemp; - public int currentConditionCode; + public int currentConditionCode = 3200; public String currentCondition; public int todayMaxTemp; public int todayMinTemp; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerPebStyle.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerPebStyle.java index f2add3eb4..cd60ccff1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerPebStyle.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerPebStyle.java @@ -28,7 +28,7 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleColor; import nodomain.freeyourgadget.gadgetbridge.model.Weather; -import ru.gelin.android.weather.notification.ParcelableWeather2; +import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; class AppMessageHandlerPebStyle extends AppMessageHandler { public static final int KEY_AMPM_TEXT = 21; @@ -92,7 +92,7 @@ class AppMessageHandlerPebStyle extends AppMessageHandler { //WEATHER - ParcelableWeather2 weather = Weather.getInstance().getWeather2(); + WeatherSpec weather = Weather.getInstance().getWeatherSpec(); if (weather != null) { //comment the same key in the general section above! pairs.add(new Pair<>(KEY_LOCATION_SERVICE, (Object) 0)); //0 auto, 1 manual diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java index 26888457d..311c33dca 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java @@ -132,7 +132,7 @@ public class GBWebClient extends WebViewClient { private static WebResourceResponse mimicOpenWeatherMapResponse(String type, String units) { - if (Weather.getInstance() == null || Weather.getInstance().getWeather2() == null) { + if (Weather.getInstance() == null) { LOG.warn("WEBVIEW - Weather instance is null, cannot update weather"); return null; } @@ -142,8 +142,8 @@ public class GBWebClient extends WebViewClient { try { JSONObject resp; - if ("/data/2.5/weather".equals(type) && Weather.getInstance().getWeather2().reconstructedWeather != null) { - resp = new JSONObject(Weather.getInstance().getWeather2().reconstructedWeather.toString()); + if ("/data/2.5/weather".equals(type) && Weather.getInstance().getReconstructedOWMWeather() != null) { + resp = new JSONObject(Weather.getInstance().getReconstructedOWMWeather().toString()); JSONObject main = resp.getJSONObject("main"); @@ -152,8 +152,8 @@ public class GBWebClient extends WebViewClient { resp.put("cod", 200); resp.put("coord", coordObject(currentPosition)); resp.put("sys", sysObject(currentPosition)); -// } else if ("/data/2.5/forecast".equals(type) && Weather.getInstance().getWeather2().reconstructedForecast != null) { //this is wrong, as we only have daily data. Unfortunately it looks like daily forecasts cannot be reconstructed -// resp = new JSONObject(Weather.getInstance().getWeather2().reconstructedForecast.toString()); +// } else if ("/data/2.5/forecast".equals(type) && Weather.getInstance().getWeather2().reconstructedOWMForecast != null) { //this is wrong, as we only have daily data. Unfortunately it looks like daily forecasts cannot be reconstructed +// resp = new JSONObject(Weather.getInstance().getWeather2().reconstructedOWMForecast.toString()); // // JSONObject city = resp.getJSONObject("city"); // city.put("coord", coordObject(currentPosition)); diff --git a/app/src/main/java/ru/gelin/android/weather/notification/ParcelableWeather2.java b/app/src/main/java/ru/gelin/android/weather/notification/ParcelableWeather2.java index a44ac0757..0d136d470 100644 --- a/app/src/main/java/ru/gelin/android/weather/notification/ParcelableWeather2.java +++ b/app/src/main/java/ru/gelin/android/weather/notification/ParcelableWeather2.java @@ -26,8 +26,6 @@ import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; - import nodomain.freeyourgadget.gadgetbridge.model.Weather; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; @@ -35,22 +33,10 @@ public class ParcelableWeather2 implements Parcelable { private static final Logger LOG = LoggerFactory.getLogger(ParcelableWeather2.class); // getters and setters suck ;) + public WeatherSpec weatherSpec = new WeatherSpec(); - public long time = 0; - public long queryTime = 0; - public int version = 0; - public String location = ""; - public int currentTemp = 0; - public String currentCondition = ""; - - private String[] currentConditionType = null; - public int currentConditionCode = 3200; - public int todayLowTemp = 0; - public int todayHighTemp = 0; - public ArrayList forecasts = new ArrayList<>(); - - public JSONObject reconstructedWeather = null; - public JSONObject reconstructedForecast = null; + public JSONObject reconstructedOWMWeather = null; + public JSONObject reconstructedOWMForecast = null; private ParcelableWeather2(Parcel in) { int version = in.readInt(); @@ -59,45 +45,46 @@ public class ParcelableWeather2 implements Parcelable { } Bundle bundle = in.readBundle(); - location = bundle.getString("weather_location"); - time = bundle.getLong("weather_time"); - queryTime = bundle.getLong("weather_query_time"); + weatherSpec.location = bundle.getString("weather_location"); + long time = bundle.getLong("weather_time"); + long queryTime = bundle.getLong("weather_query_time"); + weatherSpec.timestamp = (int) (queryTime / 1000); bundle.getString("weather_forecast_url"); int conditions = bundle.getInt("weather_conditions"); if (conditions > 0) { Bundle conditionBundle = in.readBundle(); - reconstructedWeather = new JSONObject(); + reconstructedOWMWeather = new JSONObject(); JSONArray weather = new JSONArray(); JSONObject condition = new JSONObject(); JSONObject main = new JSONObject(); - currentCondition = conditionBundle.getString("weather_condition_text"); + weatherSpec.currentCondition = conditionBundle.getString("weather_condition_text"); conditionBundle.getStringArray("weather_condition_types"); - currentTemp = conditionBundle.getInt("weather_current_temp"); + weatherSpec.currentTemp = conditionBundle.getInt("weather_current_temp"); - currentConditionType = conditionBundle.getStringArray("weather_condition_types"); - currentConditionCode = weatherConditionTypesToOpenWeatherMapIds(currentConditionType[0]); - todayLowTemp = conditionBundle.getInt("weather_low_temp"); - todayHighTemp = conditionBundle.getInt("weather_high_temp"); + String[] currentConditionType = conditionBundle.getStringArray("weather_condition_types"); + weatherSpec.currentConditionCode = weatherConditionTypesToOpenWeatherMapIds(currentConditionType[0]); + weatherSpec.todayMinTemp = conditionBundle.getInt("weather_low_temp"); + weatherSpec.todayMaxTemp = conditionBundle.getInt("weather_high_temp"); try { - condition.put("id", currentConditionCode); - condition.put("main", currentCondition); - condition.put("icon", Weather.mapToOpenWeatherMapIcon(currentConditionCode)); + condition.put("id", weatherSpec.currentConditionCode); + condition.put("main", weatherSpec.currentCondition); + condition.put("icon", Weather.mapToOpenWeatherMapIcon(weatherSpec.currentConditionCode)); weather.put(condition); - main.put("temp", currentTemp); + main.put("temp", weatherSpec.currentTemp); main.put("humidity", conditionBundle.getInt("weather_humidity_value")); - main.put("temp_min", todayLowTemp); - main.put("temp_max", todayHighTemp); - main.put("name", location); + main.put("temp_min", weatherSpec.todayMinTemp); + main.put("temp_max", weatherSpec.todayMaxTemp); + main.put("name", weatherSpec.location); - reconstructedWeather.put("weather", weather); - reconstructedWeather.put("main", main); + reconstructedOWMWeather.put("weather", weather); + reconstructedOWMWeather.put("main", main); } catch (JSONException e) { e.printStackTrace(); } - LOG.debug("Weather JSON for WEBVIEW: " + reconstructedWeather.toString()); + LOG.debug("Weather JSON for WEBVIEW: " + reconstructedOWMWeather.toString()); //fetch forecasts int timeOffset = 0; @@ -114,7 +101,7 @@ public class ParcelableWeather2 implements Parcelable { int forecastConditionCode = weatherConditionTypesToOpenWeatherMapIds(forecastConditionType[0]); int forecastLowTemp = forecastBundle.getInt("weather_low_temp"); int forecastHighTemp = forecastBundle.getInt("weather_high_temp"); - forecasts.add(new WeatherSpec.Forecast(forecastLowTemp, forecastHighTemp, forecastConditionCode)); + weatherSpec.forecasts.add(new WeatherSpec.Forecast(forecastLowTemp, forecastHighTemp, forecastConditionCode)); try { condition.put("id", forecastConditionCode); condition.put("main", forecastBundle.getString("weather_condition_text")); @@ -138,18 +125,18 @@ public class ParcelableWeather2 implements Parcelable { } try { //"city":{"id":3181913,"name":"Bolzano","coord":{"lat":46.4927,"lon":11.3336},"country":"IT"} - city.put("name", location); + city.put("name", weatherSpec.location); city.put("country", "World"); - reconstructedForecast = new JSONObject(); - reconstructedForecast.put("city", city); - reconstructedForecast.put("cnt", list.length()); - reconstructedForecast.put("list", list); + reconstructedOWMForecast = new JSONObject(); + reconstructedOWMForecast.put("city", city); + reconstructedOWMForecast.put("cnt", list.length()); + reconstructedOWMForecast.put("list", list); } catch (JSONException e) { LOG.error("error while construction JSON", e); } - LOG.debug("Forecast JSON for WEBVIEW: " + reconstructedForecast.toString()); + LOG.debug("Forecast JSON for WEBVIEW: " + reconstructedOWMForecast.toString()); } }