From c227fcc39acd132056003db1225a0fc5553c80ba Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 2 Jan 2025 17:33:58 -0600 Subject: [PATCH] Add cost info to sync account dialog --- .../org/tasks/compose/AddAccountDialog.kt | 22 ++++++++++++++++--- .../java/org/tasks/compose/SyncAccount.kt | 8 +++++++ .../preferences/DefaultFilterProvider.kt | 3 ++- .../fragments/MainSettingsFragment.kt | 5 ++++- .../java/org/tasks/sync/AddAccountDialog.kt | 15 +++++++++++-- app/src/main/res/values/strings.xml | 3 +++ 6 files changed, 49 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/tasks/compose/AddAccountDialog.kt b/app/src/main/java/org/tasks/compose/AddAccountDialog.kt index ea560f4b6..91ddc57e3 100644 --- a/app/src/main/java/org/tasks/compose/AddAccountDialog.kt +++ b/app/src/main/java/org/tasks/compose/AddAccountDialog.kt @@ -4,7 +4,6 @@ import android.content.res.Configuration import androidx.compose.foundation.layout.Column import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.ContentAlpha import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -17,12 +16,14 @@ import org.tasks.themes.TasksTheme @Composable fun AddAccountDialog( hasTasksAccount: Boolean, + hasPro: Boolean, selected: (Platform) -> Unit, ) { Column(modifier = Modifier.verticalScroll(rememberScrollState())) { if (!hasTasksAccount) { SyncAccount( title = R.string.tasks_org, + cost = R.string.cost_more_money, description = R.string.tasks_org_description, icon = R.drawable.ic_round_icon, onClick = { selected(Platform.TASKS_ORG) } @@ -30,6 +31,7 @@ fun AddAccountDialog( } SyncAccount( title = R.string.gtasks_GPr_header, + cost = if (hasPro) null else R.string.cost_free, description = R.string.google_tasks_selection_description, icon = R.drawable.ic_google, onClick = { selected(Platform.GOOGLE_TASKS) } @@ -37,6 +39,7 @@ fun AddAccountDialog( if (BuildConfig.DEBUG) { SyncAccount( title = R.string.microsoft, + cost = if (hasPro) null else R.string.cost_free, description = R.string.microsoft_selection_description, icon = R.drawable.ic_microsoft_tasks, onClick = { selected(Platform.MICROSOFT) } @@ -44,27 +47,31 @@ fun AddAccountDialog( } SyncAccount( title = R.string.davx5, + cost = if (hasPro) null else R.string.cost_money, description = R.string.davx5_selection_description, icon = R.drawable.ic_davx5_icon_green_bg, onClick = { selected(Platform.DAVX5) } ) SyncAccount( title = R.string.caldav, + cost = if (hasPro) null else R.string.cost_money, description = R.string.caldav_selection_description, icon = R.drawable.ic_webdav_logo, tint = MaterialTheme.colorScheme.onSurface.copy( - alpha = ContentAlpha.medium + alpha = .8f ), onClick = { selected(Platform.CALDAV) } ) SyncAccount( title = R.string.etesync, + cost = if (hasPro) null else R.string.cost_money, description = R.string.etesync_selection_description, icon = R.drawable.ic_etesync, onClick = { selected(Platform.ETESYNC) } ) SyncAccount( title = R.string.decsync, + cost = if (hasPro) null else R.string.cost_money, description = R.string.decsync_selection_description, icon = R.drawable.ic_decsync, onClick = { selected(Platform.DECSYNC_CC) } @@ -77,6 +84,15 @@ fun AddAccountDialog( @Composable fun AddAccountDialogPreview() { TasksTheme { - AddAccountDialog(hasTasksAccount = false, selected = {}) + AddAccountDialog(hasTasksAccount = false, hasPro = false, selected = {}) + } +} + +@Preview(showBackground = true, widthDp = 320) +@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) +@Composable +fun AddAccountDialogPreviewWithPro() { + TasksTheme { + AddAccountDialog(hasTasksAccount = false, hasPro = true, selected = {}) } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/compose/SyncAccount.kt b/app/src/main/java/org/tasks/compose/SyncAccount.kt index e671ef9a3..0ea8a152a 100644 --- a/app/src/main/java/org/tasks/compose/SyncAccount.kt +++ b/app/src/main/java/org/tasks/compose/SyncAccount.kt @@ -22,6 +22,7 @@ import androidx.compose.ui.unit.dp @Composable fun SyncAccount( @StringRes title: Int, + @StringRes cost: Int? = null, @StringRes description: Int, @DrawableRes icon: Int, tint: Color? = null, @@ -46,6 +47,13 @@ fun SyncAccount( style = MaterialTheme.typography.bodyLarge, color = MaterialTheme.colorScheme.onSurface, ) + cost?.let { + Text( + text = stringResource(id = it), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.primary, + ) + } Text( text = stringResource(id = description), style = MaterialTheme.typography.bodyMedium, diff --git a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt index 3dcd4bc2d..7cd344389 100644 --- a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt +++ b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt @@ -1,6 +1,5 @@ package org.tasks.preferences -import org.tasks.filters.CustomFilter import kotlinx.coroutines.runBlocking import org.tasks.R import org.tasks.Strings.isNullOrEmpty @@ -16,6 +15,7 @@ import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.Task import org.tasks.data.getLocalList import org.tasks.filters.CaldavFilter +import org.tasks.filters.CustomFilter import org.tasks.filters.Filter import org.tasks.filters.GtasksFilter import org.tasks.filters.MyTasksFilter @@ -177,6 +177,7 @@ class DefaultFilterProvider @Inject constructor( } else { val googleTask = googleTaskDao.getByTaskId(task.id) val caldavTask = caldavDao.getTask(task.id) + val caldavAccount = caldavDao.getAccountForTask(task.id) if (googleTask != null) { val googleTaskList = googleTaskListDao.getByRemoteId(googleTask.calendar!!) if (googleTaskList != null) { diff --git a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt index 86c378d7a..d0b484c32 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt @@ -172,7 +172,10 @@ class MainSettingsFragment : InjectingPreferenceFragment() { private fun addAccount(): Boolean { lifecycleScope.launch { - newAccountDialog(hasTasksAccount = viewModel.tasksAccount() != null) + newAccountDialog( + hasTasksAccount = viewModel.tasksAccount() != null, + hasPro = inventory.hasPro, + ) .show(parentFragmentManager, FRAG_TAG_ADD_ACCOUNT) } return false diff --git a/app/src/main/java/org/tasks/sync/AddAccountDialog.kt b/app/src/main/java/org/tasks/sync/AddAccountDialog.kt index 51f285557..7ec1436e0 100644 --- a/app/src/main/java/org/tasks/sync/AddAccountDialog.kt +++ b/app/src/main/java/org/tasks/sync/AddAccountDialog.kt @@ -22,6 +22,9 @@ class AddAccountDialog : DialogFragment() { private val hasTasksAccount: Boolean get() = arguments?.getBoolean(EXTRA_HAS_TASKS_ACCOUNT) ?: false + private val hasPro: Boolean + get() = arguments?.getBoolean(EXTRA_HAS_PRO) ?: false + enum class Platform { TASKS_ORG, GOOGLE_TASKS, @@ -40,6 +43,7 @@ class AddAccountDialog : DialogFragment() { TasksTheme(theme = theme.themeBase.index) { org.tasks.compose.AddAccountDialog( hasTasksAccount = hasTasksAccount, + hasPro = hasPro, selected = this::selected ) } @@ -58,10 +62,17 @@ class AddAccountDialog : DialogFragment() { const val ADD_ACCOUNT = "add_account" const val EXTRA_SELECTED = "selected" private const val EXTRA_HAS_TASKS_ACCOUNT = "extra_has_tasks_account" + private const val EXTRA_HAS_PRO = "extra_has_pro" - fun newAccountDialog(hasTasksAccount: Boolean) = + fun newAccountDialog( + hasTasksAccount: Boolean, + hasPro: Boolean, + ) = AddAccountDialog().apply { - arguments = bundleOf(EXTRA_HAS_TASKS_ACCOUNT to hasTasksAccount) + arguments = bundleOf( + EXTRA_HAS_TASKS_ACCOUNT to hasTasksAccount, + EXTRA_HAS_PRO to hasPro, + ) } } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 56ca5de85..ffe79c66e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -728,4 +728,7 @@ File %1$s contained %2$s.\n\n Not available for tags, filters, or places Add shortcut to home screen Add widget to home screen + Cost: Free + Cost: $ + Cost: $$$