diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java index efd3445a..92f13307 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java @@ -197,12 +197,13 @@ public class ControlCenter extends Activity { } getMenuInflater().inflate(R.menu.controlcenter_context, menu); - if (!selectedDevice.isConnected() || selectedDevice.getType() == DeviceType.PEBBLE) { + DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(selectedDevice); + if (!selectedDevice.isConnected() || !coordinator.supportsActivityDataFetching()) { menu.removeItem(R.id.controlcenter_fetch_activity_data); menu.removeItem(R.id.controlcenter_configure_alarms); } - if (!selectedDevice.isConnected() || selectedDevice.getType() == DeviceType.MIBAND) { + if (!selectedDevice.isConnected() || !coordinator.supportsScreenshots()) { menu.removeItem(R.id.controlcenter_take_screenshot); } @@ -217,8 +218,13 @@ public class ControlCenter extends Activity { } private void enableSwipeRefresh(GBDevice device) { - boolean enable = device != null && device.isInitialized() && !device.isBusy(); - swipeLayout.setEnabled(enable); + if (device == null) { + swipeLayout.setEnabled(false); + } else { + DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device); + boolean enable = coordinator.allowFetchActivityData(device); + swipeLayout.setEnabled(enable); + } } private void fetchActivityData() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java index 0ada79a8..e90ee1e8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java @@ -36,8 +36,10 @@ import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractFragmentPagerAdapter; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBFragmentActivity; import nodomain.freeyourgadget.gadgetbridge.activities.ControlCenter; +import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; +import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; import nodomain.freeyourgadget.gadgetbridge.util.GB; public class ChartsActivity extends AbstractGBFragmentActivity implements ChartsHost { @@ -109,6 +111,7 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(REFRESH)); } } + enableSwipeRefresh(true); } @Override @@ -137,6 +140,7 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts fetchActivityData(); } }); + enableSwipeRefresh(true); // Set up the ViewPager with the sections adapter. viewPager = (ViewPager) findViewById(R.id.charts_pager); @@ -241,6 +245,11 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.menu_charts, menu); + + DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(mGBDevice); + if (!mGBDevice.isConnected() || !coordinator.supportsActivityDataFetching()) { + menu.removeItem(R.id.charts_fetch_activity_data); + } return true; } @@ -258,7 +267,8 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts } private void enableSwipeRefresh(boolean enable) { - swipeLayout.setEnabled(enable); + DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(mGBDevice); + swipeLayout.setEnabled(enable && coordinator.allowFetchActivityData(mGBDevice)); } private void fetchActivityData() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java new file mode 100644 index 00000000..b157d22f --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java @@ -0,0 +1,10 @@ +package nodomain.freeyourgadget.gadgetbridge.devices; + +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; + +public abstract class AbstractDeviceCoordinator implements DeviceCoordinator { + public boolean allowFetchActivityData(GBDevice device) { + return device.isInitialized() && !device.isBusy() && supportsActivityDataFetching(); + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java index 8bc4ec0c..c9178e5b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java @@ -24,4 +24,10 @@ public interface DeviceCoordinator { SampleProvider getSampleProvider(); InstallHandler findInstallHandler(Uri uri, Context context); + + boolean allowFetchActivityData(GBDevice device); + + boolean supportsActivityDataFetching(); + + boolean supportsScreenshots(); } 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 d3c2bcc1..ce690f7c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java @@ -10,7 +10,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; -public class UnknownDeviceCoordinator implements DeviceCoordinator { +public class UnknownDeviceCoordinator extends AbstractDeviceCoordinator { private final UnknownSampleProvider sampleProvider; private static final class UnknownSampleProvider implements SampleProvider { @@ -73,4 +73,14 @@ public class UnknownDeviceCoordinator implements DeviceCoordinator { public InstallHandler findInstallHandler(Uri uri, Context context) { return null; } + + @Override + public boolean supportsActivityDataFetching() { + return false; + } + + @Override + public boolean supportsScreenshots() { + return false; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java index ef98120f..6e9a495b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java @@ -13,6 +13,7 @@ import java.util.Calendar; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsActivity; +import nodomain.freeyourgadget.gadgetbridge.devices.AbstractDeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; @@ -20,7 +21,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; -public class MiBandCoordinator implements DeviceCoordinator { +public class MiBandCoordinator extends AbstractDeviceCoordinator { private static final Logger LOG = LoggerFactory.getLogger(MiBandCoordinator.class); private final MiBandSampleProvider sampleProvider; @@ -63,6 +64,16 @@ public class MiBandCoordinator implements DeviceCoordinator { return handler.isValid() ? handler : null; } + @Override + public boolean supportsActivityDataFetching() { + return true; + } + + @Override + public boolean supportsScreenshots() { + return false; + } + public static boolean hasValidUserInfo() { String dummyMacAddress = MiBandService.MAC_ADDRESS_FILTER + ":00:00:00"; try { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java index 594abbf9..18ac6e76 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java @@ -8,6 +8,7 @@ import android.preference.PreferenceManager; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.activities.AppManagerActivity; +import nodomain.freeyourgadget.gadgetbridge.devices.AbstractDeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; @@ -15,7 +16,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; -public class PebbleCoordinator implements DeviceCoordinator { +public class PebbleCoordinator extends AbstractDeviceCoordinator { public PebbleCoordinator() { } @@ -60,4 +61,14 @@ public class PebbleCoordinator implements DeviceCoordinator { PBWInstallHandler installHandler = new PBWInstallHandler(uri, context); return installHandler.isValid() ? installHandler : null; } + + @Override + public boolean supportsActivityDataFetching() { + return false; + } + + @Override + public boolean supportsScreenshots() { + return true; + } }