From 7a1a6dbb2b34da1f4471fc2e23ddac6f06dee08c Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Mon, 28 Dec 2015 11:33:22 +0100 Subject: [PATCH] WeatherNotification: Try to dissect the parcelable extra This is useless, since we do not get the extra at all (only weather skins) So... this is a dead end... --- .../WeatherNotificationReceiver.java | 81 ++++++++++++++++--- 1 file changed, 69 insertions(+), 12 deletions(-) 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 06145c146..dc0caf628 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/WeatherNotificationReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/WeatherNotificationReceiver.java @@ -3,15 +3,65 @@ package nodomain.freeyourgadget.gadgetbridge.externalevents; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class WeatherNotificationReceiver extends BroadcastReceiver { +public class WeatherNotificationReceiver extends BroadcastReceiver { private static final Logger LOG = LoggerFactory.getLogger(WeatherNotificationReceiver.class); - private static final int VERSION = 2; - private final String TAG = this.getClass().getSimpleName(); + + static class Weather implements Parcelable { + // getters and setters suck ;) + + public long time = 0; + public long queryTime = 0; + public int version = 0; + public String location = ""; + int currentTemp = 0; + + private Weather(Parcel in) { + int version = in.readInt(); + if (version != 2) { + LOG.info("wrong version" + version); + return; + } + Bundle bundle = in.readBundle(); + location = bundle.getString("weather_location"); + time = bundle.getLong("weather_time"); + queryTime = bundle.getLong("weather_query_time"); + int conditions = bundle.getInt("weather_conditions"); + if (conditions > 0) { + currentTemp = bundle.getInt("weather_current_temp"); + } + } + + public static final Creator CREATOR = new Creator() { + @Override + public Weather createFromParcel(Parcel in) { + return new Weather(in); + } + + @Override + public Weather[] newArray(int size) { + return new Weather[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + // we do not really want to use this at all + } + } + @Override public void onReceive(Context context, Intent intent) { @@ -19,15 +69,22 @@ public class WeatherNotificationReceiver extends BroadcastReceiver { LOG.info("Wrong action"); return; } - int f = intent.getParcelableExtra("ru.gelin.android.weather.notification.EXTRA_WEATHER"); - // int version = parcel.readInt(); - // if (version != VERSION) { - // LOG.info("Wrong version"); - // return; - // } + Bundle bundle = intent.getExtras(); - //Bundle bundle = parcel.readBundle(this.getClass().getClassLoader()); - // String location = bundle.getString("weather_location"); - // LOG.info("got location: " + location); + for (String key : bundle.keySet()) { + Object value = bundle.get(key); + LOG.info(String.format("%s %s (%s)", key, + value.toString(), value.getClass().getName())); + } + + if (!intent.hasExtra("ru.gelin.android.weather.notification.EXTRA_WEATHER")) { + LOG.info("no weather extra"); + return; + } + + Weather weather = intent.getParcelableExtra("ru.gelin.android.weather.notification.EXTRA_WEATHER"); + if (weather != null) { + LOG.info("weather in " + weather.location + " is " + weather.currentTemp); + } } } \ No newline at end of file