Remove GtasksFilter

pull/3221/head
Alex Baker 11 months ago
parent e5d6723e23
commit dd06decc40

@ -2,9 +2,7 @@ package com.todoroo.astrid.adapter
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue import com.natpryce.makeiteasy.PropertyValue
import org.tasks.filters.CaldavFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import com.todoroo.astrid.service.TaskMover import com.todoroo.astrid.service.TaskMover
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -15,11 +13,15 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery import org.tasks.data.TaskListQuery.getQuery
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.Task
import org.tasks.filters.CaldavFilter
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR import org.tasks.makers.CaldavTaskMaker.CALENDAR
@ -45,7 +47,10 @@ class CaldavManualSortTaskAdapterTest : InjectingTestCase() {
private lateinit var adapter: CaldavManualSortTaskAdapter private lateinit var adapter: CaldavManualSortTaskAdapter
private val tasks = ArrayList<TaskContainer>() private val tasks = ArrayList<TaskContainer>()
private val filter = CaldavFilter(CaldavCalendar(name = "calendar", uuid = "1234")) private val filter = CaldavFilter(
calendar = CaldavCalendar(name = "calendar", uuid = "1234"),
account = CaldavAccount(accountType = TYPE_CALDAV)
)
private val dataSource = object : TaskAdapterDataSource { private val dataSource = object : TaskAdapterDataSource {
override fun getItem(position: Int) = tasks[position] override fun getItem(position: Int) = tasks[position]

@ -2,7 +2,6 @@ package com.todoroo.astrid.adapter
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue import com.natpryce.makeiteasy.PropertyValue
import org.tasks.filters.GtasksFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.service.TaskMover import com.todoroo.astrid.service.TaskMover
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
@ -17,8 +16,11 @@ import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery import org.tasks.data.TaskListQuery.getQuery
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
import org.tasks.filters.CaldavFilter
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR import org.tasks.makers.CaldavTaskMaker.CALENDAR
@ -41,7 +43,10 @@ class GoogleTaskManualSortAdapterTest : InjectingTestCase() {
private lateinit var adapter: GoogleTaskManualSortAdapter private lateinit var adapter: GoogleTaskManualSortAdapter
private val tasks = ArrayList<TaskContainer>() private val tasks = ArrayList<TaskContainer>()
private val filter = GtasksFilter(CaldavCalendar(uuid = "1234")) private val filter = CaldavFilter(
calendar = CaldavCalendar(uuid = "1234"),
account = CaldavAccount(accountType = TYPE_GOOGLE_TASKS)
)
private val dataSource = object : TaskAdapterDataSource { private val dataSource = object : TaskAdapterDataSource {
override fun getItem(position: Int) = tasks[position] override fun getItem(position: Int) = tasks[position]

@ -1,8 +1,6 @@
package com.todoroo.astrid.service package com.todoroo.astrid.service
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import org.tasks.filters.CaldavFilter
import org.tasks.filters.GtasksFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -17,6 +15,7 @@ import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.filters.CaldavFilter
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.jobs.WorkManager import org.tasks.jobs.WorkManager
@ -306,11 +305,23 @@ class TaskMoverTest : InjectingTestCase() {
} }
private suspend fun moveToGoogleTasks(list: String, vararg tasks: Long) { private suspend fun moveToGoogleTasks(list: String, vararg tasks: Long) {
taskMover.move(tasks.toList(), GtasksFilter(CaldavCalendar(uuid = list))) taskMover.move(
tasks.toList(),
CaldavFilter(
calendar = CaldavCalendar(uuid = list),
account = CaldavAccount(accountType = TYPE_GOOGLE_TASKS)
)
)
} }
private suspend fun moveToCaldavList(calendar: String, vararg tasks: Long) { private suspend fun moveToCaldavList(calendar: String, vararg tasks: Long) {
taskMover.move(tasks.toList(), CaldavFilter(CaldavCalendar(name = "", uuid = calendar))) taskMover.move(
tasks.toList(),
CaldavFilter(
CaldavCalendar(name = "", uuid = calendar),
account = CaldavAccount(accountType = TYPE_CALDAV)
)
)
} }
private suspend fun setAccountType(account: String, type: Int) { private suspend fun setAccountType(account: String, type: Int) {

@ -1,7 +1,6 @@
package org.tasks.data package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import org.tasks.filters.GtasksFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -13,7 +12,9 @@ import org.tasks.R
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.filters.CaldavFilter
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR import org.tasks.makers.CaldavTaskMaker.CALENDAR
@ -33,7 +34,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() {
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDao
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDao
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
private lateinit var filter: GtasksFilter private lateinit var filter: CaldavFilter
@Before @Before
override fun setUp() { override fun setUp() {
@ -45,7 +46,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() {
caldavDao.insert(CaldavAccount()) caldavDao.insert(CaldavAccount())
caldavDao.insert(calendar) caldavDao.insert(calendar)
} }
filter = GtasksFilter(calendar) filter = CaldavFilter(calendar, account = CaldavAccount(accountType = TYPE_GOOGLE_TASKS))
} }
@Test @Test
@ -101,7 +102,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() {
with(ORDER, order), with(ORDER, order),
with(PARENT, parent), with(PARENT, parent),
)) ))
googleTaskDao.insert(newCaldavTask(with(CALENDAR, filter.list.uuid), with(TASK, id))) googleTaskDao.insert(newCaldavTask(with(CALENDAR, filter.uuid), with(TASK, id)))
} }
private suspend fun query(): List<TaskContainer> = taskDao.fetchTasks { private suspend fun query(): List<TaskContainer> = taskDao.fetchTasks {

@ -51,6 +51,7 @@ import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT
import org.tasks.compose.drawer.DrawerAction import org.tasks.compose.drawer.DrawerAction
import org.tasks.compose.drawer.DrawerItem import org.tasks.compose.drawer.DrawerItem
import org.tasks.compose.drawer.MenuSearchBar import org.tasks.compose.drawer.MenuSearchBar
@ -200,9 +201,9 @@ class MainActivity : AppCompatActivity() {
REQUEST_NEW_LIST REQUEST_NEW_LIST
) )
REQUEST_NEW_LIST -> lifecycleScope.launch { REQUEST_NEW_LIST -> {
val account = val account =
caldavDao.getAccount(it.header.id) ?: return@launch caldavDao.getAccount(it.header.id.toLong()) ?: return@launch
when (it.header.subheaderType) { when (it.header.subheaderType) {
NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS -> NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS ->
startActivityForResult( startActivityForResult(
@ -211,7 +212,7 @@ class MainActivity : AppCompatActivity() {
GoogleTaskListSettingsActivity::class.java GoogleTaskListSettingsActivity::class.java
) )
.putExtra( .putExtra(
GoogleTaskListSettingsActivity.EXTRA_ACCOUNT, EXTRA_CALDAV_ACCOUNT,
account account
), ),
REQUEST_NEW_LIST REQUEST_NEW_LIST
@ -225,7 +226,7 @@ class MainActivity : AppCompatActivity() {
account.listSettingsClass() account.listSettingsClass()
) )
.putExtra( .putExtra(
BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, EXTRA_CALDAV_ACCOUNT,
account account
), ),
REQUEST_NEW_LIST REQUEST_NEW_LIST

@ -80,7 +80,6 @@ import org.tasks.R
import org.tasks.ShortcutManager import org.tasks.ShortcutManager
import org.tasks.TasksApplication import org.tasks.TasksApplication
import org.tasks.activities.FilterSettingsActivity import org.tasks.activities.FilterSettingsActivity
import org.tasks.activities.GoogleTaskListSettingsActivity
import org.tasks.activities.PlaceSettingsActivity import org.tasks.activities.PlaceSettingsActivity
import org.tasks.activities.TagSettingsActivity import org.tasks.activities.TagSettingsActivity
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
@ -121,7 +120,6 @@ import org.tasks.filters.CaldavFilter
import org.tasks.filters.CustomFilter import org.tasks.filters.CustomFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.FilterImpl import org.tasks.filters.FilterImpl
import org.tasks.filters.GtasksFilter
import org.tasks.filters.MyTasksFilter import org.tasks.filters.MyTasksFilter
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.filters.TagFilter import org.tasks.filters.TagFilter
@ -462,7 +460,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
when (filter) { when (filter) {
is CaldavFilter -> R.menu.menu_caldav_list_fragment is CaldavFilter -> R.menu.menu_caldav_list_fragment
is CustomFilter -> R.menu.menu_custom_filter is CustomFilter -> R.menu.menu_custom_filter
is GtasksFilter -> R.menu.menu_gtasks_list_fragment
is TagFilter -> R.menu.menu_tag_view_fragment is TagFilter -> R.menu.menu_tag_view_fragment
is PlaceFilter -> R.menu.menu_location_list_fragment is PlaceFilter -> R.menu.menu_location_list_fragment
else -> null else -> null
@ -571,15 +568,12 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
true true
} }
R.id.menu_caldav_list_fragment -> { R.id.menu_caldav_list_fragment -> {
val calendar = (filter as CaldavFilter).calendar val filter = filter as? CaldavFilter ?: return false
lifecycleScope.launch { listSettingsRequest.launch(
val account = caldavDao.getAccountByUuid(calendar.account!!) Intent(activity, filter.account.listSettingsClass())
listSettingsRequest.launch( .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, filter.account)
Intent(activity, account!!.listSettingsClass()) .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, filter.calendar)
.putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, account) )
.putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, calendar)
)
}
true true
} }
R.id.menu_location_settings -> { R.id.menu_location_settings -> {
@ -590,13 +584,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
) )
true true
} }
R.id.menu_gtasks_list_settings -> {
listSettingsRequest.launch(
Intent(activity, GoogleTaskListSettingsActivity::class.java)
.putExtra(GoogleTaskListSettingsActivity.EXTRA_STORE_DATA, (filter as GtasksFilter).list)
)
true
}
R.id.menu_tag_settings -> { R.id.menu_tag_settings -> {
listSettingsRequest.launch( listSettingsRequest.launch(
Intent(activity, TagSettingsActivity::class.java) Intent(activity, TagSettingsActivity::class.java)

@ -7,9 +7,8 @@ import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.activities.GoogleTaskListSettingsActivity
import org.tasks.activities.TagSettingsActivity import org.tasks.activities.TagSettingsActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.listSettingsClass import org.tasks.data.listSettingsClass
import org.tasks.dialogs.NewFilterDialog import org.tasks.dialogs.NewFilterDialog
@ -22,9 +21,9 @@ import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.CALDAV
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.PREFERENCE import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.PREFERENCE
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.TASKS import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.TASKS
import org.tasks.preferences.TasksPreferences
import org.tasks.location.LocationPickerActivity import org.tasks.location.LocationPickerActivity
import org.tasks.preferences.MainPreferences import org.tasks.preferences.MainPreferences
import org.tasks.preferences.TasksPreferences
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -66,26 +65,14 @@ class SubheaderClickHandler @Inject constructor(
) )
REQUEST_NEW_LIST -> { REQUEST_NEW_LIST -> {
(activity as AppCompatActivity).lifecycleScope.launch { (activity as AppCompatActivity).lifecycleScope.launch {
val account = caldavDao.getAccount(subheader.id) ?: return@launch val account = caldavDao.getAccount(subheader.id.toLong()) ?: return@launch
when (subheader.subheaderType) { when (subheader.subheaderType) {
NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS -> NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS,
activity.startActivityForResult(
Intent(activity, GoogleTaskListSettingsActivity::class.java)
.putExtra(
GoogleTaskListSettingsActivity.EXTRA_ACCOUNT,
account
),
REQUEST_NEW_LIST
)
NavigationDrawerSubheader.SubheaderType.CALDAV, NavigationDrawerSubheader.SubheaderType.CALDAV,
NavigationDrawerSubheader.SubheaderType.TASKS -> NavigationDrawerSubheader.SubheaderType.TASKS ->
activity.startActivityForResult( activity.startActivityForResult(
Intent(activity, account.listSettingsClass()) Intent(activity, account.listSettingsClass())
.putExtra( .putExtra(EXTRA_CALDAV_ACCOUNT, account),
BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT,
account
),
REQUEST_NEW_LIST REQUEST_NEW_LIST
) )

@ -17,7 +17,6 @@ import org.tasks.data.entity.TaskListMetadata
import org.tasks.filters.AstridOrderingFilter import org.tasks.filters.AstridOrderingFilter
import org.tasks.filters.CaldavFilter import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.GtasksFilter
import org.tasks.filters.MyTasksFilter import org.tasks.filters.MyTasksFilter
import org.tasks.filters.TagFilter import org.tasks.filters.TagFilter
import org.tasks.filters.TodayFilter import org.tasks.filters.TodayFilter
@ -47,9 +46,11 @@ class TaskAdapterProvider @Inject constructor(
} }
} }
if (filter.supportsManualSort() && preferences.isManualSort) { if (filter.supportsManualSort() && preferences.isManualSort) {
when (filter) { if (filter is CaldavFilter) {
is GtasksFilter -> return GoogleTaskManualSortAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) when {
is CaldavFilter -> return CaldavManualSortTaskAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) filter.isGoogleTasks -> return GoogleTaskManualSortAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover)
filter.isIcalendar -> return CaldavManualSortTaskAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover)
}
} }
} }
return TaskAdapter(preferences.addTasksToTop(), googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) return TaskAdapter(preferences.addTasksToTop(), googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover)

@ -14,7 +14,6 @@ import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import net.fortuna.ical4j.model.Recur import net.fortuna.ical4j.model.Recur
import net.fortuna.ical4j.model.WeekDay import net.fortuna.ical4j.model.WeekDay
import org.tasks.R import org.tasks.R
@ -22,7 +21,6 @@ import org.tasks.compose.edit.RepeatRow
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.filters.CaldavFilter import org.tasks.filters.CaldavFilter
import org.tasks.filters.GtasksFilter
import org.tasks.repeats.BasicRecurrenceDialog import org.tasks.repeats.BasicRecurrenceDialog
import org.tasks.repeats.RecurrenceUtils.newRecur import org.tasks.repeats.RecurrenceUtils.newRecur
import org.tasks.repeats.RepeatRuleToString import org.tasks.repeats.RepeatRuleToString
@ -91,27 +89,23 @@ class RepeatControlSet : TaskEditControlFragment() {
}, },
repeatAfterCompletion = viewModel.repeatAfterCompletion.collectAsStateWithLifecycle().value, repeatAfterCompletion = viewModel.repeatAfterCompletion.collectAsStateWithLifecycle().value,
onClick = { onClick = {
lifecycleScope.launch { val accountType = viewModel.selectedList.value
val accountType = viewModel.selectedList.value .let {
.let { when (it) {
when (it) { is CaldavFilter -> it.account
is CaldavFilter -> it.account else -> null
is GtasksFilter -> it.account
else -> null
}
} }
?.let { caldavDao.getAccountByUuid(it) } }
?.accountType ?.accountType
?: CaldavAccount.TYPE_LOCAL ?: CaldavAccount.TYPE_LOCAL
BasicRecurrenceDialog.newBasicRecurrenceDialog( BasicRecurrenceDialog.newBasicRecurrenceDialog(
target = this@RepeatControlSet, target = this@RepeatControlSet,
rc = REQUEST_RECURRENCE, rc = REQUEST_RECURRENCE,
rrule = viewModel.recurrence.value, rrule = viewModel.recurrence.value,
dueDate = viewModel.dueDate.value, dueDate = viewModel.dueDate.value,
accountType = accountType, accountType = accountType,
) )
.show(parentFragmentManager, FRAG_TAG_BASIC_RECURRENCE) .show(parentFragmentManager, FRAG_TAG_BASIC_RECURRENCE)
}
}, },
onRepeatFromChanged = { viewModel.repeatAfterCompletion.value = it } onRepeatFromChanged = { viewModel.repeatAfterCompletion.value = it }
) )

