Warn microsoft and google tasks users

pull/3229/head
Alex Baker 11 months ago
parent 35de97b130
commit b21472da47

@ -11,6 +11,7 @@ import org.junit.Test
import org.tasks.LocalBroadcastManager
import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.DeletionDao
import org.tasks.data.dao.TaskDao
import org.tasks.data.entity.Task
@ -34,6 +35,7 @@ class TaskListViewModelTest : InjectingTestCase() {
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var inventory: Inventory
@Inject lateinit var firebase: Firebase
@Inject lateinit var caldavDao: CaldavDao
@Before
override fun setUp() {
@ -48,6 +50,7 @@ class TaskListViewModelTest : InjectingTestCase() {
inventory = inventory,
firebase = firebase,
permissionChecker = PermissivePermissionChecker(context),
caldavDao = caldavDao,
)
viewModel.setFilter(runBlocking { MyTasksFilter.create() })
}

@ -91,6 +91,8 @@ import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPicker
import org.tasks.compose.NotificationsDisabledBanner
import org.tasks.compose.QuietHoursBanner
import org.tasks.compose.SubscriptionNagBanner
import org.tasks.compose.SyncWarningGoogleTasks
import org.tasks.compose.SyncWarningMicrosoft
import org.tasks.data.TaskContainer
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.TagDataDao
@ -416,9 +418,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
context.openUri(R.string.url_donate)
}
},
dismiss = {
listViewModel.dismissBanner()
},
dismiss = { listViewModel.dismissBanner() },
)
Banner.QuietHoursEnabled ->
@ -432,9 +432,19 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
)
)
},
dismiss = {
listViewModel.dismissBanner()
}
dismiss = { listViewModel.dismissBanner() },
)
Banner.WarnGoogleTasks ->
SyncWarningGoogleTasks(
moreInfo = { context.openUri(R.string.url_google_tasks) },
dismiss = { listViewModel.dismissBanner() },
)
Banner.WarnMicrosoft ->
SyncWarningMicrosoft(
moreInfo = { context.openUri(R.string.url_microsoft) },
dismiss = { listViewModel.dismissBanner() },
)
null -> {}

