kopia lustrzana https://github.com/rt-bishop/Look4Sat
Added recent data update info
rodzic
e531eb85e3
commit
1685691d2f
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -75,6 +75,10 @@ interface ISettingsManager {
|
|||
|
||||
fun setUseUTC(value: Boolean)
|
||||
|
||||
fun getUpdateTime(): Long
|
||||
|
||||
fun setUpdateTime(updateTime: Long)
|
||||
|
||||
fun getUpdateEnabled(): Boolean
|
||||
|
||||
fun setUpdateEnabled(value: Boolean)
|
||||
|
|
|
@ -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) }
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue