implement getAllDeviceDao to delete device specific data when deleting the device

This commit is contained in:
Thomas Kuehne
2025-08-05 21:40:21 +02:00
committed by José Rebelo
parent a680a819fd
commit 6634302353
10 changed files with 151 additions and 19 deletions
@@ -1,6 +1,6 @@
/* Copyright (C) 2019-2024 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
/* Copyright (C) 2019-2025 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
Gabriele Monaco, Ganblejs, glemco, Gordon Williams, José Rebelo, LukasEdl,
Petr Vaněk
Petr Vaněk, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -32,16 +32,22 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.BuildConfig;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.SleepAsAndroidFeature;
import nodomain.freeyourgadget.gadgetbridge.entities.BangleJSActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummaryDao;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
@@ -271,4 +277,12 @@ public class BangleJSCoordinator extends AbstractBLEDeviceCoordinator {
public int getDefaultIconResource() {
return R.drawable.ic_device_banglejs;
}
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(2);
map.put(session.getBangleJSActivitySampleDao(), BangleJSActivitySampleDao.Properties.DeviceId);
map.put(session.getBaseActivitySummaryDao(), BaseActivitySummaryDao.Properties.DeviceId);
return map;
}
}
@@ -1,5 +1,5 @@
/* Copyright (C) 2018-2024 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
Daniele Gobbetti, José Rebelo, Petr Vaněk, Vadim Kaushan
/* Copyright (C) 2018-2025 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
Daniele Gobbetti, José Rebelo, Petr Vaněk, Vadim Kaushan, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -22,13 +22,18 @@ import android.os.ParcelUuid;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import androidx.annotation.NonNull;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.ID115ActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
@@ -100,4 +105,11 @@ public class ID115Coordinator extends AbstractBLEDeviceCoordinator {
public int getDefaultIconResource() {
return R.drawable.ic_device_h30_h10;
}
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(1);
map.put(session.getID115ActivitySampleDao(), ID115ActivitySampleDao.Properties.DeviceId);
return map;
}
}
@@ -1,5 +1,5 @@
/* Copyright (C) 2020-2024 Damien Gaignon, Daniel Dakhno, José Rebelo,
Petr Vaněk, Yukai Li
/* Copyright (C) 2020-2025 Damien Gaignon, Daniel Dakhno, José Rebelo,
Petr Vaněk, Yukai Li, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -19,10 +19,15 @@ package nodomain.freeyourgadget.gadgetbridge.devices.lefun;
import androidx.annotation.NonNull;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.LefunActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.LefunBiometricSampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.LefunSleepSampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
@@ -34,6 +39,9 @@ import static nodomain.freeyourgadget.gadgetbridge.devices.lefun.LefunConstants.
import static nodomain.freeyourgadget.gadgetbridge.devices.lefun.LefunConstants.MANUFACTURER_NAME;
import static nodomain.freeyourgadget.gadgetbridge.devices.lefun.LefunConstants.NUM_ALARM_SLOTS;
import java.util.HashMap;
import java.util.Map;
/**
* Device coordinator for Lefun band
*/
@@ -141,4 +149,13 @@ public class LefunDeviceCoordinator extends AbstractBLEDeviceCoordinator {
public int getDefaultIconResource() {
return R.drawable.ic_device_h30_h10;
}
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(3);
map.put(session.getLefunActivitySampleDao(), LefunActivitySampleDao.Properties.DeviceId);
map.put(session.getLefunBiometricSampleDao(), LefunBiometricSampleDao.Properties.DeviceId);
map.put(session.getLefunSleepSampleDao(), LefunSleepSampleDao.Properties.DeviceId);
return map;
}
}
@@ -1,5 +1,5 @@
/* Copyright (C) 2019-2024 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
José Rebelo, mamucho, mkusnierz, Petr Vaněk
/* Copyright (C) 2019-2025 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
José Rebelo, mamucho, mkusnierz, Petr Vaněk, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -37,7 +37,11 @@ import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
@@ -46,6 +50,8 @@ import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.lenovo.LenovoWatchCalibrationActivity;
import nodomain.freeyourgadget.gadgetbridge.devices.lenovo.LenovoWatchPairingActivity;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.WatchXPlusActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.WatchXPlusHealthActivityOverlayDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
@@ -277,4 +283,12 @@ public class WatchXPlusDeviceCoordinator extends AbstractBLEDeviceCoordinator {
public int getDefaultIconResource() {
return R.drawable.ic_device_watchxplus;
}
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(2);
map.put(session.getWatchXPlusActivitySampleDao(), WatchXPlusActivitySampleDao.Properties.DeviceId);
map.put(session.getWatchXPlusHealthActivityOverlayDao(), WatchXPlusHealthActivityOverlayDao.Properties.DeviceId);
return map;
}
}
@@ -1,4 +1,4 @@
/* Copyright (C) 2023-2024 José Rebelo
/* Copyright (C) 2023-2025 José Rebelo, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -18,11 +18,18 @@ package nodomain.freeyourgadget.gadgetbridge.devices.mijia_lywsd;
import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.MijiaLywsdHistoricSampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.MijiaLywsdRealtimeSampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
@@ -104,4 +111,12 @@ public abstract class AbstractMijiaLywsdCoordinator extends AbstractBLEDeviceCoo
}
public abstract boolean supportsSetTime();
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(2);
map.put(session.getMijiaLywsdHistoricSampleDao(), MijiaLywsdHistoricSampleDao.Properties.DeviceId);
map.put(session.getMijiaLywsdRealtimeSampleDao(), MijiaLywsdRealtimeSampleDao.Properties.DeviceId);
return map;
}
}
@@ -1,6 +1,6 @@
/* Copyright (C) 2020-2024 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
/* Copyright (C) 2020-2025 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
Davis Mosenkovs, ITCactus, José Rebelo, Patric Gruber, Petr Vaněk, Taavi
Eomäe, uli
Eomäe, uli, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -23,13 +23,18 @@ import android.net.Uri;
import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.PineTimeActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
@@ -130,4 +135,11 @@ public class PineTimeJFCoordinator extends AbstractBLEDeviceCoordinator {
public int getDefaultIconResource() {
return R.drawable.ic_device_pinetime;
}
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(1);
map.put(session.getPineTimeActivitySampleDao(), PineTimeActivitySampleDao.Properties.DeviceId);
return map;
}
}
@@ -1,5 +1,5 @@
/* Copyright (C) 2020-2024 Damien Gaignon, Daniel Dakhno, José Rebelo,
opavlov, Petr Vaněk
/* Copyright (C) 2020-2025 Damien Gaignon, Daniel Dakhno, José Rebelo,
opavlov, Petr Vaněk, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -19,12 +19,17 @@ package nodomain.freeyourgadget.gadgetbridge.devices.sonyswr12;
import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.SonySWR12SampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
@@ -91,4 +96,11 @@ public class SonySWR12DeviceCoordinator extends AbstractBLEDeviceCoordinator {
public int getDeviceNameResource() {
return R.string.devicetype_sonyswr12;
}
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(1);
map.put(session.getSonySWR12SampleDao(), SonySWR12SampleDao.Properties.DeviceId);
return map;
}
}
@@ -1,5 +1,5 @@
/* Copyright (C) 2020-2024 115ek, Damien Gaignon, Daniel Dakhno, José
Rebelo, Petr Vaněk
/* Copyright (C) 2020-2025 115ek, Damien Gaignon, Daniel Dakhno, José
Rebelo, Petr Vaněk, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -20,12 +20,17 @@ package nodomain.freeyourgadget.gadgetbridge.devices.tlw64;
import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.TLW64ActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
@@ -87,4 +92,11 @@ public class TLW64Coordinator extends AbstractBLEDeviceCoordinator {
public int getDeviceNameResource() {
return R.string.devicetype_tlw64;
}
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(1);
map.put(session.getTLW64ActivitySampleDao(), TLW64ActivitySampleDao.Properties.DeviceId);
return map;
}
}
@@ -1,5 +1,5 @@
/* Copyright (C) 2018-2024 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
Daniele Gobbetti, José Rebelo, ladbsoft, Petr Vaněk
/* Copyright (C) 2018-2025 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
Daniele Gobbetti, José Rebelo, ladbsoft, Petr Vaněk, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -19,12 +19,17 @@ package nodomain.freeyourgadget.gadgetbridge.devices.xwatch;
import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.XWatchActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
@@ -71,4 +76,11 @@ public class XWatchCoordinator extends AbstractBLEDeviceCoordinator {
public int getDeviceNameResource() {
return R.string.devicetype_xwatch;
}
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(1);
map.put(session.getXWatchActivitySampleDao(), XWatchActivitySampleDao.Properties.DeviceId);
return map;
}
}
@@ -1,5 +1,5 @@
/* Copyright (C) 2018-2024 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
Daniele Gobbetti, José Rebelo, Petr Vaněk, Sebastian Kranz
/* Copyright (C) 2018-2025 Andreas Shimokawa, Damien Gaignon, Daniel Dakhno,
Daniele Gobbetti, José Rebelo, Petr Vaněk, Sebastian Kranz, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -20,9 +20,13 @@ package nodomain.freeyourgadget.gadgetbridge.devices.zetime;
import androidx.annotation.NonNull;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettings;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer;
@@ -31,6 +35,7 @@ import nodomain.freeyourgadget.gadgetbridge.capabilities.HeartRateCapability;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.ZeTimeActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
@@ -195,4 +200,11 @@ public class ZeTimeCoordinator extends AbstractBLEDeviceCoordinator {
public int getDefaultIconResource() {
return R.drawable.ic_device_zetime;
}
@Override
public Map<AbstractDao<?, ?>, Property> getAllDeviceDao(@NonNull final DaoSession session) {
Map<AbstractDao<?, ?>, Property> map = new HashMap<>(1);
map.put(session.getZeTimeActivitySampleDao(), ZeTimeActivitySampleDao.Properties.DeviceId);
return map;
}
}