@ -33,7 +33,6 @@ import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_NONE
import org.tasks.data.entity.Task.Companion.IMPORTANCE import org.tasks.data.entity.Task.Companion.IMPORTANCE
import org.tasks.filters.CaldavFilter import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.GtasksFilter
import org.tasks.filters.mapFromSerializedString import org.tasks.filters.mapFromSerializedString
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -88,25 +87,27 @@ class TaskCreator @Inject constructor(
) )
} else { } else {
val remoteList = defaultFilterProvider.getDefaultList() val remoteList = defaultFilterProvider.getDefaultList()
if (remoteList is GtasksFilter) { if (remoteList is CaldavFilter) {
googleTaskDao.insertAndShift( if (remoteList.isGoogleTasks) {
task, googleTaskDao.insertAndShift(
CaldavTask( task,
task = task.id, CaldavTask(
calendar = remoteList.remoteId, task = task.id,
remoteId = null calendar = remoteList.uuid,
), remoteId = null
addToTop ),
) addToTop
} else if (remoteList is CaldavFilter) { )
caldavDao.insert( } else {
task, caldavDao.insert(
CaldavTask( task,
task = task.id, CaldavTask(
calendar = remoteList.uuid, task = task.id,
), calendar = remoteList.uuid,
addToTop ),
) addToTop
)
}
} }
} }
if (task.hasTransitory(Place.KEY)) { if (task.hasTransitory(Place.KEY)) {

@ -1,19 +1,16 @@
package com.todoroo.astrid.service package com.todoroo.astrid.service
import org.tasks.BuildConfig
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.caldav.VtodoCache import org.tasks.caldav.VtodoCache
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.TaskDao import org.tasks.data.dao.TaskDao
import org.tasks.data.db.DbUtils.dbchunk import org.tasks.data.db.DbUtils.dbchunk
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
import org.tasks.data.getLocalList import org.tasks.data.getLocalList
import org.tasks.filters.CaldavFilter import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.GtasksFilter
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.sync.SyncAdapters import org.tasks.sync.SyncAdapters
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
@ -31,16 +28,13 @@ class TaskMover @Inject constructor(
suspend fun getSingleFilter(tasks: List<Long>): Filter? { suspend fun getSingleFilter(tasks: List<Long>): Filter? {
val caldavCalendars = caldavDao.getCalendars(tasks) val caldavCalendars = caldavDao.getCalendars(tasks)
if (caldavCalendars.size == 1) { return if (caldavCalendars.size == 1) {
val list = caldavCalendars.first() val list = caldavCalendars.first()
val account = list.account?.let { caldavDao.getAccountByUuid(it) } val account = list.account?.let { caldavDao.getAccountByUuid(it) }
return when (account?.accountType) { account?.let { CaldavFilter(calendar = list, account = it) }
null -> null } else {
CaldavAccount.TYPE_GOOGLE_TASKS -> GtasksFilter(list) null
else -> CaldavFilter(list)
}
} }
return null
} }
suspend fun move(task: Long, list: Long) { suspend fun move(task: Long, list: Long) {
@ -48,14 +42,11 @@ class TaskMover @Inject constructor(
val account = calendar.account?.let { caldavDao.getAccountByUuid(it) } ?: return val account = calendar.account?.let { caldavDao.getAccountByUuid(it) } ?: return
move( move(
ids = listOf(task), ids = listOf(task),
selectedList = if (account.accountType == CaldavAccount.TYPE_GOOGLE_TASKS) selectedList = CaldavFilter(calendar = calendar, account = account),
GtasksFilter(calendar)
else
CaldavFilter(calendar)
) )
} }
suspend fun move(ids: List<Long>, selectedList: Filter) { suspend fun move(ids: List<Long>, selectedList: CaldavFilter) {
val tasks = ids val tasks = ids
.dbchunk() .dbchunk()
.flatMap { taskDao.getChildren(it) } .flatMap { taskDao.getChildren(it) }
@ -64,7 +55,7 @@ class TaskMover @Inject constructor(
val taskIds = tasks.map { it.id } val taskIds = tasks.map { it.id }
taskDao.setParent(0, ids.intersect(taskIds.toSet()).toList()) taskDao.setParent(0, ids.intersect(taskIds.toSet()).toList())
tasks.forEach { performMove(it, selectedList) } tasks.forEach { performMove(it, selectedList) }
if (selectedList is CaldavFilter) { if (selectedList.isIcalendar) {
caldavDao.updateParents(selectedList.uuid) caldavDao.updateParents(selectedList.uuid)
} }
taskIds.dbchunk().forEach { taskIds.dbchunk().forEach {
@ -76,10 +67,11 @@ class TaskMover @Inject constructor(
suspend fun migrateLocalTasks() { suspend fun migrateLocalTasks() {
val list = caldavDao.getLocalList() val list = caldavDao.getLocalList()
move(taskDao.getLocalTasks(), CaldavFilter(list)) val account = list.account?.let { caldavDao.getAccountByUuid(it) } ?: return
move(taskDao.getLocalTasks(), CaldavFilter(calendar = list, account = account))
} }
private suspend fun performMove(task: Task, selectedList: Filter) { private suspend fun performMove(task: Task, selectedList: CaldavFilter) {
googleTaskDao.getByTaskId(task.id)?.let { googleTaskDao.getByTaskId(task.id)?.let {
moveGoogleTask(task, it, selectedList) moveGoogleTask(task, it, selectedList)
return return
@ -91,16 +83,16 @@ class TaskMover @Inject constructor(
moveLocalTask(task, selectedList) moveLocalTask(task, selectedList)
} }
private suspend fun moveGoogleTask(task: Task, googleTask: CaldavTask, selected: Filter) { private suspend fun moveGoogleTask(task: Task, googleTask: CaldavTask, selected: CaldavFilter) {
if (selected is GtasksFilter && googleTask.calendar == selected.remoteId) { if (googleTask.calendar == selected.uuid) {
return return
} }
val id = task.id val id = task.id
val children = taskDao.getChildren(id) val children = taskDao.getChildren(id)
caldavDao.markDeleted(children + id, currentTimeMillis()) caldavDao.markDeleted(children + id, currentTimeMillis())
when(selected) { when {
is GtasksFilter -> { selected.isGoogleTasks -> {
val listId = selected.remoteId val listId = selected.uuid
googleTaskDao.insertAndShift( googleTaskDao.insertAndShift(
task = task, task = task,
caldavTask = CaldavTask( caldavTask = CaldavTask(
@ -120,7 +112,7 @@ class TaskMover @Inject constructor(
} }
?.let { googleTaskDao.insert(it) } ?.let { googleTaskDao.insert(it) }
} }
is CaldavFilter -> { else -> {
val listId = selected.uuid val listId = selected.uuid
val newParent = CaldavTask( val newParent = CaldavTask(
task = id, task = id,
@ -136,13 +128,11 @@ class TaskMover @Inject constructor(
newChild newChild
}.let { caldavDao.insert(it) } }.let { caldavDao.insert(it) }
} }
else -> require(!BuildConfig.DEBUG)
} }
} }
private suspend fun moveCaldavTask(task: Task, caldavTask: CaldavTask, selected: Filter) { private suspend fun moveCaldavTask(task: Task, caldavTask: CaldavTask, selected: CaldavFilter) {
if (selected is CaldavFilter if (caldavTask.calendar == selected.uuid) {
&& caldavTask.calendar == selected.uuid) {
return return
} }
val id = task.id val id = task.id
@ -154,8 +144,9 @@ class TaskMover @Inject constructor(
toDelete.addAll(childIds) toDelete.addAll(childIds)
} }
caldavDao.markDeleted(toDelete, currentTimeMillis()) caldavDao.markDeleted(toDelete, currentTimeMillis())
when (selected) { when {
is CaldavFilter -> { selected.isGoogleTasks -> moveToGoogleTasks(id, childIds, selected)
else -> {
val from = caldavDao.getCalendar(caldavTask.calendar!!) val from = caldavDao.getCalendar(caldavTask.calendar!!)
val id1 = caldavTask.task val id1 = caldavTask.task
val listId = selected.uuid val listId = selected.uuid
@ -181,15 +172,13 @@ class TaskMover @Inject constructor(
} }
?.let { caldavDao.insert(it) } ?.let { caldavDao.insert(it) }
} }
is GtasksFilter -> moveToGoogleTasks(id, childIds, selected)
else -> require(!BuildConfig.DEBUG)
} }
} }
private suspend fun moveLocalTask(task: Task, selected: Filter) { private suspend fun moveLocalTask(task: Task, selected: CaldavFilter) {
when (selected) { when {
is GtasksFilter -> moveToGoogleTasks(task.id, taskDao.getChildren(task.id), selected) selected.isGoogleTasks -> moveToGoogleTasks(task.id, taskDao.getChildren(task.id), selected)
is CaldavFilter -> { else -> {
val id = task.id val id = task.id
val listId = selected.uuid val listId = selected.uuid
val tasks: MutableMap<Long, CaldavTask> = HashMap() val tasks: MutableMap<Long, CaldavTask> = HashMap()
@ -210,14 +199,16 @@ class TaskMover @Inject constructor(
caldavDao.insert(task, root, preferences.addTasksToTop()) caldavDao.insert(task, root, preferences.addTasksToTop())
caldavDao.insert(tasks.values) caldavDao.insert(tasks.values)
} }
else -> require(!BuildConfig.DEBUG)
} }
} }
private suspend fun moveToGoogleTasks(id: Long, children: List<Long>, filter: GtasksFilter) { private suspend fun moveToGoogleTasks(id: Long, children: List<Long>, filter: CaldavFilter) {
if (!filter.isGoogleTasks) {
return
}
val task = taskDao.fetch(id) ?: return val task = taskDao.fetch(id) ?: return
taskDao.setParent(id, children) taskDao.setParent(id, children)
val listId = filter.remoteId val listId = filter.uuid
googleTaskDao.insertAndShift( googleTaskDao.insertAndShift(
task, task,
CaldavTask( CaldavTask(

@ -32,7 +32,7 @@ import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Filter import org.tasks.data.entity.Filter
import org.tasks.data.entity.Tag import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData import org.tasks.data.entity.TagData
import org.tasks.filters.GtasksFilter import org.tasks.filters.CaldavFilter
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
@ -270,7 +270,10 @@ class Upgrader @Inject constructor(
} else { } else {
val googleTaskList = caldavDao.getCalendarByUuid(defaultGoogleTaskList!!) val googleTaskList = caldavDao.getCalendarByUuid(defaultGoogleTaskList!!)
if (googleTaskList != null) { if (googleTaskList != null) {
defaultFilterProvider.defaultList = GtasksFilter(googleTaskList) caldavDao.getAccountByUuid(googleTaskList.account!!)?.let {
defaultFilterProvider.defaultList =
CaldavFilter(calendar = googleTaskList, account = it)
}
} }
} }
} }

@ -18,12 +18,14 @@ import kotlinx.coroutines.withContext
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_CALENDAR
import org.tasks.compose.settings.Toaster import org.tasks.compose.settings.Toaster
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.GtasksFilter
import org.tasks.themes.TasksIcons import org.tasks.themes.TasksIcons
import org.tasks.themes.TasksTheme import org.tasks.themes.TasksTheme
import timber.log.Timber import timber.log.Timber
@ -35,6 +37,12 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
@Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var taskDeleter: TaskDeleter
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
private val account: CaldavAccount
get() = intent.getParcelableExtra(EXTRA_CALDAV_ACCOUNT)!!
private val list: CaldavCalendar?
get() = intent.getParcelableExtra(EXTRA_CALDAV_CALENDAR)
private var isNewList = false private var isNewList = false
private lateinit var gtasksList: CaldavCalendar private lateinit var gtasksList: CaldavCalendar
private val createListViewModel: CreateListViewModel by viewModels() private val createListViewModel: CreateListViewModel by viewModels()
@ -45,12 +53,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
val snackbar = SnackbarHostState() val snackbar = SnackbarHostState()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
gtasksList = intent.getParcelableExtra(EXTRA_STORE_DATA) gtasksList = list ?: CaldavCalendar(account = account.username).apply { isNewList = true }
?: CaldavCalendar(
account = intent.getParcelableExtra<CaldavAccount>(EXTRA_ACCOUNT)!!.username
).apply {
isNewList = true
}
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
if (savedInstanceState == null) { if (savedInstanceState == null) {
baseViewModel.setColor(gtasksList.color) baseViewModel.setColor(gtasksList.color)
@ -78,7 +81,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
} }
override val filter: Filter? override val filter: Filter?
get() = if (isNewList) null else GtasksFilter(gtasksList) get() = if (isNewList) null else CaldavFilter(calendar = gtasksList, account = account)
override val toolbarTitle: String override val toolbarTitle: String
get() = if (isNew) getString(R.string.new_list) else gtasksList.name!! get() = if (isNew) getString(R.string.new_list) else gtasksList.name!!
@ -123,7 +126,11 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent(TaskListFragment.ACTION_RELOAD) Intent(TaskListFragment.ACTION_RELOAD)
.putExtra(MainActivity.OPEN_FILTER, GtasksFilter(gtasksList))) .putExtra(
MainActivity.OPEN_FILTER,
CaldavFilter(calendar = gtasksList, account = account)
)
)
} }
finish() finish()
} }
@ -172,7 +179,11 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent().putExtra(MainActivity.OPEN_FILTER, GtasksFilter(result.copy(id = id)))) Intent().putExtra(
MainActivity.OPEN_FILTER,
CaldavFilter(calendar = result.copy(id = id), account = account)
)
)
finish() finish()
} }
@ -199,7 +210,11 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent(TaskListFragment.ACTION_RELOAD) Intent(TaskListFragment.ACTION_RELOAD)
.putExtra(MainActivity.OPEN_FILTER, GtasksFilter(result))) .putExtra(
MainActivity.OPEN_FILTER,
CaldavFilter(calendar = result, account = account)
)
)
finish() finish()
} }
@ -210,9 +225,4 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
//toast(R.string.gtasks_GLA_errorIOAuth) //toast(R.string.gtasks_GLA_errorIOAuth)
return return
} }
companion object {
const val EXTRA_ACCOUNT = "extra_account"
const val EXTRA_STORE_DATA = "extra_store_data"
}
} }

@ -18,10 +18,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.todoroo.astrid.adapter.FilterViewHolder import com.todoroo.astrid.adapter.FilterViewHolder
import com.todoroo.astrid.adapter.NavigationDrawerAdapter import com.todoroo.astrid.adapter.NavigationDrawerAdapter
import org.tasks.filters.CaldavFilter
import org.tasks.filters.CustomFilter
import org.tasks.filters.GtasksFilter
import org.tasks.filters.TagFilter
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
@ -33,10 +29,13 @@ import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.listSettingsClass import org.tasks.data.listSettingsClass
import org.tasks.databinding.ActivityTagOrganizerBinding import org.tasks.databinding.ActivityTagOrganizerBinding
import org.tasks.filters.CaldavFilter
import org.tasks.filters.CustomFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.FilterListItem import org.tasks.filters.FilterListItem
import org.tasks.filters.FilterProvider import org.tasks.filters.FilterProvider
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.filters.TagFilter
import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import javax.inject.Inject import javax.inject.Inject
@ -103,18 +102,11 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba
private fun onClick(item: FilterListItem?) { private fun onClick(item: FilterListItem?) {
when (item) { when (item) {
is GtasksFilter ->
Intent(this, GoogleTaskListSettingsActivity::class.java)
.putExtra(GoogleTaskListSettingsActivity.EXTRA_STORE_DATA, item.list)
.apply(this::startActivity)
is CaldavFilter -> is CaldavFilter ->
lifecycleScope.launch { Intent(this@NavigationDrawerCustomization, item.account.listSettingsClass())
caldavDao.getAccountByUuid(item.account)?.let { .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, item.calendar)
Intent(this@NavigationDrawerCustomization, it.listSettingsClass()) .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, item.account)
.putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, item.calendar) .apply { startActivity(this) }
.apply { startActivity(this) }
}
}
is CustomFilter -> is CustomFilter ->
Intent(this, FilterSettingsActivity::class.java) Intent(this, FilterSettingsActivity::class.java)
.putExtra(FilterSettingsActivity.TOKEN_FILTER, item) .putExtra(FilterSettingsActivity.TOKEN_FILTER, item)
@ -178,11 +170,7 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba
if (sourceFilter::class.java != targetFilter::class.java) { if (sourceFilter::class.java != targetFilter::class.java) {
return false return false
} }
if (sourceFilter is GtasksFilter && targetFilter is GtasksFilter) { if (sourceFilter is CaldavFilter && targetFilter is CaldavFilter) {
if (sourceFilter.account != targetFilter.account) {
return false
}
} else if (sourceFilter is CaldavFilter && targetFilter is CaldavFilter) {
if (sourceFilter.account != targetFilter.account) { if (sourceFilter.account != targetFilter.account) {
return false return false
} }
@ -227,7 +215,6 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba
private fun getPredicate(item: FilterListItem): (FilterListItem) -> Boolean = { f -> private fun getPredicate(item: FilterListItem): (FilterListItem) -> Boolean = { f ->
item::class.java == f::class.java && when (item) { item::class.java == f::class.java && when (item) {
is GtasksFilter -> item.account == (f as GtasksFilter).account
is CaldavFilter -> item.account == (f as CaldavFilter).account is CaldavFilter -> item.account == (f as CaldavFilter).account
else -> true else -> true
} }
@ -235,7 +222,6 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba
private suspend fun setOrder(order: Int, filter: Filter) { private suspend fun setOrder(order: Int, filter: Filter) {
when (filter) { when (filter) {
is GtasksFilter -> caldavDao.setOrder(filter.list.id, order)
is CaldavFilter -> caldavDao.setOrder(filter.calendar.id, order) is CaldavFilter -> caldavDao.setOrder(filter.calendar.id, order)
is TagFilter -> tagDataDao.setOrder(filter.tagData.id!!, order) is TagFilter -> tagDataDao.setOrder(filter.tagData.id!!, order)
is CustomFilter -> filterDao.setOrder(filter.id, order) is CustomFilter -> filterDao.setOrder(filter.id, order)

@ -59,7 +59,7 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() {
} }
override val filter: Filter? override val filter: Filter?
get() = caldavCalendar?.let { CaldavFilter(it) } get() = caldavCalendar?.let { CaldavFilter(calendar = it, account = caldavAccount) }
override val toolbarTitle: String override val toolbarTitle: String
get() = if (isNew) getString(R.string.new_list) else caldavCalendar!!.name ?: "" get() = if (isNew) getString(R.string.new_list) else caldavCalendar!!.name ?: ""
@ -134,7 +134,11 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() {
caldavDao.insert(caldavCalendar) caldavDao.insert(caldavCalendar)
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent().putExtra(MainActivity.OPEN_FILTER, CaldavFilter(caldavCalendar))) Intent().putExtra(
MainActivity.OPEN_FILTER,
CaldavFilter(calendar = caldavCalendar, account = caldavAccount)
)
)
finish() finish()
} }
@ -148,7 +152,11 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() {
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent(TaskListFragment.ACTION_RELOAD) Intent(TaskListFragment.ACTION_RELOAD)
.putExtra(MainActivity.OPEN_FILTER, CaldavFilter(result))) .putExtra(
MainActivity.OPEN_FILTER,
CaldavFilter(calendar = result, account = caldavAccount)
)
)
finish() finish()
} }

@ -50,7 +50,10 @@ class CaldavCalendarViewModel @Inject constructor(
caldavDao.insert(this) caldavDao.insert(this)
} }
if (!ignoreFinish) { if (!ignoreFinish) {
finish.value = Intent().putExtra(MainActivity.OPEN_FILTER, CaldavFilter(calendar)) finish.value = Intent().putExtra(
MainActivity.OPEN_FILTER,
CaldavFilter(calendar = calendar, account = caldavAccount)
)
} }
calendar calendar
} }
@ -73,7 +76,10 @@ class CaldavCalendarViewModel @Inject constructor(
) )
caldavDao.update(result) caldavDao.update(result)
finish.value = Intent(TaskListFragment.ACTION_RELOAD) finish.value = Intent(TaskListFragment.ACTION_RELOAD)
.putExtra(MainActivity.OPEN_FILTER, CaldavFilter(result)) .putExtra(
MainActivity.OPEN_FILTER,
CaldavFilter(calendar = result, account = account)
)
} }
suspend fun deleteCalendar(account: CaldavAccount, calendar: CaldavCalendar) = suspend fun deleteCalendar(account: CaldavAccount, calendar: CaldavCalendar) =

