forked from agzam/vyatsu-schedule
feat: update request when need
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -11,4 +11,7 @@ interface PreferencesRepository {
|
||||
|
||||
suspend fun autoUpdateEnabled(): Boolean
|
||||
suspend fun setAutoUpdateEnabled(enabled: Boolean)
|
||||
|
||||
suspend fun autoUpdateAsked(): Boolean
|
||||
suspend fun setAutoUpdateAsked(asked: Boolean)
|
||||
}
|
||||
|
||||
@@ -17,18 +17,33 @@ class UpdateViewModel(
|
||||
|
||||
val updateState: StateFlow<UpdateState> = updater.state
|
||||
|
||||
private val _autoEnabled = MutableStateFlow(true)
|
||||
private val _autoEnabled = MutableStateFlow(false)
|
||||
val autoEnabled: StateFlow<Boolean> = _autoEnabled.asStateFlow()
|
||||
|
||||
private val _showFirstRunDialog = MutableStateFlow(false)
|
||||
val showFirstRunDialog: StateFlow<Boolean> = _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()
|
||||
|
||||
@@ -166,7 +166,6 @@ class AppUpdater(
|
||||
|
||||
private fun install(apk: File) {
|
||||
if (!canRequestInstalls()) {
|
||||
openUnknownSourcesSettings()
|
||||
return
|
||||
}
|
||||
val uri = FileProvider.getUriForFile(
|
||||
|
||||
Reference in New Issue
Block a user