Use a single background sync preference

pull/645/head
Alex Baker 6 years ago
parent 4d53cc96d3
commit 8ffff9bb48

@ -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));
}
}

@ -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));
}
}

@ -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();
}
}

@ -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) {

@ -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() {

@ -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);
}
}
}

@ -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;

@ -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) {

@ -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);

@ -74,46 +74,6 @@
android:textColor="?attr/asTextColor" />
</android.support.design.widget.TextInputLayout>
<RelativeLayout
style="@style/TagSettingsRow"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/background_sync"
android:checked="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/background_sync_label"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:paddingTop="3dp"
android:paddingLeft="4dp"
android:paddingStart="4dp"
android:textSize="@dimen/settings_text_size"
android:layout_toLeftOf="@id/background_sync"
android:layout_toStartOf="@id/background_sync"
android:text="@string/sync_SPr_interval_title"
android:layout_width="match_parent"
android:textColor="?attr/asTextColor"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/master_sync_warning"
android:paddingLeft="4dp"
android:paddingStart="4dp"
android:textColor="?attr/asTextColor"
android:layout_below="@id/background_sync_label"
android:text="@string/master_sync_warning"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
</LinearLayout>
</ScrollView>

@ -292,7 +292,7 @@
<string name="p_start_of_week">start_of_week</string>
<string name="p_use_native_datetime_pickers">use_native_datetime_pickers</string>
<string name="account_type_caldav">org.tasks.caldav</string>
<string name="gtask_background_sync">gtask_background_sync</string>
<string name="p_background_sync">gtask_background_sync</string>
<string name="p_bundle_notifications">bundle_notifications</string>
<string name="p_strict_mode">strict_mode</string>
<string name="warned_play_services">warned_play_services</string>

@ -6,6 +6,11 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/synchronization">
<CheckBoxPreference
android:defaultValue="true"
android:key="@string/p_background_sync"
android:title="@string/sync_SPr_interval_title"/>
<PreferenceCategory android:title="@string/gtasks_GPr_header">
<com.todoroo.astrid.ui.MultilineCheckboxPreference
@ -13,12 +18,6 @@
android:key="@string/sync_gtasks"
android:title="@string/enabled" />
<CheckBoxPreference
android:defaultValue="true"
android:dependency="@string/sync_gtasks"
android:key="@string/gtask_background_sync"
android:title="@string/sync_SPr_interval_title"/>
<com.todoroo.astrid.ui.MultilinePreference
android:dependency="@string/sync_gtasks"
android:key="@string/sync_SPr_forget_key"

Loading…
Cancel
Save