mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-05 12:07:25 +00:00
Added basic SatTypes spinner to EntriesFragment.kt
This commit is contained in:
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)
|
||||
|
||||
+16
-1
@@ -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 } }
|
||||
|
||||
+3
-2
@@ -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() }
|
||||
|
||||
+3
-2
@@ -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() {
|
||||
|
||||
Reference in new issue
Block a user