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) {