From 91cbdfde104b006c05288cd308bc3c939beefd61 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 30 Jun 2018 17:32:12 +0200 Subject: [PATCH] added time limited on auto-fetch, and removed the creation of multiple autoFetchReceivers --- .../activities/SettingsActivity.java | 20 +++++++++++++++++++ .../service/DeviceCommunicationService.java | 2 +- .../receivers/GBAutoFetchReceiver.java | 14 +++++++------ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences.xml | 7 +++++++ 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java index f76f4731f..dd383d033 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -326,6 +326,26 @@ public class SettingsActivity extends AbstractSettingsActivity { } }); + pref = findPreference("auto_fetch_interval_limit"); + pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object autoFetchInterval) { + String summary = String.format( + getApplicationContext().getString(R.string.pref_auto_fetch_limit_fetches_summary), + Integer.valueOf((String) autoFetchInterval)); + preference.setSummary(summary); + return true; + } + }); + + int autoFetchInterval = GBApplication.getPrefs().getInt("auto_fetch_interval_limit", 0); + summary = String.format( + getApplicationContext().getString(R.string.pref_auto_fetch_limit_fetches_summary), + (int) autoFetchInterval); + pref.setSummary(summary); + + + final Preference displayPages = findPreference("bip_display_items"); displayPages.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java index e2bdc2afc..3003a9394 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java @@ -680,7 +680,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere } } if (GBApplication.getPrefs().getBoolean("auto_fetch_enabled", false) && - coordinator != null && coordinator.supportsActivityDataFetching()) { + coordinator != null && coordinator.supportsActivityDataFetching() && mGBAutoFetchReceiver == null) { mGBAutoFetchReceiver = new GBAutoFetchReceiver(); registerReceiver(mGBAutoFetchReceiver, new IntentFilter("android.intent.action.USER_PRESENT")); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBAutoFetchReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBAutoFetchReceiver.java index f632733f5..a77b643b7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBAutoFetchReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBAutoFetchReceiver.java @@ -20,20 +20,22 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.lang3.time.DateUtils; +import java.util.Date; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes; public class GBAutoFetchReceiver extends BroadcastReceiver { - private static final Logger LOG = LoggerFactory.getLogger(GBAutoFetchReceiver.class); + private Date lastSync = new Date(); @Override public void onReceive(Context context, Intent intent) { - //LOG.info("User is present!"); - GBApplication.deviceService().onFetchRecordedData(RecordedDataTypes.TYPE_ACTIVITY); + Date nextSync = DateUtils.addMinutes(lastSync, GBApplication.getPrefs().getInt("auto_fetch_interval_limit", 0)); + if (nextSync.before(new Date())) { + GBApplication.deviceService().onFetchRecordedData(RecordedDataTypes.TYPE_ACTIVITY); + lastSync = new Date(); + } } } - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 58ccb152b..1b574c87c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -202,6 +202,8 @@ Auto fetch activity data Fetch happens upon screen unlock. Only works if a lock mechanism is set! + Minimum time between fetches + Fetches every %d minutes Not connected Connecting diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index bdf887b7b..1aba679db 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -535,6 +535,13 @@ android:key="auto_fetch_enabled" android:title="@string/pref_auto_fetch" android:summary="@string/pref_auto_fetch_summary"/> +