diff --git a/app/src/main/java/agzam/vyatsu/AppRoot.kt b/app/src/main/java/agzam/vyatsu/AppRoot.kt index 4df5bb2..c8b40c0 100644 --- a/app/src/main/java/agzam/vyatsu/AppRoot.kt +++ b/app/src/main/java/agzam/vyatsu/AppRoot.kt @@ -6,6 +6,9 @@ import agzam.vyatsu.ui.groups.GroupPickerViewModel import agzam.vyatsu.ui.home.HomeScreen import agzam.vyatsu.ui.schedule.ScheduleViewModel import agzam.vyatsu.ui.settings.UpdateViewModel +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -24,6 +27,30 @@ fun AppRoot() { val updateViewModel: UpdateViewModel = viewModel(factory = updateFactory(container)) val state by scheduleViewModel.uiState.collectAsState() + val showFirstRunDialog by updateViewModel.showFirstRunDialog.collectAsState() + + if (showFirstRunDialog) { + AlertDialog( + onDismissRequest = { updateViewModel.onFirstRunDecision(false) }, + title = { Text("Автоматические обновления") }, + text = { + Text( + "Разрешить автоматически проверять и устанавливать " + + "новые версии приложения?" + ) + }, + confirmButton = { + TextButton(onClick = { updateViewModel.onFirstRunDecision(true) }) { + Text("Разрешить") + } + }, + dismissButton = { + TextButton(onClick = { updateViewModel.onFirstRunDecision(false) }) { + Text("Не надо") + } + } + ) + } if (state.noGroup) { GroupPickerScreen( diff --git a/app/src/main/java/agzam/vyatsu/data/local/PreferencesDao.kt b/app/src/main/java/agzam/vyatsu/data/local/PreferencesDao.kt index 2986088..215baaa 100644 --- a/app/src/main/java/agzam/vyatsu/data/local/PreferencesDao.kt +++ b/app/src/main/java/agzam/vyatsu/data/local/PreferencesDao.kt @@ -33,4 +33,10 @@ interface PreferencesDao { @Query("INSERT OR REPLACE INTO preferences(key, value) VALUES('autoUpdateEnabled', :enabled)") suspend fun setAutoUpdateEnabled(enabled: String) + + @Query("SELECT value FROM preferences WHERE key = 'autoUpdateAsked'") + suspend fun autoUpdateAsked(): String? + + @Query("INSERT OR REPLACE INTO preferences(key, value) VALUES('autoUpdateAsked', :asked)") + suspend fun setAutoUpdateAsked(asked: String) } diff --git a/app/src/main/java/agzam/vyatsu/data/repository/PreferencesRepositoryImpl.kt b/app/src/main/java/agzam/vyatsu/data/repository/PreferencesRepositoryImpl.kt index 51bdc98..a2cf860 100644 --- a/app/src/main/java/agzam/vyatsu/data/repository/PreferencesRepositoryImpl.kt +++ b/app/src/main/java/agzam/vyatsu/data/repository/PreferencesRepositoryImpl.kt @@ -14,6 +14,9 @@ class PreferencesRepositoryImpl( override suspend fun selectedDayDate(): String? = dao.selectedDayDate() override suspend fun setSelectedDayDate(date: String) = dao.setSelectedDayDate(date) - override suspend fun autoUpdateEnabled(): Boolean = dao.autoUpdateEnabled() != "false" + override suspend fun autoUpdateEnabled(): Boolean = dao.autoUpdateEnabled() == "true" override suspend fun setAutoUpdateEnabled(enabled: Boolean) = dao.setAutoUpdateEnabled(enabled.toString()) + + override suspend fun autoUpdateAsked(): Boolean = dao.autoUpdateAsked() == "true" + override suspend fun setAutoUpdateAsked(asked: Boolean) = dao.setAutoUpdateAsked(asked.toString()) } diff --git a/app/src/main/java/agzam/vyatsu/domain/repository/PreferencesRepository.kt b/app/src/main/java/agzam/vyatsu/domain/repository/PreferencesRepository.kt index aa7fca9..412b004 100644 --- a/app/src/main/java/agzam/vyatsu/domain/repository/PreferencesRepository.kt +++ b/app/src/main/java/agzam/vyatsu/domain/repository/PreferencesRepository.kt @@ -11,4 +11,7 @@ interface PreferencesRepository { suspend fun autoUpdateEnabled(): Boolean suspend fun setAutoUpdateEnabled(enabled: Boolean) + + suspend fun autoUpdateAsked(): Boolean + suspend fun setAutoUpdateAsked(asked: Boolean) } diff --git a/app/src/main/java/agzam/vyatsu/ui/settings/UpdateViewModel.kt b/app/src/main/java/agzam/vyatsu/ui/settings/UpdateViewModel.kt index 266ed65..793693d 100644 --- a/app/src/main/java/agzam/vyatsu/ui/settings/UpdateViewModel.kt +++ b/app/src/main/java/agzam/vyatsu/ui/settings/UpdateViewModel.kt @@ -17,18 +17,33 @@ class UpdateViewModel( val updateState: StateFlow = updater.state - private val _autoEnabled = MutableStateFlow(true) + private val _autoEnabled = MutableStateFlow(false) val autoEnabled: StateFlow = _autoEnabled.asStateFlow() + private val _showFirstRunDialog = MutableStateFlow(false) + val showFirstRunDialog: StateFlow = _showFirstRunDialog.asStateFlow() + init { viewModelScope.launch { _autoEnabled.value = preferencesRepository.autoUpdateEnabled() + _showFirstRunDialog.value = !preferencesRepository.autoUpdateAsked() } } fun setAutoEnabled(enabled: Boolean) { _autoEnabled.value = enabled updater.setAutoEnabled(enabled) + if (enabled && !updater.canRequestInstalls()) { + updater.openUnknownSourcesSettings() + } + } + + fun onFirstRunDecision(enable: Boolean) { + _showFirstRunDialog.value = false + viewModelScope.launch { + preferencesRepository.setAutoUpdateAsked(true) + } + setAutoEnabled(enable) } fun checkNow() = updater.checkForUpdate() diff --git a/app/src/main/java/agzam/vyatsu/update/AppUpdater.kt b/app/src/main/java/agzam/vyatsu/update/AppUpdater.kt index 3dae813..bb565f7 100644 --- a/app/src/main/java/agzam/vyatsu/update/AppUpdater.kt +++ b/app/src/main/java/agzam/vyatsu/update/AppUpdater.kt @@ -166,7 +166,6 @@ class AppUpdater( private fun install(apk: File) { if (!canRequestInstalls()) { - openUnknownSourcesSettings() return } val uri = FileProvider.getUriForFile(