From 96d0d1e3f64a012b453961f92fd55c3ff9ce6de8 Mon Sep 17 00:00:00 2001 From: acclorite Date: Sun, 28 Jul 2024 01:08:37 +0300 Subject: [PATCH] Disabled "Check for updates" by default + Confirmation dialog to enable "Check for updates". --- .../settings/CheckForUpdatesSetting.kt | 36 ++++++++++++++++--- .../presentation/screens/start/StartScreen.kt | 6 +--- .../screens/start/components/StartSettings.kt | 5 +-- .../permissions/StartPermissionItem.kt | 5 ++- .../screens/start/data/StartEvent.kt | 3 +- .../screens/start/data/StartViewModel.kt | 22 ++---------- app/src/main/res/values-uk/strings.xml | 7 ++++ app/src/main/res/values/strings.xml | 8 +++++ 8 files changed, 55 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/general/components/settings/CheckForUpdatesSetting.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/general/components/settings/CheckForUpdatesSetting.kt index 59567680..19da835f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/general/components/settings/CheckForUpdatesSetting.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/general/components/settings/CheckForUpdatesSetting.kt @@ -4,14 +4,19 @@ import android.Manifest import android.annotation.SuppressLint import androidx.activity.ComponentActivity import androidx.compose.foundation.lazy.LazyItemScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Security import androidx.compose.runtime.Composable import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.rememberPermissionState import ua.acclorite.book_story.R +import ua.acclorite.book_story.presentation.components.custom_dialog.CustomDialogWithContent import ua.acclorite.book_story.presentation.data.MainEvent import ua.acclorite.book_story.presentation.data.MainState import ua.acclorite.book_story.presentation.screens.settings.components.SwitchWithTitle @@ -33,6 +38,28 @@ fun LazyItemScope.CheckForUpdatesSetting( val notificationsPermissionState = rememberPermissionState( permission = Manifest.permission.POST_NOTIFICATIONS ) + val showConfirmation = remember { mutableStateOf(false) } + + if (showConfirmation.value) { + println(showConfirmation.value) + CustomDialogWithContent( + title = stringResource(id = R.string.enable_check_for_updates), + description = stringResource(id = R.string.enable_check_for_updates_description), + actionText = stringResource(id = R.string.enable), + imageVectorIcon = Icons.Default.Security, + isActionEnabled = true, + onDismiss = { showConfirmation.value = false }, + onAction = { + onMainEvent( + MainEvent.OnChangeCheckForUpdates( + true + ) + ) + showConfirmation.value = false + }, + withDivider = false + ) + } SwitchWithTitle( selected = state.value.checkForUpdates!!, @@ -46,11 +73,10 @@ fun LazyItemScope.CheckForUpdatesSetting( activity = activity, notificationsPermissionState = notificationsPermissionState, onChangeCheckForUpdates = { - onMainEvent( - MainEvent.OnChangeCheckForUpdates( - it - ) - ) + when (it) { + true -> showConfirmation.value = true + false -> onMainEvent(MainEvent.OnChangeCheckForUpdates(false)) + } } ) ) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/StartScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/StartScreen.kt index 0c6e43ca..f9a5f775 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/StartScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/StartScreen.kt @@ -45,11 +45,7 @@ fun StartScreenRoot() { LaunchedEffect(Unit) { startViewModel.checkPermissions( storagePermissionState = storagePermissionState, - notificationPermissionState = notificationsPermissionState, - isCheckForUpdatesEnabled = mainState.value.checkForUpdates!!, - onEnableCheckForUpdates = { - mainViewModel.onEvent(MainEvent.OnChangeCheckForUpdates(true)) - } + notificationPermissionState = notificationsPermissionState ) } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/components/StartSettings.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/components/StartSettings.kt index d3ebae96..40b8f799 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/components/StartSettings.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/components/StartSettings.kt @@ -160,10 +160,7 @@ fun StartSettings( onEvent( StartEvent.OnNotificationsPermissionRequest( activity, - notificationsPermissionState, - onEnableUpdates = { - onMainEvent(MainEvent.OnChangeCheckForUpdates(true)) - } + notificationsPermissionState ) ) } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/components/permissions/StartPermissionItem.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/components/permissions/StartPermissionItem.kt index 73f08c29..b6a6a4a5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/components/permissions/StartPermissionItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/components/permissions/StartPermissionItem.kt @@ -74,7 +74,10 @@ fun StartPermissionItem( onClick = onGrantClick, contentPadding = ButtonDefaults.TextButtonContentPadding ) { - Text(text = stringResource(id = R.string.grant)) + Text( + text = stringResource(id = R.string.grant), + style = MaterialTheme.typography.labelLarge + ) } } else { TextButton(onClick = onGrantClick) { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/data/StartEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/data/StartEvent.kt index 2a5352e9..ea23f226 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/data/StartEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/data/StartEvent.kt @@ -19,8 +19,7 @@ sealed class StartEvent { data class OnNotificationsPermissionRequest( val activity: ComponentActivity, - val notificationsPermissionState: PermissionState, - val onEnableUpdates: () -> Unit + val notificationsPermissionState: PermissionState ) : StartEvent() data class OnGoToBrowse(val onNavigate: OnNavigate, val onCompletedStartGuide: () -> Unit) : diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/data/StartViewModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/data/StartViewModel.kt index b0fa91fc..684d3695 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/data/StartViewModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/start/data/StartViewModel.kt @@ -20,16 +20,13 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.yield -import ua.acclorite.book_story.domain.use_case.CheckForUpdates import ua.acclorite.book_story.presentation.data.Screen import ua.acclorite.book_story.presentation.data.launchActivity import javax.inject.Inject @OptIn(ExperimentalPermissionsApi::class) @HiltViewModel -class StartViewModel @Inject constructor( - private val checkForUpdates: CheckForUpdates, -) : ViewModel() { +class StartViewModel @Inject constructor() : ViewModel() { private val _state = MutableStateFlow(StartState()) val state = _state.asStateFlow() @@ -198,7 +195,6 @@ class StartViewModel @Inject constructor( notificationsPermissionGranted = true ) } - event.onEnableUpdates() return } @@ -234,11 +230,6 @@ class StartViewModel @Inject constructor( ) } - event.onEnableUpdates() - checkForUpdates.execute( - postNotification = true - ) - break } } @@ -267,9 +258,7 @@ class StartViewModel @Inject constructor( fun checkPermissions( storagePermissionState: PermissionState, - notificationPermissionState: PermissionState, - isCheckForUpdatesEnabled: Boolean, - onEnableCheckForUpdates: () -> Unit + notificationPermissionState: PermissionState ) { viewModelScope.launch(Dispatchers.IO) { val legacyStoragePermission = Build.VERSION.SDK_INT < Build.VERSION_CODES.R @@ -286,13 +275,6 @@ class StartViewModel @Inject constructor( true } - if (notificationPermissionGranted && !isCheckForUpdatesEnabled) { - onEnableCheckForUpdates() - checkForUpdates.execute( - postNotification = true - ) - } - _state.update { it.copy( storagePermissionGranted = storagePermissionGranted, diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index fadaaf35..1cfbd565 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -36,6 +36,7 @@ Перемістити книгу? Видалити історію читання? Підтвердити оновлення? + Увімнкути перевірку на оновлення? @@ -77,6 +78,11 @@ Натиснувши на кнопку «Завантажити», ви перейдете в ваш браузер та завантажете останнє оновлення автоматично. + + Увімкнувши «Перевіряти на оновлення» застосунок буде отримувати інформацію про останній реліз + з «api.github.com» кожен раз, коли застосунок запускається. + Хочете продовжити та увімкнути «Перевіряти на оновлення»? + @@ -153,6 +159,7 @@ Ні Завантажити Готово + Увімкнути файли diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8c880051..0dd57139 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -52,6 +52,7 @@ Move book? Delete reading history? Confirm update? + Enable check for updates? @@ -93,6 +94,12 @@ By clicking the «Download» button you will be transferred to your browser and download the latest update automatically. + + By enabling «Check for updates» + the app will retrieve latest release information from «api.github.com» each time + when app starts. + Do you want to proceed and enable «Check for updates»? + @@ -168,6 +175,7 @@ No Download Done + Enable files