From 57eb0a7a388693642a916ba4bc713bb1679e9ba8 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sat, 10 Oct 2020 22:30:24 +0100 Subject: [PATCH] Added Event.kt class for exceptions handling and showing --- .../com/rtbishop/look4sat/SharedViewModel.kt | 27 +++++++++++++------ .../java/com/rtbishop/look4sat/data/Event.kt | 17 ++++++++++++ .../look4sat/ui/fragments/EntriesFragment.kt | 6 +++++ app/src/main/res/values-ru/strings.xml | 3 +-- app/src/main/res/values/strings.xml | 3 +-- 5 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/rtbishop/look4sat/data/Event.kt diff --git a/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt index e25dcd30..1e416c00 100644 --- a/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt @@ -24,10 +24,7 @@ import androidx.hilt.Assisted import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.* import com.github.amsacode.predict4java.GroundStationPosition -import com.rtbishop.look4sat.data.Result -import com.rtbishop.look4sat.data.SatEntry -import com.rtbishop.look4sat.data.SatPass -import com.rtbishop.look4sat.data.TleSource +import com.rtbishop.look4sat.data.* import com.rtbishop.look4sat.repo.EntriesRepo import com.rtbishop.look4sat.repo.SourcesRepo import com.rtbishop.look4sat.repo.TransmittersRepo @@ -50,6 +47,7 @@ class SharedViewModel @ViewModelInject constructor( private val _currentTimeMillis = MutableLiveData(System.currentTimeMillis()) private val _passes = MutableLiveData>>() + private val _appEvent = MutableLiveData>() private var selectedEntries = emptyList() private var shouldTriggerCalculation = true @@ -64,8 +62,13 @@ class SharedViewModel @ViewModelInject constructor( fun getEntries() = entriesRepo.getEntries() fun getCurrentTimeMillis(): LiveData = _currentTimeMillis fun getPasses(): LiveData>> = _passes + fun getAppEvent(): LiveData> = _appEvent fun getTransmittersForSat(satId: Int) = transmittersRepo.getTransmittersForSat(satId) + fun postAppEvent(event: Event) { + _appEvent.value = event + } + fun triggerCalculation() { if (shouldTriggerCalculation) { shouldTriggerCalculation = false @@ -79,15 +82,23 @@ class SharedViewModel @ViewModelInject constructor( fun updateEntriesFromFile(uri: Uri) { viewModelScope.launch { - entriesRepo.updateEntriesFromFile(uri) + try { + entriesRepo.updateEntriesFromFile(uri) + } catch (exception: Exception) { + postAppEvent(Event(exception)) + } } } fun updateEntriesFromSources(sources: List) { viewModelScope.launch { - sourcesRepo.updateSources(sources) - entriesRepo.updateEntriesFromSources(sources) - transmittersRepo.updateTransmitters() + try { + sourcesRepo.updateSources(sources) + entriesRepo.updateEntriesFromSources(sources) + transmittersRepo.updateTransmitters() + } catch (exception: Exception) { + postAppEvent(Event(exception)) + } } } diff --git a/app/src/main/java/com/rtbishop/look4sat/data/Event.kt b/app/src/main/java/com/rtbishop/look4sat/data/Event.kt new file mode 100644 index 00000000..d44d7704 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/data/Event.kt @@ -0,0 +1,17 @@ +package com.rtbishop.look4sat.data + +class Event(private val content: T) { + + private var hasBeenHandled = false + + fun getContentIfNotHandled(): T? { + return if (hasBeenHandled) { + null + } else { + hasBeenHandled = true + content + } + } + + fun peekContent(): T = content +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt index 67c08b75..27a556e3 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt @@ -16,6 +16,7 @@ import com.rtbishop.look4sat.data.SatEntry import com.rtbishop.look4sat.data.TleSource import com.rtbishop.look4sat.databinding.FragmentEntriesBinding import com.rtbishop.look4sat.ui.adapters.EntriesAdapter +import com.rtbishop.look4sat.utility.Utilities.snack import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -62,6 +63,11 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) { viewModel.setSelectedEntries(it) entriesAdapter.setEntries(it as MutableList) }) + viewModel.getAppEvent().observe(viewLifecycleOwner, { event -> + event.getContentIfNotHandled()?.let { + getString(R.string.error_updating_data).snack(requireView()) + } + }) } private fun showImportFromWebDialog() { diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 3a95c0e5..6f50f684 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -51,8 +51,7 @@ Тек. нисход: нет Не найдены трансиверы для этого спутника - Пожалуйста, обновите данные спутников - Пожалуйста, введите значение + Ошибка импорта спутников НПС — %2d° %2d° — КПС diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b61e39d7..124efa06 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -52,8 +52,7 @@ Curr. downlink: null No transceivers found for this satellite - Please, update satellite data - Please, enter the value + Error importing satellite data %s ID: %d