Enable CalDAV synchronization through settings

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

@ -1,32 +0,0 @@
package org.tasks.gtasks;
import com.todoroo.astrid.activity.TaskListFragment;
import javax.inject.Inject;
public class SyncAdapterHelper {
@Inject
public SyncAdapterHelper() {
}
public boolean shouldShowBackgroundSyncWarning() {
return false;
}
public void checkPlayServices(TaskListFragment taskListFragment) {
}
public boolean initiateManualSync() {
return false;
}
public boolean isEnabled() {
return false;
}
public void requestSynchronization() {
}
}

@ -318,14 +318,17 @@ public class FilterAdapter extends ArrayAdapter<FilterListItem> {
}
}
addSubMenu(R.string.CalDAV, filterProvider.getCalDAVFilters(), false);
List<Filter> calDAVFilters = filterProvider.getCalDAVFilters();
if (!calDAVFilters.isEmpty()) {
addSubMenu(R.string.CalDAV, calDAVFilters, false);
if (navigationDrawer) {
add(new NavigationDrawerAction(
activity.getResources().getString(R.string.add_account),
R.drawable.ic_add_24dp,
new Intent(activity, CalDAVSettingsActivity.class),
NavigationDrawerFragment.REQUEST_NEW_CALDAV_ACCOUNT));
if (navigationDrawer) {
add(new NavigationDrawerAction(
activity.getResources().getString(R.string.add_account),
R.drawable.ic_add_24dp,
new Intent(activity, CalDAVSettingsActivity.class),
NavigationDrawerFragment.REQUEST_NEW_CALDAV_ACCOUNT));
}
}
if (navigationDrawer) {

@ -10,6 +10,7 @@ import com.todoroo.astrid.api.GtasksFilter;
import org.tasks.data.GoogleTaskList;
import org.tasks.gtasks.GtaskSyncAdapterHelper;
import org.tasks.sync.SyncAdapters;
import java.util.List;
@ -27,17 +28,17 @@ import static java.util.Collections.emptyList;
public class GtasksFilterExposer {
private final GtasksListService gtasksListService;
private final GtaskSyncAdapterHelper gtaskSyncAdapterHelper;
private final SyncAdapters syncAdapters;
@Inject
public GtasksFilterExposer(GtasksListService gtasksListService, GtaskSyncAdapterHelper gtaskSyncAdapterHelper) {
public GtasksFilterExposer(GtasksListService gtasksListService, SyncAdapters syncAdapters) {
this.gtasksListService = gtasksListService;
this.gtaskSyncAdapterHelper = gtaskSyncAdapterHelper;
this.syncAdapters = syncAdapters;
}
public List<Filter> getFilters() {
// if we aren't logged in (or we are logged in to astrid.com), don't expose features
if(!gtaskSyncAdapterHelper.isEnabled()) {
if(!syncAdapters.isGoogleTaskSyncEnabled()) {
return emptyList();
}
@ -49,7 +50,7 @@ public class GtasksFilterExposer {
}
public Filter getFilter(long id) {
if (gtaskSyncAdapterHelper.isEnabled()) {
if (syncAdapters.isGoogleTaskSyncEnabled()) {
GoogleTaskList list = gtasksListService.getList(id);
if (list != null) {
return filterFromList(list);

@ -5,21 +5,28 @@ import com.todoroo.astrid.api.Filter;
import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavDao;
import org.tasks.sync.SyncAdapters;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
public class CalDAVFilterExposer {
private CaldavDao caldavDao;
private final SyncAdapters syncAdapters;
@Inject
public CalDAVFilterExposer(CaldavDao caldavDao) {
public CalDAVFilterExposer(CaldavDao caldavDao, SyncAdapters syncAdapters) {
this.caldavDao = caldavDao;
this.syncAdapters = syncAdapters;
}
public List<Filter> getFilters() {
if (!syncAdapters.isCaldavSyncEnabled()) {
return Collections.emptyList();
}
List<CaldavAccount> allOrderedByName = caldavDao.getAllOrderedByName();
List<Filter> result = new ArrayList<>();
for (CaldavAccount account : allOrderedByName) {
@ -29,9 +36,12 @@ public class CalDAVFilterExposer {
}
public Filter getFilterByUuid(String uuid) {
CaldavAccount caldavAccount = caldavDao.getByUuid(uuid);
return caldavAccount == null
? null
: new CaldavFilter(caldavAccount);
if (syncAdapters.isCaldavSyncEnabled()) {
CaldavAccount caldavAccount = caldavDao.getByUuid(uuid);
if (caldavAccount != null) {
return new CaldavFilter(caldavAccount);
}
}
return null;
}
}

@ -8,9 +8,10 @@ public abstract class PermissionRequestor {
public static final int REQUEST_FILE_WRITE = 50;
public static final int REQUEST_CALENDAR = 51;
public static final int REQUEST_MIC = 52;
public static final int REQUEST_ACCOUNTS = 53;
public static final int REQUEST_GOOGLE_ACCOUNTS = 53;
public static final int REQUEST_LOCATION = 54;
public static final int REQUEST_CONTACTS = 55;
public static final int REQUEST_CALDAV_ACCOUNTS = 56;
private final PermissionChecker permissionChecker;
@ -52,7 +53,15 @@ public abstract class PermissionRequestor {
if (permissionChecker.canAccessAccounts()) {
return true;
}
requestPermission(Manifest.permission.GET_ACCOUNTS, REQUEST_ACCOUNTS);
requestPermission(Manifest.permission.GET_ACCOUNTS, REQUEST_GOOGLE_ACCOUNTS);
return false;
}
public boolean requestCaldavPermissions() {
if (permissionChecker.canAccessAccounts()) {
return true;
}
requestPermission(Manifest.permission.GET_ACCOUNTS, REQUEST_CALDAV_ACCOUNTS);
return false;
}

@ -172,7 +172,7 @@ public class Preferences {
PreferenceManager.setDefaultValues(context, R.xml.preferences_appearance, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_date_time, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_defaults, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_gtasks, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_synchronization, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_misc, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_privacy, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_reminders, true);

@ -4,22 +4,31 @@ import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
import org.tasks.caldav.CaldavAccountManager;
import org.tasks.preferences.Preferences;
import org.tasks.sync.SyncAdapters;
import javax.inject.Inject;
public class CalDAVPushReceiver {
private final CaldavAccountManager caldavAccountManager;
private final SyncAdapters syncAdapters;
@Inject
public CalDAVPushReceiver(CaldavAccountManager caldavAccountManager) {
public CalDAVPushReceiver(CaldavAccountManager caldavAccountManager, SyncAdapters syncAdapters) {
this.caldavAccountManager = caldavAccountManager;
this.syncAdapters = syncAdapters;
}
public void push(Task task, Task original) {
if (!syncAdapters.isCaldavSyncEnabled()) {
return;
}
if(task.checkTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC)) {
return;
}
caldavAccountManager.requestSynchronization();
}
}

@ -3,20 +3,28 @@ package org.tasks.sync;
import android.app.Activity;
import android.content.ContentResolver;
import org.tasks.R;
import org.tasks.caldav.CaldavAccountManager;
import org.tasks.gtasks.GtaskSyncAdapterHelper;
import org.tasks.preferences.PermissionChecker;
import org.tasks.preferences.Preferences;
import javax.inject.Inject;
public class SyncAdapters {
private final GtaskSyncAdapterHelper gtaskSyncAdapterHelper;
private final Preferences preferences;
private final CaldavAccountManager caldavAccountManager;
private final PermissionChecker permissionChecker;
@Inject
public SyncAdapters(GtaskSyncAdapterHelper gtaskSyncAdapterHelper, CaldavAccountManager caldavAccountManager) {
public SyncAdapters(GtaskSyncAdapterHelper gtaskSyncAdapterHelper, Preferences preferences,
CaldavAccountManager caldavAccountManager, PermissionChecker permissionChecker) {
this.gtaskSyncAdapterHelper = gtaskSyncAdapterHelper;
this.preferences = preferences;
this.caldavAccountManager = caldavAccountManager;
this.permissionChecker = permissionChecker;
}
public void requestSynchronization() {
@ -41,7 +49,7 @@ public class SyncAdapters {
}
public boolean isCaldavSyncEnabled() {
return caldavAccountManager.getAccounts().size() > 0;
return preferences.getBoolean(R.string.p_sync_caldav, false) && permissionChecker.canAccessAccounts();
}
public void checkPlayServices(Activity activity) {

@ -24,6 +24,7 @@ import org.tasks.gtasks.PlayServices;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.PermissionChecker;
import org.tasks.preferences.PermissionRequestor;
import javax.inject.Inject;
@ -36,6 +37,7 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity {
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject ActivityPermissionRequestor permissionRequestor;
@Inject PermissionChecker permissionChecker;
@Inject Tracker tracker;
@Inject GtaskSyncAdapterHelper gtaskSyncAdapterHelper;
@Inject PlayServices playServices;
@ -47,10 +49,13 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_gtasks);
addPreferencesFromResource(R.xml.preferences_synchronization);
CheckBoxPreference caldavEnabled = (CheckBoxPreference) findPreference(getString(R.string.p_sync_caldav));
caldavEnabled.setChecked(syncAdapters.isCaldavSyncEnabled());
caldavEnabled.setOnPreferenceChangeListener((preference, newValue) -> ((boolean) newValue) && permissionRequestor.requestCaldavPermissions());
final CheckBoxPreference gtaskPreference = (CheckBoxPreference) findPreference(getString(R.string.sync_gtasks));
gtaskPreference.setChecked(gtaskSyncAdapterHelper.isEnabled());
gtaskPreference.setChecked(syncAdapters.isGoogleTaskSyncEnabled());
gtaskPreference.setOnPreferenceChangeListener((preference, newValue) -> {
if ((boolean) newValue) {
if (!playServices.refreshAndCheck()) {
@ -106,6 +111,10 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity {
} else {
backgroundSync.setSummary(R.string.master_sync_warning);
}
if (!permissionChecker.canAccessAccounts()) {
((CheckBoxPreference) findPreference(getString(R.string.sync_gtasks))).setChecked(false);
((CheckBoxPreference) findPreference(getString(R.string.p_sync_caldav))).setChecked(false);
}
}
@Override
@ -124,10 +133,13 @@ public class SynchronizationPreferences extends InjectingPreferenceActivity {
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PermissionRequestor.REQUEST_ACCOUNTS) {
if (requestCode == PermissionRequestor.REQUEST_GOOGLE_ACCOUNTS) {
if (verifyPermissions(grantResults)) {
requestLogin();
}
} else if (requestCode == PermissionRequestor.REQUEST_CALDAV_ACCOUNTS) {
((CheckBoxPreference) findPreference(getString(R.string.p_sync_caldav)))
.setChecked(verifyPermissions(grantResults));
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

@ -296,5 +296,6 @@
<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>
<string name="p_sync_caldav">sync_caldav</string>
</resources>

@ -45,7 +45,7 @@
android:key="@string/synchronization"
android:title="@string/synchronization">
<intent
android:targetClass="com.todoroo.astrid.gtasks.GtasksPreferences"
android:targetClass="org.tasks.sync.SynchronizationPreferences"
android:targetPackage="org.tasks" />
</Preference>

@ -27,4 +27,11 @@
</com.todoroo.astrid.ui.MultilinePreference>
</PreferenceCategory>
<PreferenceCategory android:title="@string/CalDAV">
<CheckBoxPreference
android:defaultValue="false"
android:key="@string/p_sync_caldav"
android:title="@string/enabled" />
</PreferenceCategory>
</PreferenceScreen>
Loading…
Cancel
Save