From 1685691d2fb25e7ea3c1bd3dc618ebf69004d5bb Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sun, 28 Aug 2022 14:20:55 +0100 Subject: [PATCH] Added recent data update info --- .../look4sat/framework/SettingsManager.kt | 9 +++++++++ .../rtbishop/look4sat/framework/UpdateManager.kt | 8 ++++---- .../settingsScreen/SettingsFragment.kt | 14 ++++++++++++++ .../settingsScreen/SettingsViewModel.kt | 2 ++ app/src/main/res/layout/card_data.xml | 15 +++++++++++++-- app/src/main/res/values-ru/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 1 + .../rtbishop/look4sat/domain/ISettingsManager.kt | 4 ++++ .../look4sat/domain/data/DataRepository.kt | 11 ++++++++--- 9 files changed, 57 insertions(+), 9 deletions(-) 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) } }