diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java index 6e39fbe01f..398eaffdee 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java @@ -1,5 +1,5 @@ -/* Copyright (C) 2016-2024 Andreas Shimokawa, Carsten Pfeiffer, Daniel - Dakhno, Daniele Gobbetti, José Rebelo, Petr Vaněk +/* Copyright (C) 2016-2026 Andreas Shimokawa, Carsten Pfeiffer, Daniel + Dakhno, Daniele Gobbetti, José Rebelo, Petr Vaněk, Thomas Kuehne This file is part of Gadgetbridge. @@ -17,6 +17,11 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.devices; +import static nodomain.freeyourgadget.gadgetbridge.util.GB.toast; + +import android.content.Context; +import android.widget.Toast; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -37,21 +42,25 @@ import de.greenrobot.dao.AbstractDao; import de.greenrobot.dao.Property; import de.greenrobot.dao.query.QueryBuilder; import de.greenrobot.dao.query.WhereCondition; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.Device; +import nodomain.freeyourgadget.gadgetbridge.entities.User; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; +import nodomain.freeyourgadget.gadgetbridge.util.GB; /** * Base class for all sample providers. A Sample provider is device specific and provides * access to the device specific samples. There are both read and write operations. * @param the sample type */ -public abstract class AbstractSampleProvider implements SampleProvider { +public abstract class AbstractSampleProvider implements SampleProvider, PersistanceProvider { private static final Logger LOG = LoggerFactory.getLogger(AbstractSampleProvider.class); private static final WhereCondition[] NO_CONDITIONS = new WhereCondition[0]; @@ -105,7 +114,7 @@ public abstract class AbstractSampleProvider i } @Override - public void addGBActivitySamples(T[] activitySamples) { + public void addGBActivitySamples(@NonNull List activitySamples) { getSampleDao().insertOrReplaceInTx(activitySamples); } @@ -452,4 +461,47 @@ public abstract class AbstractSampleProvider i dummySample.setProvider(this); return dummySample; } + + @Override + public boolean persistSamples(@NonNull final List samples, @Nullable final Context context) { + if (samples.isEmpty()) { + return true; + } + + LOG.debug( + "Will persist {} {} samples", + samples.size(), + getClass().getSimpleName().replace("Provider", "") + ); + + try { + final DaoSession session = getSession(); + + final GBDevice gbDevice = getDevice(); + final Device device = DBHelper.findDevice(gbDevice, session); + if (device == null) { + LOG.warn("Device not found in database for '{}'", gbDevice.getAliasOrName()); + return false; + } + final long deviceId = device.getId(); + + final User user = DBHelper.getUser(session); + final long userId = user.getId(); + + for (final T sample : samples) { + sample.setProvider(this); + sample.setDeviceId(deviceId); + sample.setUserId(userId); + } + + addGBActivitySamples(samples); + } catch (final Exception e) { + LOG.error("Error saving samples", e); + final Context ctx = (context != null) ? context : GBApplication.getContext(); + final String message = ctx.getString(R.string.persisting_samples_failed, e.getLocalizedMessage()); + toast(ctx, message, Toast.LENGTH_LONG, GB.ERROR, e); + return false; + } + return true; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java index e35e6cd481..07fe379d11 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java @@ -90,7 +90,7 @@ public interface SampleProvider { * timestamp will be overwritten. * @param activitySamples the samples to add */ - void addGBActivitySamples(T[] activitySamples); + void addGBActivitySamples(@NonNull List activitySamples); /** * Factory method to creates an empty sample of the correct type for this sample provider diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java index 5a5814a4a6..50e919cc90 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java @@ -80,7 +80,7 @@ public class UnknownDeviceCoordinator extends AbstractDeviceCoordinator { } @Override - public void addGBActivitySamples(AbstractActivitySample[] activitySamples) { + public void addGBActivitySamples(@NonNull List activitySamples) { } @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_hr/GenericHeartRateActivitySampleProvider.kt b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_hr/GenericHeartRateActivitySampleProvider.kt index de0154a7a3..127bf5ab80 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_hr/GenericHeartRateActivitySampleProvider.kt +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_hr/GenericHeartRateActivitySampleProvider.kt @@ -68,7 +68,7 @@ open class GenericHeartRateActivitySampleProvider(device: GBDevice, session: Dao throw UnsupportedOperationException("Read-only sample provider") } - override fun addGBActivitySamples(activitySamples: Array) { + override fun addGBActivitySamples(activitySamples: List) { throw UnsupportedOperationException("Read-only sample provider") } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/gloryfit/GloryFitActivitySampleProvider.kt b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/gloryfit/GloryFitActivitySampleProvider.kt index 433babdad6..79787756c6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/gloryfit/GloryFitActivitySampleProvider.kt +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/gloryfit/GloryFitActivitySampleProvider.kt @@ -110,7 +110,7 @@ open class GloryFitActivitySampleProvider(device: GBDevice, session: DaoSession) throw UnsupportedOperationException("Read-only sample provider") } - override fun addGBActivitySamples(activitySamples: Array) { + override fun addGBActivitySamples(activitySamples: List) { throw UnsupportedOperationException("Read-only sample provider") } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiSampleProvider.java index a3aaebda5a..1dae08eea5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiSampleProvider.java @@ -19,6 +19,7 @@ package nodomain.freeyourgadget.gadgetbridge.devices.huawei; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import org.jetbrains.annotations.UnknownNullability; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -239,7 +240,7 @@ public class HuaweiSampleProvider extends AbstractSampleProvider activitySamples) { List newSamples = new ArrayList<>(); for (HuaweiActivitySample sample : activitySamples) { HuaweiActivitySample start = copySample(sample); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/wena3/SonyWena3ActivitySampleCombiner.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/wena3/SonyWena3ActivitySampleCombiner.java index a3baed0ea5..b497aa6691 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/wena3/SonyWena3ActivitySampleCombiner.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/wena3/SonyWena3ActivitySampleCombiner.java @@ -52,7 +52,7 @@ public class SonyWena3ActivitySampleCombiner { alteredSamples.add(activitySample); } } - activitySampleProvider.addGBActivitySamples(alteredSamples.toArray(new Wena3ActivitySample[alteredSamples.size()])); + activitySampleProvider.addGBActivitySamples(alteredSamples); } public void overlayHeartRateStartingAt(Date startDate, SonyWena3HeartRateSampleProvider heartRateSampleProvider) { @@ -73,6 +73,6 @@ public class SonyWena3ActivitySampleCombiner { alteredSamples.add(activitySample); } } - activitySampleProvider.addGBActivitySamples(alteredSamples.toArray(new Wena3ActivitySample[alteredSamples.size()])); + activitySampleProvider.addGBActivitySamples(alteredSamples); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfActivitySync.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfActivitySync.java index 2766d0a6b1..9c967662d8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfActivitySync.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfActivitySync.java @@ -179,7 +179,7 @@ public class CmfActivitySync { } LOG.debug("Will persist {} activity samples", samples.size()); - sampleProvider.addGBActivitySamples(samples.toArray(new CmfActivitySample[0])); + sampleProvider.addGBActivitySamples(samples); } catch (final Exception e) { GB.toast(getContext(), "Error saving activity samples", Toast.LENGTH_LONG, GB.ERROR, e); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitImporter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitImporter.java index 8b47366293..656b7305d0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitImporter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitImporter.java @@ -887,7 +887,7 @@ public class FitImporter { sample.setUser(user); } - sampleProvider.addGBActivitySamples(activitySamples.toArray(new GarminActivitySample[0])); + sampleProvider.addGBActivitySamples(activitySamples); } catch (final Exception e) { GB.toast(context, "Error saving activity samples", Toast.LENGTH_LONG, GB.ERROR, e); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/fetch/FetchActivityOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/fetch/FetchActivityOperation.java index 5e0aff843c..855bcbb9e2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/fetch/FetchActivityOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/fetch/FetchActivityOperation.java @@ -119,7 +119,7 @@ public class FetchActivityOperation extends AbstractRepeatingFetchOperation { timestamp.add(Calendar.MINUTE, 1); } - sampleProvider.addGBActivitySamples(samples.toArray(new MiBandActivitySample[0])); + sampleProvider.addGBActivitySamples(samples); timestamp.add(Calendar.MINUTE, -1); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java index bcc3d201b5..00e76ea19e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java @@ -1881,7 +1881,7 @@ public class HuaweiSupportProvider { samples.add(activitySample); } - sampleProvider.addGBActivitySamples(samples.toArray(new HuaweiActivitySample[0])); + sampleProvider.addGBActivitySamples(samples); } catch (Exception e) { LOG.error("Failed to add sleep activity to database", e); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetStepDataRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetStepDataRequest.java index 93d6435fd2..4e898372c2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetStepDataRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetStepDataRequest.java @@ -121,7 +121,7 @@ public class GetStepDataRequest extends Request { } } - sampleProvider.addGBActivitySamples(samples.toArray(new HuaweiActivitySample[0])); + sampleProvider.addGBActivitySamples(samples); } catch (Exception e) { LOG.error("Failed to add step data to database", e); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/id115/FetchActivityOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/id115/FetchActivityOperation.java index 5a3a14b542..a7a77f65a9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/id115/FetchActivityOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/id115/FetchActivityOperation.java @@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.GregorianCalendar; @@ -146,7 +147,7 @@ public class FetchActivityOperation extends AbstractID115Operation { } ID115SampleProvider provider = new ID115SampleProvider(getDevice(), dbHandler.getDaoSession()); - provider.addGBActivitySamples(sampleArray); + provider.addGBActivitySamples(Arrays.asList(sampleArray)); } catch (Exception ex) { GB.toast(getContext(), "Error saving activity data: " + ex.getLocalizedMessage(), Toast.LENGTH_LONG, GB.ERROR, ex); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lenovo/watchxplus/WatchXPlusDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lenovo/watchxplus/WatchXPlusDeviceSupport.java index ee051d0f3a..5b4cac1643 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lenovo/watchxplus/WatchXPlusDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lenovo/watchxplus/WatchXPlusDeviceSupport.java @@ -1638,7 +1638,7 @@ public class WatchXPlusDeviceSupport extends AbstractBTLESingleDeviceSupport { overlayList.add(new WatchXPlusHealthActivityOverlay(sample.getTimestamp(), sample.getTimestamp()+300, sample.getRawKind(), sample.getDeviceId(), sample.getUserId(), sample.getRawWatchXPlusHealthData())); } overlayDao.insertOrReplaceInTx(overlayList); - provider.addGBActivitySamples(samples.toArray(new WatchXPlusActivitySample[0])); + provider.addGBActivitySamples(samples); handleEndOfDataChunks(chunkNo, type); } else if (DataType.HEART_RATE.equals(type)) { @@ -1658,7 +1658,7 @@ public class WatchXPlusDeviceSupport extends AbstractBTLESingleDeviceSupport { sample.setRawKind(ActivityKind.ACTIVITY.getCode()); samples.add(sample); } - provider.addGBActivitySamples(samples.toArray(new WatchXPlusActivitySample[0])); + provider.addGBActivitySamples(samples); handleEndOfDataChunks(chunkNo, type); } else { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/operations/FetchActivityOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/operations/FetchActivityOperation.java index be9efacc38..d7dd1b6c1f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/operations/FetchActivityOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/operations/FetchActivityOperation.java @@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.text.DateFormat; +import java.util.Arrays; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.UUID; @@ -389,7 +390,7 @@ public class FetchActivityOperation extends AbstractMiBand1Operation { minutes++; timestampInSeconds += 60; } - provider.addGBActivitySamples(samples); + provider.addGBActivitySamples(Arrays.asList(samples)); } finally { activityStruct.bufferFlushed(minutes); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java index d5e58d57a9..e0b8374459 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java @@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.SimpleTimeZone; import java.util.UUID; @@ -105,7 +106,7 @@ class AppMessageHandlerMisfit extends AppMessageHandler { } LOG.info("total steps for above period: " + totalSteps); - sampleProvider.addGBActivitySamples(misfitSamples); + sampleProvider.addGBActivitySamples(Arrays.asList(misfitSamples)); } catch (Exception e) { LOG.error("Error acquiring database", e); return null; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSteps.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSteps.java index a23d44eb2b..b4d3bc1902 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSteps.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSteps.java @@ -23,6 +23,7 @@ import org.slf4j.LoggerFactory; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.Arrays; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; @@ -115,7 +116,7 @@ class DatalogSessionHealthSteps extends DatalogSessionPebbleHealth { samples[j].setProvider(sampleProvider); } - sampleProvider.addGBActivitySamples(samples); + sampleProvider.addGBActivitySamples(Arrays.asList(samples)); } catch (Exception ex) { LOG.debug(ex.getMessage()); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/polar/PolarH10DeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/polar/PolarH10DeviceSupport.java index 4dec42c187..4888843f06 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/polar/PolarH10DeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/polar/PolarH10DeviceSupport.java @@ -15,6 +15,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -296,7 +297,7 @@ public class PolarH10DeviceSupport extends AbstractBTLESingleDeviceSupport { final Long userId = DBHelper.getUser(db.getDaoSession()).getId(); final Long deviceId = DBHelper.getDevice(getDevice(), db.getDaoSession()).getId(); final PolarH10ActivitySample sample = new PolarH10ActivitySample((int) (info.getTimestamp() / 1000), deviceId, userId, info.getHeartRate()); - polarSampleProvider.addGBActivitySamples(new PolarH10ActivitySample[]{sample}); + polarSampleProvider.addGBActivitySamples(Collections.singletonList(sample)); final ArrayList<@NotNull Integer> rrIntervals = info.getRrIntervals(); if (!rrIntervals.isEmpty()) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil/FossilWatchAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil/FossilWatchAdapter.java index 1e95f5626e..fe0bb9714f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil/FossilWatchAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil/FossilWatchAdapter.java @@ -633,7 +633,7 @@ public class FossilWatchAdapter extends WatchAdapter { LOG.debug("Activity samples parsed successfully: {}", Arrays.stream(samples).toList()); } - provider.addGBActivitySamples(samples); + provider.addGBActivitySamples(Arrays.asList(samples)); if (saveRawActivityFiles) { writeFile("activity_qhybrid", String.valueOf(System.currentTimeMillis()), fileData); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java index f645a40f38..c1ff95c4cc 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java @@ -80,6 +80,7 @@ import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; import java.time.ZonedDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; @@ -1284,7 +1285,7 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter { for (int i = 0; i < entries.size(); i++) { samples[i] = entries.get(i).toDAOActivitySample(userId, deviceId); } - provider.addGBActivitySamples(samples); + provider.addGBActivitySamples(Arrays.asList(samples)); // SpO2, should be empty for an unsupported device ArrayList spo2Samples = parser.getSpo2Samples(); HybridHRSpo2SampleProvider spo2Provider = new HybridHRSpo2SampleProvider(getDeviceSupport().getDevice(), dbHandler.getDaoSession()); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/sony/wena3/protocol/logic/parsers/StepsPacketParser.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/sony/wena3/protocol/logic/parsers/StepsPacketParser.java index 2a9f57380e..9f4ff3e874 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/sony/wena3/protocol/logic/parsers/StepsPacketParser.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/sony/wena3/protocol/logic/parsers/StepsPacketParser.java @@ -60,7 +60,7 @@ public class StepsPacketParser extends OneBytePerSamplePacketParser { i++; currentSampleDate = timestampOfSampleAtIndex(i); } - sampleProvider.addGBActivitySamples(samples.toArray(new Wena3ActivitySample[samples.size()])); + sampleProvider.addGBActivitySamples(samples); SonyWena3ActivitySampleCombiner combiner = new SonyWena3ActivitySampleCombiner(sampleProvider); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/withingssteelhr/communication/conversation/ActivitySampleHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/withingssteelhr/communication/conversation/ActivitySampleHandler.java index dbbe0ec44b..a7293487fc 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/withingssteelhr/communication/conversation/ActivitySampleHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/withingssteelhr/communication/conversation/ActivitySampleHandler.java @@ -220,7 +220,7 @@ public class ActivitySampleHandler extends AbstractResponseHandler { sample.setDeviceId(deviceId); sample.setUserId(userId); } - provider.addGBActivitySamples(activitySamples.toArray(new WithingsSteelHRActivitySample[0])); + provider.addGBActivitySamples(activitySamples); } catch (Exception ex) { logger.warn("Error saving activity data: " + ex.getLocalizedMessage()); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/activity/impl/DailyDetailsParser.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/activity/impl/DailyDetailsParser.java index 7f855f9729..c38d602dd0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/activity/impl/DailyDetailsParser.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/activity/impl/DailyDetailsParser.java @@ -191,7 +191,7 @@ public class DailyDetailsParser extends XiaomiActivityParser { sample.setUser(user); sample.setProvider(sampleProvider); } - sampleProvider.addGBActivitySamples(samples.toArray(new XiaomiActivitySample[0])); + sampleProvider.addGBActivitySamples(samples); return true; } catch (final Exception e) {