From 3739a2935ed2e80b769ffe36d4a4c5783229dd09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Tue, 10 Mar 2026 19:47:14 +0000 Subject: [PATCH] Attempt to fix TinyWeatherForecastGermanyReceiver on some devices --- .../TinyWeatherForecastGermanyReceiver.java | 55 +++++++++++++++---- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/TinyWeatherForecastGermanyReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/TinyWeatherForecastGermanyReceiver.java index fbadfd16b7..3fde537d9a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/TinyWeatherForecastGermanyReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/TinyWeatherForecastGermanyReceiver.java @@ -20,9 +20,13 @@ package nodomain.freeyourgadget.gadgetbridge.externalevents; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.widget.Toast; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.ArrayList; import java.util.Collections; @@ -32,22 +36,49 @@ import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.util.GB; public class TinyWeatherForecastGermanyReceiver extends BroadcastReceiver { + private static final Logger LOG = LoggerFactory.getLogger(TinyWeatherForecastGermanyReceiver.class); @Override public void onReceive(Context context, Intent intent) { - if (intent != null) { - Bundle bundle = intent.getExtras(); - if (bundle != null) { + if (intent == null) { + LOG.warn("Got null intent"); + return; + } + final Bundle bundle = intent.getExtras(); + if (bundle == null) { + LOG.warn("Got null bundle"); + return; + } + + LOG.debug("Got intent for {}", intent.getAction()); + + try { + bundle.setClassLoader(WeatherSpec.class.getClassLoader()); + + final WeatherSpec weatherSpec; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + weatherSpec = bundle.getParcelable("WeatherSpec", WeatherSpec.class); + } else { + weatherSpec = bundle.getParcelable("WeatherSpec"); + } + + if (weatherSpec == null) { + LOG.warn("Got null WeatherSpec"); + return; + } + + final ArrayList weatherSpecs = new ArrayList<>(Collections.singletonList(weatherSpec)); + weatherSpec.setTimestamp((int) (System.currentTimeMillis() / 1000)); + Weather.setWeatherSpec(weatherSpecs); + GBApplication.deviceService().onSendWeather(); + } catch (Exception e) { + GB.toast("Gadgetbridge received broken or incompatible weather data", Toast.LENGTH_SHORT, GB.ERROR, e); + + for (String key : bundle.keySet()) { try { - WeatherSpec weatherSpec = bundle.getParcelable("WeatherSpec"); - if (weatherSpec != null) { - ArrayList weatherSpecs = new ArrayList<>(Collections.singletonList(weatherSpec)); - weatherSpec.setTimestamp((int) (System.currentTimeMillis() / 1000)); - Weather.setWeatherSpec(weatherSpecs); - GBApplication.deviceService().onSendWeather(); - } - } catch (Exception e) { - GB.toast("Gadgetbridge received broken or incompatible weather data", Toast.LENGTH_SHORT, GB.ERROR, e); + LOG.debug("WeatherSpec {} -> {}", key, bundle.get(key)); + } catch (final Exception e2) { + LOG.warn("Failed to log WeatherSpec key {}", key, e2); } } }