1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-09-27 16:56:57 +02:00

Update dashboard when one of its preferences has changed

This commit is contained in:
Arjan Schrijver 2024-03-30 21:14:31 +01:00
parent bf3830924d
commit 8f31786f44
2 changed files with 100 additions and 6 deletions

View File

@ -87,16 +87,25 @@ public class DashboardFragment extends Fragment {
private DashboardActiveTimeWidget activeTimeWidget;
private DashboardSleepWidget sleepWidget;
private DashboardData dashboardData = new DashboardData();
private boolean isConfigChanged = false;
public static final String ACTION_CONFIG_CHANGE = "nodomain.freeyourgadget.gadgetbridge.activities.dashboardfragment.action.config_change";
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null && action.equals(GBDevice.ACTION_DEVICE_CHANGED)) {
GBDevice dev = intent.getParcelableExtra(GBDevice.EXTRA_DEVICE);
if (dev != null && !dev.isBusy()) {
refresh();
}
if (action == null) return;
switch (action) {
case GBDevice.ACTION_DEVICE_CHANGED:
GBDevice dev = intent.getParcelableExtra(GBDevice.EXTRA_DEVICE);
if (dev != null && !dev.isBusy()) {
refresh();
}
break;
case ACTION_CONFIG_CHANGE:
isConfigChanged = true;
break;
}
}
};
@ -162,6 +171,7 @@ public class DashboardFragment extends Fragment {
IntentFilter filterLocal = new IntentFilter();
filterLocal.addAction(GBDevice.ACTION_DEVICE_CHANGED);
filterLocal.addAction(ACTION_CONFIG_CHANGE);
LocalBroadcastManager.getInstance(requireContext()).registerReceiver(mReceiver, filterLocal);
return dashboardView;
@ -171,7 +181,12 @@ public class DashboardFragment extends Fragment {
public void onResume() {
super.onResume();
draw();
if (dashboardData.isEmpty() || todayWidget == null) refresh();
if (isConfigChanged) {
isConfigChanged = false;
fullRefresh();
} else if (dashboardData.isEmpty() || todayWidget == null) {
refresh();
}
}
@Override

View File

@ -413,6 +413,76 @@ public class SettingsActivity extends AbstractSettingsActivityV2 {
dashboardDevices.setEntryValues(deviceMACs.toArray(new String[0]));
dashboardDevices.setEntries(deviceNames.toArray(new String[0]));
}
pref = findPreference("dashboard_cards_enabled");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
pref = findPreference("pref_dashboard_widgets_order");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
pref = findPreference("dashboard_widget_today_24h");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
pref = findPreference("dashboard_widget_today_2columns");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
pref = findPreference("dashboard_widget_today_legend");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
pref = findPreference("dashboard_widget_today_hr_interval");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
pref = findPreference("dashboard_widget_goals_2columns");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
pref = findPreference("dashboard_widget_goals_legend");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
pref = findPreference("dashboard_devices_all");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
pref = findPreference("dashboard_devices_multiselect");
if (pref != null) {
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
sendDashboardConfigChangedIntent();
return true;
});
}
final Preference theme = findPreference("pref_key_theme");
final Preference amoled_black = findPreference("pref_key_theme_amoled_black");
@ -608,5 +678,14 @@ public class SettingsActivity extends AbstractSettingsActivityV2 {
intent.setAction(GBApplication.ACTION_THEME_CHANGE);
LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent);
}
/**
* Signal dashboard that its config has changed
*/
private void sendDashboardConfigChangedIntent() {
Intent intent = new Intent();
intent.setAction(DashboardFragment.ACTION_CONFIG_CHANGE);
LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent);
}
}
}