Enable CalDAV synchronization through settings

pull/645/head
Alex Baker 7 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,7 +318,9 @@ 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) { if (navigationDrawer) {
add(new NavigationDrawerAction( add(new NavigationDrawerAction(
@ -327,6 +329,7 @@ public class FilterAdapter extends ArrayAdapter<FilterListItem> {
new Intent(activity, CalDAVSettingsActivity.class), new Intent(activity, CalDAVSettingsActivity.class),
NavigationDrawerFragment.REQUEST_NEW_CALDAV_ACCOUNT)); NavigationDrawerFragment.REQUEST_NEW_CALDAV_ACCOUNT));
} }
}
if (navigationDrawer) { if (navigationDrawer) {
add(new NavigationDrawerSeparator()); add(new NavigationDrawerSeparator());

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

@ -5,21 +5,28 @@ import com.todoroo.astrid.api.Filter;
import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavDao; import org.tasks.data.CaldavDao;
import org.tasks.sync.SyncAdapters;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
public class CalDAVFilterExposer { public class CalDAVFilterExposer {
private CaldavDao caldavDao; private CaldavDao caldavDao;
private final SyncAdapters syncAdapters;
@Inject @Inject
public CalDAVFilterExposer(CaldavDao caldavDao) { public CalDAVFilterExposer(CaldavDao caldavDao, SyncAdapters syncAdapters) {
this.caldavDao = caldavDao; this.caldavDao = caldavDao;
this.syncAdapters = syncAdapters;
} }
public List<Filter> getFilters() { public List<Filter> getFilters() {
if (!syncAdapters.isCaldavSyncEnabled()) {
return Collections.emptyList();
}
List<CaldavAccount> allOrderedByName = caldavDao.getAllOrderedByName(); List<CaldavAccount> allOrderedByName = caldavDao.getAllOrderedByName();
List<Filter> result = new ArrayList<>(); List<Filter> result = new ArrayList<>();
for (CaldavAccount account : allOrderedByName) { for (CaldavAccount account : allOrderedByName) {
@ -29,9 +36,12 @@ public class CalDAVFilterExposer {
} }
public Filter getFilterByUuid(String uuid) { public Filter getFilterByUuid(String uuid) {
if (syncAdapters.isCaldavSyncEnabled()) {
CaldavAccount caldavAccount = caldavDao.getByUuid(uuid); CaldavAccount caldavAccount = caldavDao.getByUuid(uuid);
return caldavAccount == null if (caldavAccount != null) {
? null return new CaldavFilter(caldavAccount);
: 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_FILE_WRITE = 50;
public static final int REQUEST_CALENDAR = 51; public static final int REQUEST_CALENDAR = 51;
public static final int REQUEST_MIC = 52; 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_LOCATION = 54;
public static final int REQUEST_CONTACTS = 55; public static final int REQUEST_CONTACTS = 55;
public static final int REQUEST_CALDAV_ACCOUNTS = 56;
private final PermissionChecker permissionChecker; private final PermissionChecker permissionChecker;
@ -52,7 +53,15 @@ public abstract class PermissionRequestor {
if (permissionChecker.canAccessAccounts()) { if (permissionChecker.canAccessAccounts()) {
return true; 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; return false;
} }

@ -172,7 +172,7 @@ public class Preferences {
PreferenceManager.setDefaultValues(context, R.xml.preferences_appearance, true); PreferenceManager.setDefaultValues(context, R.xml.preferences_appearance, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_date_time, true); PreferenceManager.setDefaultValues(context, R.xml.preferences_date_time, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_defaults, 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_misc, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_privacy, true); PreferenceManager.setDefaultValues(context, R.xml.preferences_privacy, true);
PreferenceManager.setDefaultValues(context, R.xml.preferences_reminders, 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 com.todoroo.astrid.data.Task;
import org.tasks.caldav.CaldavAccountManager; import org.tasks.caldav.CaldavAccountManager;
import org.tasks.preferences.Preferences;
import org.tasks.sync.SyncAdapters;
import javax.inject.Inject; import javax.inject.Inject;
public class CalDAVPushReceiver { public class CalDAVPushReceiver {
private final CaldavAccountManager caldavAccountManager; private final CaldavAccountManager caldavAccountManager;
private final SyncAdapters syncAdapters;
@Inject @Inject
public CalDAVPushReceiver(CaldavAccountManager caldavAccountManager) { public CalDAVPushReceiver(CaldavAccountManager caldavAccountManager, SyncAdapters syncAdapters) {
this.caldavAccountManager = caldavAccountManager; this.caldavAccountManager = caldavAccountManager;
this.syncAdapters = syncAdapters;
} }
public void push(Task task, Task original) { public void push(Task task, Task original) {
if (!syncAdapters.isCaldavSyncEnabled()) {
return;
}
if(task.checkTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC)) { if(task.checkTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC)) {
return; return;
} }
caldavAccountManager.requestSynchronization(); caldavAccountManager.requestSynchronization();
} }
} }

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

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

@ -296,5 +296,6 @@
<string name="p_bundle_notifications">bundle_notifications</string> <string name="p_bundle_notifications">bundle_notifications</string>
<string name="p_strict_mode">strict_mode</string> <string name="p_strict_mode">strict_mode</string>
<string name="warned_play_services">warned_play_services</string> <string name="warned_play_services">warned_play_services</string>
<string name="p_sync_caldav">sync_caldav</string>
</resources> </resources>

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

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