@ -30,6 +30,7 @@ import dagger.hilt.android.AndroidEntryPoint
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.compose.pickers.SearchableFilterPicker import org.tasks.compose.pickers.SearchableFilterPicker
import org.tasks.dialogs.FilterPickerViewModel import org.tasks.dialogs.FilterPickerViewModel
import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
@ -110,11 +111,11 @@ class FilterSelectionActivity : AppCompatActivity() {
const val EXTRA_FILTER = "extra_filter" const val EXTRA_FILTER = "extra_filter"
const val EXTRA_LISTS_ONLY = "extra_lists_only" const val EXTRA_LISTS_ONLY = "extra_lists_only"
fun Fragment.registerForListPickerResult(callback: (Filter) -> Unit): ActivityResultLauncher<Intent> { fun Fragment.registerForListPickerResult(callback: (CaldavFilter) -> Unit): ActivityResultLauncher<Intent> {
return registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { return registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
it.data?.let { intent -> it.data?.let { intent ->
IntentCompat IntentCompat
.getParcelableExtra(intent, EXTRA_FILTER, Filter::class.java) .getParcelableExtra(intent, EXTRA_FILTER, CaldavFilter::class.java)
?.let(callback) ?.let(callback)
} }
} }

@ -40,10 +40,11 @@ import org.tasks.compose.SubtaskChip
import org.tasks.compose.TaskEditIcon import org.tasks.compose.TaskEditIcon
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
import org.tasks.data.isHidden import org.tasks.data.isHidden
import org.tasks.filters.Filter import org.tasks.filters.CaldavFilter
import org.tasks.filters.GtasksFilter
import org.tasks.tasklist.SectionedDataSource import org.tasks.tasklist.SectionedDataSource
import org.tasks.tasklist.TasksResults import org.tasks.tasklist.TasksResults
import org.tasks.tasklist.UiItem import org.tasks.tasklist.UiItem
@ -51,8 +52,8 @@ import org.tasks.themes.TasksTheme
@Composable @Composable
fun SubtaskRow( fun SubtaskRow(
originalFilter: Filter?, originalFilter: CaldavFilter,
filter: Filter?, filter: CaldavFilter,
hasParent: Boolean, hasParent: Boolean,
existingSubtasks: TasksResults, existingSubtasks: TasksResults,
newSubtasks: List<Task>, newSubtasks: List<Task>,
@ -81,9 +82,9 @@ fun SubtaskRow(
Column { Column {
val isGoogleTaskChild = val isGoogleTaskChild =
hasParent && hasParent &&
filter is GtasksFilter && filter.isGoogleTasks &&
originalFilter is GtasksFilter && originalFilter.isGoogleTasks &&
originalFilter.remoteId == filter.remoteId originalFilter.uuid == filter.uuid
if (isGoogleTaskChild) { if (isGoogleTaskChild) {
DisabledText( DisabledText(
text = stringResource(id = org.tasks.R.string.subtasks_multilevel_google_task), text = stringResource(id = org.tasks.R.string.subtasks_multilevel_google_task),
@ -99,7 +100,7 @@ fun SubtaskRow(
.forEach { task -> .forEach { task ->
ExistingSubtaskRow( ExistingSubtaskRow(
task = task, task = task,
indent = if (filter !is GtasksFilter) task.indent else 0, indent = if (filter.isIcalendar) task.indent else 0,
onRowClick = { openSubtask(task.task) }, onRowClick = { openSubtask(task.task) },
onCompleteClick = { onCompleteClick = {
completeExistingSubtask( completeExistingSubtask(
@ -234,8 +235,8 @@ fun ExistingSubtaskRow(
fun NoSubtasks() { fun NoSubtasks() {
TasksTheme { TasksTheme {
SubtaskRow( SubtaskRow(
originalFilter = null, originalFilter = CaldavFilter(CaldavCalendar(), CaldavAccount()),
filter = null, filter = CaldavFilter(CaldavCalendar(), CaldavAccount()),
hasParent = false, hasParent = false,
existingSubtasks = TasksResults.Results(SectionedDataSource()), existingSubtasks = TasksResults.Results(SectionedDataSource()),
newSubtasks = emptyList(), newSubtasks = emptyList(),
@ -255,8 +256,8 @@ fun NoSubtasks() {
fun SubtasksPreview() { fun SubtasksPreview() {
TasksTheme { TasksTheme {
SubtaskRow( SubtaskRow(
originalFilter = null, originalFilter = CaldavFilter(CaldavCalendar(), CaldavAccount()),
filter = null, filter = CaldavFilter(CaldavCalendar(), CaldavAccount()),
hasParent = false, hasParent = false,
existingSubtasks = TasksResults.Results( existingSubtasks = TasksResults.Results(
SectionedDataSource( SectionedDataSource(

@ -3,6 +3,7 @@ package org.tasks.data
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import org.tasks.R import org.tasks.R
import org.tasks.activities.GoogleTaskListSettingsActivity
import org.tasks.caldav.BaseCaldavAccountSettingsActivity import org.tasks.caldav.BaseCaldavAccountSettingsActivity
import org.tasks.caldav.CaldavAccountSettingsActivity import org.tasks.caldav.CaldavAccountSettingsActivity
import org.tasks.caldav.CaldavCalendarSettingsActivity import org.tasks.caldav.CaldavCalendarSettingsActivity
@ -56,6 +57,7 @@ fun CaldavAccount.listSettingsClass(): Class<out Activity> = when(accountType) {
CaldavAccount.TYPE_OPENTASKS -> OpenTasksListSettingsActivity::class.java CaldavAccount.TYPE_OPENTASKS -> OpenTasksListSettingsActivity::class.java
CaldavAccount.TYPE_ETEBASE -> EtebaseCalendarSettingsActivity::class.java CaldavAccount.TYPE_ETEBASE -> EtebaseCalendarSettingsActivity::class.java
CaldavAccount.TYPE_MICROSOFT -> MicrosoftListSettingsActivity::class.java CaldavAccount.TYPE_MICROSOFT -> MicrosoftListSettingsActivity::class.java
CaldavAccount.TYPE_GOOGLE_TASKS -> GoogleTaskListSettingsActivity::class.java
else -> CaldavCalendarSettingsActivity::class.java else -> CaldavCalendarSettingsActivity::class.java
} }

@ -11,12 +11,10 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R import org.tasks.R
import org.tasks.Strings import org.tasks.Strings
import org.tasks.activities.FilterSettingsActivity.Companion.sql import org.tasks.activities.FilterSettingsActivity.Companion.sql
import org.tasks.data.GoogleTask
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Filter import org.tasks.data.entity.Filter
import org.tasks.data.entity.Tag import org.tasks.data.entity.Tag
@ -87,7 +85,6 @@ class FilterCriteriaProvider @Inject constructor(
IDENTIFIER_IMPORTANCE -> priorityFilter IDENTIFIER_IMPORTANCE -> priorityFilter
IDENTIFIER_STARTDATE -> startDateFilter IDENTIFIER_STARTDATE -> startDateFilter
IDENTIFIER_DUEDATE -> dueDateFilter IDENTIFIER_DUEDATE -> dueDateFilter
IDENTIFIER_GTASKS -> gtasksFilterCriteria()
IDENTIFIER_CALDAV -> caldavFilterCriteria() IDENTIFIER_CALDAV -> caldavFilterCriteria()
IDENTIFIER_TAG_IS -> tagFilter() IDENTIFIER_TAG_IS -> tagFilter()
IDENTIFIER_TAG_CONTAINS -> tagNameContainsFilter IDENTIFIER_TAG_CONTAINS -> tagNameContainsFilter
@ -119,9 +116,6 @@ class FilterCriteriaProvider @Inject constructor(
add(dueDateFilter) add(dueDateFilter)
add(priorityFilter) add(priorityFilter)
add(taskTitleContainsFilter) add(taskTitleContainsFilter)
if (caldavDao.getAccounts(CaldavAccount.TYPE_GOOGLE_TASKS).isNotEmpty()) {
add(gtasksFilterCriteria())
}
add(caldavFilterCriteria()) add(caldavFilterCriteria())
add(recurringFilter) add(recurringFilter)
add(completedFilter) add(completedFilter)
@ -335,34 +329,6 @@ class FilterCriteriaProvider @Inject constructor(
"", "",
r.getString(R.string.CFC_title_contains_name)) r.getString(R.string.CFC_title_contains_name))
private suspend fun gtasksFilterCriteria(): CustomFilterCriterion {
val lists = caldavDao.getGoogleTaskLists()
val listNames = arrayOfNulls<String>(lists.size)
val listIds = arrayOfNulls<String>(lists.size)
for (i in lists.indices) {
listNames[i] = lists[i].name
listIds[i] = lists[i].uuid
}
val values: MutableMap<String, Any> = HashMap()
values[GoogleTask.KEY] = "?"
return MultipleSelectCriterion(
IDENTIFIER_GTASKS,
context.getString(R.string.CFC_gtasks_list_text),
select(CaldavTask.TASK)
.from(CaldavTask.TABLE)
.join(inner(Task.TABLE, CaldavTask.TASK.eq(Task.ID)))
.where(
and(
activeAndVisible(),
CaldavTask.DELETED.eq(0),
CaldavTask.CALENDAR.eq("?")))
.toString(),
values,
listNames,
listIds,
context.getString(R.string.CFC_gtasks_list_name))
}
private suspend fun caldavFilterCriteria(): CustomFilterCriterion { private suspend fun caldavFilterCriteria(): CustomFilterCriterion {
val calendars = caldavDao.getCalendars() val calendars = caldavDao.getCalendars()
val names = arrayOfNulls<String>(calendars.size) val names = arrayOfNulls<String>(calendars.size)
@ -397,7 +363,6 @@ class FilterCriteriaProvider @Inject constructor(
private const val IDENTIFIER_IMPORTANCE = "importance" private const val IDENTIFIER_IMPORTANCE = "importance"
private const val IDENTIFIER_STARTDATE = "startDate" private const val IDENTIFIER_STARTDATE = "startDate"
private const val IDENTIFIER_DUEDATE = "dueDate" private const val IDENTIFIER_DUEDATE = "dueDate"
private const val IDENTIFIER_GTASKS = "gtaskslist"
private const val IDENTIFIER_CALDAV = "caldavlist" private const val IDENTIFIER_CALDAV = "caldavlist"
private const val IDENTIFIER_TAG_IS = "tag_is" private const val IDENTIFIER_TAG_IS = "tag_is"
private const val IDENTIFIER_TAG_CONTAINS = "tag_contains" private const val IDENTIFIER_TAG_CONTAINS = "tag_contains"

@ -9,9 +9,7 @@ fun Filter.getIcon(inventory: Inventory): String? {
} }
return when (this) { return when (this) {
is TagFilter -> TasksIcons.LABEL is TagFilter -> TasksIcons.LABEL
is GtasksFilter,
is CaldavFilter -> TasksIcons.LIST is CaldavFilter -> TasksIcons.LIST
is CustomFilter -> TasksIcons.FILTER_LIST is CustomFilter -> TasksIcons.FILTER_LIST
is PlaceFilter -> TasksIcons.PLACE is PlaceFilter -> TasksIcons.PLACE
else -> icon else -> icon

@ -27,7 +27,6 @@ import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.filters.GtasksFilter
import org.tasks.googleapis.InvokerFactory import org.tasks.googleapis.InvokerFactory
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.PermissionChecker import org.tasks.preferences.PermissionChecker
@ -121,8 +120,8 @@ class GoogleTaskSynchronizer @Inject constructor(
} while (!isNullOrEmpty(nextPageToken)) } while (!isNullOrEmpty(nextPageToken))
gtasksListService.updateLists(account, gtaskLists) gtasksListService.updateLists(account, gtaskLists)
val defaultRemoteList = defaultFilterProvider.defaultList val defaultRemoteList = defaultFilterProvider.defaultList
if (defaultRemoteList is GtasksFilter) { if (defaultRemoteList.isGoogleTasks) {
val list = caldavDao.getCalendarByUuid(defaultRemoteList.remoteId) val list = caldavDao.getCalendarByUuid(defaultRemoteList.uuid)
if (list == null) { if (list == null) {
preferences.setString(R.string.p_default_list, null) preferences.setString(R.string.p_default_list, null)
} }
@ -194,7 +193,7 @@ class GoogleTaskSynchronizer @Inject constructor(
var newlyCreated = false var newlyCreated = false
val remoteId: String? val remoteId: String?
val defaultRemoteList = defaultFilterProvider.defaultList val defaultRemoteList = defaultFilterProvider.defaultList
var listId = if (defaultRemoteList is GtasksFilter) defaultRemoteList.remoteId else DEFAULT_LIST var listId = if (defaultRemoteList.isGoogleTasks) defaultRemoteList.uuid else DEFAULT_LIST
if (isNullOrEmpty(gtasksMetadata.remoteId)) { // Create case if (isNullOrEmpty(gtasksMetadata.remoteId)) { // Create case
gtasksMetadata.calendar?.takeIf { it.isNotBlank() }?.let { gtasksMetadata.calendar?.takeIf { it.isNotBlank() }?.let {
listId = it listId = it

@ -8,7 +8,6 @@ import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.FilterDao import org.tasks.data.dao.FilterDao
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_ONLY import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_ONLY
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
@ -16,7 +15,6 @@ import org.tasks.data.getLocalList
import org.tasks.filters.CaldavFilter import org.tasks.filters.CaldavFilter
import org.tasks.filters.CustomFilter import org.tasks.filters.CustomFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.GtasksFilter
import org.tasks.filters.MyTasksFilter import org.tasks.filters.MyTasksFilter
import org.tasks.filters.NotificationsFilter import org.tasks.filters.NotificationsFilter
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
@ -38,7 +36,7 @@ class DefaultFilterProvider @Inject constructor(
@Deprecated("use coroutines") get() = runBlocking { getFilterFromPreference(R.string.p_dashclock_filter) } @Deprecated("use coroutines") get() = runBlocking { getFilterFromPreference(R.string.p_dashclock_filter) }
set(filter) = setFilterPreference(filter, R.string.p_dashclock_filter) set(filter) = setFilterPreference(filter, R.string.p_dashclock_filter)
var defaultList: Filter var defaultList: CaldavFilter
@Deprecated("use coroutines") get() = runBlocking { getDefaultList() } @Deprecated("use coroutines") get() = runBlocking { getDefaultList() }
set(filter) = setFilterPreference(filter, R.string.p_default_list) set(filter) = setFilterPreference(filter, R.string.p_default_list)
@ -50,10 +48,11 @@ class DefaultFilterProvider @Inject constructor(
suspend fun getBadgeFilter() = getFilterFromPreference(R.string.p_badge_list) suspend fun getBadgeFilter() = getFilterFromPreference(R.string.p_badge_list)
suspend fun getDefaultList() = suspend fun getDefaultList(): CaldavFilter =
getFilterFromPreference(preferences.getStringValue(R.string.p_default_list), null) getFilterFromPreference(preferences.getStringValue(R.string.p_default_list), null)
?.takeIf { it.isWritable } ?.let { it as? CaldavFilter }
?: getAnyList() ?.takeIf { it.isWritable }
?: getAnyList()
fun setLastViewedFilter(filter: Filter) = setFilterPreference(filter, R.string.p_last_viewed_list) fun setLastViewedFilter(filter: Filter) = setFilterPreference(filter, R.string.p_last_viewed_list)
@ -82,9 +81,12 @@ class DefaultFilterProvider @Inject constructor(
suspend fun getFilterFromPreference(prefString: String?): Filter = suspend fun getFilterFromPreference(prefString: String?): Filter =
getFilterFromPreference(prefString, MyTasksFilter.create())!! getFilterFromPreference(prefString, MyTasksFilter.create())!!
private suspend fun getAnyList(): Filter { private suspend fun getAnyList(): CaldavFilter {
val filter = caldavDao.getGoogleTaskLists().getOrNull(0)?.let(::GtasksFilter) val filter = caldavDao
?: caldavDao.getCalendars().filterNot { it.access == ACCESS_READ_ONLY }.getOrElse(0) { caldavDao.getLocalList() }.let(::CaldavFilter) .getCalendars()
.filterNot { it.access == ACCESS_READ_ONLY }
.getOrElse(0) { caldavDao.getLocalList() }
.let { CaldavFilter(calendar = it, account = caldavDao.getAccountByUuid(it.account!!)!!) }
defaultList = filter defaultList = filter
return filter return filter
} }
@ -105,9 +107,10 @@ class DefaultFilterProvider @Inject constructor(
val tag = tagDataDao.getByUuid(split[1]) val tag = tagDataDao.getByUuid(split[1])
if (tag == null || isNullOrEmpty(tag.name)) null else TagFilter(tag) if (tag == null || isNullOrEmpty(tag.name)) null else TagFilter(tag)
} }
// TODO: convert filters from old ID to uuid TYPE_GOOGLE_TASKS, // TODO: convert filters from old ID to uuid?
TYPE_GOOGLE_TASKS -> caldavDao.getCalendarByUuid(split[1])?.let { GtasksFilter(it) } TYPE_CALDAV ->
TYPE_CALDAV -> caldavDao.getCalendarByUuid(split[1])?.let { CaldavFilter(it) } caldavDao.getCalendarByUuid(split[1])
?.let { CaldavFilter(it, caldavDao.getAccountByUuid(it.account!!)!!) }
TYPE_LOCATION -> locationDao.getPlace(split[1])?.let { PlaceFilter(it) } TYPE_LOCATION -> locationDao.getPlace(split[1])?.let { PlaceFilter(it) }
else -> null else -> null
} }
@ -120,7 +123,7 @@ class DefaultFilterProvider @Inject constructor(
TYPE_FILTER -> getFilterPreference(filterType, getBuiltInFilterId(filter)) TYPE_FILTER -> getFilterPreference(filterType, getBuiltInFilterId(filter))
TYPE_CUSTOM_FILTER -> getFilterPreference(filterType, (filter as CustomFilter).id) TYPE_CUSTOM_FILTER -> getFilterPreference(filterType, (filter as CustomFilter).id)
TYPE_TAG -> getFilterPreference(filterType, (filter as TagFilter).uuid) TYPE_TAG -> getFilterPreference(filterType, (filter as TagFilter).uuid)
TYPE_GOOGLE_TASKS -> getFilterPreference(filterType, (filter as GtasksFilter).remoteId) TYPE_GOOGLE_TASKS,
TYPE_CALDAV -> getFilterPreference(filterType, (filter as CaldavFilter).uuid) TYPE_CALDAV -> getFilterPreference(filterType, (filter as CaldavFilter).uuid)
TYPE_LOCATION -> getFilterPreference(filterType, (filter as PlaceFilter).uid) TYPE_LOCATION -> getFilterPreference(filterType, (filter as PlaceFilter).uid)
else -> null else -> null
@ -130,7 +133,6 @@ class DefaultFilterProvider @Inject constructor(
private fun getFilterType(filter: Filter) = when (filter) { private fun getFilterType(filter: Filter) = when (filter) {
is TagFilter -> TYPE_TAG is TagFilter -> TYPE_TAG
is GtasksFilter -> TYPE_GOOGLE_TASKS
is CustomFilter -> TYPE_CUSTOM_FILTER is CustomFilter -> TYPE_CUSTOM_FILTER
is CaldavFilter -> TYPE_CALDAV is CaldavFilter -> TYPE_CALDAV
is PlaceFilter -> TYPE_LOCATION is PlaceFilter -> TYPE_LOCATION
@ -162,24 +164,24 @@ class DefaultFilterProvider @Inject constructor(
val listId = task.getTransitory<String>(GoogleTask.KEY)!! val listId = task.getTransitory<String>(GoogleTask.KEY)!!
val googleTaskList = caldavDao.getCalendarByUuid(listId) val googleTaskList = caldavDao.getCalendarByUuid(listId)
if (googleTaskList != null) { if (googleTaskList != null) {
originalList = GtasksFilter(googleTaskList) val account = caldavDao.getAccountByUuid(googleTaskList.account!!)!!
originalList = CaldavFilter(calendar = googleTaskList, account = account)
} }
} else if (task.hasTransitory(CaldavTask.KEY)) { } else if (task.hasTransitory(CaldavTask.KEY)) {
val caldav = caldavDao.getCalendarByUuid(task.getTransitory(CaldavTask.KEY)!!) val caldav = caldavDao.getCalendarByUuid(task.getTransitory(CaldavTask.KEY)!!)
?.takeIf { it.access != ACCESS_READ_ONLY } ?.takeIf { it.access != ACCESS_READ_ONLY }
if (caldav != null) { if (caldav != null) {
originalList = CaldavFilter(caldav) val account = caldavDao.getAccountByUuid(caldav.account!!)!!
originalList = CaldavFilter(calendar = caldav, account = account)
} }
} }
} else { } else {
val caldavTask = caldavDao.getTask(task.id) val caldavTask = caldavDao.getTask(task.id)
val calendar = caldavTask?.calendar?.let { caldavDao.getCalendarByUuid(it) } val calendar = caldavTask?.calendar?.let { caldavDao.getCalendarByUuid(it) }
val account = calendar?.account?.let { caldavDao.getAccountByUuid(it) } originalList = calendar
originalList = when (account?.accountType) { ?.account
null -> null ?.let { caldavDao.getAccountByUuid(it) }
CaldavAccount.TYPE_GOOGLE_TASKS -> GtasksFilter(calendar) ?.let { CaldavFilter(calendar = calendar, account = it) }
else -> CaldavFilter(calendar)
}
} }
return originalList ?: getDefaultList() return originalList ?: getDefaultList()
} }
@ -196,7 +198,7 @@ class DefaultFilterProvider @Inject constructor(
private const val TYPE_FILTER = 0 private const val TYPE_FILTER = 0
private const val TYPE_CUSTOM_FILTER = 1 private const val TYPE_CUSTOM_FILTER = 1
private const val TYPE_TAG = 2 private const val TYPE_TAG = 2
const val TYPE_GOOGLE_TASKS = 3 @Deprecated("use TYPE_CALDAV") const val TYPE_GOOGLE_TASKS = 3
private const val TYPE_CALDAV = 4 private const val TYPE_CALDAV = 4
private const val TYPE_LOCATION = 5 private const val TYPE_LOCATION = 5
private const val FILTER_MY_TASKS = 0 private const val FILTER_MY_TASKS = 0

@ -39,7 +39,7 @@ class MicrosoftListSettingsActivity : BaseCaldavCalendarSettingsActivity() {
Activity.RESULT_OK, Activity.RESULT_OK,
Intent(TaskListFragment.ACTION_RELOAD).putExtra( Intent(TaskListFragment.ACTION_RELOAD).putExtra(
MainActivity.OPEN_FILTER, MainActivity.OPEN_FILTER,
CaldavFilter(it) CaldavFilter(it, viewModel.account)
) )
) )
finish() finish()

@ -32,7 +32,7 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor(
private val _viewState = MutableStateFlow(ViewState()) private val _viewState = MutableStateFlow(ViewState())
val viewState = _viewState.asStateFlow() val viewState = _viewState.asStateFlow()
private val account: CaldavAccount = val account: CaldavAccount =
savedStateHandle[BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT]!! savedStateHandle[BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT]!!
val list: CaldavCalendar? = val list: CaldavCalendar? =

@ -32,7 +32,6 @@ import org.tasks.dialogs.Linkify
import org.tasks.extensions.Context.is24HourFormat import org.tasks.extensions.Context.is24HourFormat
import org.tasks.filters.CaldavFilter import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.GtasksFilter
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.filters.TagFilter import org.tasks.filters.TagFilter
import org.tasks.kmp.org.tasks.time.getRelativeDateTime import org.tasks.kmp.org.tasks.time.getRelativeDateTime
@ -250,7 +249,6 @@ class TaskViewHolder internal constructor(
val list = task.caldav val list = task.caldav
val tagsString = task.tagsString val tagsString = task.tagsString
val isSubtask = task.hasParent() val isSubtask = task.hasParent()
val isGoogleTask = task.isGoogleTask
val appearance = preferences.getIntegerFromString(R.string.p_chip_appearance, 0) val appearance = preferences.getIntegerFromString(R.string.p_chip_appearance, 0)
val showText = appearance != 2 val showText = appearance != 2
val showIcon = appearance != 1 val showIcon = appearance != 1
@ -296,13 +294,10 @@ class TaskViewHolder internal constructor(
!isSubtask && !isSubtask &&
!sortByList && !sortByList &&
preferences.showListChip && preferences.showListChip &&
filter !is CaldavFilter && filter !is CaldavFilter
filter !is GtasksFilter
) { ) {
remember(list, isGoogleTask) { remember(list) {
chipProvider.lists chipProvider.lists.getCaldavList(list)
.getCaldavList(list)
?.let { if (isGoogleTask) GtasksFilter(it) else CaldavFilter(it) }
}?.let { }?.let {
FilterChip( FilterChip(
filter = it, filter = it,

@ -1,14 +1,20 @@
package org.tasks.ui package org.tasks.ui
import org.tasks.filters.TagFilter import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.TagData import org.tasks.data.entity.TagData
import org.tasks.filters.CaldavFilter
import org.tasks.filters.TagFilter
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@ -16,15 +22,25 @@ import javax.inject.Singleton
class ChipListCache @Inject internal constructor( class ChipListCache @Inject internal constructor(
caldavDao: CaldavDao, caldavDao: CaldavDao,
tagDataDao: TagDataDao, tagDataDao: TagDataDao,
private val localBroadcastManager: LocalBroadcastManager) { private val localBroadcastManager: LocalBroadcastManager,
) {
private val caldavCalendars: MutableMap<String?, CaldavCalendar> = HashMap() private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
private val lists: MutableMap<String?, CaldavFilter> = HashMap()
private val tagDatas: MutableMap<String?, TagFilter> = HashMap() private val tagDatas: MutableMap<String?, TagFilter> = HashMap()
private fun updateCaldavCalendars(updated: List<CaldavCalendar>) { private fun updateCaldavCalendars(
caldavCalendars.clear() accounts: List<CaldavAccount>,
for (update in updated) { calendars: List<CaldavCalendar>
caldavCalendars[update.uuid] = update ) {
} Timber.d("Updating lists")
calendars
.mapNotNull { list ->
val account = accounts.find { it.uuid == list.account } ?: return@mapNotNull null
CaldavFilter(calendar = list, account = account)
}
.let {
lists.clear()
it.associateByTo(lists) { filter -> filter.uuid }
}
localBroadcastManager.broadcastRefresh() localBroadcastManager.broadcastRefresh()
} }
@ -36,12 +52,17 @@ class ChipListCache @Inject internal constructor(
localBroadcastManager.broadcastRefresh() localBroadcastManager.broadcastRefresh()
} }
fun getCaldavList(caldav: String?): CaldavCalendar? = caldavCalendars[caldav] fun getCaldavList(caldav: String?): CaldavFilter? = lists[caldav]
fun getTag(tag: String?): TagFilter? = tagDatas[tag] fun getTag(tag: String?): TagFilter? = tagDatas[tag]
init { init {
caldavDao.subscribeToCalendars().onEach { updateCaldavCalendars(it) }.launchIn(GlobalScope) caldavDao
tagDataDao.subscribeToTags().onEach { updateTags(it) }.launchIn(GlobalScope) .watchAccounts()
.combine(caldavDao.subscribeToCalendars()) { accounts, calendars ->
updateCaldavCalendars(accounts, calendars)
}
.launchIn(scope)
tagDataDao.subscribeToTags().onEach { updateTags(it) }.launchIn(scope)
} }
} }

@ -59,8 +59,6 @@ import org.tasks.data.setPicture
import org.tasks.date.DateTimeUtils.toDateTime import org.tasks.date.DateTimeUtils.toDateTime
import org.tasks.files.FileHelper import org.tasks.files.FileHelper
import org.tasks.filters.CaldavFilter import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter
import org.tasks.filters.GtasksFilter
import org.tasks.location.GeofenceApi import org.tasks.location.GeofenceApi
import org.tasks.preferences.PermissionChecker import org.tasks.preferences.PermissionChecker
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -163,7 +161,7 @@ class TaskEditViewModel @Inject constructor(
} }
var selectedCalendar = MutableStateFlow(originalCalendar) var selectedCalendar = MutableStateFlow(originalCalendar)
val originalList: Filter = savedStateHandle[TaskEditFragment.EXTRA_LIST]!! val originalList: CaldavFilter = savedStateHandle[TaskEditFragment.EXTRA_LIST]!!
var selectedList = MutableStateFlow(originalList) var selectedList = MutableStateFlow(originalList)
private var originalLocation: Location? = savedStateHandle[TaskEditFragment.EXTRA_LOCATION] private var originalLocation: Location? = savedStateHandle[TaskEditFragment.EXTRA_LOCATION]
@ -346,11 +344,12 @@ class TaskEditViewModel @Inject constructor(
taskDao.createNew(subtask) taskDao.createNew(subtask)
alarmDao.insert(subtask.getDefaultAlarms()) alarmDao.insert(subtask.getDefaultAlarms())
firebase?.addTask("subtasks") firebase?.addTask("subtasks")
when (val filter = selectedList.value) { val filter = selectedList.value
is GtasksFilter -> { when {
filter.isGoogleTasks -> {
val googleTask = CaldavTask( val googleTask = CaldavTask(
task = subtask.id, task = subtask.id,
calendar = filter.remoteId, calendar = filter.uuid,
remoteId = null, remoteId = null,
) )
subtask.parent = task.id subtask.parent = task.id
@ -361,7 +360,7 @@ class TaskEditViewModel @Inject constructor(
top = if (isNew) false else preferences.addTasksToTop() top = if (isNew) false else preferences.addTasksToTop()
) )
} }
is CaldavFilter -> { else -> {
val caldavTask = CaldavTask( val caldavTask = CaldavTask(
task = subtask.id, task = subtask.id,
calendar = filter.uuid, calendar = filter.uuid,
@ -375,10 +374,6 @@ class TaskEditViewModel @Inject constructor(
addToTop = if (isNew) false else preferences.addTasksToTop() addToTop = if (isNew) false else preferences.addTasksToTop()
) )
} }
else -> {
subtask.parent = task.id
taskDao.save(subtask)
}
} }
} }

@ -16,7 +16,6 @@ import org.tasks.extensions.Context.is24HourFormat
import org.tasks.extensions.setColorFilter import org.tasks.extensions.setColorFilter
import org.tasks.filters.CaldavFilter import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.filters.GtasksFilter
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.filters.TagFilter import org.tasks.filters.TagFilter
import org.tasks.filters.getIcon import org.tasks.filters.getIcon
@ -79,15 +78,18 @@ class WidgetChipProvider @Inject constructor(
} }
fun getListChip(filter: Filter, task: TaskContainer): RemoteViews? { fun getListChip(filter: Filter, task: TaskContainer): RemoteViews? {
return task.caldav return if (filter is CaldavFilter) {
?.takeIf { filter !is CaldavFilter && filter !is GtasksFilter } null
} else {
task.caldav
?.let { chipListCache.getCaldavList(it) } ?.let { chipListCache.getCaldavList(it) }
?.let { ?.let {
newChip( newChip(
filter = if (task.isGoogleTask) GtasksFilter(it) else CaldavFilter(it), filter = it,
defaultIcon = R.drawable.ic_list_24px defaultIcon = R.drawable.ic_list_24px
) )
} }
}
} }
fun getPlaceChip(filter: Filter, task: TaskContainer): RemoteViews? { fun getPlaceChip(filter: Filter, task: TaskContainer): RemoteViews? {

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_gtasks_list_settings"
android:title="@string/list_settings"
app:showAsAction="never"/>
</menu>

@ -567,7 +567,6 @@
<string name="persistent_notifications_description">الإشعارات المستمرة لا يمكن محوها</string> <string name="persistent_notifications_description">الإشعارات المستمرة لا يمكن محوها</string>
<string name="rmd_EPr_rmd_time_desc">اشعارات لمهام بدون وقت استحقاق ستظهر عند %s</string> <string name="rmd_EPr_rmd_time_desc">اشعارات لمهام بدون وقت استحقاق ستظهر عند %s</string>
<string name="gtasks_GLA_authenticating">قيد المصادقة…</string> <string name="gtasks_GLA_authenticating">قيد المصادقة…</string>
<string name="CFC_gtasks_list_name">في قوائم مهام كوكل…</string>
<string name="no_due_date">بدون تاريخ استحقاق</string> <string name="no_due_date">بدون تاريخ استحقاق</string>
<string name="EPr_default_location_reminder_title">مذكرات الموقع الافتراضية</string> <string name="EPr_default_location_reminder_title">مذكرات الموقع الافتراضية</string>
<string name="default_due_date">وقت الاستحقاق الافتراضي</string> <string name="default_due_date">وقت الاستحقاق الافتراضي</string>

@ -108,7 +108,6 @@
<string name="calendar_event_not_found">Събитието от календара не е намерено</string> <string name="calendar_event_not_found">Събитието от календара не е намерено</string>
<string name="gcal_completed_title">%s (завършено)</string> <string name="gcal_completed_title">%s (завършено)</string>
<string name="CFC_gtasks_list_text">В списъка: \?</string> <string name="CFC_gtasks_list_text">В списъка: \?</string>
<string name="CFC_gtasks_list_name">В списъка GTasks…</string>
<string name="gtasks_GTA_clear_completed">Изчистване на завършените</string> <string name="gtasks_GTA_clear_completed">Изчистване на завършените</string>
<string name="gtasks_GLA_authenticating">Удостоверяване…</string> <string name="gtasks_GLA_authenticating">Удостоверяване…</string>
<string name="gtasks_GLA_errorIOAuth">Има проблем с връзката до сървърите на Google. Опитайте отново по-късно.</string> <string name="gtasks_GLA_errorIOAuth">Има проблем с връзката до сървърите на Google. Опитайте отново по-късно.</string>

@ -151,7 +151,6 @@
<string name="no_reminders">Sense recordatoris</string> <string name="no_reminders">Sense recordatoris</string>
<string name="default_location_reminder_on_departure">A la sortida</string> <string name="default_location_reminder_on_departure">A la sortida</string>
<string name="default_location_reminder_on_arrival_or_departure">A larribada i sortida</string> <string name="default_location_reminder_on_arrival_or_departure">A larribada i sortida</string>
<string name="CFC_gtasks_list_name">A la llista GTasks…</string>
<string name="repeat_option_does_not_repeat">No es repeteix</string> <string name="repeat_option_does_not_repeat">No es repeteix</string>
<string name="repeat_option_every_day">Cada dia</string> <string name="repeat_option_every_day">Cada dia</string>
<string name="filter_any_start_date">Qualsevol data d\'inici</string> <string name="filter_any_start_date">Qualsevol data d\'inici</string>

@ -88,7 +88,6 @@
<string name="gcal_TEA_showCalendar_label">Otevřít událost v kalendáři</string> <string name="gcal_TEA_showCalendar_label">Otevřít událost v kalendáři</string>
<string name="gcal_completed_title">%s (dokončeno)</string> <string name="gcal_completed_title">%s (dokončeno)</string>
<string name="CFC_gtasks_list_text">V seznamu: ?</string> <string name="CFC_gtasks_list_text">V seznamu: ?</string>
<string name="CFC_gtasks_list_name">V seznamu Google úkolů…</string>
<string name="gtasks_GTA_clear_completed">Smazat dokončené</string> <string name="gtasks_GTA_clear_completed">Smazat dokončené</string>
<string name="gtasks_GLA_authenticating">Ověřuje se…</string> <string name="gtasks_GLA_authenticating">Ověřuje se…</string>
<string name="gtasks_GLA_errorIOAuth">Nastal problém při komunikaci se servery Google. Zkuste to prosím později.</string> <string name="gtasks_GLA_errorIOAuth">Nastal problém při komunikaci se servery Google. Zkuste to prosím později.</string>

@ -79,7 +79,6 @@
<string name="quiet_hours">Hviletid</string> <string name="quiet_hours">Hviletid</string>
<string name="widget_show_header">Vis topbjælke</string> <string name="widget_show_header">Vis topbjælke</string>
<string name="voice_command_added_task">Tilføjede en opgave</string> <string name="voice_command_added_task">Tilføjede en opgave</string>
<string name="CFC_gtasks_list_name">På Google Huskelisten…</string>
<string name="gtasks_error_accountNotFound">Konto %s ikke fundet. Log venligst ud og log ind igen fra Google Huskeliste-indstillingerne.</string> <string name="gtasks_error_accountNotFound">Konto %s ikke fundet. Log venligst ud og log ind igen fra Google Huskeliste-indstillingerne.</string>
<string name="EPr_show_task_edit_comments">Vis kommentarer i opgaveredigering</string> <string name="EPr_show_task_edit_comments">Vis kommentarer i opgaveredigering</string>
<string name="EPr_fullTask_title">Vis hele opgavetitlen</string> <string name="EPr_fullTask_title">Vis hele opgavetitlen</string>

@ -102,7 +102,6 @@
<string name="calendar_event_not_found">Kalendereintrag nicht gefunden</string> <string name="calendar_event_not_found">Kalendereintrag nicht gefunden</string>
<string name="gcal_completed_title">%s (abgeschlossen)</string> <string name="gcal_completed_title">%s (abgeschlossen)</string>
<string name="CFC_gtasks_list_text">In der Liste: ?</string> <string name="CFC_gtasks_list_text">In der Liste: ?</string>
<string name="CFC_gtasks_list_name">In GTasks-Liste …</string>
<string name="gtasks_GTA_clear_completed">Erledigte Aufgaben entfernen</string> <string name="gtasks_GTA_clear_completed">Erledigte Aufgaben entfernen</string>
<string name="gtasks_GLA_authenticating">Authentifizierung…</string> <string name="gtasks_GLA_authenticating">Authentifizierung…</string>
<string name="gtasks_GLA_errorIOAuth">Leider ist während der Kommunikation mit den Google-Servern ein Problem aufgetreten. Bitte versuchen Sie es später noch einmal.</string> <string name="gtasks_GLA_errorIOAuth">Leider ist während der Kommunikation mit den Google-Servern ein Problem aufgetreten. Bitte versuchen Sie es später noch einmal.</string>

@ -81,7 +81,6 @@
<string name="gcal_TEA_showCalendar_label">Άνοιγμα event ημερολογίου</string> <string name="gcal_TEA_showCalendar_label">Άνοιγμα event ημερολογίου</string>
<string name="gcal_completed_title">%s (έχει ολοκληρωθεί)</string> <string name="gcal_completed_title">%s (έχει ολοκληρωθεί)</string>
<string name="CFC_gtasks_list_text">Στην λίστα: ?</string> <string name="CFC_gtasks_list_text">Στην λίστα: ?</string>
<string name="CFC_gtasks_list_name">Στην λίστα του GTasks…</string>
<string name="gtasks_GTA_clear_completed">Καθαρισμός ολοκληρωμένων</string> <string name="gtasks_GTA_clear_completed">Καθαρισμός ολοκληρωμένων</string>
<string name="gtasks_GLA_authenticating">Αυθεντικοποίηση…</string> <string name="gtasks_GLA_authenticating">Αυθεντικοποίηση…</string>
<string name="gtasks_GLA_errorIOAuth">Συγγνώμη, υπήρξε σφάλμα επικοινωνίας με τους διακομιστές της Google. Παρακαλουμε δοκιμάστε πάλι μετά.</string> <string name="gtasks_GLA_errorIOAuth">Συγγνώμη, υπήρξε σφάλμα επικοινωνίας με τους διακομιστές της Google. Παρακαλουμε δοκιμάστε πάλι μετά.</string>

@ -132,7 +132,6 @@
<string name="rmd_EPr_defaultRemind_title">Hazardaj memorigiloj</string> <string name="rmd_EPr_defaultRemind_title">Hazardaj memorigiloj</string>
<string name="rmd_EPr_rmd_time_title">Memorigo-tempo</string> <string name="rmd_EPr_rmd_time_title">Memorigo-tempo</string>
<string name="CFC_list_name">En listo…</string> <string name="CFC_list_name">En listo…</string>
<string name="CFC_gtasks_list_name">En GTasks Listo…</string>
<string name="CFC_gtasks_list_text">En Listo: \?</string> <string name="CFC_gtasks_list_text">En Listo: \?</string>
<string name="calendar_event_not_found">Kalendara evento ne trovita</string> <string name="calendar_event_not_found">Kalendara evento ne trovita</string>
<string name="gcal_TEA_showCalendar_label">Malfermi Kalendara Evento</string> <string name="gcal_TEA_showCalendar_label">Malfermi Kalendara Evento</string>

@ -107,7 +107,6 @@
<string name="calendar_event_not_found">Evento de calendario no encontrado</string> <string name="calendar_event_not_found">Evento de calendario no encontrado</string>
<string name="gcal_completed_title">%s (completado)</string> <string name="gcal_completed_title">%s (completado)</string>
<string name="CFC_gtasks_list_text">En la Lista: ?</string> <string name="CFC_gtasks_list_text">En la Lista: ?</string>
<string name="CFC_gtasks_list_name">en la Lista GTasks…</string>
<string name="gtasks_GTA_clear_completed">Quitar finalizadas</string> <string name="gtasks_GTA_clear_completed">Quitar finalizadas</string>
<string name="gtasks_GLA_authenticating">Autenticando…</string> <string name="gtasks_GLA_authenticating">Autenticando…</string>
<string name="gtasks_GLA_errorIOAuth">Perdón, hubo un problema al comunicarse con los servidores de Google. Por favor inténtalo mas tarde.</string> <string name="gtasks_GLA_errorIOAuth">Perdón, hubo un problema al comunicarse con los servidores de Google. Por favor inténtalo mas tarde.</string>

@ -90,7 +90,6 @@
<string name="calendar_event_not_found">Kalendri sündmust ei leitud</string> <string name="calendar_event_not_found">Kalendri sündmust ei leitud</string>
<string name="gcal_completed_title">%s (valmis)</string> <string name="gcal_completed_title">%s (valmis)</string>
<string name="CFC_gtasks_list_text">Nimekirjas: \?</string> <string name="CFC_gtasks_list_text">Nimekirjas: \?</string>
<string name="CFC_gtasks_list_name">GTasks nimekirjas…</string>
<string name="gtasks_GTA_clear_completed">Eemalda lõpetatud</string> <string name="gtasks_GTA_clear_completed">Eemalda lõpetatud</string>
<string name="gtasks_GLA_authenticating">Autentimine…</string> <string name="gtasks_GLA_authenticating">Autentimine…</string>
<string name="gtasks_GPr_header">Google Tasks</string> <string name="gtasks_GPr_header">Google Tasks</string>

@ -108,7 +108,6 @@
<string name="calendar_event_not_found">Ez da egutegiko gertaera aurkitu</string> <string name="calendar_event_not_found">Ez da egutegiko gertaera aurkitu</string>
<string name="gcal_completed_title">%s (burututa)</string> <string name="gcal_completed_title">%s (burututa)</string>
<string name="CFC_gtasks_list_text">Zerrendan: \?</string> <string name="CFC_gtasks_list_text">Zerrendan: \?</string>
<string name="CFC_gtasks_list_name">GTasks zerrendan…</string>
<string name="gtasks_GTA_clear_completed">Kendu burututakoak</string> <string name="gtasks_GTA_clear_completed">Kendu burututakoak</string>
<string name="gtasks_GLA_authenticating">Autentifikatzen…</string> <string name="gtasks_GLA_authenticating">Autentifikatzen…</string>
<string name="gtasks_GLA_errorIOAuth">Google zerbitzariekin komunikatzeko arazo bat izan dugu. Saiatu geroago.</string> <string name="gtasks_GLA_errorIOAuth">Google zerbitzariekin komunikatzeko arazo bat izan dugu. Saiatu geroago.</string>

@ -95,7 +95,6 @@
<string name="calendar_event_not_found">Kalenteritapahtumaa ei löydy</string> <string name="calendar_event_not_found">Kalenteritapahtumaa ei löydy</string>
<string name="gcal_completed_title">%s (valmistunut)</string> <string name="gcal_completed_title">%s (valmistunut)</string>
<string name="CFC_gtasks_list_text">Listalla: ?</string> <string name="CFC_gtasks_list_text">Listalla: ?</string>
<string name="CFC_gtasks_list_name">Gtask lista…</string>
<string name="gtasks_GTA_clear_completed">Poista valmiit</string> <string name="gtasks_GTA_clear_completed">Poista valmiit</string>
<string name="gtasks_GLA_authenticating">Todennetaan…</string> <string name="gtasks_GLA_authenticating">Todennetaan…</string>
<string name="gtasks_GLA_errorIOAuth">Valitettavasti meillä on yhteysongelmia Google palvelimiin. Ole hyvä ja yritä myöhemmin uudestaa.</string> <string name="gtasks_GLA_errorIOAuth">Valitettavasti meillä on yhteysongelmia Google palvelimiin. Ole hyvä ja yritä myöhemmin uudestaa.</string>

@ -105,7 +105,6 @@
<string name="calendar_event_not_found">Évènement de calendrier introuvable</string> <string name="calendar_event_not_found">Évènement de calendrier introuvable</string>
<string name="gcal_completed_title">%s (complété)</string> <string name="gcal_completed_title">%s (complété)</string>
<string name="CFC_gtasks_list_text">Dans la liste : \?</string> <string name="CFC_gtasks_list_text">Dans la liste : \?</string>
<string name="CFC_gtasks_list_name">Dans la liste GTasks…</string>
<string name="gtasks_GTA_clear_completed">Effacer les tâches terminées</string> <string name="gtasks_GTA_clear_completed">Effacer les tâches terminées</string>
<string name="gtasks_GLA_authenticating">Authentification en cours…</string> <string name="gtasks_GLA_authenticating">Authentification en cours…</string>
<string name="gtasks_GLA_errorIOAuth">Désolé, une erreur de communication avec les serveurs de Google s\'est produite. Veuillez réessayer ultérieurement.</string> <string name="gtasks_GLA_errorIOAuth">Désolé, une erreur de communication avec les serveurs de Google s\'est produite. Veuillez réessayer ultérieurement.</string>

@ -104,7 +104,6 @@
<string name="calendar_event_not_found">Evento de calendario non atopado</string> <string name="calendar_event_not_found">Evento de calendario non atopado</string>
<string name="gcal_completed_title">%s (finalizado)</string> <string name="gcal_completed_title">%s (finalizado)</string>
<string name="CFC_gtasks_list_text">Na lista: \?</string> <string name="CFC_gtasks_list_text">Na lista: \?</string>
<string name="CFC_gtasks_list_name">Na lista GTasks…</string>
<string name="gtasks_GTA_clear_completed">Limpar as finalizadas</string> <string name="gtasks_GTA_clear_completed">Limpar as finalizadas</string>
<string name="gtasks_GLA_authenticating">Autenticando…</string> <string name="gtasks_GLA_authenticating">Autenticando…</string>
<string name="gtasks_GLA_errorIOAuth">Houbo un problema ao comunicarse cos servidores de Google. Inténtao máis tarde.</string> <string name="gtasks_GLA_errorIOAuth">Houbo un problema ao comunicarse cos servidores de Google. Inténtao máis tarde.</string>

@ -443,7 +443,6 @@
<string name="gtasks_GLA_authenticating">Autentifikacija …</string> <string name="gtasks_GLA_authenticating">Autentifikacija …</string>
<string name="gtasks_GTA_clear_completed">Izbriši obavljene</string> <string name="gtasks_GTA_clear_completed">Izbriši obavljene</string>
<string name="CFC_list_name">U popisu …</string> <string name="CFC_list_name">U popisu …</string>
<string name="CFC_gtasks_list_name">U GTasks popisu …</string>
<string name="CFC_gtasks_list_text">U popisu: \?</string> <string name="CFC_gtasks_list_text">U popisu: \?</string>
<string name="gcal_completed_title">%s (obavljeno)</string> <string name="gcal_completed_title">%s (obavljeno)</string>
<string name="calendar_event_not_found">Kalendarski događaj nije pronađen</string> <string name="calendar_event_not_found">Kalendarski događaj nije pronađen</string>

@ -103,7 +103,6 @@
<string name="calendar_event_not_found">Naptáresemény nem található</string> <string name="calendar_event_not_found">Naptáresemény nem található</string>
<string name="gcal_completed_title">%s (befejezve)</string> <string name="gcal_completed_title">%s (befejezve)</string>
<string name="CFC_gtasks_list_text">Listában: ?</string> <string name="CFC_gtasks_list_text">Listában: ?</string>
<string name="CFC_gtasks_list_name">Ebben a GTasks listában…</string>
<string name="gtasks_GTA_clear_completed">Elvégzettek törlése</string> <string name="gtasks_GTA_clear_completed">Elvégzettek törlése</string>
<string name="gtasks_GLA_authenticating">Azonosítás…</string> <string name="gtasks_GLA_authenticating">Azonosítás…</string>
<string name="gtasks_GLA_errorIOAuth">Sajnáljuk, de hiba történt a Google szervereivel való kommunikálás során. Próbáld újra később.</string> <string name="gtasks_GLA_errorIOAuth">Sajnáljuk, de hiba történt a Google szervereivel való kommunikálás során. Próbáld újra később.</string>

@ -78,7 +78,6 @@
<string name="calendar_event_not_found">Acara kalender tidak ditemukan</string> <string name="calendar_event_not_found">Acara kalender tidak ditemukan</string>
<string name="gcal_completed_title">%s (selesai)</string> <string name="gcal_completed_title">%s (selesai)</string>
<string name="CFC_gtasks_list_text">Dalam Daftar: \?</string> <string name="CFC_gtasks_list_text">Dalam Daftar: \?</string>
<string name="CFC_gtasks_list_name">Dalam Daftar GTasks…</string>
<string name="gtasks_GLA_authenticating">Mengotentikasi…</string> <string name="gtasks_GLA_authenticating">Mengotentikasi…</string>
<string name="gtasks_GLA_errorIOAuth">Maaf, terjadi kesalahan komunikasi dengan server Google. Silakan coba lagi nanti.</string> <string name="gtasks_GLA_errorIOAuth">Maaf, terjadi kesalahan komunikasi dengan server Google. Silakan coba lagi nanti.</string>
<string name="gtasks_GPr_header">Google Tasks</string> <string name="gtasks_GPr_header">Google Tasks</string>

@ -103,7 +103,6 @@
<string name="calendar_event_not_found">Evento non trovato</string> <string name="calendar_event_not_found">Evento non trovato</string>
<string name="gcal_completed_title">%s (completato)</string> <string name="gcal_completed_title">%s (completato)</string>
<string name="CFC_gtasks_list_text">Nella lista: ?</string> <string name="CFC_gtasks_list_text">Nella lista: ?</string>
<string name="CFC_gtasks_list_name">Nella lista GTasks…</string>
<string name="gtasks_GTA_clear_completed">Elimina attività completate</string> <string name="gtasks_GTA_clear_completed">Elimina attività completate</string>
<string name="gtasks_GLA_authenticating">Autenticazione…</string> <string name="gtasks_GLA_authenticating">Autenticazione…</string>
<string name="gtasks_GLA_errorIOAuth">Ci scusiamo per il disagio, abbiamo dei problemi a comunicare con i server di Google. Per favore riprovare più tardi.</string> <string name="gtasks_GLA_errorIOAuth">Ci scusiamo per il disagio, abbiamo dei problemi a comunicare con i server di Google. Per favore riprovare più tardi.</string>

@ -108,7 +108,6 @@
<string name="calendar_event_not_found">אירוע לא נמצא</string> <string name="calendar_event_not_found">אירוע לא נמצא</string>
<string name="gcal_completed_title">%s (בוצעה)</string> <string name="gcal_completed_title">%s (בוצעה)</string>
<string name="CFC_gtasks_list_text">ברשימה: ?</string> <string name="CFC_gtasks_list_text">ברשימה: ?</string>
<string name="CFC_gtasks_list_name">ברשימה של „משימות גוגל”…</string>
<string name="gtasks_GTA_clear_completed">נקה משימות שבוצעו</string> <string name="gtasks_GTA_clear_completed">נקה משימות שבוצעו</string>
<string name="gtasks_GLA_authenticating">מתבצע אימות…</string> <string name="gtasks_GLA_authenticating">מתבצע אימות…</string>
<string name="gtasks_GLA_errorIOAuth">בעיה בהתחברות לשרתי גוגל. נא נסה שוב מאוחר יותר.</string> <string name="gtasks_GLA_errorIOAuth">בעיה בהתחברות לשרתי גוגל. נא נסה שוב מאוחר יותר.</string>

@ -113,7 +113,6 @@
<string name="calendar_event_not_found">カレンダーイベントが見つかりません</string> <string name="calendar_event_not_found">カレンダーイベントが見つかりません</string>
<string name="gcal_completed_title">%s (完了)</string> <string name="gcal_completed_title">%s (完了)</string>
<string name="CFC_gtasks_list_text">リストに含む: \?</string> <string name="CFC_gtasks_list_text">リストに含む: \?</string>
<string name="CFC_gtasks_list_name">GTasks リストに…</string>
<string name="gtasks_GTA_clear_completed">完了したタスクをクリア</string> <string name="gtasks_GTA_clear_completed">完了したタスクをクリア</string>
<string name="gtasks_GLA_authenticating">認証中…</string> <string name="gtasks_GLA_authenticating">認証中…</string>
<string name="gtasks_GLA_errorIOAuth">すみません、Google のサーバーとの通信で問題が発生しました。しばらくしてからもう一度お試しください。</string> <string name="gtasks_GLA_errorIOAuth">すみません、Google のサーバーとの通信で問題が発生しました。しばらくしてからもう一度お試しください。</string>

@ -103,7 +103,6 @@
<string name="calendar_event_not_found">달력 일정이 발견되지 않음</string> <string name="calendar_event_not_found">달력 일정이 발견되지 않음</string>
<string name="gcal_completed_title">%s (완료)</string> <string name="gcal_completed_title">%s (완료)</string>
<string name="CFC_gtasks_list_text">목록에: ?</string> <string name="CFC_gtasks_list_text">목록에: ?</string>
<string name="CFC_gtasks_list_name">GTasks 목록에…</string>
<string name="gtasks_GTA_clear_completed">완료한 할일 지우기</string> <string name="gtasks_GTA_clear_completed">완료한 할일 지우기</string>
<string name="gtasks_GLA_authenticating">인증 중…</string> <string name="gtasks_GLA_authenticating">인증 중…</string>
<string name="gtasks_GLA_errorIOAuth">죄송합니다, 구글 서버와 통신하는 데 문제가 있습니다. 잠시 후 다시 시도하세요.</string> <string name="gtasks_GLA_errorIOAuth">죄송합니다, 구글 서버와 통신하는 데 문제가 있습니다. 잠시 후 다시 시도하세요.</string>

@ -113,7 +113,6 @@
<string name="calendar_event_not_found">Kalendoriaus įvykis nerastas</string> <string name="calendar_event_not_found">Kalendoriaus įvykis nerastas</string>
<string name="gcal_completed_title">%s (užbaigta)</string> <string name="gcal_completed_title">%s (užbaigta)</string>
<string name="CFC_gtasks_list_text">Yra sąraše ?</string> <string name="CFC_gtasks_list_text">Yra sąraše ?</string>
<string name="CFC_gtasks_list_name">Yra GTasks sąraše…</string>
<string name="gtasks_GTA_clear_completed">Išvalyti užbaigtas</string> <string name="gtasks_GTA_clear_completed">Išvalyti užbaigtas</string>
<string name="gtasks_GLA_authenticating">Autorizuojama…</string> <string name="gtasks_GLA_authenticating">Autorizuojama…</string>
<string name="gtasks_GLA_errorIOAuth">Atsiprašome, turime bėdų susisiekiant su Google serveriais. Prašome pabandyti vėliau.</string> <string name="gtasks_GLA_errorIOAuth">Atsiprašome, turime bėdų susisiekiant su Google serveriais. Prašome pabandyti vėliau.</string>

@ -198,7 +198,6 @@
<string name="CFC_tag_contains_name">Etikettnavn inneholder…</string> <string name="CFC_tag_contains_name">Etikettnavn inneholder…</string>
<string name="CFC_tag_contains_text">Etikettnavn inneholder: \?</string> <string name="CFC_tag_contains_text">Etikettnavn inneholder: \?</string>
<string name="calendar_event_not_found">Fant ikke kalenderhendelsen</string> <string name="calendar_event_not_found">Fant ikke kalenderhendelsen</string>
<string name="CFC_gtasks_list_name">I GTasks-listen…</string>
<string name="gtasks_GLA_authenticating">Identitetsbekrefter…</string> <string name="gtasks_GLA_authenticating">Identitetsbekrefter…</string>
<string name="gtasks_GPr_header">Google Tasks</string> <string name="gtasks_GPr_header">Google Tasks</string>
<string name="gtasks_error_accountNotFound">Kontoen %s ble ikke funnet. Logg ut og inn igjen fra Google Tasks-innstillingene.</string> <string name="gtasks_error_accountNotFound">Kontoen %s ble ikke funnet. Logg ut og inn igjen fra Google Tasks-innstillingene.</string>

@ -102,7 +102,6 @@
<string name="calendar_event_not_found">Kalender-item niet gevonden</string> <string name="calendar_event_not_found">Kalender-item niet gevonden</string>
<string name="gcal_completed_title">%s (voltooid)</string> <string name="gcal_completed_title">%s (voltooid)</string>
<string name="CFC_gtasks_list_text">In de lijst: \?</string> <string name="CFC_gtasks_list_text">In de lijst: \?</string>
<string name="CFC_gtasks_list_name">In de GTasks lijst…</string>
<string name="gtasks_GTA_clear_completed">Voltooide taken wissen</string> <string name="gtasks_GTA_clear_completed">Voltooide taken wissen</string>
<string name="gtasks_GLA_authenticating">Verifiëren…</string> <string name="gtasks_GLA_authenticating">Verifiëren…</string>
<string name="gtasks_GLA_errorIOAuth">Sorry, er zijn problemen met de communicatie met Google-servers. Probeer het later nog eens.</string> <string name="gtasks_GLA_errorIOAuth">Sorry, er zijn problemen met de communicatie met Google-servers. Probeer het later nog eens.</string>

@ -102,7 +102,6 @@
<string name="calendar_event_not_found">Zdarzenie kalendarza nie odnazlezione</string> <string name="calendar_event_not_found">Zdarzenie kalendarza nie odnazlezione</string>
<string name="gcal_completed_title">%s (ukończono)</string> <string name="gcal_completed_title">%s (ukończono)</string>
<string name="CFC_gtasks_list_text">Na liście: ?</string> <string name="CFC_gtasks_list_text">Na liście: ?</string>
<string name="CFC_gtasks_list_name">Na liście GTasks…</string>
<string name="gtasks_GTA_clear_completed">Wyczyść zakończone</string> <string name="gtasks_GTA_clear_completed">Wyczyść zakończone</string>
<string name="gtasks_GLA_authenticating">Uwierzytelnianie…</string> <string name="gtasks_GLA_authenticating">Uwierzytelnianie…</string>
<string name="gtasks_GLA_errorIOAuth">Przepraszamy, mieliśmy problem z porozumieniem się z serwerami Google. Prosimy spróbować ponownie.</string> <string name="gtasks_GLA_errorIOAuth">Przepraszamy, mieliśmy problem z porozumieniem się z serwerami Google. Prosimy spróbować ponownie.</string>

@ -100,7 +100,6 @@
<string name="calendar_event_not_found">Evento no calendário não encontrado</string> <string name="calendar_event_not_found">Evento no calendário não encontrado</string>
<string name="gcal_completed_title">%s (concluída)</string> <string name="gcal_completed_title">%s (concluída)</string>
<string name="CFC_gtasks_list_text">Na lista: ?</string> <string name="CFC_gtasks_list_text">Na lista: ?</string>
<string name="CFC_gtasks_list_name">No Google Tarefas…</string>
<string name="gtasks_GTA_clear_completed">Limpar tarefas concluídas</string> <string name="gtasks_GTA_clear_completed">Limpar tarefas concluídas</string>
<string name="gtasks_GLA_authenticating">Autenticando…</string> <string name="gtasks_GLA_authenticating">Autenticando…</string>
<string name="gtasks_GLA_errorIOAuth">Lamentamos, mas tivemos problemas na comunicação com os servidores do Google. Por favor, tente novamente mais tarde.</string> <string name="gtasks_GLA_errorIOAuth">Lamentamos, mas tivemos problemas na comunicação com os servidores do Google. Por favor, tente novamente mais tarde.</string>

@ -98,7 +98,6 @@
<string name="calendar_event_not_found">Não foi encontrado o evento no calendário</string> <string name="calendar_event_not_found">Não foi encontrado o evento no calendário</string>
<string name="gcal_completed_title">%s (terminada)</string> <string name="gcal_completed_title">%s (terminada)</string>
<string name="CFC_gtasks_list_text">Na lista: ?</string> <string name="CFC_gtasks_list_text">Na lista: ?</string>
<string name="CFC_gtasks_list_name">Na lista da GTasks…</string>
<string name="gtasks_GTA_clear_completed">Eliminar terminadas</string> <string name="gtasks_GTA_clear_completed">Eliminar terminadas</string>
<string name="gtasks_GLA_authenticating">Autenticação…</string> <string name="gtasks_GLA_authenticating">Autenticação…</string>
<string name="gtasks_GLA_errorIOAuth">Ocorreu um erro ao comunicar com os servidores do Google. Tente mais tarde.</string> <string name="gtasks_GLA_errorIOAuth">Ocorreu um erro ao comunicar com os servidores do Google. Tente mais tarde.</string>

@ -376,7 +376,6 @@
<string name="gtasks_GLA_authenticating">Autentificare…</string> <string name="gtasks_GLA_authenticating">Autentificare…</string>
<string name="gtasks_GTA_clear_completed">Eliminare finalizată</string> <string name="gtasks_GTA_clear_completed">Eliminare finalizată</string>
<string name="CFC_list_name">În lista…</string> <string name="CFC_list_name">În lista…</string>
<string name="CFC_gtasks_list_name">În lista GTasks…</string>
<string name="CFC_gtasks_list_text">În listă: \?</string> <string name="CFC_gtasks_list_text">În listă: \?</string>
<string name="gcal_completed_title">%s (finalizat)</string> <string name="gcal_completed_title">%s (finalizat)</string>
<string name="calendar_event_not_found">Evenimentul din calendar nu a fost găsit</string> <string name="calendar_event_not_found">Evenimentul din calendar nu a fost găsit</string>

@ -108,7 +108,6 @@
<string name="calendar_event_not_found">Событие календаря не найдено</string> <string name="calendar_event_not_found">Событие календаря не найдено</string>
<string name="gcal_completed_title">%s (выполнено)</string> <string name="gcal_completed_title">%s (выполнено)</string>
<string name="CFC_gtasks_list_text">В списке: \?</string> <string name="CFC_gtasks_list_text">В списке: \?</string>
<string name="CFC_gtasks_list_name">В списке GTasks…</string>
<string name="gtasks_GTA_clear_completed">Удалить завершенные</string> <string name="gtasks_GTA_clear_completed">Удалить завершенные</string>
<string name="gtasks_GLA_authenticating">Аутентификация…</string> <string name="gtasks_GLA_authenticating">Аутентификация…</string>
<string name="gtasks_GLA_errorIOAuth">При обращении к серверам Google возникли проблемы. Пожалуйста, попробуйте позже.</string> <string name="gtasks_GLA_errorIOAuth">При обращении к серверам Google возникли проблемы. Пожалуйста, попробуйте позже.</string>

@ -321,7 +321,6 @@
<string name="ring_once">එක් වරක් නාද කරන්න</string> <string name="ring_once">එක් වරක් නාද කරන්න</string>
<string name="ring_five_times">පස් වතාවක් නාද කරන්න</string> <string name="ring_five_times">පස් වතාවක් නාද කරන්න</string>
<string name="CFC_list_name">ලැයිස්තුවේ…</string> <string name="CFC_list_name">ලැයිස්තුවේ…</string>
<string name="CFC_gtasks_list_name">GTasks ලැයිස්තුවේ…</string>
<string name="SSD_sort_modified">අවසන් වරට වෙනස් කරන ලද දිනය අනුව</string> <string name="SSD_sort_modified">අවසන් වරට වෙනස් කරන ලද දිනය අනුව</string>
<string name="astrid_sort_order">Astrid අතින් වර්ග කිරීම</string> <string name="astrid_sort_order">Astrid අතින් වර්ග කිරීම</string>
<string name="TVA_add_comment">අදහස දක්වන්න…</string> <string name="TVA_add_comment">අදහස දක්වන්න…</string>

@ -108,7 +108,6 @@
<string name="calendar_event_not_found">Udalosť kalendára nenájdená</string> <string name="calendar_event_not_found">Udalosť kalendára nenájdená</string>
<string name="gcal_completed_title">%s (dokončené)</string> <string name="gcal_completed_title">%s (dokončené)</string>
<string name="CFC_gtasks_list_text">V zozname: ?</string> <string name="CFC_gtasks_list_text">V zozname: ?</string>
<string name="CFC_gtasks_list_name">V zozname GTasks…</string>
<string name="gtasks_GTA_clear_completed">Vymazať dokončené</string> <string name="gtasks_GTA_clear_completed">Vymazať dokončené</string>
<string name="gtasks_GLA_authenticating">Overovanie…</string> <string name="gtasks_GLA_authenticating">Overovanie…</string>
<string name="gtasks_GLA_errorIOAuth">Prepáč, nastal problém v komunikácii s Google serverom. Prosím, skús to znovu neskôr.</string> <string name="gtasks_GLA_errorIOAuth">Prepáč, nastal problém v komunikácii s Google serverom. Prosím, skús to znovu neskôr.</string>

@ -78,7 +78,6 @@
<string name="gcal_TEA_showCalendar_label">Odpri dogodek v koledarju</string> <string name="gcal_TEA_showCalendar_label">Odpri dogodek v koledarju</string>
<string name="gcal_completed_title">%s (končani)</string> <string name="gcal_completed_title">%s (končani)</string>
<string name="CFC_gtasks_list_text">V seznamu: ?</string> <string name="CFC_gtasks_list_text">V seznamu: ?</string>
<string name="CFC_gtasks_list_name">Na GNaloge seznamu…</string>
<string name="gtasks_GTA_clear_completed">Zbriši dokončano</string> <string name="gtasks_GTA_clear_completed">Zbriši dokončano</string>
<string name="gtasks_GLA_authenticating">Avtentikacija v teku …</string> <string name="gtasks_GLA_authenticating">Avtentikacija v teku …</string>
<string name="gtasks_GLA_errorIOAuth">Žal smo imeli težave pri povezovanju z Google strežniki. Prosimo, poskusite ponovno kasneje.</string> <string name="gtasks_GLA_errorIOAuth">Žal smo imeli težave pri povezovanju z Google strežniki. Prosimo, poskusite ponovno kasneje.</string>

@ -98,7 +98,6 @@
<string name="calendar_event_not_found">Kalenderhändelsen hittades inte</string> <string name="calendar_event_not_found">Kalenderhändelsen hittades inte</string>
<string name="gcal_completed_title">%s (slutförd)</string> <string name="gcal_completed_title">%s (slutförd)</string>
<string name="CFC_gtasks_list_text">I listan: ?</string> <string name="CFC_gtasks_list_text">I listan: ?</string>
<string name="CFC_gtasks_list_name">I lista på Google Uppgifter…</string>
<string name="gtasks_GTA_clear_completed">Rensa slutförda</string> <string name="gtasks_GTA_clear_completed">Rensa slutförda</string>
<string name="gtasks_GLA_authenticating">Autentiserar…</string> <string name="gtasks_GLA_authenticating">Autentiserar…</string>
<string name="gtasks_GLA_errorIOAuth">Tyvärr, vi hade problem med att kommunicera med Googles servrar. Vänligen försök igen senare.</string> <string name="gtasks_GLA_errorIOAuth">Tyvärr, vi hade problem med att kommunicera med Googles servrar. Vänligen försök igen senare.</string>

@ -105,7 +105,6 @@
<string name="gtasks_GLA_authenticating">அங்கீகரிக்கிறது…</string> <string name="gtasks_GLA_authenticating">அங்கீகரிக்கிறது…</string>
<string name="gtasks_GTA_clear_completed">தெளிவான நிறைவு</string> <string name="gtasks_GTA_clear_completed">தெளிவான நிறைவு</string>
<string name="CFC_list_name">பட்டியலில்…</string> <string name="CFC_list_name">பட்டியலில்…</string>
<string name="CFC_gtasks_list_name">GTasks பட்டியலில்…</string>
<string name="CFC_gtasks_list_text">பட்டியலில் :\?</string> <string name="CFC_gtasks_list_text">பட்டியலில் :\?</string>
<string name="gcal_completed_title">%s (முடிந்தது)</string> <string name="gcal_completed_title">%s (முடிந்தது)</string>
<string name="calendar_event_not_found">நாள்காட்டி நிகழ்வு கிடைக்கவில்லை</string> <string name="calendar_event_not_found">நாள்காட்டி நிகழ்வு கிடைக்கவில்லை</string>

@ -467,7 +467,6 @@
<string name="gtasks_GLA_authenticating">กําลังรับรองความถูกต้อง…</string> <string name="gtasks_GLA_authenticating">กําลังรับรองความถูกต้อง…</string>
<string name="gtasks_GTA_clear_completed">ล้างเสร็จสมบูรณ์</string> <string name="gtasks_GTA_clear_completed">ล้างเสร็จสมบูรณ์</string>
<string name="CFC_list_name">ในรายการ…</string> <string name="CFC_list_name">ในรายการ…</string>
<string name="CFC_gtasks_list_name">ในรายการ GTasks…</string>
<string name="CFC_gtasks_list_text">ในรายการ: \?</string> <string name="CFC_gtasks_list_text">ในรายการ: \?</string>
<string name="calendar_event_not_found">ไม่พบเหตุการณ์ในปฏิทิน</string> <string name="calendar_event_not_found">ไม่พบเหตุการณ์ในปฏิทิน</string>
<string name="gcal_TEA_error">เกิดข้อผิดพลาดในการเพิ่มงานในปฏิทิน!</string> <string name="gcal_TEA_error">เกิดข้อผิดพลาดในการเพิ่มงานในปฏิทิน!</string>

@ -108,7 +108,6 @@
<string name="calendar_event_not_found">Takvim etkinliği bulunamadı</string> <string name="calendar_event_not_found">Takvim etkinliği bulunamadı</string>
<string name="gcal_completed_title">%s (tamamlandı)</string> <string name="gcal_completed_title">%s (tamamlandı)</string>
<string name="CFC_gtasks_list_text">Liste içinde: ?</string> <string name="CFC_gtasks_list_text">Liste içinde: ?</string>
<string name="CFC_gtasks_list_name">Gtasks Listesi içinde…</string>
<string name="gtasks_GTA_clear_completed">Tamamlanları Temizle</string> <string name="gtasks_GTA_clear_completed">Tamamlanları Temizle</string>
<string name="gtasks_GLA_authenticating">Kimlik doğrulanıyor…</string> <string name="gtasks_GLA_authenticating">Kimlik doğrulanıyor…</string>
<string name="gtasks_GLA_errorIOAuth">Üzgünüm, Google sunucuları ile bağlanmakta sıkıntı yaşıyoruz. Lütfen daha sonra yeniden deneyin.</string> <string name="gtasks_GLA_errorIOAuth">Üzgünüm, Google sunucuları ile bağlanmakta sıkıntı yaşıyoruz. Lütfen daha sonra yeniden deneyin.</string>

@ -108,7 +108,6 @@
<string name="calendar_event_not_found">Подію у календарі не знайдено</string> <string name="calendar_event_not_found">Подію у календарі не знайдено</string>
<string name="gcal_completed_title">%s (завершено)</string> <string name="gcal_completed_title">%s (завершено)</string>
<string name="CFC_gtasks_list_text">У списку: \?</string> <string name="CFC_gtasks_list_text">У списку: \?</string>
<string name="CFC_gtasks_list_name">У списку GTasks…</string>
<string name="gtasks_GTA_clear_completed">Очистити завершені</string> <string name="gtasks_GTA_clear_completed">Очистити завершені</string>
<string name="gtasks_GLA_authenticating">Авторизація…</string> <string name="gtasks_GLA_authenticating">Авторизація…</string>
<string name="gtasks_GLA_errorIOAuth">Вибачте, виникли проблеми звернення до серверів Google. Будь ласка, спробуйте пізніше.</string> <string name="gtasks_GLA_errorIOAuth">Вибачте, виникли проблеми звернення до серверів Google. Будь ласка, спробуйте пізніше.</string>

@ -123,7 +123,6 @@
<string name="gtasks_GLA_authenticating">تصدیق ہو رہی…</string> <string name="gtasks_GLA_authenticating">تصدیق ہو رہی…</string>
<string name="gtasks_GTA_clear_completed">کلئیر مکمل ہو گیا</string> <string name="gtasks_GTA_clear_completed">کلئیر مکمل ہو گیا</string>
<string name="CFC_list_name">لسٹ میں…</string> <string name="CFC_list_name">لسٹ میں…</string>
<string name="CFC_gtasks_list_name">جی ٹاسک لسٹ میں…</string>
<string name="CFC_gtasks_list_text">لسٹ میں:?</string> <string name="CFC_gtasks_list_text">لسٹ میں:?</string>
<string name="gcal_completed_title">%s مکمل ہو گیا</string> <string name="gcal_completed_title">%s مکمل ہو گیا</string>
<string name="calendar_event_not_found">کیلنڈر ایونٹ نہیں مل سکا</string> <string name="calendar_event_not_found">کیلنڈر ایونٹ نہیں مل سکا</string>

@ -541,7 +541,6 @@
<string name="gtasks_GLA_authenticating">Đang xác thực…</string> <string name="gtasks_GLA_authenticating">Đang xác thực…</string>
<string name="gtasks_GTA_clear_completed">Xoá công việc đã hoàn thành</string> <string name="gtasks_GTA_clear_completed">Xoá công việc đã hoàn thành</string>
<string name="CFC_list_name">Trong danh sách…</string> <string name="CFC_list_name">Trong danh sách…</string>
<string name="CFC_gtasks_list_name">Trong danh sách GTasks…</string>
<string name="CFC_gtasks_list_text">Trong danh sách: \?</string> <string name="CFC_gtasks_list_text">Trong danh sách: \?</string>
<string name="gcal_completed_title">%s (đã hoàn thành)</string> <string name="gcal_completed_title">%s (đã hoàn thành)</string>
<string name="calendar_event_not_found">Không tìm thấy sự kiện trong lịch</string> <string name="calendar_event_not_found">Không tìm thấy sự kiện trong lịch</string>

@ -97,7 +97,6 @@
<string name="calendar_event_not_found">找不到日历事件</string> <string name="calendar_event_not_found">找不到日历事件</string>
<string name="gcal_completed_title">%s (已完成)</string> <string name="gcal_completed_title">%s (已完成)</string>
<string name="CFC_gtasks_list_text">列表内容:?</string> <string name="CFC_gtasks_list_text">列表内容:?</string>
<string name="CFC_gtasks_list_name">在 GTasks 列表中…</string>
<string name="gtasks_GTA_clear_completed">清除已完成项</string> <string name="gtasks_GTA_clear_completed">清除已完成项</string>
<string name="gtasks_GLA_authenticating">正在认证…</string> <string name="gtasks_GLA_authenticating">正在认证…</string>
<string name="gtasks_GLA_errorIOAuth">对不起,我们在与 Google 服务器通讯时遇到了问题。请稍后再尝试。</string> <string name="gtasks_GLA_errorIOAuth">对不起,我们在与 Google 服务器通讯时遇到了问题。请稍后再尝试。</string>

@ -77,7 +77,6 @@
<string name="gcal_TEA_showCalendar_label">打開行事曆事項</string> <string name="gcal_TEA_showCalendar_label">打開行事曆事項</string>
<string name="gcal_completed_title">%s (已完成)</string> <string name="gcal_completed_title">%s (已完成)</string>
<string name="CFC_gtasks_list_text">列表內容: ?</string> <string name="CFC_gtasks_list_text">列表內容: ?</string>
<string name="CFC_gtasks_list_name">在Google任務工作列表中…</string>
<string name="gtasks_GTA_clear_completed">清除已完成項</string> <string name="gtasks_GTA_clear_completed">清除已完成項</string>
<string name="gtasks_GLA_authenticating">正在認證…</string> <string name="gtasks_GLA_authenticating">正在認證…</string>
<string name="gtasks_GLA_errorIOAuth">對不起我們在與Google 服務器通訊時遇到了問題。請稍後再嘗試。</string> <string name="gtasks_GLA_errorIOAuth">對不起我們在與Google 服務器通訊時遇到了問題。請稍後再嘗試。</string>

@ -131,7 +131,6 @@ File %1$s contained %2$s.\n\n
<string name="calendar_event_not_found">Calendar event not found</string> <string name="calendar_event_not_found">Calendar event not found</string>
<string name="gcal_completed_title">%s (completed)</string> <string name="gcal_completed_title">%s (completed)</string>
<string name="CFC_gtasks_list_text">In List: ?</string> <string name="CFC_gtasks_list_text">In List: ?</string>
<string name="CFC_gtasks_list_name">In GTasks List…</string>
<string name="CFC_list_name">In list…</string> <string name="CFC_list_name">In list…</string>
<string name="gtasks_GTA_clear_completed">Clear Completed</string> <string name="gtasks_GTA_clear_completed">Clear Completed</string>
<string name="gtasks_GLA_authenticating">Authenticating…</string> <string name="gtasks_GLA_authenticating">Authenticating…</string>

@ -15,7 +15,6 @@ import org.tasks.data.db.Database
import org.tasks.data.db.DbUtils.dbchunk import org.tasks.data.db.DbUtils.dbchunk
import org.tasks.data.db.SuspendDbUtils.chunkedMap import org.tasks.data.db.SuspendDbUtils.chunkedMap
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_LOCAL import org.tasks.data.entity.CaldavAccount.Companion.TYPE_LOCAL
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_TASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_TASKS
@ -56,7 +55,7 @@ abstract class CaldavDao(private val database: Database) {
abstract suspend fun getAccount(type: Int, username: String): CaldavAccount? abstract suspend fun getAccount(type: Int, username: String): CaldavAccount?
@Query("SELECT * FROM caldav_accounts WHERE cda_id = :id") @Query("SELECT * FROM caldav_accounts WHERE cda_id = :id")
abstract suspend fun getAccount(id: String): CaldavAccount? abstract suspend fun getAccount(id: Long): CaldavAccount?
@Query("SELECT * FROM caldav_accounts WHERE cda_id = :id") @Query("SELECT * FROM caldav_accounts WHERE cda_id = :id")
abstract fun watchAccount(id: Long): Flow<CaldavAccount?> abstract fun watchAccount(id: Long): Flow<CaldavAccount?>
@ -214,16 +213,7 @@ SELECT EXISTS(SELECT 1
+ "AND cd_deleted = 0") + "AND cd_deleted = 0")
abstract suspend fun getCaldavTasksToPush(calendar: String): List<CaldavTaskContainer> abstract suspend fun getCaldavTasksToPush(calendar: String): List<CaldavTaskContainer>
@Query("SELECT * FROM caldav_lists " + @Query("SELECT * FROM caldav_lists ORDER BY cdl_name COLLATE NOCASE")
"INNER JOIN caldav_accounts ON caldav_lists.cdl_account = caldav_accounts.cda_uuid " +
"WHERE caldav_accounts.cda_account_type = $TYPE_GOOGLE_TASKS " +
"ORDER BY cdl_name COLLATE NOCASE")
abstract suspend fun getGoogleTaskLists(): List<CaldavCalendar>
@Query("SELECT * FROM caldav_lists " +
"INNER JOIN caldav_accounts ON caldav_lists.cdl_account = caldav_accounts.cda_uuid " +
"WHERE caldav_accounts.cda_account_type != $TYPE_GOOGLE_TASKS " +
"ORDER BY cdl_name COLLATE NOCASE")
abstract suspend fun getCalendars(): List<CaldavCalendar> abstract suspend fun getCalendars(): List<CaldavCalendar>
@Query(""" @Query("""

@ -1,8 +0,0 @@
package org.tasks.data
import org.tasks.filters.GtasksFilter
fun GoogleTaskFilters.toGtasksFilter(): GtasksFilter = GtasksFilter(
list = googleTaskList,
count = count,
)

@ -1,7 +1,5 @@
package org.tasks.data package org.tasks.data
import org.tasks.filters.CaldavFilter
import org.tasks.filters.GtasksFilter
import com.todoroo.astrid.api.PermaSql import com.todoroo.astrid.api.PermaSql
import com.todoroo.astrid.core.SortHelper import com.todoroo.astrid.core.SortHelper
import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible
@ -14,6 +12,7 @@ import org.tasks.data.sql.Field.Companion.field
import org.tasks.data.sql.Join import org.tasks.data.sql.Join
import org.tasks.data.sql.Query import org.tasks.data.sql.Query
import org.tasks.data.sql.QueryTemplate import org.tasks.data.sql.QueryTemplate
import org.tasks.filters.CaldavFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.preferences.QueryPreferences import org.tasks.preferences.QueryPreferences
@ -48,25 +47,23 @@ internal object TaskListQueryRecursive {
): MutableList<String> { ): MutableList<String> {
val parentQuery = when (filter) { val parentQuery = when (filter) {
is CaldavFilter -> newCaldavQuery(filter.uuid) is CaldavFilter -> newCaldavQuery(filter.uuid)
is GtasksFilter -> newCaldavQuery(filter.list.uuid!!)
else -> PermaSql.replacePlaceholdersForQuery(filter.sql!!) else -> PermaSql.replacePlaceholdersForQuery(filter.sql!!)
} }
val manualSort = preferences.isManualSort val manualSort = preferences.isManualSort
val groupPreference = preferences.groupMode val groupPreference = preferences.groupMode
val groupMode = when { val groupMode = when {
(filter is GtasksFilter || filter is CaldavFilter) && filter is CaldavFilter && (manualSort || groupPreference == SortHelper.SORT_LIST) ->
(manualSort || groupPreference == SortHelper.SORT_LIST) -> SortHelper.GROUP_NONE SortHelper.GROUP_NONE
else -> groupPreference else -> groupPreference
} }
val sortMode = when { val sortMode = when {
manualSort && filter is GtasksFilter -> SortHelper.SORT_GTASKS !manualSort || filter !is CaldavFilter -> preferences.sortMode
manualSort && filter is CaldavFilter -> SortHelper.SORT_CALDAV filter.isGoogleTasks -> SortHelper.SORT_GTASKS
else -> preferences.sortMode else -> SortHelper.SORT_CALDAV
} }
val subtaskPreference = preferences.subtaskMode val subtaskPreference = preferences.subtaskMode
val subtaskMode = when { val subtaskMode = when {
manualSort && filter is GtasksFilter -> SortHelper.SORT_GTASKS sortMode == SortHelper.SORT_GTASKS || sortMode == SortHelper.SORT_CALDAV -> sortMode
manualSort && filter is CaldavFilter -> SortHelper.SORT_CALDAV
subtaskPreference == SortHelper.SORT_MANUAL -> SortHelper.SORT_CALDAV subtaskPreference == SortHelper.SORT_MANUAL -> SortHelper.SORT_CALDAV
else -> subtaskPreference else -> subtaskPreference
} }

@ -3,6 +3,8 @@ package org.tasks.filters
import org.tasks.CommonParcelize import org.tasks.CommonParcelize
import org.tasks.data.NO_COUNT import org.tasks.data.NO_COUNT
import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
@ -13,11 +15,14 @@ import org.tasks.data.sql.QueryTemplate
@CommonParcelize @CommonParcelize
data class CaldavFilter( data class CaldavFilter(
val calendar: CaldavCalendar, val calendar: CaldavCalendar,
val account: CaldavAccount,
val principals: Int = 0, val principals: Int = 0,
override val count: Int = NO_COUNT, override val count: Int = NO_COUNT,
) : Filter { ) : Filter {
override val title: String? override val title: String?
get() = calendar.name get() = calendar.name
override val sql: String override val sql: String
get() = QueryTemplate() get() = QueryTemplate()
.join(left(CaldavTask.TABLE, Task.ID.eq(CaldavTask.TASK))) .join(left(CaldavTask.TABLE, Task.ID.eq(CaldavTask.TASK)))
@ -29,6 +34,7 @@ data class CaldavFilter(
) )
) )
.toString() .toString()
override val valuesForNewTasks: String override val valuesForNewTasks: String
get() = mapToSerializedString(mapOf(CaldavTask.KEY to calendar.uuid!!)) get() = mapToSerializedString(mapOf(CaldavTask.KEY to calendar.uuid!!))
@ -43,8 +49,6 @@ data class CaldavFilter(
val uuid: String val uuid: String
get() = calendar.uuid!! get() = calendar.uuid!!
val account: String
get() = calendar.account!!
override val isReadOnly: Boolean override val isReadOnly: Boolean
get() = calendar.access == CaldavCalendar.ACCESS_READ_ONLY get() = calendar.access == CaldavCalendar.ACCESS_READ_ONLY
@ -54,4 +58,12 @@ data class CaldavFilter(
override fun areItemsTheSame(other: FilterListItem): Boolean { override fun areItemsTheSame(other: FilterListItem): Boolean {
return other is CaldavFilter && calendar.id == other.calendar.id return other is CaldavFilter && calendar.id == other.calendar.id
} }
val isGoogleTasks by lazy {
account.accountType == TYPE_GOOGLE_TASKS
}
val isIcalendar by lazy {
account.accountType != TYPE_GOOGLE_TASKS
}
} }

@ -11,7 +11,6 @@ import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.dao.TaskDao import org.tasks.data.dao.TaskDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_LOCAL import org.tasks.data.entity.CaldavAccount.Companion.TYPE_LOCAL
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.setupLocalAccount import org.tasks.data.setupLocalAccount
@ -233,17 +232,12 @@ class FilterProvider(
.plus(caldavDao .plus(caldavDao
.getCaldavFilters(account.uuid!!) .getCaldavFilters(account.uuid!!)
.map { .map {
when (account.accountType) { CaldavFilter(
TYPE_GOOGLE_TASKS -> GtasksFilter( calendar = it.caldavCalendar,
list = it.caldavCalendar, account = account,
count = it.count, principals = it.principals,
) count = it.count,
else -> CaldavFilter( )
calendar = it.caldavCalendar,
principals = it.principals,
count = it.count,
)
}
} }
.sort()) .sort())
} }

@ -1,57 +0,0 @@
package org.tasks.filters
import org.tasks.CommonParcelize
import org.tasks.data.GoogleTask
import org.tasks.data.NO_COUNT
import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Task
import org.tasks.data.sql.Criterion.Companion.and
import org.tasks.data.sql.Join.Companion.left
import org.tasks.data.sql.QueryTemplate
@CommonParcelize
data class GtasksFilter(
val list: CaldavCalendar,
override val count: Int = NO_COUNT,
) : Filter {
override val title: String?
get() = list.name
override val sql: String
get() = QueryTemplate()
.join(left(CaldavTask.TABLE, Task.ID.eq(CaldavTask.TASK)))
.where(
and(
activeAndVisible(),
CaldavTask.DELETED.eq(0),
CaldavTask.CALENDAR.eq(list.uuid)
)
)
.toString()
override val valuesForNewTasks: String
get() = mapToSerializedString(mapOf(GoogleTask.KEY to list.uuid!!))
override val order: Int
get() = list.order
override val icon: String?
get() = list.icon
override val tint: Int
get() = list.color
val account: String
get() = list.account!!
override fun supportsManualSort() = true
val remoteId: String
get() = list.uuid!!
override fun areItemsTheSame(other: FilterListItem): Boolean {
return other is GtasksFilter && list.id == other.list.id
}
}
Loading…
Cancel
Save