Dashboard: Make widget filters more explicit

This commit is contained in:
José Rebelo
2026-01-04 14:31:40 +00:00
parent cbe0531528
commit 884ec5eecf
7 changed files with 34 additions and 12 deletions
@@ -28,9 +28,6 @@ import androidx.fragment.app.Fragment;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -43,8 +40,6 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
public abstract class AbstractDashboardWidget extends Fragment {
private static final Logger LOG = LoggerFactory.getLogger(AbstractDashboardWidget.class);
protected static String ARG_DASHBOARD_DATA = "dashboard_widget_argument_data";
protected DashboardFragment.DashboardData dashboardData;
@@ -75,9 +70,7 @@ public abstract class AbstractDashboardWidget extends Fragment {
protected abstract void fillData();
protected boolean isSupportedBy(final GBDevice device) {
return device.getDeviceCoordinator().supportsActivityTracking(device);
}
protected abstract boolean isSupportedBy(final GBDevice device);
protected List<GBDevice> getSupportedDevices(final DashboardFragment.DashboardData dashboardData) {
return GBApplication.app().getDeviceManager().getDevices()
@@ -22,6 +22,7 @@ import java.util.Locale;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.DashboardFragment;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
/**
* A simple {@link AbstractDashboardWidget} subclass.
@@ -48,6 +49,11 @@ public class DashboardActiveTimeWidget extends AbstractGaugeWidget {
return fragment;
}
@Override
protected boolean isSupportedBy(final GBDevice device) {
return device.getDeviceCoordinator().supportsStepCounter(device);
}
@Override
protected void populateData(final DashboardFragment.DashboardData dashboardData) {
dashboardData.getActiveMinutesTotal();
@@ -20,6 +20,7 @@ import android.os.Bundle;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.DashboardFragment;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.util.FormatUtils;
/**
@@ -53,6 +54,11 @@ public class DashboardDistanceWidget extends AbstractGaugeWidget {
dashboardData.getDistanceGoalFactor();
}
@Override
protected boolean isSupportedBy(final GBDevice device) {
return device.getDeviceCoordinator().supportsStepCounter(device);
}
@Override
protected void draw(final DashboardFragment.DashboardData dashboardData) {
setText(FormatUtils.getFormattedDistanceLabel(dashboardData.getDistanceTotal()));
@@ -38,6 +38,7 @@ import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.DashboardFragment;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
/**
@@ -69,6 +70,11 @@ public class DashboardGoalsWidget extends AbstractDashboardWidget {
return fragment;
}
@Override
protected boolean isSupportedBy(final GBDevice device) {
return device.getDeviceCoordinator().supportsActivityTracking(device);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
goalsView = inflater.inflate(R.layout.dashboard_widget_goals, container, false);
@@ -20,6 +20,7 @@ import android.os.Bundle;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.DashboardFragment;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
/**
* A simple {@link AbstractDashboardWidget} subclass.
@@ -46,6 +47,11 @@ public class DashboardStepsWidget extends AbstractGaugeWidget {
return fragment;
}
@Override
protected boolean isSupportedBy(final GBDevice device) {
return device.getDeviceCoordinator().supportsStepCounter(device);
}
@Override
protected void populateData(final DashboardFragment.DashboardData dashboardData) {
dashboardData.getStepsTotal();
@@ -93,6 +93,11 @@ public class DashboardTodayWidget extends AbstractDashboardWidget {
return fragment;
}
@Override
protected boolean isSupportedBy(final GBDevice device) {
return device.getDeviceCoordinator().supportsActivityTracking(device);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
todayView = inflater.inflate(R.layout.dashboard_widget_today, container, false);
@@ -54,7 +54,7 @@ public class DashboardUtils {
int totalSteps = 0;
try (DBHandler dbHandler = GBApplication.acquireDB()) {
for (GBDevice dev : devices) {
if ((dashboardData.showAllDevices || dashboardData.showDeviceList.contains(dev.getAddress())) && dev.getDeviceCoordinator().supportsActivityTracking(dev)) {
if ((dashboardData.showAllDevices || dashboardData.showDeviceList.contains(dev.getAddress())) && dev.getDeviceCoordinator().supportsStepCounter(dev)) {
totalSteps += (int) getDailyTotals(dev, dbHandler, dashboardData.timeTo).getSteps();
}
}
@@ -123,7 +123,7 @@ public class DashboardUtils {
long totalSleepMinutes = 0;
try (DBHandler dbHandler = GBApplication.acquireDB()) {
for (GBDevice dev : devices) {
if ((dashboardData.showAllDevices || dashboardData.showDeviceList.contains(dev.getAddress())) && dev.getDeviceCoordinator().supportsActivityTracking(dev)) {
if ((dashboardData.showAllDevices || dashboardData.showDeviceList.contains(dev.getAddress())) && dev.getDeviceCoordinator().supportsSleepMeasurement(dev)) {
totalSleepMinutes += getSleep(dev, dbHandler, dashboardData.timeTo);
}
}
@@ -150,7 +150,7 @@ public class DashboardUtils {
long totalDistanceCm = 0;
try (DBHandler dbHandler = GBApplication.acquireDB()) {
for (GBDevice dev : devices) {
if ((dashboardData.showAllDevices || dashboardData.showDeviceList.contains(dev.getAddress())) && dev.getDeviceCoordinator().supportsActivityTracking(dev)) {
if ((dashboardData.showAllDevices || dashboardData.showDeviceList.contains(dev.getAddress())) && dev.getDeviceCoordinator().supportsStepCounter(dev)) {
final DailyTotals dailyTotals = getDailyTotals(dev, dbHandler, dashboardData.timeTo);
if (dailyTotals.getSteps() > 0 && dailyTotals.getDistance() > 0) {
totalDistanceCm += dailyTotals.getDistance();
@@ -188,7 +188,7 @@ public class DashboardUtils {
long totalActiveMinutes = 0;
try (DBHandler dbHandler = GBApplication.acquireDB()) {
for (GBDevice dev : devices) {
if ((dashboardData.showAllDevices || dashboardData.showDeviceList.contains(dev.getAddress())) && dev.getDeviceCoordinator().supportsActivityTracking(dev)) {
if ((dashboardData.showAllDevices || dashboardData.showDeviceList.contains(dev.getAddress())) && dev.getDeviceCoordinator().supportsStepCounter(dev)) {
totalActiveMinutes += getActiveMinutes(dev, dbHandler, dashboardData);
}
}