Display warning message if account notifications are enabled and background sync is disabled
This commit is contained in:
parent
dc55d2115f
commit
e721463f9c
@ -50,7 +50,7 @@ val composeAppModule = module {
|
||||
AccountCredentialsScreenModel(accountType, mode, get())
|
||||
}
|
||||
|
||||
factory { (account: Account) -> NotificationsScreenModel(account, get()) }
|
||||
factory { (account: Account) -> NotificationsScreenModel(account, get(), get()) }
|
||||
|
||||
factory { PreferencesScreenModel(get()) }
|
||||
|
||||
|
@ -20,20 +20,20 @@ import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.material3.rememberTopAppBarState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import cafe.adriel.voyager.koin.getScreenModel
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
import com.readrops.app.R
|
||||
import com.readrops.app.more.preferences.PreferencesScreen
|
||||
import com.readrops.app.util.components.AndroidScreen
|
||||
import com.readrops.app.util.components.ThreeDotsMenu
|
||||
import com.readrops.app.util.components.dialog.TwoChoicesDialog
|
||||
import com.readrops.app.util.theme.MediumSpacer
|
||||
import com.readrops.app.util.theme.spacing
|
||||
import com.readrops.db.entities.account.Account
|
||||
@ -47,13 +47,26 @@ class NotificationsScreen(val account: Account) : AndroidScreen() {
|
||||
val navigator = LocalNavigator.currentOrThrow
|
||||
val screenModel = getScreenModel<NotificationsScreenModel> { parametersOf(account) }
|
||||
|
||||
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
|
||||
|
||||
val state by screenModel.state.collectAsStateWithLifecycle()
|
||||
|
||||
val topAppBarScrollBehavior =
|
||||
TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||
|
||||
if (state.showBackgroundSyncDialog) {
|
||||
TwoChoicesDialog(
|
||||
title = stringResource(id = R.string.auto_synchro_disabled),
|
||||
text = stringResource(id = R.string.enable_auto_synchro_text),
|
||||
icon = painterResource(id = R.drawable.ic_sync),
|
||||
confirmText = stringResource(id = R.string.open),
|
||||
dismissText = stringResource(id = R.string.cancel),
|
||||
onDismiss = { screenModel.setBackgroundSyncDialogState(false) },
|
||||
onConfirm = {
|
||||
screenModel.setBackgroundSyncDialogState(false)
|
||||
navigator.push(PreferencesScreen())
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
Scaffold(
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
@ -106,7 +119,13 @@ class NotificationsScreen(val account: Account) : AndroidScreen() {
|
||||
|
||||
Switch(
|
||||
checked = state.isNotificationsEnabled,
|
||||
onCheckedChange = { screenModel.setAccountNotificationsState(it) }
|
||||
onCheckedChange = {
|
||||
screenModel.setAccountNotificationsState(it)
|
||||
|
||||
if (it) {
|
||||
screenModel.setBackgroundSyncDialogState(true)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package com.readrops.app.notifications
|
||||
|
||||
import cafe.adriel.voyager.core.model.StateScreenModel
|
||||
import cafe.adriel.voyager.core.model.screenModelScope
|
||||
import com.readrops.app.util.Preferences
|
||||
import com.readrops.db.Database
|
||||
import com.readrops.db.entities.account.Account
|
||||
import com.readrops.db.pojo.FeedWithFolder
|
||||
@ -13,6 +14,7 @@ import kotlinx.coroutines.launch
|
||||
class NotificationsScreenModel(
|
||||
private val account: Account,
|
||||
private val database: Database,
|
||||
private val preferences: Preferences,
|
||||
private val dispatcher: CoroutineDispatcher = Dispatchers.IO
|
||||
) : StateScreenModel<NotificationsState>(NotificationsState(isNotificationsEnabled = account.isNotificationsEnabled)) {
|
||||
|
||||
@ -30,6 +32,13 @@ class NotificationsScreenModel(
|
||||
mutableState.update { it.copy(feedsWithFolder = feedsWithFolder) }
|
||||
}
|
||||
}
|
||||
|
||||
screenModelScope.launch(dispatcher) {
|
||||
preferences.backgroundSynchronization.flow
|
||||
.collect { sync ->
|
||||
mutableState.update { it.copy(isBackGroundSyncEnabled = sync != "manual") }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun setAccountNotificationsState(enabled: Boolean) {
|
||||
@ -50,11 +59,23 @@ class NotificationsScreenModel(
|
||||
}
|
||||
}
|
||||
|
||||
fun setBackgroundSyncDialogState(visible: Boolean) {
|
||||
when {
|
||||
visible && !state.value.isBackGroundSyncEnabled -> {
|
||||
mutableState.update { it.copy(showBackgroundSyncDialog = visible) }
|
||||
}
|
||||
!visible -> {
|
||||
mutableState.update { it.copy(showBackgroundSyncDialog = visible) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class NotificationsState(
|
||||
val isNotificationsEnabled: Boolean = false,
|
||||
val feedsWithFolder: List<FeedWithFolder> = emptyList()
|
||||
val feedsWithFolder: List<FeedWithFolder> = emptyList(),
|
||||
val showBackgroundSyncDialog: Boolean = false,
|
||||
val isBackGroundSyncEnabled: Boolean = false
|
||||
) {
|
||||
|
||||
val allFeedNotificationsEnabled
|
||||
|
Loading…
x
Reference in New Issue
Block a user