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 31f0207e..eba55b8c 100644
--- a/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt
@@ -33,6 +33,7 @@ class SettingsManager @Inject constructor(private val prefs: SharedPreferences)
const val keyCompass = "compass"
const val keyRadarSweep = "radarSweep"
const val keyTimeUTC = "timeUTC"
+ const val keyUpdateTime = "updateTime"
const val keyAutoUpdate = "autoUpdate"
const val keyHoursAhead = "hoursAhead"
const val keyMinElevation = "minElevation"
@@ -123,6 +124,14 @@ class SettingsManager @Inject constructor(private val prefs: SharedPreferences)
prefs.edit { putBoolean(keyTimeUTC, value) }
}
+ override fun getUpdateTime(): Long {
+ return prefs.getLong(keyUpdateTime, 0L)
+ }
+
+ override fun setUpdateTime(updateTime: Long) {
+ prefs.edit { putLong(keyUpdateTime, updateTime) }
+ }
+
override fun getUpdateEnabled(): Boolean {
return prefs.getBoolean(keyAutoUpdate, false)
}
diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/UpdateManager.kt b/app/src/main/java/com/rtbishop/look4sat/framework/UpdateManager.kt
index 0f176f1f..f4312ab5 100644
--- a/app/src/main/java/com/rtbishop/look4sat/framework/UpdateManager.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/framework/UpdateManager.kt
@@ -22,7 +22,7 @@ import android.util.Log
import androidx.work.*
import com.rtbishop.look4sat.presentation.MainApplication
import dagger.hilt.android.qualifiers.ApplicationContext
-import java.text.DateFormat
+import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@@ -41,7 +41,7 @@ class UpdateManager @Inject constructor(@ApplicationContext context: Context) {
private fun enableAutoUpdate() {
val network = Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
- val request = PeriodicWorkRequest.Builder(UpdateWorker::class.java, 24, TimeUnit.HOURS)
+ val request = PeriodicWorkRequest.Builder(UpdateWorker::class.java, 30, TimeUnit.MINUTES)
.setConstraints(network).build()
workManager.enqueueUniquePeriodicWork(workTag, ExistingPeriodicWorkPolicy.REPLACE, request)
}
@@ -54,8 +54,8 @@ class UpdateManager @Inject constructor(@ApplicationContext context: Context) {
Worker(context, params) {
override fun doWork(): Result {
- val dateTime = DateFormat.getDateTimeInstance().format(Calendar.getInstance().time)
- Log.d("UpdateWorker", "Started periodic data update on $dateTime")
+ 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/settingsScreen/SettingsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsFragment.kt
index 5946ff38..d63623d2 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
@@ -42,6 +42,8 @@ import com.rtbishop.look4sat.presentation.getNavResult
import com.rtbishop.look4sat.utility.isValidIPv4
import com.rtbishop.look4sat.utility.isValidPort
import dagger.hilt.android.AndroidEntryPoint
+import java.text.SimpleDateFormat
+import java.util.*
@AndroidEntryPoint
class SettingsFragment : Fragment(R.layout.fragment_settings) {
@@ -132,6 +134,7 @@ 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)
@@ -268,6 +271,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
when (state) {
is DataState.Success -> {
binding.settingsData.dataProgress.isIndeterminate = false
+ setUpdateTime(state.data)
viewModel.setUpdateHandled()
showToast(getString(R.string.data_success))
}
@@ -283,6 +287,16 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
}
}
+ private fun setUpdateTime(updateTime: Long) {
+ val updatePattern = getString(R.string.data_update)
+ val updateDate = if (updateTime == 0L) {
+ getString(R.string.pass_placeholder)
+ } else {
+ SimpleDateFormat("d MMM yyyy - HH:mm:ss", Locale.getDefault()).format(Date(updateTime))
+ }
+ binding.settingsData.dataUpdate.text = String.format(updatePattern, updateDate)
+ }
+
private fun showToast(message: String) {
Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
}
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 c718b8e8..234545d2 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
@@ -58,6 +58,8 @@ class SettingsViewModel @Inject constructor(
fun setUseUTC(value: Boolean) = settings.setUseUTC(value)
+ fun getUpdateTime(): Long = settings.getUpdateTime()
+
fun getUpdateEnabled(): Boolean = settings.getUpdateEnabled()
fun setUpdateEnabled(value: Boolean) {
diff --git a/app/src/main/res/layout/card_data.xml b/app/src/main/res/layout/card_data.xml
index f2999e85..826b8a1c 100644
--- a/app/src/main/res/layout/card_data.xml
+++ b/app/src/main/res/layout/card_data.xml
@@ -30,6 +30,17 @@
app:layout_constraintStart_toEndOf="@+id/data_title"
app:layout_constraintTop_toTopOf="@+id/data_title" />
+
+
+ app:layout_constraintStart_toStartOf="@+id/data_update"
+ app:layout_constraintTop_toBottomOf="@+id/data_update" />
Выбрать
Готово
Очистить
+ Очистить
Обновить
Карта
Фильтр
@@ -132,6 +133,7 @@
Обновление данных
При обновлении возникли ошибки
+ Обновлено: %s
Спутников: %s
Трансиверов: %s
Обновление прошло успешно
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 17d6ab7a..aa59898d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -133,6 +133,7 @@
Satellite data update
Update completed with errors
+ Last updated: %s
Satellites: %s
Transceivers: %s
Update completed successfully
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 734d11a1..b7b1525c 100644
--- a/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt
+++ b/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt
@@ -75,6 +75,10 @@ interface ISettingsManager {
fun setUseUTC(value: Boolean)
+ fun getUpdateTime(): Long
+
+ fun setUpdateTime(updateTime: Long)
+
fun getUpdateEnabled(): Boolean
fun setUpdateEnabled(value: 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 d12d2961..48d4e88a 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
@@ -62,7 +62,7 @@ class DataRepository(
delay(updateStateDelay)
entrySource.insertEntries(importSatellites(stream))
}
- _updateState.value = DataState.Success(0L)
+ setUpdateSuccessful()
}
}
@@ -102,7 +102,7 @@ class DataRepository(
}
}
entrySource.insertEntries(importedEntries)
- _updateState.value = DataState.Success(0L)
+ setUpdateSuccessful()
}
repositoryScope.launch(exceptionHandler) {
remoteSource.getDataStream(remoteSource.radioApi)?.let { stream ->
@@ -121,10 +121,15 @@ class DataRepository(
delay(updateStateDelay)
entrySource.deleteEntries()
radioSource.deleteRadios()
- _updateState.value = DataState.Success(0L)
+ setUpdateSuccessful(0L)
}
}
+ private fun setUpdateSuccessful(updateTime: Long = System.currentTimeMillis()) {
+ settingsManager.setUpdateTime(updateTime)
+ _updateState.value = DataState.Success(updateTime)
+ }
+
private suspend fun importSatellites(stream: InputStream): List {
return dataParser.parseTLEStream(stream).map { data -> SatEntry(data) }
}