v2.2.1 - Hotfix for ClassCastException in SharedPrefs

This commit is contained in:
Arty Bishop committed 2021-03-07 18:01:11 +00:00
1 parent dbae12a4e4
commit 6c78d17faf
7 files changed
+38 -39

No files matched your search

@@ -26,13 +26,13 @@ import com.squareup.moshi.Moshi
import com.squareup.moshi.Types
import javax.inject.Inject
class PrefsRepo @Inject constructor(val preferences: SharedPreferences, val moshi: Moshi) {
class PrefsRepo @Inject constructor(val preferences: SharedPreferences, moshi: Moshi) {
private val sourcesType = Types.newParameterizedType(List::class.java, TleSource::class.java)
private val sourcesAdapter = moshi.adapter<List<TleSource>>(sourcesType)
companion object {
const val keySources = "tleSources"
const val keySources = "sourcesListJson"
const val keyLatitude = "latitude"
const val keyLongitude = "longitude"
const val keyAltitude = "altitude"
@@ -99,16 +99,16 @@ class PrefsRepo @Inject constructor(val preferences: SharedPreferences, val mosh
}
fun loadTleSources(): List<TleSource> {
preferences.getString(keySources, null)?.let { sourcesJson ->
sourcesAdapter.fromJson(sourcesJson)?.let { loadedSources ->
return if (loadedSources.isNotEmpty()) {
loadedSources
} else {
loadDefaultSources()
}
return try {
val sourcesString = preferences.getString(keySources, String())
if (sourcesString.isNullOrEmpty()) {
loadDefaultSources()
} else {
sourcesAdapter.fromJson(sourcesString) ?: loadDefaultSources()
}
} catch (exception: ClassCastException) {
loadDefaultSources()
}
return loadDefaultSources()
}
fun saveTleSources(sources: List<TleSource>) {
@@ -56,7 +56,7 @@ class SharedViewModel @Inject constructor(
}
}
fun getSources() = liveData { emit(prefsRepo.loadTleSources()) }
fun getSources() = prefsRepo.loadTleSources()
fun getSatItems() = satelliteRepo.getSatItems().asLiveData()
fun getPasses(): LiveData<Result<MutableList<SatPass>>> = _passes
fun getTransmittersForSat(satId: Int) =
@@ -45,7 +45,9 @@ class InfoFragment : Fragment(R.layout.fragment_info) {
infoBmc.setOnClickListener {
gotoUrl("https://www.buymeacoffee.com/rtbishop")
}
infoThanks.movementMethod = LinkMovementMethod.getInstance()
val moveMethod = LinkMovementMethod.getInstance()
infoThanks.movementMethod = moveMethod
infoWarranty.movementMethod = moveMethod
}
}
@@ -41,27 +41,24 @@ class SourcesDialog : AppCompatDialogFragment() {
override fun onViewCreated(view: View, state: Bundle?) {
super.onViewCreated(view, state)
viewModel.getSources().observe(viewLifecycleOwner, { sources ->
val sourcesAdapter = SourcesAdapter()
sourcesAdapter.setSources(sources)
DialogSourcesBinding.bind(view).apply {
dialog?.window?.setLayout(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT
)
tleSourcesRecycler.apply {
adapter = sourcesAdapter
layoutManager = LinearLayoutManager(requireContext())
}
tleSourceBtnAdd.setOnClickListener {
sourcesAdapter.addSource()
}
tleSourcesBtnPos.setOnClickListener {
viewModel.updateEntriesFromSources(sourcesAdapter.getSources())
dismiss()
}
tleSourcesBtnNeg.setOnClickListener { dismiss() }
val sourcesAdapter = SourcesAdapter().apply { setSources(viewModel.getSources()) }
DialogSourcesBinding.bind(view).apply {
dialog?.window?.setLayout(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT
)
tleSourcesRecycler.apply {
adapter = sourcesAdapter
layoutManager = LinearLayoutManager(requireContext())
}
})
tleSourceBtnAdd.setOnClickListener {
sourcesAdapter.addSource()
}
tleSourcesBtnPos.setOnClickListener {
viewModel.updateEntriesFromSources(sourcesAdapter.getSources())
dismiss()
}
tleSourcesBtnNeg.setOnClickListener { dismiss() }
}
}
}