Make data fetching agnostic from activity

We support quite a few devices that can sync non-activity data.
This commit is contained in:
José Rebelo
2026-01-17 16:20:02 +00:00
parent 7b9baf1a9f
commit ec1065fb2f
45 changed files with 55 additions and 75 deletions
@@ -263,7 +263,7 @@ public class ControlCenterv2 extends AppCompatActivity
// Hide 'refreshing' animation immediately if no health devices are connected
List<GBDevice> devices1 = GBApplication.app().getDeviceManager().getDevices();
for (GBDevice dev : devices1) {
if (dev.getDeviceCoordinator().supportsActivityDataFetching(dev) && dev.isInitialized()) {
if (dev.getDeviceCoordinator().supportsDataFetching(dev) && dev.isInitialized()) {
return;
}
}
@@ -74,7 +74,7 @@ public class WidgetConfigurationActivity extends Activity implements GBActivity
allDevices = GBApplication.app().getDeviceManager().getDevices().stream()
.filter(device -> {
final DeviceCoordinator coordinator = device.getDeviceCoordinator();
return coordinator.supportsActivityDataFetching(device) || coordinator.supportsActivityTracking(device);
return coordinator.supportsDataFetching(device) || coordinator.supportsActivityTracking(device);
}).collect(Collectors.toList());
List<String> list = new ArrayList<>();
@@ -372,12 +372,11 @@ public class ActivityChartsActivity extends AbstractGBActivity implements Charts
protected boolean supportsRefresh() {
final DeviceCoordinator coordinator = getDevice().getDeviceCoordinator();
return coordinator.supportsActivityDataFetching(getDevice());
return coordinator.supportsDataFetching(getDevice());
}
protected boolean allowRefresh() {
final DeviceCoordinator coordinator = getDevice().getDeviceCoordinator();
return coordinator.allowFetchActivityData(getDevice()) && supportsRefresh();
return getDevice().isInitialized() && !getDevice().isBusy() && supportsRefresh();
}
protected int getRecordedDataType() {
@@ -478,7 +478,7 @@ public class GBDeviceAdapterv2 extends ListAdapter<GBDevice, GBDeviceAdapterv2.V
);
//fetch activity data
holder.fetchActivityDataBox.setVisibility((device.isInitialized() && coordinator.supportsActivityDataFetching(device)) ? View.VISIBLE : View.GONE);
holder.fetchActivityDataBox.setVisibility((device.isInitialized() && coordinator.supportsDataFetching(device)) ? View.VISIBLE : View.GONE);
holder.fetchActivityData.setOnClickListener(new View.OnClickListener()
{
@@ -53,11 +53,9 @@ import java.util.regex.Pattern;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import de.greenrobot.dao.query.QueryBuilder;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.GBException;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.ExternalPebbleJSActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.charts.DefaultChartsProvider;
import nodomain.freeyourgadget.gadgetbridge.activities.charts.DeviceChartsProvider;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
@@ -291,11 +289,6 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
return Collections.emptyMap();
}
@Override
public boolean allowFetchActivityData(GBDevice device) {
return device.isInitialized() && !device.isBusy() && supportsActivityDataFetching(device);
}
@Override
@Nullable
public SampleProvider<? extends ActivitySample> getSampleProvider(final GBDevice device, final DaoSession session) {
@@ -622,7 +615,7 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return false;
}
@@ -234,14 +234,14 @@ public interface DeviceCoordinator {
boolean supportsDebugLogs(@NonNull GBDevice device);
/**
* Returns true if activity data fetching is supported by the device
* Returns true if data fetching (activity or otherwise) is supported by the device
* (with this coordinator).
* This enables the sync button in control center and the device can thus be asked to send the data
* (as opposed the device pushing the data to us by itself)
*
* @return
*/
boolean supportsActivityDataFetching(@NonNull GBDevice device);
boolean supportsDataFetching(@NonNull GBDevice device);
/**
* Returns true if activity tracking is supported by the device
@@ -366,20 +366,8 @@ public interface DeviceCoordinator {
*/
boolean supportsWeightMeasurement(@NonNull GBDevice device);
/**
* Returns true if activity data fetching is supported AND possible at this
* very moment. This will consider the device state (being connected/disconnected/busy...)
* etc.
*
* @param device
* @return
*/
boolean allowFetchActivityData(GBDevice device);
/**
* Returns the sample provider for the device being supported.
*
* @return
*/
SampleProvider<? extends ActivitySample> getSampleProvider(GBDevice device, DaoSession session);
@@ -127,7 +127,7 @@ public class BangleJSCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -91,7 +91,7 @@ public class CasioGBX100DeviceCoordinator extends Casio2C2DDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -233,7 +233,7 @@ public class CmfWatchProCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -74,7 +74,7 @@ public class FitProDeviceCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -13,7 +13,7 @@ public abstract class GarminBikeComputerCoordinator extends GarminCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -11,7 +11,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class GarminETrexSeCoordinator extends GarminCoordinator {
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
// for gps tracks
return true;
}
@@ -10,7 +10,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class GarminGpsmap66sCoordinator extends GarminCoordinator {
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
// for gps tracks
return true;
}
@@ -41,7 +41,7 @@ public class GarminInReachMini2 extends GarminCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
// for gps tracks
return true;
}
@@ -65,7 +65,7 @@ public class GarminHrmProPlusCoordinator extends GarminCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -58,7 +58,7 @@ public abstract class GarminWatchCoordinator extends GarminCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -94,7 +94,7 @@ abstract class GloryFitCoordinator : AbstractBLEDeviceCoordinator() {
return false
}
override fun supportsActivityDataFetching(device: GBDevice): Boolean {
override fun supportsDataFetching(device: GBDevice): Boolean {
return true
}
@@ -86,7 +86,7 @@ public class HPlusCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -146,7 +146,7 @@ public abstract class HuamiCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -292,7 +292,7 @@ public abstract class HuaweiCoordinator extends AbstractDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -57,7 +57,7 @@ public abstract class HuaweiFreebudsCoordinator extends HuaweiBRCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return false;
}
@@ -61,7 +61,7 @@ public class ID115Coordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -51,7 +51,7 @@ public class Y5Coordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -76,7 +76,7 @@ public class LefunDeviceCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -114,7 +114,7 @@ public class WatchXPlusDeviceCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -128,7 +128,7 @@ public class MiBandCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -42,7 +42,7 @@ public abstract class AbstractMijiaLywsdCoordinator extends AbstractBLEDeviceCoo
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return false;
}
@@ -102,7 +102,7 @@ public abstract class AbstractMoyoungDeviceCoordinator extends AbstractBLEDevice
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -62,7 +62,7 @@ public class No1F1Coordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -83,7 +83,7 @@ class OneTouchCoordinator : AbstractBLEDeviceCoordinator() {
}
}
override fun supportsActivityDataFetching(device: GBDevice): Boolean {
override fun supportsDataFetching(device: GBDevice): Boolean {
return true
}
@@ -89,7 +89,7 @@ public class OVTouch26Coordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -94,7 +94,7 @@ public class QHybridCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return isFossilHybrid(device) && device.getState() == GBDevice.State.INITIALIZED;
}
@@ -113,7 +113,7 @@ public class SonyWena3Coordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -48,7 +48,7 @@ public class SonySWR12DeviceCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -284,7 +284,7 @@ public class TestDeviceCoordinator extends AbstractDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return supports(device, TestFeature.ACTIVITY_DATA_FETCHING);
}
@@ -44,7 +44,7 @@ public class TLW64Coordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -198,7 +198,7 @@ public class UltrahumanDeviceCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -74,7 +74,7 @@ public class VescCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -68,7 +68,7 @@ public class WithingsSteelHRDeviceCoordinator extends AbstractBLEDeviceCoordinat
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -256,7 +256,7 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(@NonNull final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -42,7 +42,7 @@ public class XWatchCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -107,7 +107,7 @@ public abstract class AbstractYawellRingCoordinator extends AbstractBLEDeviceCoo
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -78,7 +78,7 @@ public class ZeTimeCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsActivityDataFetching(final GBDevice device) {
public boolean supportsDataFetching(@NonNull final GBDevice device) {
return true;
}
@@ -157,7 +157,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere
private static class FeatureSet {
private boolean supportsWeather = false;
private boolean supportsActivityDataFetching = false;
private boolean supportsDataFetching = false;
private boolean supportsCalendarEvents = false;
private boolean supportsMusicInfo = false;
private boolean supportsNavigation = false;
@@ -172,12 +172,12 @@ public class DeviceCommunicationService extends Service implements SharedPrefere
this.supportsWeather = supportsWeather;
}
public boolean supportsActivityDataFetching() {
return supportsActivityDataFetching;
public boolean supportsDataFetching() {
return supportsDataFetching;
}
public void setSupportsActivityDataFetching(boolean supportsActivityDataFetching) {
this.supportsActivityDataFetching = supportsActivityDataFetching;
public void setSupportsDataFetching(boolean supportsDataFetching) {
this.supportsDataFetching = supportsDataFetching;
}
public boolean supportsCalendarEvents() {
@@ -217,8 +217,8 @@ public class DeviceCommunicationService extends Service implements SharedPrefere
if (operand.supportsWeather(device)) {
setSupportsWeather(true);
}
if (operand.supportsActivityDataFetching(device)) {
setSupportsActivityDataFetching(true);
if (operand.supportsDataFetching(device)) {
setSupportsDataFetching(true);
}
if (operand.supportsMusicInfo(device)) {
setSupportsMusicInfo(true);
@@ -1503,7 +1503,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere
}
}
if (features.supportsActivityDataFetching() && mGBAutoFetchReceiver == null) {
if (features.supportsDataFetching() && mGBAutoFetchReceiver == null) {
mGBAutoFetchReceiver = new GBAutoFetchReceiver();
ContextCompat.registerReceiver(this, mGBAutoFetchReceiver, new IntentFilter("android.intent.action.USER_PRESENT"), ContextCompat.RECEIVER_EXPORTED);
}
@@ -244,7 +244,7 @@ public class GB {
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE
);
builder.addAction(R.drawable.ic_notification_disconnected, context.getString(R.string.controlcenter_disconnect), disconnectPendingIntent);
if (device.getDeviceCoordinator().supportsActivityDataFetching(device)) {
if (device.getDeviceCoordinator().supportsDataFetching(device)) {
deviceCommunicationServiceIntent.setAction(DeviceService.ACTION_FETCH_RECORDED_DATA);
deviceCommunicationServiceIntent.putExtra(EXTRA_RECORDED_DATA_TYPES, ActivityKind.ACTIVITY);
PendingIntent fetchPendingIntent = PendingIntent.getService(
@@ -275,7 +275,7 @@ public class GB {
isConnected = false;
}
anyDeviceSupportesActivityDataFetching |= device.getDeviceCoordinator().supportsActivityDataFetching(device);
anyDeviceSupportesActivityDataFetching |= device.getDeviceCoordinator().supportsDataFetching(device);
String deviceName = device.getAliasOrName();
String text = device.getStateString(context);