@ -79,6 +79,36 @@ fun QuietHoursBanner(
)
}
@Composable
fun SyncWarningGoogleTasks(
moreInfo: () -> Unit,
dismiss: () -> Unit,
) {
Banner(
title = stringResource(R.string.sync_warning_google_tasks_title),
body = stringResource(R.string.sync_warning_google_tasks),
dismissText = stringResource(id = R.string.dismiss),
onDismiss = dismiss,
action = stringResource(id = R.string.button_learn_more),
onAction = moreInfo,
)
}
@Composable
fun SyncWarningMicrosoft(
moreInfo: () -> Unit,
dismiss: () -> Unit,
) {
Banner(
title = stringResource(R.string.sync_warning_microsoft_title),
body = stringResource(R.string.sync_warning_microsoft),
dismissText = stringResource(id = R.string.dismiss),
onDismiss = dismiss,
action = stringResource(id = R.string.button_learn_more),
onAction = moreInfo,
)
}
@Composable
fun BeastModeBanner(
visible: Boolean,
@ -123,3 +153,17 @@ private fun SubscriptionNagPreview() = TasksTheme {
private fun QuietHoursPreview() = TasksTheme {
QuietHoursBanner(showSettings = {}, dismiss = {})
}
@Preview(showBackground = true)
@Preview(showBackground = true, backgroundColor = 0x202124, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun MicrosoftWarningPreview() = TasksTheme {
SyncWarningMicrosoft(moreInfo = {}, dismiss = {})
}
@Preview(showBackground = true)
@Preview(showBackground = true, backgroundColor = 0x202124, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun GoogleTasksWarningPreview() = TasksTheme {
SyncWarningGoogleTasks(moreInfo = {}, dismiss = {})
}

@ -570,6 +570,14 @@ class Preferences @JvmOverloads constructor(
get() = getBoolean(R.string.p_warn_quiet_hours_enabled, true)
set(value) = setBoolean(R.string.p_warn_quiet_hours_enabled, value)
var warnMicrosoft: Boolean
get() = getBoolean(R.string.p_warn_microsoft, true)
set(value) = setBoolean(R.string.p_warn_microsoft, value)
var warnGoogleTasks: Boolean
get() = getBoolean(R.string.p_warn_google_tasks, true)
set(value) = setBoolean(R.string.p_warn_google_tasks, value)
var lastSubscribeRequest: Long
get() = getLong(R.string.p_last_subscribe_request, 0L)
set(value) = setLong(R.string.p_last_subscribe_request, value)

@ -26,6 +26,7 @@ import org.tasks.billing.Inventory
import org.tasks.compose.throttleLatest
import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.DeletionDao
import org.tasks.data.dao.TaskDao
import org.tasks.data.entity.Task
@ -51,6 +52,8 @@ sealed interface Banner {
data object AlarmsDisabled : Banner
data object QuietHoursEnabled : Banner
data object BegForMoney : Banner
data object WarnMicrosoft : Banner
data object WarnGoogleTasks : Banner
}
@HiltViewModel
@ -64,6 +67,7 @@ class TaskListViewModel @Inject constructor(
private val inventory: Inventory,
private val firebase: Firebase,
private val permissionChecker: PermissionChecker,
private val caldavDao: CaldavDao,
) : ViewModel() {
data class State(
@ -188,6 +192,7 @@ class TaskListViewModel @Inject constructor(
fun updateBannerState() {
viewModelScope.launch(Dispatchers.IO) {
val accounts = caldavDao.getAccounts()
val banner = when {
preferences.warnNotificationsDisabled && !permissionChecker.hasNotificationPermission() ->
Banner.NotificationsDisabled
@ -197,6 +202,10 @@ class TaskListViewModel @Inject constructor(
Banner.BegForMoney
preferences.isCurrentlyQuietHours && preferences.warnQuietHoursDisabled ->
Banner.QuietHoursEnabled
accounts.any { it.isMicrosoft } && preferences.warnMicrosoft ->
Banner.WarnMicrosoft
accounts.any { it.isGoogleTasks } && preferences.warnGoogleTasks ->
Banner.WarnGoogleTasks
else -> null
}
_state.update {
@ -214,7 +223,9 @@ class TaskListViewModel @Inject constructor(
preferences.lastSubscribeRequest = currentTimeMillis()
firebase.logEvent(R.string.event_banner_sub, R.string.param_click to tookAction)
}
else -> {}
Banner.WarnGoogleTasks -> preferences.warnGoogleTasks = false
Banner.WarnMicrosoft -> preferences.warnMicrosoft = false
null -> {}
}
updateBannerState()

@ -43,6 +43,8 @@
<string name="url_translations">https://tasks.org/translations</string>
<string name="url_notifications">https://tasks.org/notifications</string>
<string name="url_troubleshoot_intents">https://tasks.org/intents</string>
<string name="url_google_tasks">https://tasks.org/docs/sync_google_tasks</string>
<string name="url_microsoft">https://tasks.org/docs/sync_microsoft</string>
<string name="p_date_shortcut_morning">date_shortcut_morning</string>
<string name="p_date_shortcut_afternoon">date_shortcut_afternoon</string>
@ -409,6 +411,8 @@
<string name="p_warn_notifications_disabled">warn_notifications_disabled</string>
<string name="p_warn_alarms_disabled">warn_alarms_disabled</string>
<string name="p_warn_quiet_hours_enabled">warn_quiet_hours_enabled</string>
<string name="p_warn_microsoft">warn_microsoft</string>
<string name="p_warn_google_tasks">warn_google_Tasks</string>
<string name="event_showed_purchase_dialog">showed_purchase_dialog</string>
<string name="event_purchase_result">billing_flow_result</string>

@ -734,4 +734,9 @@ File %1$s contained %2$s.\n\n
<string name="multiline_title">Allow multiline titles</string>
<string name="multiline_title_on">Press Enter key to add line breaks</string>
<string name="multiline_title_off">Press Done to close keyboard</string>
<string name="sync_warning_microsoft_title">About Microsoft To Do sync</string>
<string name="sync_warning_microsoft">Not all task details sync with Microsoft To Do.</string>
<string name="sync_warning_google_tasks_title">About Google Task sync</string>
<string name="sync_warning_google_tasks">Not all task details sync with Google Tasks</string>
<string name="button_learn_more">Learn more</string>
</resources>

@ -6,7 +6,7 @@
android:defaultValue="false"
android:key="@string/p_microsoft_sync"
android:title="Microsoft To Do Sync"
android:summary="Early access feature. USE AT YOUR OWN RISK" />
android:summary="Early access feature, please report any bugs!" />
<SwitchPreferenceCompat
android:defaultValue="false"

Loading…
Cancel
Save