mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-05 20:27:28 +00:00
Swapped WorkManager for manual update check
This commit is contained in:
1 parent
1685691d2f
commit
baf61ca9bc
11 files changed
+62
-131
No files matched your search
@@ -28,13 +28,12 @@ import javax.inject.Singleton
|
|||||||
class SettingsManager @Inject constructor(private val prefs: SharedPreferences) : ISettingsManager {
|
class SettingsManager @Inject constructor(private val prefs: SharedPreferences) : ISettingsManager {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val keyFirstEverLaunch = "isFirstEverLaunch"
|
|
||||||
const val keyModes = "satModes"
|
const val keyModes = "satModes"
|
||||||
const val keyCompass = "compass"
|
const val keyCompass = "compass"
|
||||||
const val keyRadarSweep = "radarSweep"
|
const val keyRadarSweep = "radarSweep"
|
||||||
const val keyTimeUTC = "timeUTC"
|
const val keyTimeUTC = "timeUTC"
|
||||||
const val keyUpdateTime = "updateTime"
|
const val keyLastUpdateTime = "lastUpdateTime"
|
||||||
const val keyAutoUpdate = "autoUpdate"
|
const val keyAutoUpdateEnabled = "autoUpdateEnabled"
|
||||||
const val keyHoursAhead = "hoursAhead"
|
const val keyHoursAhead = "hoursAhead"
|
||||||
const val keyMinElevation = "minElevation"
|
const val keyMinElevation = "minElevation"
|
||||||
const val keyRotator = "isRotatorEnabled"
|
const val keyRotator = "isRotatorEnabled"
|
||||||
@@ -50,14 +49,6 @@ class SettingsManager @Inject constructor(private val prefs: SharedPreferences)
|
|||||||
const val keySelection = "selection"
|
const val keySelection = "selection"
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isFirstEverLaunchDone(): Boolean {
|
|
||||||
return prefs.getBoolean(keyFirstEverLaunch, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setFirstEverLaunchDone() {
|
|
||||||
prefs.edit { putBoolean(keyFirstEverLaunch, true) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun loadStationLocator(): String {
|
override fun loadStationLocator(): String {
|
||||||
return prefs.getString(keyLocator, null) ?: "null"
|
return prefs.getString(keyLocator, null) ?: "null"
|
||||||
}
|
}
|
||||||
@@ -124,20 +115,20 @@ class SettingsManager @Inject constructor(private val prefs: SharedPreferences)
|
|||||||
prefs.edit { putBoolean(keyTimeUTC, value) }
|
prefs.edit { putBoolean(keyTimeUTC, value) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getUpdateTime(): Long {
|
override fun getLastUpdateTime(): Long {
|
||||||
return prefs.getLong(keyUpdateTime, 0L)
|
return prefs.getLong(keyLastUpdateTime, 0L)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUpdateTime(updateTime: Long) {
|
override fun setLastUpdateTime(updateTime: Long) {
|
||||||
prefs.edit { putLong(keyUpdateTime, updateTime) }
|
prefs.edit { putLong(keyLastUpdateTime, updateTime) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getUpdateEnabled(): Boolean {
|
override fun getAutoUpdateEnabled(): Boolean {
|
||||||
return prefs.getBoolean(keyAutoUpdate, false)
|
return prefs.getBoolean(keyAutoUpdateEnabled, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUpdateEnabled(value: Boolean) {
|
override fun setAutoUpdateEnabled(value: Boolean) {
|
||||||
prefs.edit { putBoolean(keyAutoUpdate, value) }
|
prefs.edit { putBoolean(keyAutoUpdateEnabled, value) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getUseCompass(): Boolean {
|
override fun getUseCompass(): Boolean {
|
||||||
|
|||||||
@@ -1,63 +0,0 @@
|
|||||||
/*
|
|
||||||
* Look4Sat. Amateur radio satellite tracker and pass predictor.
|
|
||||||
* Copyright (C) 2019-2022 Arty Bishop (bishop.arty@gmail.com)
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.rtbishop.look4sat.framework
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.util.Log
|
|
||||||
import androidx.work.*
|
|
||||||
import com.rtbishop.look4sat.presentation.MainApplication
|
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.*
|
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
import javax.inject.Inject
|
|
||||||
import javax.inject.Singleton
|
|
||||||
|
|
||||||
@Singleton
|
|
||||||
class UpdateManager @Inject constructor(@ApplicationContext context: Context) {
|
|
||||||
|
|
||||||
private val workTag = "AutoUpdateWork"
|
|
||||||
private val workManager = WorkManager.getInstance(context)
|
|
||||||
|
|
||||||
fun toggleAutoUpdate(isEnabled: Boolean) {
|
|
||||||
if (isEnabled) enableAutoUpdate() else disableAutoUpdate()
|
|
||||||
Log.d("UpdateManager", workManager.getWorkInfosForUniqueWork(workTag).get().toString())
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun enableAutoUpdate() {
|
|
||||||
val network = Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
|
|
||||||
val request = PeriodicWorkRequest.Builder(UpdateWorker::class.java, 30, TimeUnit.MINUTES)
|
|
||||||
.setConstraints(network).build()
|
|
||||||
workManager.enqueueUniquePeriodicWork(workTag, ExistingPeriodicWorkPolicy.REPLACE, request)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun disableAutoUpdate() {
|
|
||||||
workManager.cancelUniqueWork(workTag)
|
|
||||||
}
|
|
||||||
|
|
||||||
class UpdateWorker constructor(private val context: Context, params: WorkerParameters) :
|
|
||||||
Worker(context, params) {
|
|
||||||
|
|
||||||
override fun doWork(): Result {
|
|
||||||
val date = SimpleDateFormat("d MMM yyyy - HH:mm:ss", Locale.getDefault()).format(Date())
|
|
||||||
Log.d("UpdateWorker", "Started periodic data update on $date")
|
|
||||||
(context.applicationContext as MainApplication).repository.updateFromWeb()
|
|
||||||
return Result.success()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -18,8 +18,12 @@
|
|||||||
package com.rtbishop.look4sat.presentation
|
package com.rtbishop.look4sat.presentation
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
import android.util.Log
|
||||||
import com.rtbishop.look4sat.domain.IDataRepository
|
import com.rtbishop.look4sat.domain.IDataRepository
|
||||||
|
import com.rtbishop.look4sat.framework.SettingsManager
|
||||||
import dagger.hilt.android.HiltAndroidApp
|
import dagger.hilt.android.HiltAndroidApp
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@HiltAndroidApp
|
@HiltAndroidApp
|
||||||
@@ -27,4 +31,23 @@ class MainApplication : Application() {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var repository: IDataRepository
|
lateinit var repository: IDataRepository
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
lateinit var settingsManager: SettingsManager
|
||||||
|
|
||||||
|
override fun onCreate() {
|
||||||
|
super.onCreate()
|
||||||
|
checkAutoUpdate()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkAutoUpdate() {
|
||||||
|
if (settingsManager.getAutoUpdateEnabled()) {
|
||||||
|
val timeDelta = System.currentTimeMillis() - settingsManager.getLastUpdateTime()
|
||||||
|
if (timeDelta > 172800000) { // 48 hours in ms
|
||||||
|
val sdf = SimpleDateFormat("d MMM yyyy - HH:mm:ss", Locale.getDefault())
|
||||||
|
Log.d("AutoUpdate", "Started periodic data update on ${sdf.format(Date())}")
|
||||||
|
repository.updateFromWeb()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -40,12 +40,6 @@ class PassesViewModel @Inject constructor(
|
|||||||
val entriesTotal: LiveData<Int> = repository.getEntriesTotal().asLiveData()
|
val entriesTotal: LiveData<Int> = repository.getEntriesTotal().asLiveData()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
viewModelScope.launch {
|
|
||||||
if (!settings.isFirstEverLaunchDone()) {
|
|
||||||
repository.updateFromWeb()
|
|
||||||
settings.setFirstEverLaunchDone()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
satelliteManager.calculatedPasses.collect { passes ->
|
satelliteManager.calculatedPasses.collect { passes ->
|
||||||
passesProcessing?.cancelAndJoin()
|
passesProcessing?.cancelAndJoin()
|
||||||
|
|||||||
+12
-12
@@ -72,7 +72,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
}
|
}
|
||||||
private val contentContract = ActivityResultContracts.GetContent()
|
private val contentContract = ActivityResultContracts.GetContent()
|
||||||
private val contentRequest = registerForActivityResult(contentContract) { uri ->
|
private val contentRequest = registerForActivityResult(contentContract) { uri ->
|
||||||
uri?.let { viewModel.updateDataFromFile(uri.toString()) }
|
uri?.let { viewModel.updateFromFile(uri.toString()) }
|
||||||
}
|
}
|
||||||
private lateinit var binding: FragmentSettingsBinding
|
private lateinit var binding: FragmentSettingsBinding
|
||||||
|
|
||||||
@@ -134,14 +134,10 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
|
|
||||||
private fun setupDataCard() {
|
private fun setupDataCard() {
|
||||||
binding.run {
|
binding.run {
|
||||||
setUpdateTime(viewModel.getUpdateTime())
|
setUpdateTime(viewModel.getLastUpdateTime())
|
||||||
settingsData.dataBtnWeb.clickWithDebounce {
|
settingsData.dataBtnWeb.clickWithDebounce { viewModel.updateFromWeb() }
|
||||||
// val action = SettingsFragmentDirections.settingsToSources()
|
|
||||||
// findNavController().navigate(action)
|
|
||||||
viewModel.updateDataFromWeb()
|
|
||||||
}
|
|
||||||
settingsData.dataBtnFile.clickWithDebounce { contentRequest.launch("*/*") }
|
settingsData.dataBtnFile.clickWithDebounce { contentRequest.launch("*/*") }
|
||||||
settingsData.dataBtnClear.clickWithDebounce { viewModel.clearData() }
|
settingsData.dataBtnClear.clickWithDebounce { viewModel.clearAllData() }
|
||||||
viewModel.entriesTotal.observe(viewLifecycleOwner) { number ->
|
viewModel.entriesTotal.observe(viewLifecycleOwner) { number ->
|
||||||
val entriesFormat = getString(R.string.data_entries)
|
val entriesFormat = getString(R.string.data_entries)
|
||||||
settingsData.dataEntries.text = String.format(entriesFormat, number)
|
settingsData.dataEntries.text = String.format(entriesFormat, number)
|
||||||
@@ -151,7 +147,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
settingsData.dataRadios.text = String.format(radiosFormat, number)
|
settingsData.dataRadios.text = String.format(radiosFormat, number)
|
||||||
}
|
}
|
||||||
getNavResult<List<String>>(R.id.nav_settings, "sources") {
|
getNavResult<List<String>>(R.id.nav_settings, "sources") {
|
||||||
viewModel.updateDataFromWeb()
|
viewModel.updateFromWeb()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,8 +213,8 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
setOnCheckedChangeListener { _, isChecked -> viewModel.setUseUTC(isChecked) }
|
setOnCheckedChangeListener { _, isChecked -> viewModel.setUseUTC(isChecked) }
|
||||||
}
|
}
|
||||||
settingsOther.otherSwitchUpdate.apply {
|
settingsOther.otherSwitchUpdate.apply {
|
||||||
isChecked = viewModel.getUpdateEnabled()
|
isChecked = viewModel.getAutoUpdateEnabled()
|
||||||
setOnCheckedChangeListener { _, isChecked -> viewModel.setUpdateEnabled(isChecked) }
|
setOnCheckedChangeListener { _, isChecked -> viewModel.setAutoUpdateEnabled(isChecked) }
|
||||||
}
|
}
|
||||||
settingsOther.otherSwitchSweep.apply {
|
settingsOther.otherSwitchSweep.apply {
|
||||||
isChecked = viewModel.getShowSweep()
|
isChecked = viewModel.getShowSweep()
|
||||||
@@ -273,7 +269,11 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
binding.settingsData.dataProgress.isIndeterminate = false
|
binding.settingsData.dataProgress.isIndeterminate = false
|
||||||
setUpdateTime(state.data)
|
setUpdateTime(state.data)
|
||||||
viewModel.setUpdateHandled()
|
viewModel.setUpdateHandled()
|
||||||
showToast(getString(R.string.data_success))
|
if (state.data == 0L) {
|
||||||
|
showToast(getString(R.string.data_clear_success))
|
||||||
|
} else {
|
||||||
|
showToast(getString(R.string.data_success))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
is DataState.Error -> {
|
is DataState.Error -> {
|
||||||
binding.settingsData.dataProgress.isIndeterminate = false
|
binding.settingsData.dataProgress.isIndeterminate = false
|
||||||
|
|||||||
+9
-22
@@ -24,7 +24,6 @@ import com.rtbishop.look4sat.domain.ILocationManager
|
|||||||
import com.rtbishop.look4sat.domain.ISettingsManager
|
import com.rtbishop.look4sat.domain.ISettingsManager
|
||||||
import com.rtbishop.look4sat.domain.model.DataState
|
import com.rtbishop.look4sat.domain.model.DataState
|
||||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||||
import com.rtbishop.look4sat.framework.UpdateManager
|
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.SharedFlow
|
import kotlinx.coroutines.flow.SharedFlow
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -33,39 +32,27 @@ import javax.inject.Inject
|
|||||||
class SettingsViewModel @Inject constructor(
|
class SettingsViewModel @Inject constructor(
|
||||||
private val locationManager: ILocationManager,
|
private val locationManager: ILocationManager,
|
||||||
private val repository: IDataRepository,
|
private val repository: IDataRepository,
|
||||||
private val settings: ISettingsManager,
|
private val settings: ISettingsManager
|
||||||
private val updateManager: UpdateManager
|
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
val entriesTotal = repository.getEntriesTotal().asLiveData()
|
val entriesTotal = repository.getEntriesTotal().asLiveData()
|
||||||
val radiosTotal = repository.getRadiosTotal().asLiveData()
|
val radiosTotal = repository.getRadiosTotal().asLiveData()
|
||||||
|
|
||||||
fun updateDataFromFile(uri: String) {
|
fun updateFromFile(uri: String) = repository.updateFromFile(uri)
|
||||||
repository.updateFromFile(uri)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateDataFromWeb() {
|
fun updateFromWeb() = repository.updateFromWeb()
|
||||||
// settings.saveDataSources(sources)
|
|
||||||
// repository.updateFromWeb(sources)
|
|
||||||
repository.updateFromWeb()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun clearData() {
|
fun clearAllData() = repository.clearAllData()
|
||||||
repository.clearAllData()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getUseUTC(): Boolean = settings.getUseUTC()
|
fun getUseUTC(): Boolean = settings.getUseUTC()
|
||||||
|
|
||||||
fun setUseUTC(value: Boolean) = settings.setUseUTC(value)
|
fun setUseUTC(value: Boolean) = settings.setUseUTC(value)
|
||||||
|
|
||||||
fun getUpdateTime(): Long = settings.getUpdateTime()
|
fun getLastUpdateTime(): Long = settings.getLastUpdateTime()
|
||||||
|
|
||||||
fun getUpdateEnabled(): Boolean = settings.getUpdateEnabled()
|
fun getAutoUpdateEnabled(): Boolean = settings.getAutoUpdateEnabled()
|
||||||
|
|
||||||
fun setUpdateEnabled(value: Boolean) {
|
fun setAutoUpdateEnabled(value: Boolean) = settings.setAutoUpdateEnabled(value)
|
||||||
updateManager.toggleAutoUpdate(value)
|
|
||||||
settings.setUpdateEnabled(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getUseCompass(): Boolean = settings.getUseCompass()
|
fun getUseCompass(): Boolean = settings.getUseCompass()
|
||||||
|
|
||||||
@@ -95,9 +82,9 @@ class SettingsViewModel @Inject constructor(
|
|||||||
|
|
||||||
fun setBTFormat(value: String) = settings.setBTFormat(value)
|
fun setBTFormat(value: String) = settings.setBTFormat(value)
|
||||||
|
|
||||||
fun getBTDeviceName(): String = settings.getBTDeviceName()
|
// fun getBTDeviceName(): String = settings.getBTDeviceName()
|
||||||
|
|
||||||
fun setBTDeviceName(value: String) = settings.setBTDeviceName(value)
|
// fun setBTDeviceName(value: String) = settings.setBTDeviceName(value)
|
||||||
|
|
||||||
fun getBTDeviceAddr(): String = settings.getBTDeviceAddr()
|
fun getBTDeviceAddr(): String = settings.getBTDeviceAddr()
|
||||||
|
|
||||||
|
|||||||
@@ -137,6 +137,7 @@
|
|||||||
<string name="data_entries">Спутников: %s</string>
|
<string name="data_entries">Спутников: %s</string>
|
||||||
<string name="data_radios">Трансиверов: %s</string>
|
<string name="data_radios">Трансиверов: %s</string>
|
||||||
<string name="data_success">Обновление прошло успешно</string>
|
<string name="data_success">Обновление прошло успешно</string>
|
||||||
|
<string name="data_clear_success">Очистка прошла успешно</string>
|
||||||
|
|
||||||
<string name="remote_title">Настройки ротатора</string>
|
<string name="remote_title">Настройки ротатора</string>
|
||||||
<string name="remote_switch">Удаленное управление</string>
|
<string name="remote_switch">Удаленное управление</string>
|
||||||
|
|||||||
@@ -128,6 +128,7 @@
|
|||||||
<string name="data_entries">卫星:%s</string>
|
<string name="data_entries">卫星:%s</string>
|
||||||
<string name="data_radios">收发器:%s</string>
|
<string name="data_radios">收发器:%s</string>
|
||||||
<string name="data_success">更新成功完成</string>
|
<string name="data_success">更新成功完成</string>
|
||||||
|
<string name="data_clear_success">Update completed successfully</string>
|
||||||
<string name="remote_title">旋转器首选项</string>
|
<string name="remote_title">旋转器首选项</string>
|
||||||
<string name="remote_switch">启用远程控制</string>
|
<string name="remote_switch">启用远程控制</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -137,6 +137,7 @@
|
|||||||
<string name="data_entries">Satellites: %s</string>
|
<string name="data_entries">Satellites: %s</string>
|
||||||
<string name="data_radios">Transceivers: %s</string>
|
<string name="data_radios">Transceivers: %s</string>
|
||||||
<string name="data_success">Update completed successfully</string>
|
<string name="data_success">Update completed successfully</string>
|
||||||
|
<string name="data_clear_success">Data was cleared successfully</string>
|
||||||
|
|
||||||
<string name="remote_title">Rotator preferences</string>
|
<string name="remote_title">Rotator preferences</string>
|
||||||
<string name="remote_switch">Enable remote control</string>
|
<string name="remote_switch">Enable remote control</string>
|
||||||
|
|||||||
@@ -51,10 +51,6 @@ interface ISettingsManager {
|
|||||||
"X-Comm" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=x-comm&FORMAT=csv"
|
"X-Comm" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=x-comm&FORMAT=csv"
|
||||||
)
|
)
|
||||||
|
|
||||||
fun isFirstEverLaunchDone(): Boolean
|
|
||||||
|
|
||||||
fun setFirstEverLaunchDone()
|
|
||||||
|
|
||||||
fun loadStationLocator(): String
|
fun loadStationLocator(): String
|
||||||
|
|
||||||
fun saveStationLocator(locator: String)
|
fun saveStationLocator(locator: String)
|
||||||
@@ -75,13 +71,13 @@ interface ISettingsManager {
|
|||||||
|
|
||||||
fun setUseUTC(value: Boolean)
|
fun setUseUTC(value: Boolean)
|
||||||
|
|
||||||
fun getUpdateTime(): Long
|
fun getLastUpdateTime(): Long
|
||||||
|
|
||||||
fun setUpdateTime(updateTime: Long)
|
fun setLastUpdateTime(updateTime: Long)
|
||||||
|
|
||||||
fun getUpdateEnabled(): Boolean
|
fun getAutoUpdateEnabled(): Boolean
|
||||||
|
|
||||||
fun setUpdateEnabled(value: Boolean)
|
fun setAutoUpdateEnabled(value: Boolean)
|
||||||
|
|
||||||
fun getUseCompass(): Boolean
|
fun getUseCompass(): Boolean
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class DataRepository(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpdateSuccessful(updateTime: Long = System.currentTimeMillis()) {
|
private fun setUpdateSuccessful(updateTime: Long = System.currentTimeMillis()) {
|
||||||
settingsManager.setUpdateTime(updateTime)
|
settingsManager.setLastUpdateTime(updateTime)
|
||||||
_updateState.value = DataState.Success(updateTime)
|
_updateState.value = DataState.Success(updateTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user