diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/eventsync/EventSyncScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/eventsync/EventSyncScreen.kt index c8b07ef5d..7e982ebe7 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/eventsync/EventSyncScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/eventsync/EventSyncScreen.kt @@ -31,6 +31,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Card @@ -40,8 +41,12 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Text +import androidx.compose.material3.TextButton 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.text.font.FontWeight @@ -63,6 +68,7 @@ fun EventSyncScreen( val syncState by syncViewModel.syncState.collectAsStateWithLifecycle() val isMobileOrMetered by accountViewModel.settings.isMobileOrMeteredConnection.collectAsStateWithLifecycle() + var showMobileDataDialog by remember { mutableStateOf(false) } Scaffold( topBar = { @@ -152,20 +158,17 @@ fun EventSyncScreen( is EventSyncViewModel.SyncState.Error, -> { Button( - onClick = { syncViewModel.start() }, + onClick = { + if (isMobileOrMetered) { + showMobileDataDialog = true + } else { + syncViewModel.start() + } + }, modifier = Modifier.fillMaxWidth(), - enabled = !isMobileOrMetered || syncState !is EventSyncViewModel.SyncState.Idle, ) { Text(stringRes(R.string.event_sync_start)) } - if (isMobileOrMetered && syncState is EventSyncViewModel.SyncState.Idle) { - OutlinedButton( - onClick = { syncViewModel.start() }, - modifier = Modifier.fillMaxWidth(), - ) { - Text(stringRes(R.string.event_sync_start_anyway)) - } - } } is EventSyncViewModel.SyncState.Running -> { @@ -182,6 +185,29 @@ fun EventSyncScreen( } } + if (showMobileDataDialog) { + AlertDialog( + onDismissRequest = { showMobileDataDialog = false }, + title = { Text(stringRes(R.string.event_sync_mobile_data_dialog_title)) }, + text = { Text(stringRes(R.string.event_sync_wifi_warning)) }, + confirmButton = { + Button( + onClick = { + showMobileDataDialog = false + syncViewModel.start() + }, + ) { + Text(stringRes(R.string.event_sync_start_anyway)) + } + }, + dismissButton = { + TextButton(onClick = { showMobileDataDialog = false }) { + Text(stringRes(R.string.event_sync_cancel)) + } + }, + ) + } + Spacer(Modifier.height(16.dp)) } } diff --git a/amethyst/src/main/res/values/strings.xml b/amethyst/src/main/res/values/strings.xml index d2bf0265b..c0295cf4d 100644 --- a/amethyst/src/main/res/values/strings.xml +++ b/amethyst/src/main/res/values/strings.xml @@ -1760,6 +1760,7 @@ Download all events that mention you and send them to your inbox relays. Download all direct messages addressed to you and send them to your DM relays. ⚠ You appear to be on a metered or mobile connection. This operation can transfer a very large amount of data. Connect to Wi-Fi before starting. + Use Mobile Data? Start Sync Start Anyway (mobile data) Cancel