From 8ffff9bb48ccd354b9d7b370eb081d47a5d1df4a Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 18 Mar 2018 09:42:05 -0500 Subject: [PATCH] Use a single background sync preference --- .../amazon/java/org/tasks/FlavorSetup.java | 13 ++++-- .../generic/java/org/tasks/FlavorSetup.java | 13 ++++-- .../java/org/tasks/FlavorSetup.java | 19 ++++++--- .../main/java/org/tasks/caldav/Account.java | 4 -- .../tasks/caldav/CalDAVSettingsActivity.java | 22 ++-------- .../tasks/caldav/CaldavAccountManager.java | 6 +++ .../tasks/gtasks/GoogleAccountManager.java | 20 ++++++++++ .../tasks/gtasks/GtaskSyncAdapterHelper.java | 28 +------------ .../sync/SynchronizationPreferences.java | 28 +++++++++---- .../res/layout/activity_caldav_settings.xml | 40 ------------------- app/src/main/res/values/keys.xml | 2 +- .../res/xml/preferences_synchronization.xml | 11 +++-- 12 files changed, 91 insertions(+), 115 deletions(-) diff --git a/app/src/amazon/java/org/tasks/FlavorSetup.java b/app/src/amazon/java/org/tasks/FlavorSetup.java index c0b2cc78c..a32101c49 100644 --- a/app/src/amazon/java/org/tasks/FlavorSetup.java +++ b/app/src/amazon/java/org/tasks/FlavorSetup.java @@ -1,14 +1,21 @@ package org.tasks; +import org.tasks.caldav.CaldavAccountManager; +import org.tasks.preferences.Preferences; + import javax.inject.Inject; public class FlavorSetup { - @Inject - public FlavorSetup() { + private final CaldavAccountManager caldavAccountManager; + private final Preferences preferences; + @Inject + public FlavorSetup(CaldavAccountManager caldavAccountManager, Preferences preferences) { + this.caldavAccountManager = caldavAccountManager; + this.preferences = preferences; } public void setup() { - + caldavAccountManager.setBackgroundSynchronization(preferences.getBoolean(R.string.p_background_sync, true)); } } diff --git a/app/src/generic/java/org/tasks/FlavorSetup.java b/app/src/generic/java/org/tasks/FlavorSetup.java index c0b2cc78c..a32101c49 100644 --- a/app/src/generic/java/org/tasks/FlavorSetup.java +++ b/app/src/generic/java/org/tasks/FlavorSetup.java @@ -1,14 +1,21 @@ package org.tasks; +import org.tasks.caldav.CaldavAccountManager; +import org.tasks.preferences.Preferences; + import javax.inject.Inject; public class FlavorSetup { - @Inject - public FlavorSetup() { + private final CaldavAccountManager caldavAccountManager; + private final Preferences preferences; + @Inject + public FlavorSetup(CaldavAccountManager caldavAccountManager, Preferences preferences) { + this.caldavAccountManager = caldavAccountManager; + this.preferences = preferences; } public void setup() { - + caldavAccountManager.setBackgroundSynchronization(preferences.getBoolean(R.string.p_background_sync, true)); } } diff --git a/app/src/googleplay/java/org/tasks/FlavorSetup.java b/app/src/googleplay/java/org/tasks/FlavorSetup.java index 9329e4d2e..b8930eb36 100644 --- a/app/src/googleplay/java/org/tasks/FlavorSetup.java +++ b/app/src/googleplay/java/org/tasks/FlavorSetup.java @@ -3,8 +3,10 @@ package org.tasks; import com.todoroo.astrid.gtasks.GtasksPreferenceService; import org.tasks.billing.InventoryHelper; -import org.tasks.gtasks.GtaskSyncAdapterHelper; +import org.tasks.caldav.CaldavAccountManager; +import org.tasks.gtasks.GoogleAccountManager; import org.tasks.gtasks.PlayServices; +import org.tasks.preferences.Preferences; import javax.inject.Inject; @@ -12,22 +14,29 @@ public class FlavorSetup { private final GtasksPreferenceService gtasksPreferenceService; private final InventoryHelper inventoryHelper; - private final GtaskSyncAdapterHelper gtaskSyncAdapterHelper; + private final Preferences preferences; private final PlayServices playServices; + private final GoogleAccountManager googleAccountManager; + private final CaldavAccountManager caldavAccountManager; @Inject public FlavorSetup(GtasksPreferenceService gtasksPreferenceService, InventoryHelper inventoryHelper, - GtaskSyncAdapterHelper gtaskSyncAdapterHelper, PlayServices playServices) { + Preferences preferences, PlayServices playServices, + GoogleAccountManager googleAccountManager, CaldavAccountManager caldavAccountManager) { this.gtasksPreferenceService = gtasksPreferenceService; this.inventoryHelper = inventoryHelper; - this.gtaskSyncAdapterHelper = gtaskSyncAdapterHelper; + this.preferences = preferences; this.playServices = playServices; + this.googleAccountManager = googleAccountManager; + this.caldavAccountManager = caldavAccountManager; } public void setup() { inventoryHelper.initialize(); gtasksPreferenceService.stopOngoing(); // if sync ongoing flag was set, clear it - gtaskSyncAdapterHelper.enableBackgroundSynchronization(gtaskSyncAdapterHelper.isBackgroundSyncEnabled()); + boolean backgroundSyncEnabled = preferences.getBoolean(R.string.p_background_sync, true); + googleAccountManager.setBackgroundSynchronization(backgroundSyncEnabled); + caldavAccountManager.setBackgroundSynchronization(backgroundSyncEnabled); playServices.refresh(); } } diff --git a/app/src/main/java/org/tasks/caldav/Account.java b/app/src/main/java/org/tasks/caldav/Account.java index 38efed8a2..b59c3a1e3 100644 --- a/app/src/main/java/org/tasks/caldav/Account.java +++ b/app/src/main/java/org/tasks/caldav/Account.java @@ -34,10 +34,6 @@ public class Account { accountManager.setPassword(account, password); } - boolean isBackgroundSyncEnabled() { - return ContentResolver.getSyncAutomatically(account, AUTHORITY); - } - void setSynchronizationEnabled(boolean enabled) { ContentResolver.setSyncAutomatically(account, AUTHORITY, enabled); if (enabled) { diff --git a/app/src/main/java/org/tasks/caldav/CalDAVSettingsActivity.java b/app/src/main/java/org/tasks/caldav/CalDAVSettingsActivity.java index cf77a1888..d9bae48f4 100644 --- a/app/src/main/java/org/tasks/caldav/CalDAVSettingsActivity.java +++ b/app/src/main/java/org/tasks/caldav/CalDAVSettingsActivity.java @@ -12,11 +12,8 @@ import android.support.v4.content.ContextCompat; import android.support.v7.widget.Toolbar; import android.text.InputType; import android.view.MenuItem; -import android.view.View; import android.view.inputmethod.InputMethodManager; -import android.widget.CheckBox; import android.widget.LinearLayout; -import android.widget.TextView; import android.widget.Toast; import com.todoroo.astrid.activity.TaskListActivity; @@ -95,8 +92,6 @@ public class CalDAVSettingsActivity extends ThemedInjectingAppCompatActivity @BindView(R.id.password_layout) TextInputLayout passwordLayout; @BindView(R.id.color) TextInputEditText color; @BindView(R.id.toolbar) Toolbar toolbar; - @BindView(R.id.background_sync) CheckBox backgroundSync; - @BindView(R.id.master_sync_warning) TextView masterSyncWarning; @Override protected void onCreate(Bundle savedInstanceState) { @@ -121,7 +116,6 @@ public class CalDAVSettingsActivity extends ThemedInjectingAppCompatActivity url.setText(caldavAccount.getUrl()); user.setText(caldavAccount.getUsername()); } - backgroundSync.setChecked(localAccount == null || localAccount.isBackgroundSyncEnabled()); } else { selectedTheme = savedInstanceState.getInt(EXTRA_SELECTED_THEME); } @@ -188,13 +182,6 @@ public class CalDAVSettingsActivity extends ThemedInjectingAppCompatActivity outState.putInt(EXTRA_SELECTED_THEME, selectedTheme); } - @Override - protected void onResume() { - super.onResume(); - - masterSyncWarning.setVisibility(syncAdapters.isMasterSyncEnabled() ? View.GONE : View.VISIBLE); - } - @OnFocusChange(R.id.color) void onFocusChange(boolean focused) { if (focused) { @@ -313,7 +300,7 @@ public class CalDAVSettingsActivity extends ThemedInjectingAppCompatActivity if (account == null) { showGenericError(); } else { - account.setSynchronizationEnabled(backgroundSync.isChecked()); + account.setSynchronizationEnabled(preferences.getBoolean(R.string.p_background_sync, true)); newAccount.setId(caldavDao.insert(newAccount)); setResult(RESULT_OK, new Intent().putExtra(TaskListActivity.OPEN_FILTER, new CaldavFilter(newAccount))); finish(); @@ -338,7 +325,7 @@ public class CalDAVSettingsActivity extends ThemedInjectingAppCompatActivity caldavAccount.setColor(selectedTheme); caldavDao.update(caldavAccount); localAccount.setPassword(getNewPassword()); - localAccount.setSynchronizationEnabled(backgroundSync.isChecked()); + localAccount.setSynchronizationEnabled(preferences.getBoolean(R.string.p_background_sync, true)); setResult(RESULT_OK, new Intent().putExtra(TaskListActivity.OPEN_FILTER, new CaldavFilter(caldavAccount))); finish(); } @@ -374,12 +361,11 @@ public class CalDAVSettingsActivity extends ThemedInjectingAppCompatActivity if (caldavAccount == null) { return selectedTheme >= 0 || !isEmpty(getNewPassword()) || !isEmpty(getNewURL()) || - !isEmpty(getNewUsername()) || !backgroundSync.isChecked(); + !isEmpty(getNewUsername()); } return localAccount == null || selectedTheme != caldavAccount.getColor() || - needsValidation() || - backgroundSync.isChecked() != localAccount.isBackgroundSyncEnabled(); + needsValidation(); } private boolean needsValidation() { diff --git a/app/src/main/java/org/tasks/caldav/CaldavAccountManager.java b/app/src/main/java/org/tasks/caldav/CaldavAccountManager.java index 640d834c2..0a657473d 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavAccountManager.java +++ b/app/src/main/java/org/tasks/caldav/CaldavAccountManager.java @@ -134,4 +134,10 @@ public class CaldavAccountManager { ContentResolver.requestSync(account.getAccount(), AUTHORITY, new Bundle()); } } + + public void setBackgroundSynchronization(boolean enabled) { + for (org.tasks.caldav.Account account : getAccounts()) { + account.setSynchronizationEnabled(enabled); + } + } } diff --git a/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.java b/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.java index a9598d362..1623578a6 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.java +++ b/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.java @@ -1,7 +1,9 @@ package org.tasks.gtasks; import android.accounts.Account; +import android.content.ContentResolver; import android.content.Context; +import android.os.Bundle; import com.google.common.base.Strings; import com.todoroo.astrid.gtasks.GtasksPreferenceService; @@ -11,15 +13,20 @@ import org.tasks.preferences.PermissionChecker; import java.util.Collections; import java.util.List; +import java.util.concurrent.TimeUnit; import javax.inject.Inject; +import timber.log.Timber; + import static com.google.common.collect.Iterables.tryFind; import static com.google.common.collect.Lists.transform; import static java.util.Arrays.asList; public class GoogleAccountManager { + private static final String AUTHORITY = "org.tasks"; + private final PermissionChecker permissionChecker; private final android.accounts.AccountManager accountManager; private final GtasksPreferenceService gtasksPreferenceService; @@ -51,6 +58,19 @@ public class GoogleAccountManager { return getAccount(gtasksPreferenceService.getUserName()); } + public void setBackgroundSynchronization(boolean enabled) { + Account account = getSelectedAccount(); + if (account != null) { + Timber.d("enableBackgroundSynchronization=%s", enabled); + ContentResolver.setSyncAutomatically(account, AUTHORITY, enabled); + if (enabled) { + ContentResolver.addPeriodicSync(account, AUTHORITY, Bundle.EMPTY, TimeUnit.HOURS.toSeconds(1)); + } else { + ContentResolver.removePeriodicSync(account, AUTHORITY, Bundle.EMPTY); + } + } + } + public Account getAccount(final String name) { if (Strings.isNullOrEmpty(name)) { return null; diff --git a/app/src/main/java/org/tasks/gtasks/GtaskSyncAdapterHelper.java b/app/src/main/java/org/tasks/gtasks/GtaskSyncAdapterHelper.java index 3768cb656..fcc4d9549 100644 --- a/app/src/main/java/org/tasks/gtasks/GtaskSyncAdapterHelper.java +++ b/app/src/main/java/org/tasks/gtasks/GtaskSyncAdapterHelper.java @@ -5,36 +5,27 @@ import android.app.Activity; import android.content.ContentResolver; import android.os.Bundle; -import com.todoroo.astrid.gtasks.GtasksPreferenceService; - import org.tasks.R; import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracking; import org.tasks.preferences.Preferences; -import java.util.concurrent.TimeUnit; - import javax.inject.Inject; -import timber.log.Timber; - public class GtaskSyncAdapterHelper { private static final String AUTHORITY = "org.tasks"; private final GoogleAccountManager accountManager; private final Preferences preferences; - private final GtasksPreferenceService gtasksPreferenceService; private final PlayServices playServices; private final Tracker tracker; @Inject public GtaskSyncAdapterHelper(GoogleAccountManager accountManager, Preferences preferences, - GtasksPreferenceService gtasksPreferenceService, PlayServices playServices, Tracker tracker) { this.accountManager = accountManager; this.preferences = preferences; - this.gtasksPreferenceService = gtasksPreferenceService; this.playServices = playServices; this.tracker = tracker; } @@ -77,25 +68,8 @@ public class GtaskSyncAdapterHelper { getAccount() != null; } - public void enableBackgroundSynchronization(boolean enabled) { - Account account = getAccount(); - if (account != null) { - Timber.d("enableBackgroundSynchronization=%s", enabled); - ContentResolver.setSyncAutomatically(account, AUTHORITY, enabled); - if (enabled) { - ContentResolver.addPeriodicSync(account, AUTHORITY, Bundle.EMPTY, TimeUnit.HOURS.toSeconds(1)); - } else { - ContentResolver.removePeriodicSync(account, AUTHORITY, Bundle.EMPTY); - } - } - } - - public boolean isBackgroundSyncEnabled() { - return isEnabled() && ContentResolver.getSyncAutomatically(getAccount(), AUTHORITY); - } - private Account getAccount() { - return accountManager.getAccount(gtasksPreferenceService.getUserName()); + return accountManager.getSelectedAccount(); } public void checkPlayServices(Activity activity) { diff --git a/app/src/main/java/org/tasks/sync/SynchronizationPreferences.java b/app/src/main/java/org/tasks/sync/SynchronizationPreferences.java index 2170ded48..b604804e6 100644 --- a/app/src/main/java/org/tasks/sync/SynchronizationPreferences.java +++ b/app/src/main/java/org/tasks/sync/SynchronizationPreferences.java @@ -17,8 +17,10 @@ import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity; import org.tasks.R; import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracking; +import org.tasks.caldav.CaldavAccountManager; import org.tasks.data.GoogleTaskDao; import org.tasks.dialogs.DialogBuilder; +import org.tasks.gtasks.GoogleAccountManager; import org.tasks.gtasks.GtaskSyncAdapterHelper; import org.tasks.gtasks.PlayServices; import org.tasks.injection.ActivityComponent; @@ -26,6 +28,7 @@ import org.tasks.injection.InjectingPreferenceActivity; import org.tasks.preferences.ActivityPermissionRequestor; import org.tasks.preferences.PermissionChecker; import org.tasks.preferences.PermissionRequestor; +import org.tasks.preferences.Preferences; import javax.inject.Inject; @@ -44,6 +47,9 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity { @Inject DialogBuilder dialogBuilder; @Inject SyncAdapters syncAdapters; @Inject GoogleTaskDao googleTaskDao; + @Inject GoogleAccountManager googleAccountManager; + @Inject CaldavAccountManager caldavAccountManager; + @Inject Preferences preferences; @Override public void onCreate(Bundle savedInstanceState) { @@ -53,7 +59,11 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity { CheckBoxPreference caldavEnabled = (CheckBoxPreference) findPreference(getString(R.string.p_sync_caldav)); caldavEnabled.setChecked(syncAdapters.isCaldavSyncEnabled()); - caldavEnabled.setOnPreferenceChangeListener((preference, newValue) -> ((boolean) newValue) && permissionRequestor.requestCaldavPermissions()); + caldavEnabled.setOnPreferenceChangeListener((preference, newValue) -> { + boolean enabled = ((boolean) newValue) && permissionRequestor.requestCaldavPermissions(); + caldavAccountManager.setBackgroundSynchronization(enabled && preferences.getBoolean(R.string.p_background_sync, true)); + return enabled; + }); final CheckBoxPreference gtaskPreference = (CheckBoxPreference) findPreference(getString(R.string.sync_gtasks)); gtaskPreference.setChecked(syncAdapters.isGoogleTaskSyncEnabled()); gtaskPreference.setOnPreferenceChangeListener((preference, newValue) -> { @@ -65,7 +75,7 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity { } return false; } else { - gtaskSyncAdapterHelper.enableBackgroundSynchronization(false); + googleAccountManager.setBackgroundSynchronization(false); tracker.reportEvent(Tracking.Events.GTASK_DISABLED); gtasksPreferenceService.stopOngoing(); return true; @@ -76,8 +86,10 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity { DateUtilities.getDateStringWithTime(SynchronizationPreferences.this, gtasksPreferenceService.getLastSyncDate()))); } - findPreference(getString(R.string.gtask_background_sync)).setOnPreferenceChangeListener((preference, o) -> { - gtaskSyncAdapterHelper.enableBackgroundSynchronization((Boolean) o); + findPreference(getString(R.string.p_background_sync)).setOnPreferenceChangeListener((preference, o) -> { + boolean backgroundSyncEnabled = (Boolean) o; + caldavAccountManager.setBackgroundSynchronization(backgroundSyncEnabled); + googleAccountManager.setBackgroundSynchronization(backgroundSyncEnabled); return true; }); findPreference(getString(R.string.sync_SPr_forget_key)).setOnPreferenceClickListener(preference -> { @@ -86,7 +98,7 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity { gtasksPreferenceService.clearLastSyncDate(); gtasksPreferenceService.setUserName(null); googleTaskDao.deleteAll(); - gtaskSyncAdapterHelper.enableBackgroundSynchronization(false); + googleAccountManager.setBackgroundSynchronization(false); tracker.reportEvent(Tracking.Events.GTASK_LOGOUT); gtaskPreference.setChecked(false); }) @@ -104,8 +116,7 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity { protected void onResume() { super.onResume(); - CheckBoxPreference backgroundSync = (CheckBoxPreference) findPreference(getString(R.string.gtask_background_sync)); - backgroundSync.setChecked(gtaskSyncAdapterHelper.isBackgroundSyncEnabled()); + CheckBoxPreference backgroundSync = (CheckBoxPreference) findPreference(getString(R.string.p_background_sync)); if (syncAdapters.isMasterSyncEnabled()) { backgroundSync.setSummary(null); } else { @@ -122,7 +133,8 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity { if (requestCode == REQUEST_LOGIN) { boolean enabled = resultCode == RESULT_OK; if (enabled) { - gtaskSyncAdapterHelper.enableBackgroundSynchronization(true); + boolean backgroundSyncEnabled = preferences.getBoolean(R.string.p_background_sync, true); + googleAccountManager.setBackgroundSynchronization(backgroundSyncEnabled); tracker.reportEvent(Tracking.Events.GTASK_ENABLED); } ((CheckBoxPreference) findPreference(getString(R.string.sync_gtasks))).setChecked(enabled); diff --git a/app/src/main/res/layout/activity_caldav_settings.xml b/app/src/main/res/layout/activity_caldav_settings.xml index a3ed5d803..2baa2a902 100644 --- a/app/src/main/res/layout/activity_caldav_settings.xml +++ b/app/src/main/res/layout/activity_caldav_settings.xml @@ -74,46 +74,6 @@ android:textColor="?attr/asTextColor" /> - - - - - - - - - - diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index fc115cf65..ce766cc5b 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -292,7 +292,7 @@ start_of_week use_native_datetime_pickers org.tasks.caldav - gtask_background_sync + gtask_background_sync bundle_notifications strict_mode warned_play_services diff --git a/app/src/main/res/xml/preferences_synchronization.xml b/app/src/main/res/xml/preferences_synchronization.xml index 1b533a8a4..4800df946 100644 --- a/app/src/main/res/xml/preferences_synchronization.xml +++ b/app/src/main/res/xml/preferences_synchronization.xml @@ -6,6 +6,11 @@ + + - -