Added recent data update info

pull/102/head
Arty Bishop 2022-08-28 14:20:55 +01:00 zatwierdzone przez Arty Bishop
rodzic e531eb85e3
commit 1685691d2f
9 zmienionych plików z 57 dodań i 9 usunięć

Wyświetl plik

@ -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)
}

Wyświetl plik

@ -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()
}

Wyświetl plik

@ -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()
}

Wyświetl plik

@ -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) {

Wyświetl plik

@ -30,6 +30,17 @@
app:layout_constraintStart_toEndOf="@+id/data_title"
app:layout_constraintTop_toTopOf="@+id/data_title" />
<TextView
android:id="@+id/data_update"
style="@style/SettingsText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/data_update"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="@+id/data_title"
app:layout_constraintTop_toBottomOf="@+id/data_title" />
<TextView
android:id="@+id/data_entries"
style="@style/SettingsText"
@ -40,8 +51,8 @@
app:layout_constraintEnd_toStartOf="@+id/data_radios"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="@+id/data_title"
app:layout_constraintTop_toBottomOf="@+id/data_title" />
app:layout_constraintStart_toStartOf="@+id/data_update"
app:layout_constraintTop_toBottomOf="@+id/data_update" />
<TextView
android:id="@+id/data_radios"

Wyświetl plik

@ -15,6 +15,7 @@
<string name="btn_select">Выбрать</string>
<string name="btn_done">Готово</string>
<string name="btn_clear">Очистить</string>
<string name="btn_clear_all">Очистить</string>
<string name="btn_refresh">Обновить</string>
<string name="btn_map">Карта</string>
<string name="btn_filter">Фильтр</string>
@ -132,6 +133,7 @@
<string name="data_title">Обновление данных</string>
<string name="data_error">При обновлении возникли ошибки</string>
<string name="data_update">Обновлено: %s</string>
<string name="data_entries">Спутников: %s</string>
<string name="data_radios">Трансиверов: %s</string>
<string name="data_success">Обновление прошло успешно</string>

Wyświetl plik

@ -133,6 +133,7 @@
<string name="data_title">Satellite data update</string>
<string name="data_error">Update completed with errors</string>
<string name="data_update">Last updated: %s</string>
<string name="data_entries">Satellites: %s</string>
<string name="data_radios">Transceivers: %s</string>
<string name="data_success">Update completed successfully</string>

Wyświetl plik

@ -75,6 +75,10 @@ interface ISettingsManager {
fun setUseUTC(value: Boolean)
fun getUpdateTime(): Long
fun setUpdateTime(updateTime: Long)
fun getUpdateEnabled(): Boolean
fun setUpdateEnabled(value: Boolean)

Wyświetl plik

@ -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<SatEntry> {
return dataParser.parseTLEStream(stream).map { data -> SatEntry(data) }
}