mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Fetch weather from singleton instance
As a follow-up to #5239, avoid moving around a huge amount of data through intents.
This commit is contained in:
+1
-2
@@ -390,8 +390,7 @@ public class DebugActivity extends AbstractGBActivity {
|
||||
Weather.setWeatherSpec(new ArrayList<>(Collections.singletonList(weatherSpec)));
|
||||
}
|
||||
|
||||
final ArrayList<WeatherSpec> specs = new ArrayList<>(Weather.getWeatherSpecs());
|
||||
GBApplication.deviceService().onSendWeather(specs);
|
||||
GBApplication.deviceService().onSendWeather();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NavigationInfoSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
|
||||
/**
|
||||
@@ -139,7 +138,7 @@ public interface EventHandler {
|
||||
|
||||
void onTestNewFunction();
|
||||
|
||||
void onSendWeather(ArrayList<WeatherSpec> weatherSpecs);
|
||||
void onSendWeather();
|
||||
|
||||
void onSetFmFrequency(float frequency);
|
||||
|
||||
|
||||
+7
-3
@@ -24,7 +24,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.UUID;
|
||||
@@ -38,6 +37,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.CannedMessagesSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
||||
@@ -252,8 +252,12 @@ public class SMAQ2OSSSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
final WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
TransactionBuilder builder;
|
||||
builder = performInitialized("Sending current weather");
|
||||
|
||||
+1
-1
@@ -180,7 +180,7 @@ public class CMWeatherReceiver extends BroadcastReceiver implements CMWeatherMan
|
||||
}
|
||||
ArrayList<WeatherSpec> weatherSpecs = new ArrayList<>(Collections.singletonList(weatherSpec));
|
||||
Weather.setWeatherSpec(weatherSpecs);
|
||||
GBApplication.deviceService().onSendWeather(weatherSpecs);
|
||||
GBApplication.deviceService().onSendWeather();
|
||||
} else {
|
||||
LOG.info("request has returned null for WeatherInfo");
|
||||
}
|
||||
|
||||
+1
-1
@@ -107,7 +107,7 @@ public class GenericWeatherReceiver extends BroadcastReceiver {
|
||||
intent.replaceExtras((Bundle)null);
|
||||
|
||||
Weather.setWeatherSpec(weathers);
|
||||
GBApplication.deviceService().onSendWeather(weathers);
|
||||
GBApplication.deviceService().onSendWeather();
|
||||
} catch (final Exception e) {
|
||||
GB.toast("Gadgetbridge received broken or incompatible weather data", Toast.LENGTH_SHORT, GB.ERROR, e);
|
||||
}
|
||||
|
||||
+1
-1
@@ -205,7 +205,7 @@ public class LineageOsWeatherReceiver extends BroadcastReceiver implements Linea
|
||||
}
|
||||
ArrayList<WeatherSpec> weatherSpecs = new ArrayList<>(Collections.singletonList(weatherSpec));
|
||||
Weather.setWeatherSpec(weatherSpecs);
|
||||
GBApplication.deviceService().onSendWeather(weatherSpecs);
|
||||
GBApplication.deviceService().onSendWeather();
|
||||
} else {
|
||||
LOG.info("request has returned null for WeatherInfo");
|
||||
}
|
||||
|
||||
+1
-1
@@ -140,7 +140,7 @@ public class OmniJawsObserver extends ContentObserver {
|
||||
|
||||
ArrayList<WeatherSpec> weatherSpecs = new ArrayList<>(Collections.singletonList(weatherSpec));
|
||||
Weather.setWeatherSpec(weatherSpecs);
|
||||
GBApplication.deviceService().onSendWeather(weatherSpecs);
|
||||
GBApplication.deviceService().onSendWeather();
|
||||
|
||||
} finally {
|
||||
c.close();
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ public class TinyWeatherForecastGermanyReceiver extends BroadcastReceiver {
|
||||
ArrayList<WeatherSpec> weatherSpecs = new ArrayList<>(Collections.singletonList(weatherSpec));
|
||||
weatherSpec.setTimestamp((int) (System.currentTimeMillis() / 1000));
|
||||
Weather.setWeatherSpec(weatherSpecs);
|
||||
GBApplication.deviceService().onSendWeather(weatherSpecs);
|
||||
GBApplication.deviceService().onSendWeather();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
GB.toast("Gadgetbridge received broken or incompatible weather data", Toast.LENGTH_SHORT, GB.ERROR, e);
|
||||
|
||||
@@ -47,7 +47,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NavigationInfoSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.RtlUtils;
|
||||
@@ -495,9 +494,8 @@ public class GBDeviceService implements DeviceService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
Intent intent = createIntent().setAction(ACTION_SEND_WEATHER)
|
||||
.putExtra(EXTRA_WEATHER, weatherSpecs);
|
||||
public void onSendWeather() {
|
||||
Intent intent = createIntent().setAction(ACTION_SEND_WEATHER);
|
||||
invokeService(intent);
|
||||
}
|
||||
|
||||
|
||||
@@ -144,7 +144,6 @@ public interface DeviceService extends EventHandler {
|
||||
String EXTRA_CONNECT_FIRST_TIME = "connect_first_time";
|
||||
String EXTRA_BOOLEAN_ENABLE = "enable_realtime_steps";
|
||||
String EXTRA_INTERVAL_SECONDS = "interval_seconds";
|
||||
String EXTRA_WEATHER = "weather";
|
||||
String EXTRA_RECORDED_DATA_TYPES = "data_types";
|
||||
String EXTRA_FM_FREQUENCY = "fm_frequency";
|
||||
String EXTRA_LED_COLOR = "led_color";
|
||||
|
||||
+4
-6
@@ -49,9 +49,9 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NavigationInfoSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.preferences.DevicePrefs;
|
||||
|
||||
// TODO: support option for a single reminder notification when notifications could not be delivered?
|
||||
@@ -566,13 +566,11 @@ public abstract class AbstractDeviceSupport implements DeviceSupport {
|
||||
|
||||
/**
|
||||
* If the device can receive weather information, this method can be
|
||||
* overridden and implemented by the device support class. It's guaranteed
|
||||
* that there is always at least one weatherSpec, with the first being the
|
||||
* primary weather (not necessarily current location).
|
||||
* @param weatherSpecs weather information
|
||||
* overridden and implemented by the device support class. Support classes
|
||||
* should use {@link Weather#getWeatherSpecs()} to obtain the list of WeatherSpecs.
|
||||
*/
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
public void onSendWeather() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
+1
-5
@@ -104,7 +104,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.NavigationInfoSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLEScanService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.receivers.AutoConnectIntervalReceiver;
|
||||
@@ -1162,10 +1161,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere
|
||||
break;
|
||||
}
|
||||
case ACTION_SEND_WEATHER: {
|
||||
ArrayList<WeatherSpec> weatherSpecs = (ArrayList<WeatherSpec>) intentCopy.getSerializableExtra(EXTRA_WEATHER);
|
||||
if (weatherSpecs != null && !weatherSpecs.isEmpty()) {
|
||||
deviceSupport.onSendWeather(weatherSpecs);
|
||||
}
|
||||
deviceSupport.onSendWeather();
|
||||
break;
|
||||
}
|
||||
case ACTION_SET_LED_COLOR:
|
||||
|
||||
+3
-4
@@ -46,7 +46,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NavigationInfoSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
|
||||
/**
|
||||
@@ -473,11 +472,11 @@ public class ServiceDeviceSupport implements DeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
if (checkBusy("send weather events")) {
|
||||
public void onSendWeather() {
|
||||
if (checkBusy("send weather")) {
|
||||
return;
|
||||
}
|
||||
delegate.onSendWeather(weatherSpecs);
|
||||
delegate.onSendWeather();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+7
-3
@@ -27,7 +27,6 @@ import org.slf4j.LoggerFactory;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.Objects;
|
||||
@@ -47,6 +46,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
||||
@@ -233,8 +233,12 @@ public class AsteroidOSDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
final WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
AsteroidOSWeather asteroidOSWeather = new AsteroidOSWeather(weatherSpec);
|
||||
TransactionBuilder builder = createTransactionBuilder("send weather info");
|
||||
// Send city name
|
||||
|
||||
+23
-33
@@ -1983,35 +1983,26 @@ public class BangleJSDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
}
|
||||
|
||||
private void handleWeather(JSONObject json)
|
||||
{
|
||||
if (!json.has("v")) {
|
||||
handleWeatherV1(Weather.getWeatherSpecs());
|
||||
private void handleWeather(final JSONObject json) {
|
||||
final WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
int version = json.getInt("v");
|
||||
boolean forecast = false;
|
||||
if (json.has("f")) {
|
||||
forecast = json.getBoolean("f");
|
||||
}
|
||||
if (version == 1) {
|
||||
handleWeatherV1(Weather.getWeatherSpecs());
|
||||
} else if (version == 2) {
|
||||
handleWeatherV2(Weather.getWeatherSpecs(), forecast);
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
LOG.info("JSONException: " + e.getLocalizedMessage());
|
||||
|
||||
final int version = json.optInt("v", 1);
|
||||
switch (version) {
|
||||
case 1:
|
||||
handleWeatherV1(weatherSpec);
|
||||
break;
|
||||
case 2:
|
||||
final boolean forecast = json.optBoolean("f", false);
|
||||
handleWeatherV2(weatherSpec, forecast);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void handleWeatherV1(List<WeatherSpec> weatherSpecs)
|
||||
{
|
||||
if (weatherSpecs.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
private void handleWeatherV1(final WeatherSpec weatherSpec) {
|
||||
try {
|
||||
JSONObject o = new JSONObject();
|
||||
o.put("t", "weather");
|
||||
@@ -2036,13 +2027,7 @@ public class BangleJSDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
}
|
||||
|
||||
private void handleWeatherV2(List<WeatherSpec> weatherSpecs, boolean includeForecast)
|
||||
{
|
||||
if (weatherSpecs.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
private void handleWeatherV2(final WeatherSpec weatherSpec, final boolean includeForecast) {
|
||||
try {
|
||||
JSONObject o = new JSONObject();
|
||||
o.put("t", "weather");
|
||||
@@ -2182,8 +2167,13 @@ public class BangleJSDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
handleWeatherV1(weatherSpecs);
|
||||
public void onSendWeather() {
|
||||
final WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
handleWeatherV1(weatherSpec);
|
||||
}
|
||||
|
||||
public Bitmap textToBitmap(String text) {
|
||||
|
||||
+7
-2
@@ -71,6 +71,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.Contact;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
@@ -801,8 +802,12 @@ public class CmfWatchProSupport extends AbstractBTLESingleDeviceSupport implemen
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(final ArrayList<WeatherSpec> weatherSpecs) {
|
||||
final WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
// TODO consider adjusting the condition code for clear/sunny so "clear" at night doesn't show a sunny icon (perhaps 23 decimal)?
|
||||
// Each weather entry takes up 9 bytes
|
||||
// There are 7 of those weather entries - 7*9 bytes
|
||||
|
||||
+8
-1
@@ -56,6 +56,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.BitmapUtil;
|
||||
@@ -312,7 +313,13 @@ public class PixooProtocol extends GBDeviceProtocol {
|
||||
|
||||
|
||||
@Override
|
||||
public byte[] encodeSendWeather(WeatherSpec weatherSpec) {
|
||||
public byte[] encodeSendWeather() {
|
||||
final WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return null;
|
||||
}
|
||||
|
||||
byte pixooWeatherCode = 0;
|
||||
if (weatherSpec.getCurrentConditionCode() >= 200 && weatherSpec.getCurrentConditionCode() <= 299) {
|
||||
pixooWeatherCode = 5;
|
||||
|
||||
+1
-4
@@ -18,7 +18,6 @@ import androidx.core.content.ContextCompat;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.TimeZone;
|
||||
import java.util.concurrent.Callable;
|
||||
@@ -448,9 +447,7 @@ public class G1DeviceSupport extends AbstractBTLEMultiDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
// onSetTimeAndWeather() fetches the weather directly from the global state, so no need to
|
||||
// pass in the weatherSpecs.
|
||||
public void onSendWeather() {
|
||||
onSetTimeOrWeather();
|
||||
}
|
||||
|
||||
|
||||
+7
-2
@@ -136,6 +136,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
@@ -543,8 +544,12 @@ public class FitProDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
final WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
LOG.debug("FitPro send weather");
|
||||
short todayMax = (short) (weatherSpec.getTodayMaxTemp() - 273);
|
||||
short todayMin = (short) (weatherSpec.getTodayMinTemp() - 273);
|
||||
|
||||
+7
-2
@@ -551,8 +551,13 @@ public class GarminSupport extends AbstractBTLESingleDeviceSupport implements IC
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(final ArrayList<WeatherSpec> weatherSpecs) { //todo: find the closest one relative to the requested lat/long
|
||||
sendWeatherConditions(weatherSpecs.get(0));
|
||||
public void onSendWeather() { //todo: find the closest one relative to the requested lat/long
|
||||
WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
sendWeatherConditions(weatherSpec);
|
||||
}
|
||||
|
||||
private void sendOutgoingMessage(final String taskName, final GFDIMessage message) {
|
||||
|
||||
+1
-2
@@ -44,7 +44,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.Contact
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.sony.wena3.protocol.packets.notification.defines.VibrationKind
|
||||
@@ -866,7 +865,7 @@ class GloryFitSupport() : AbstractBTLESingleDeviceSupport(LOG) {
|
||||
builder.queue()
|
||||
}
|
||||
|
||||
override fun onSendWeather(weatherSpecs: ArrayList<WeatherSpec?>?) {
|
||||
override fun onSendWeather() {
|
||||
// TODO onSendWeather
|
||||
}
|
||||
|
||||
|
||||
+7
-2
@@ -53,6 +53,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.deviceinfo.DeviceInfo;
|
||||
@@ -599,8 +600,12 @@ public class HPlusSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
TransactionBuilder builder = performInitialized("sendWeather");
|
||||
|
||||
|
||||
+7
-2
@@ -120,6 +120,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.SleepState;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WearingState;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.services.ZeppOsCannedMessagesService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.services.ZeppOsWorldClocksService;
|
||||
@@ -2848,7 +2849,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
public void onSendWeather() {
|
||||
final DeviceCoordinator coordinator = gbDevice.getDeviceCoordinator();
|
||||
if (!coordinator.supportsWeather(getDevice())) {
|
||||
return;
|
||||
@@ -2865,7 +2866,11 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport
|
||||
supportsConditionString = false;
|
||||
}
|
||||
|
||||
final WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
|
||||
MiBandConst.DistanceUnit unit = HuamiCoordinator.getDistanceUnit();
|
||||
int tz_offset_hours = SimpleTimeZone.getDefault().getOffset(weatherSpec.getTimestamp() * 1000L) / (1000 * 60 * 60);
|
||||
|
||||
+2
-3
@@ -52,7 +52,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btbr.AbstractBTBRDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btbr.TransactionBuilder;
|
||||
@@ -597,8 +596,8 @@ public class ZeppOsBtbrSupport extends AbstractBTBRDeviceSupport implements Zepp
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(final ArrayList<WeatherSpec> weatherSpecs) {
|
||||
zeppOsSupport.onSendWeather(weatherSpecs);
|
||||
public void onSendWeather() {
|
||||
zeppOsSupport.onSendWeather();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-3
@@ -46,7 +46,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic;
|
||||
@@ -344,8 +343,8 @@ public class ZeppOsBtleSupport extends AbstractBTLESingleDeviceSupport implement
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(final ArrayList<WeatherSpec> weatherSpecs) {
|
||||
zeppOsSupport.onSendWeather(weatherSpecs);
|
||||
public void onSendWeather() {
|
||||
zeppOsSupport.onSendWeather();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-4
@@ -87,7 +87,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.Huami2021ChunkedDecoder;
|
||||
@@ -97,7 +96,6 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiDevicePre
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFetcher;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.operations.ZeppOsAgpsUpdateOperation;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.operations.ZeppOsFirmwareUpdateOperation;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.operations.ZeppOsGpxRouteFile;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.operations.ZeppOsGpxRouteUploadOperation;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.operations.ZeppOsMusicUploadOperation;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.services.ZeppOsActivityFetchService;
|
||||
@@ -667,8 +665,8 @@ public class ZeppOsSupport extends AbstractDeviceSupport
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(final ArrayList<WeatherSpec> weatherSpecs) {
|
||||
weatherService.onSendWeather(weatherSpecs);
|
||||
public void onSendWeather() {
|
||||
weatherService.onSendWeather();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+7
-3
@@ -21,9 +21,9 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.AbstractZeppOsService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsSupport;
|
||||
|
||||
@@ -56,8 +56,12 @@ public class ZeppOsWeatherService extends AbstractZeppOsService {
|
||||
}
|
||||
}
|
||||
|
||||
public void onSendWeather(final ArrayList<WeatherSpec> weatherSpecs) {
|
||||
final WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
final WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
|
||||
// Weather is not sent directly to the bands, they send HTTP requests for each location.
|
||||
// When we have a weather update, set the default location to that location on the band.
|
||||
|
||||
+2
-3
@@ -39,7 +39,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.Contact;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btbr.AbstractBTBRDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btbr.TransactionBuilder;
|
||||
|
||||
@@ -147,8 +146,8 @@ public class HuaweiBRSupport extends AbstractBTBRDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
supportProvider.onSendWeather(weatherSpecs);
|
||||
public void onSendWeather() {
|
||||
supportProvider.onSendWeather();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-3
@@ -43,7 +43,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.Contact;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
||||
@@ -153,8 +152,8 @@ public class HuaweiLESupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
supportProvider.onSendWeather(weatherSpecs);
|
||||
public void onSendWeather() {
|
||||
supportProvider.onSendWeather();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+7
-2
@@ -2543,8 +2543,13 @@ public class HuaweiSupportProvider {
|
||||
return huaweiWeatherManager.openWeatherMapConditionCodeToHuaweiIcon(conditionCode);
|
||||
}
|
||||
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
huaweiWeatherManager.sendWeather(weatherSpecs.get(0));
|
||||
public void onSendWeather() {
|
||||
WeatherSpec weatherSpec = nodomain.freeyourgadget.gadgetbridge.model.weather.Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
huaweiWeatherManager.sendWeather(weatherSpec);
|
||||
}
|
||||
|
||||
public void onSetGpsLocation(Location location) {
|
||||
|
||||
+3
-4
@@ -22,7 +22,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket;
|
||||
@@ -277,8 +276,8 @@ public class HuaweiWeatherManager {
|
||||
public void handleAsyncMessage(HuaweiPacket response) {
|
||||
if (response.getTlv().getInteger(0x7f, -1) == 0x000186AA) {
|
||||
// Send weather
|
||||
final ArrayList<WeatherSpec> specs = new ArrayList<>(nodomain.freeyourgadget.gadgetbridge.model.weather.Weather.getWeatherSpecs());
|
||||
if (specs.isEmpty()) {
|
||||
final WeatherSpec weatherSpec = nodomain.freeyourgadget.gadgetbridge.model.weather.Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.debug("Weather specs empty, returning that weather is disabled.");
|
||||
try {
|
||||
new SendWeatherErrorRequest(supportProvider, Weather.ErrorCode.WEATHER_DISABLED).doPerform();
|
||||
@@ -287,7 +286,7 @@ public class HuaweiWeatherManager {
|
||||
}
|
||||
return;
|
||||
}
|
||||
this.sendWeather(specs.get(0));
|
||||
this.sendWeather(weatherSpec);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+7
-2
@@ -73,6 +73,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
||||
@@ -1213,8 +1214,12 @@ public class WatchXPlusDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
TransactionBuilder builder = performInitialized("setWeather");
|
||||
int currentTemp;
|
||||
|
||||
+8
-5
@@ -447,13 +447,12 @@ public class MoyoungDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
if (packetType == MoyoungConstants.CMD_NOTIFY_WEATHER_CHANGE) {
|
||||
LOG.info("Will transmit cached weather (if any) since the watch asks for it");
|
||||
if (Weather.getWeatherSpec() != null) {
|
||||
final ArrayList<WeatherSpec> specs = new ArrayList<>(Weather.getWeatherSpecs());
|
||||
GBApplication.deviceService().onSendWeather(specs);
|
||||
onSendWeather();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
for (MoyoungSetting setting : queriedSettings) {
|
||||
for (MoyoungSetting<?> setting : queriedSettings) {
|
||||
if (setting.cmdQuery == packetType) {
|
||||
Object value = setting.decode(payload);
|
||||
onReadConfigurationDone(setting, value, payload);
|
||||
@@ -1982,9 +1981,13 @@ public class MoyoungDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
public void onSendWeather() {
|
||||
try {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
TransactionBuilder builder = performInitialized("onSendWeather");
|
||||
|
||||
// Weather today packet
|
||||
|
||||
+8
-2
@@ -427,7 +427,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
|
||||
mAppMessageHandlers.put(UUID_WEATHER, new AppMessageHandler(UUID_WEATHER, PebbleProtocol.this){
|
||||
@Override
|
||||
public GBDeviceEvent[] onAppStart() {
|
||||
return new GBDeviceEvent[] {new GBDeviceEventSendBytes(encodeSendWeather(Weather.getWeatherSpec()))};
|
||||
return new GBDeviceEvent[] {new GBDeviceEventSendBytes(encodeSendWeather())};
|
||||
}
|
||||
});
|
||||
if (!((PebbleCoordinator) device.getDeviceCoordinator()).isBackgroundJsEnabled(device)) {
|
||||
@@ -1121,7 +1121,13 @@ public class PebbleProtocol extends GBDeviceProtocol {
|
||||
|
||||
|
||||
@Override
|
||||
public byte[] encodeSendWeather(WeatherSpec weatherSpec) {
|
||||
public byte[] encodeSendWeather() {
|
||||
final WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return null;
|
||||
}
|
||||
|
||||
byte[] forecastProtocol = null;
|
||||
byte[] watchfaceProtocol = null;
|
||||
int length = 0;
|
||||
|
||||
+2
-3
@@ -46,7 +46,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractSerialDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceIoThread;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol;
|
||||
@@ -264,9 +263,9 @@ public class PebbleSupport extends AbstractSerialDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
public void onSendWeather() {
|
||||
if (reconnect()) {
|
||||
super.onSendWeather(weatherSpecs);
|
||||
super.onSendWeather();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -90,6 +90,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic;
|
||||
@@ -1015,8 +1016,12 @@ public class PineTimeJFSupport extends AbstractBTLESingleDeviceSupport implement
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.firmwareVersionMajor < 1 || (this.firmwareVersionMajor == 1 && this.firmwareVersionMinor <= 7)) {
|
||||
// Not supported
|
||||
|
||||
+7
-2
@@ -68,6 +68,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.NavigationInfoSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
||||
@@ -737,8 +738,12 @@ public class QHybridSupport extends QHybridBaseSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
watchAdapter.onSendWeather(weatherSpecs.get(0));
|
||||
public void onSendWeather() {
|
||||
final WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
return;
|
||||
}
|
||||
watchAdapter.onSendWeather(weatherSpec);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+6
-2
@@ -599,8 +599,12 @@ public class SonyWena3DeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
WeatherSpec weatherSpec = nodomain.freeyourgadget.gadgetbridge.model.weather.Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
if(weatherSpec.getForecasts().size() < 4) return;
|
||||
|
||||
ArrayList<WeatherDay> days = new ArrayList<>();
|
||||
|
||||
+7
-2
@@ -48,6 +48,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.AlarmUtils;
|
||||
@@ -375,8 +376,12 @@ public class WaspOSDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
JSONObject o = new JSONObject();
|
||||
o.put("t", "weather");
|
||||
|
||||
+2
-3
@@ -58,7 +58,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
import nodomain.freeyourgadget.gadgetbridge.proto.xiaomi.XiaomiProto;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.AbstractDeviceSupport;
|
||||
@@ -393,8 +392,8 @@ public class XiaomiSupport extends AbstractDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(final ArrayList<WeatherSpec> weatherSpecs) {
|
||||
weatherService.onSendWeather(weatherSpecs);
|
||||
public void onSendWeather() {
|
||||
weatherService.onSendWeather();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+5
-3
@@ -20,6 +20,7 @@ import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -408,11 +409,12 @@ public class XiaomiWeatherService extends AbstractXiaomiService {
|
||||
return getDevicePrefs().getBoolean(XiaomiPreferences.FEAT_MULTIPLE_WEATHER_LOCATIONS, false);
|
||||
}
|
||||
|
||||
public void onSendWeather(@NonNull final List<WeatherSpec> weatherSpecList) {
|
||||
public void onSendWeather() {
|
||||
final List<@NotNull WeatherSpec> weatherSpecList = Weather.getWeatherSpecs();
|
||||
if (supportsMultipleWeatherLocations()) {
|
||||
sendWeatherSpecList(weatherSpecList);
|
||||
} else {
|
||||
if (!weatherSpecList.isEmpty() && weatherSpecList.get(0) != null) {
|
||||
if (!weatherSpecList.isEmpty()) {
|
||||
final WeatherSpec specToSend = weatherSpecList.get(0);
|
||||
addWeatherLocationFromSpec(specToSend);
|
||||
sendWeatherSpec(specToSend);
|
||||
@@ -567,7 +569,7 @@ public class XiaomiWeatherService extends AbstractXiaomiService {
|
||||
locationsInitialized = true;
|
||||
|
||||
// now that the feature flag has been updated, send cached weather
|
||||
onSendWeather(Weather.getWeatherSpecs());
|
||||
onSendWeather();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
+7
-2
@@ -56,6 +56,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.calendar.CalendarEvent;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||
@@ -592,8 +593,12 @@ public class ZeTimeDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
public void onSendWeather() {
|
||||
WeatherSpec weatherSpec = Weather.getWeatherSpec();
|
||||
if (weatherSpec == null) {
|
||||
LOG.warn("No weather found in singleton");
|
||||
return;
|
||||
}
|
||||
byte[] weather = new byte[weatherSpec.getLocation().getBytes(StandardCharsets.UTF_8).length + 26]; // 26 bytes for weatherdata and overhead
|
||||
weather[0] = ZeTimeConstants.CMD_PREAMBLE;
|
||||
weather[1] = ZeTimeConstants.CMD_PUSH_WEATHER_DATA;
|
||||
|
||||
+2
-4
@@ -36,7 +36,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.WorldClock;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.AbstractDeviceSupport;
|
||||
|
||||
@@ -286,9 +285,8 @@ public abstract class AbstractSerialDeviceSupport extends AbstractDeviceSupport
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendWeather(ArrayList<WeatherSpec> weatherSpecs) {
|
||||
WeatherSpec weatherSpec = weatherSpecs.get(0);
|
||||
byte[] bytes = gbDeviceProtocol.encodeSendWeather(weatherSpec);
|
||||
public void onSendWeather() {
|
||||
byte[] bytes = gbDeviceProtocol.encodeSendWeather();
|
||||
sendToDevice(bytes);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -178,7 +178,7 @@ public abstract class GBDeviceProtocol {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public byte[] encodeSendWeather(WeatherSpec weatherSpec) {
|
||||
public byte[] encodeSendWeather() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user