Added basic SatTypes spinner to EntriesFragment.kt

This commit is contained in:
Arty Bishop committed 2022-05-18 19:00:48 +01:00
1 parent 53697ef0c4
commit 7653de2cee
6 files changed
+63 -13

No files matched your search

@@ -19,6 +19,8 @@ package com.rtbishop.look4sat.presentation.entriesScreen
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.core.widget.doOnTextChanged
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
@@ -67,6 +69,29 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
}
entriesBtnSelect.clickWithDebounce { viewModel.selectCurrentItems(true) }
entriesBtnClear.clickWithDebounce { viewModel.selectCurrentItems(false) }
val spinnerListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>, view: View?,
position: Int, id: Long
) {
viewModel.setSatType(parent.getItemAtPosition(position).toString())
}
override fun onNothingSelected(parent: AdapterView<*>) {
viewModel.setSatType(String())
}
}
ArrayAdapter(
requireContext(),
android.R.layout.simple_spinner_item,
viewModel.satTypes
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
entriesSpinner.onItemSelectedListener = spinnerListener
entriesSpinner.adapter = adapter
}
}
viewModel.satData.observe(viewLifecycleOwner) { satData ->
handleSatData(satData, entriesAdapter)
@@ -33,19 +33,28 @@ class EntriesViewModel @Inject constructor(
private val settings: ISettingsManager
) : ViewModel(), EntriesAdapter.EntriesClickListener {
private val satType = MutableLiveData(String())
private val transModes = MutableLiveData(settings.loadModesSelection())
private val currentQuery = MutableLiveData(String())
private val itemsFromRepo = liveData {
delay(125)
emit(loadEntriesWithSelection())
} as MutableLiveData
private val itemsWithType = satType.switchMap { type ->
itemsFromRepo.map { items -> filterByType(items, type) }
}
private val itemsWithModes = transModes.switchMap { modes ->
itemsFromRepo.map { items -> filterByModes(items, modes) }
itemsWithType.map { items -> filterByModes(items, modes) }
}
private val itemsWithQuery = currentQuery.switchMap { query ->
itemsWithModes.map { items -> filterByQuery(items, query) }
}
val satData = itemsWithQuery.map { items -> DataState.Success(items) }
val satTypes: List<String> = settings.sourcesMap.keys.sorted()
fun setSatType(type: String) {
satType.value = type
}
fun selectCurrentItems(selectAll: Boolean) {
itemsWithQuery.value?.let { itemsWithQuery ->
@@ -83,6 +92,12 @@ class EntriesViewModel @Inject constructor(
return repository.getEntriesWithModes().onEach { it.isSelected = it.catnum in selectedIds }
}
private fun filterByType(items: List<SatItem>, type: String): List<SatItem> {
val catnums = settings.loadSatType(type)
if (catnums.isEmpty()) return items
return items.filter { item -> item.catnum in catnums }
}
private fun filterByModes(items: List<SatItem>, modes: List<String>): List<SatItem> {
if (modes.isEmpty()) return items
return items.filter { item -> item.modes.any { mode -> mode in modes } }
@@ -133,8 +133,9 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
private fun setupDataCard() {
binding.run {
settingsData.dataBtnWeb.clickWithDebounce {
val action = SettingsFragmentDirections.settingsToSources()
findNavController().navigate(action)
// val action = SettingsFragmentDirections.settingsToSources()
// findNavController().navigate(action)
viewModel.updateDataFromWeb(emptyList())
}
settingsData.dataBtnFile.clickWithDebounce { contentRequest.launch("*/*") }
settingsData.dataBtnClear.clickWithDebounce { viewModel.clearData() }
@@ -43,8 +43,9 @@ class SettingsViewModel @Inject constructor(
}
fun updateDataFromWeb(sources: List<String>) {
settings.saveDataSources(sources)
repository.updateFromWeb(sources)
// settings.saveDataSources(sources)
// repository.updateFromWeb(sources)
repository.updateFromWebNew()
}
fun clearData() {