diff --git a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt index 29def05b3..001fc1998 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt @@ -8,9 +8,13 @@ import androidx.preference.PreferenceCategory import androidx.preference.SwitchPreferenceCompat import com.google.common.base.Strings import com.todoroo.andlib.utility.DateUtilities +import com.todoroo.astrid.api.CaldavFilter +import com.todoroo.astrid.api.Filter +import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity import com.todoroo.astrid.service.TaskDeleter import org.tasks.R +import org.tasks.activities.RemoteListPicker import org.tasks.caldav.CaldavAccountSettingsActivity import org.tasks.data.CaldavAccount import org.tasks.data.CaldavDao @@ -20,11 +24,14 @@ import org.tasks.etesync.EteSyncAccountSettingsActivity import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.jobs.WorkManager +import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.Preferences import org.tasks.sync.AddAccountDialog import org.tasks.ui.Toaster import javax.inject.Inject +private const val FRAG_TAG_REMOTE_LIST_SELECTION = "frag_tag_remote_list_selection" +private const val REQUEST_REMOTE_LIST = 10015 const val REQUEST_CALDAV_SETTINGS = 10013 const val REQUEST_GOOGLE_TASKS = 10014 @@ -36,6 +43,7 @@ class Synchronization : InjectingPreferenceFragment() { @Inject lateinit var caldavDao: CaldavDao @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var taskDeleter: TaskDeleter + @Inject lateinit var defaultFilterProvider: DefaultFilterProvider override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences_synchronization, rootKey) @@ -72,6 +80,18 @@ class Synchronization : InjectingPreferenceFragment() { AddAccountDialog.showAddAccountDialog(activity, dialogBuilder) false } + + findPreference(R.string.p_default_remote_list) + .setOnPreferenceClickListener { + RemoteListPicker.newRemoteListSupportPicker( + defaultFilterProvider.defaultRemoteList, + this, + REQUEST_REMOTE_LIST + ) + .show(parentFragmentManager, FRAG_TAG_REMOTE_LIST_SELECTION) + false + } + updateRemoteListSummary() } override fun onResume() { @@ -91,6 +111,16 @@ class Synchronization : InjectingPreferenceFragment() { } else if (data != null) { toaster.longToast(data.getStringExtra(GtasksLoginActivity.EXTRA_ERROR)) } + } else if (requestCode == REQUEST_REMOTE_LIST) { + val list: Filter? = data!!.getParcelableExtra(RemoteListPicker.EXTRA_SELECTED_FILTER) + if (list == null) { + preferences.setString(R.string.p_default_remote_list, null) + } else if (list is GtasksFilter || list is CaldavFilter) { + defaultFilterProvider.defaultRemoteList = list + } else { + throw RuntimeException("Unhandled filter type") + } + updateRemoteListSummary() } else { super.onActivityResult(requestCode, resultCode, data) } @@ -188,6 +218,15 @@ class Synchronization : InjectingPreferenceFragment() { findPreference(R.string.accounts).isVisible = hasGoogleAccounts || hasCaldavAccounts findPreference(R.string.sync_SPr_interval_title).isVisible = hasGoogleAccounts || hasCaldavAccounts + findPreference(R.string.p_default_remote_list).isVisible = + hasGoogleAccounts || hasCaldavAccounts + } + + private fun updateRemoteListSummary() { + val defaultFilter = defaultFilterProvider.defaultRemoteList + findPreference(R.string.p_default_remote_list).summary = + if (defaultFilter == null) getString(R.string.dont_sync) + else defaultFilter.listingTitle } override fun inject(component: FragmentComponent) { diff --git a/app/src/main/res/xml/preferences_synchronization.xml b/app/src/main/res/xml/preferences_synchronization.xml index 87f745dc3..20e563236 100644 --- a/app/src/main/res/xml/preferences_synchronization.xml +++ b/app/src/main/res/xml/preferences_synchronization.xml @@ -3,6 +3,12 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:key="@string/preference_screen"> + +