diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt b/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt
index eba55b8c..b01f99a0 100644
--- a/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt
@@ -28,13 +28,12 @@ import javax.inject.Singleton
class SettingsManager @Inject constructor(private val prefs: SharedPreferences) : ISettingsManager {
companion object {
- const val keyFirstEverLaunch = "isFirstEverLaunch"
const val keyModes = "satModes"
const val keyCompass = "compass"
const val keyRadarSweep = "radarSweep"
const val keyTimeUTC = "timeUTC"
- const val keyUpdateTime = "updateTime"
- const val keyAutoUpdate = "autoUpdate"
+ const val keyLastUpdateTime = "lastUpdateTime"
+ const val keyAutoUpdateEnabled = "autoUpdateEnabled"
const val keyHoursAhead = "hoursAhead"
const val keyMinElevation = "minElevation"
const val keyRotator = "isRotatorEnabled"
@@ -50,14 +49,6 @@ class SettingsManager @Inject constructor(private val prefs: SharedPreferences)
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 {
return prefs.getString(keyLocator, null) ?: "null"
}
@@ -124,20 +115,20 @@ class SettingsManager @Inject constructor(private val prefs: SharedPreferences)
prefs.edit { putBoolean(keyTimeUTC, value) }
}
- override fun getUpdateTime(): Long {
- return prefs.getLong(keyUpdateTime, 0L)
+ override fun getLastUpdateTime(): Long {
+ return prefs.getLong(keyLastUpdateTime, 0L)
}
- override fun setUpdateTime(updateTime: Long) {
- prefs.edit { putLong(keyUpdateTime, updateTime) }
+ override fun setLastUpdateTime(updateTime: Long) {
+ prefs.edit { putLong(keyLastUpdateTime, updateTime) }
}
- override fun getUpdateEnabled(): Boolean {
- return prefs.getBoolean(keyAutoUpdate, false)
+ override fun getAutoUpdateEnabled(): Boolean {
+ return prefs.getBoolean(keyAutoUpdateEnabled, true)
}
- override fun setUpdateEnabled(value: Boolean) {
- prefs.edit { putBoolean(keyAutoUpdate, value) }
+ override fun setAutoUpdateEnabled(value: Boolean) {
+ prefs.edit { putBoolean(keyAutoUpdateEnabled, value) }
}
override fun getUseCompass(): Boolean {
diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/UpdateManager.kt b/app/src/main/java/com/rtbishop/look4sat/framework/UpdateManager.kt
deleted file mode 100644
index f4312ab5..00000000
--- a/app/src/main/java/com/rtbishop/look4sat/framework/UpdateManager.kt
+++ /dev/null
@@ -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 .
- */
-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()
- }
- }
-}
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/MainApplication.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/MainApplication.kt
index 94a346ab..42dac8d5 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/MainApplication.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/MainApplication.kt
@@ -18,8 +18,12 @@
package com.rtbishop.look4sat.presentation
import android.app.Application
+import android.util.Log
import com.rtbishop.look4sat.domain.IDataRepository
+import com.rtbishop.look4sat.framework.SettingsManager
import dagger.hilt.android.HiltAndroidApp
+import java.text.SimpleDateFormat
+import java.util.*
import javax.inject.Inject
@HiltAndroidApp
@@ -27,4 +31,23 @@ class MainApplication : Application() {
@Inject
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()
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt
index de007df5..ce70d51c 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt
@@ -40,12 +40,6 @@ class PassesViewModel @Inject constructor(
val entriesTotal: LiveData = repository.getEntriesTotal().asLiveData()
init {
- viewModelScope.launch {
- if (!settings.isFirstEverLaunchDone()) {
- repository.updateFromWeb()
- settings.setFirstEverLaunchDone()
- }
- }
viewModelScope.launch {
satelliteManager.calculatedPasses.collect { passes ->
passesProcessing?.cancelAndJoin()
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsFragment.kt
index d63623d2..1f673f0b 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsFragment.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsFragment.kt
@@ -72,7 +72,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
}
private val contentContract = ActivityResultContracts.GetContent()
private val contentRequest = registerForActivityResult(contentContract) { uri ->
- uri?.let { viewModel.updateDataFromFile(uri.toString()) }
+ uri?.let { viewModel.updateFromFile(uri.toString()) }
}
private lateinit var binding: FragmentSettingsBinding
@@ -134,14 +134,10 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
private fun setupDataCard() {
binding.run {
- setUpdateTime(viewModel.getUpdateTime())
- settingsData.dataBtnWeb.clickWithDebounce {
-// val action = SettingsFragmentDirections.settingsToSources()
-// findNavController().navigate(action)
- viewModel.updateDataFromWeb()
- }
+ setUpdateTime(viewModel.getLastUpdateTime())
+ settingsData.dataBtnWeb.clickWithDebounce { viewModel.updateFromWeb() }
settingsData.dataBtnFile.clickWithDebounce { contentRequest.launch("*/*") }
- settingsData.dataBtnClear.clickWithDebounce { viewModel.clearData() }
+ settingsData.dataBtnClear.clickWithDebounce { viewModel.clearAllData() }
viewModel.entriesTotal.observe(viewLifecycleOwner) { number ->
val entriesFormat = getString(R.string.data_entries)
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)
}
getNavResult>(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) }
}
settingsOther.otherSwitchUpdate.apply {
- isChecked = viewModel.getUpdateEnabled()
- setOnCheckedChangeListener { _, isChecked -> viewModel.setUpdateEnabled(isChecked) }
+ isChecked = viewModel.getAutoUpdateEnabled()
+ setOnCheckedChangeListener { _, isChecked -> viewModel.setAutoUpdateEnabled(isChecked) }
}
settingsOther.otherSwitchSweep.apply {
isChecked = viewModel.getShowSweep()
@@ -273,7 +269,11 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
binding.settingsData.dataProgress.isIndeterminate = false
setUpdateTime(state.data)
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 -> {
binding.settingsData.dataProgress.isIndeterminate = false
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt
index 234545d2..fb117d3b 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt
@@ -24,7 +24,6 @@ import com.rtbishop.look4sat.domain.ILocationManager
import com.rtbishop.look4sat.domain.ISettingsManager
import com.rtbishop.look4sat.domain.model.DataState
import com.rtbishop.look4sat.domain.predict.GeoPos
-import com.rtbishop.look4sat.framework.UpdateManager
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.SharedFlow
import javax.inject.Inject
@@ -33,39 +32,27 @@ import javax.inject.Inject
class SettingsViewModel @Inject constructor(
private val locationManager: ILocationManager,
private val repository: IDataRepository,
- private val settings: ISettingsManager,
- private val updateManager: UpdateManager
+ private val settings: ISettingsManager
) : ViewModel() {
val entriesTotal = repository.getEntriesTotal().asLiveData()
val radiosTotal = repository.getRadiosTotal().asLiveData()
- fun updateDataFromFile(uri: String) {
- repository.updateFromFile(uri)
- }
+ fun updateFromFile(uri: String) = repository.updateFromFile(uri)
- fun updateDataFromWeb() {
-// settings.saveDataSources(sources)
-// repository.updateFromWeb(sources)
- repository.updateFromWeb()
- }
+ fun updateFromWeb() = repository.updateFromWeb()
- fun clearData() {
- repository.clearAllData()
- }
+ fun clearAllData() = repository.clearAllData()
fun getUseUTC(): Boolean = settings.getUseUTC()
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) {
- updateManager.toggleAutoUpdate(value)
- settings.setUpdateEnabled(value)
- }
+ fun setAutoUpdateEnabled(value: Boolean) = settings.setAutoUpdateEnabled(value)
fun getUseCompass(): Boolean = settings.getUseCompass()
@@ -95,9 +82,9 @@ class SettingsViewModel @Inject constructor(
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()
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 24f90440..b9880f16 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -137,6 +137,7 @@
Спутников: %s
Трансиверов: %s
Обновление прошло успешно
+ Очистка прошла успешно
Настройки ротатора
Удаленное управление
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index b9e4f2ff..63d51c6d 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -128,6 +128,7 @@
卫星:%s
收发器:%s
更新成功完成
+ Update completed successfully
旋转器首选项
启用远程控制
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index aa59898d..9c4cb9bc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -137,6 +137,7 @@
Satellites: %s
Transceivers: %s
Update completed successfully
+ Data was cleared successfully
Rotator preferences
Enable remote control
diff --git a/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt b/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt
index b7b1525c..d5267630 100644
--- a/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt
+++ b/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt
@@ -51,10 +51,6 @@ interface ISettingsManager {
"X-Comm" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=x-comm&FORMAT=csv"
)
- fun isFirstEverLaunchDone(): Boolean
-
- fun setFirstEverLaunchDone()
-
fun loadStationLocator(): String
fun saveStationLocator(locator: String)
@@ -75,13 +71,13 @@ interface ISettingsManager {
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
diff --git a/base/src/main/java/com/rtbishop/look4sat/domain/data/DataRepository.kt b/base/src/main/java/com/rtbishop/look4sat/domain/data/DataRepository.kt
index 48d4e88a..005f720b 100644
--- a/base/src/main/java/com/rtbishop/look4sat/domain/data/DataRepository.kt
+++ b/base/src/main/java/com/rtbishop/look4sat/domain/data/DataRepository.kt
@@ -126,7 +126,7 @@ class DataRepository(
}
private fun setUpdateSuccessful(updateTime: Long = System.currentTimeMillis()) {
- settingsManager.setUpdateTime(updateTime)
+ settingsManager.setLastUpdateTime(updateTime)
_updateState.value = DataState.Success(updateTime)
}