kopia lustrzana https://github.com/rt-bishop/Look4Sat
Fixed satellite entries search behaviour
rodzic
747a7620b0
commit
f89a462216
|
@ -22,15 +22,88 @@ package com.rtbishop.look4sat.ui.adapters
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.SearchView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.rtbishop.look4sat.data.SatEntry
|
||||
import com.rtbishop.look4sat.databinding.ItemSatEntryBinding
|
||||
import java.util.*
|
||||
|
||||
class EntriesAdapter(private var entries: MutableList<SatEntry> = mutableListOf()) :
|
||||
RecyclerView.Adapter<EntriesAdapter.SatEntryHolder>() {
|
||||
class EntriesAdapter : RecyclerView.Adapter<EntriesAdapter.SatEntryHolder>(),
|
||||
SearchView.OnQueryTextListener {
|
||||
|
||||
private var selectAllToggle = true
|
||||
private var shouldSearchAll = true
|
||||
private var allEntries = mutableListOf<SatEntry>()
|
||||
private var currentEntries = mutableListOf<SatEntry>()
|
||||
|
||||
fun getEntries(): MutableList<SatEntry> {
|
||||
return allEntries
|
||||
}
|
||||
|
||||
fun setEntries(list: MutableList<SatEntry>) {
|
||||
allEntries = list
|
||||
currentEntries = list
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun selectAll() {
|
||||
shouldSearchAll = if (shouldSearchAll) {
|
||||
currentEntries.forEach { it.isSelected = true }
|
||||
notifyDataSetChanged()
|
||||
false
|
||||
} else {
|
||||
currentEntries.forEach { it.isSelected = false }
|
||||
notifyDataSetChanged()
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
private fun filterEntries(list: MutableList<SatEntry>, query: String): MutableList<SatEntry> {
|
||||
if (query.isEmpty()) return list
|
||||
return try {
|
||||
filterByCatNum(list, query.toInt())
|
||||
} catch (e: NumberFormatException) {
|
||||
filterByName(list, query)
|
||||
}
|
||||
}
|
||||
|
||||
private fun filterByCatNum(list: MutableList<SatEntry>, catNum: Int): MutableList<SatEntry> {
|
||||
return list.filter { it.catNum == catNum } as MutableList
|
||||
}
|
||||
|
||||
private fun filterByName(list: MutableList<SatEntry>, query: String): MutableList<SatEntry> {
|
||||
val defaultLocale = Locale.getDefault()
|
||||
val filteredList = mutableListOf<SatEntry>()
|
||||
val searchQuery = query.toLowerCase(defaultLocale)
|
||||
list.forEach {
|
||||
val entryName = it.name.toLowerCase(defaultLocale)
|
||||
if (entryName.contains(searchQuery)) filteredList.add(it)
|
||||
}
|
||||
return filteredList
|
||||
}
|
||||
|
||||
override fun onQueryTextChange(newText: String): Boolean {
|
||||
currentEntries = filterEntries(getEntries(), newText)
|
||||
notifyDataSetChanged()
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onQueryTextSubmit(query: String): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SatEntryHolder {
|
||||
val binding = ItemSatEntryBinding
|
||||
.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
return SatEntryHolder(binding.root, binding)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: SatEntryHolder, position: Int) {
|
||||
holder.bind(currentEntries[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return currentEntries.size
|
||||
}
|
||||
|
||||
inner class SatEntryHolder(itemView: View, private val binding: ItemSatEntryBinding) :
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
|
@ -43,65 +116,4 @@ class EntriesAdapter(private var entries: MutableList<SatEntry> = mutableListOf(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SatEntryHolder {
|
||||
val binding = ItemSatEntryBinding
|
||||
.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
return SatEntryHolder(binding.root, binding)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: SatEntryHolder, position: Int) {
|
||||
holder.bind(entries[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return entries.size
|
||||
}
|
||||
|
||||
fun getEntries(): MutableList<SatEntry> {
|
||||
return entries
|
||||
}
|
||||
|
||||
fun setEntries(list: MutableList<SatEntry>) {
|
||||
entries = list
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun selectAll() {
|
||||
selectAllToggle = if (selectAllToggle) {
|
||||
val currentList = getEntries()
|
||||
currentList.forEach { it.isSelected = true }
|
||||
setEntries(currentList)
|
||||
false
|
||||
} else {
|
||||
val currentList = getEntries()
|
||||
currentList.forEach { it.isSelected = false }
|
||||
setEntries(currentList)
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
fun filterEntries(list: MutableList<SatEntry>, query: String): MutableList<SatEntry> {
|
||||
if (query.isEmpty()) return list
|
||||
return try {
|
||||
filterByCatNum(list, query.toInt())
|
||||
} catch (e: NumberFormatException) {
|
||||
filterByName(list, query)
|
||||
}
|
||||
}
|
||||
|
||||
private fun filterByCatNum(list: MutableList<SatEntry>, catNum: Int): MutableList<SatEntry> {
|
||||
val filteredList = list.filter { it.catNum == catNum }
|
||||
return filteredList as MutableList<SatEntry>
|
||||
}
|
||||
|
||||
private fun filterByName(list: MutableList<SatEntry>, query: String): MutableList<SatEntry> {
|
||||
val searchQuery = query.toLowerCase(Locale.getDefault())
|
||||
val filteredList = mutableListOf<SatEntry>()
|
||||
list.forEach {
|
||||
val entryName = it.name.toLowerCase(Locale.getDefault())
|
||||
if (entryName.contains(searchQuery)) filteredList.add(it)
|
||||
}
|
||||
return filteredList
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.rtbishop.look4sat.ui.fragments
|
|||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.SearchView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
|
@ -22,8 +21,7 @@ import com.rtbishop.look4sat.ui.adapters.EntriesAdapter
|
|||
import javax.inject.Inject
|
||||
|
||||
class EntriesFragment : Fragment(R.layout.fragment_entries),
|
||||
SourcesDialog.SourcesSubmitListener,
|
||||
SearchView.OnQueryTextListener {
|
||||
SourcesDialog.SourcesSubmitListener {
|
||||
|
||||
@Inject
|
||||
lateinit var factory: ViewModelFactory
|
||||
|
@ -47,7 +45,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries),
|
|||
binding.apply {
|
||||
importWeb.setOnClickListener { showSourcesDialog() }
|
||||
importFile.setOnClickListener { showFileDialog() }
|
||||
searchBar.setOnQueryTextListener(this@EntriesFragment)
|
||||
searchBar.setOnQueryTextListener(entriesAdapter)
|
||||
selectAll.setOnClickListener { entriesAdapter.selectAll() }
|
||||
entriesRecycler.apply {
|
||||
val linearLayoutMgr = LinearLayoutManager(requireContext())
|
||||
|
@ -111,14 +109,4 @@ class EntriesFragment : Fragment(R.layout.fragment_entries),
|
|||
viewModel.updateEntriesSelection(catNumList)
|
||||
requireView().findNavController().navigate(R.id.action_entries_to_passes)
|
||||
}
|
||||
|
||||
override fun onQueryTextChange(newText: String): Boolean {
|
||||
val filteredList = entriesAdapter.filterEntries(entriesAdapter.getEntries(), newText)
|
||||
entriesAdapter.setEntries(filteredList)
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onQueryTextSubmit(query: String): Boolean {
|
||||
return false
|
||||
}
|
||||
}
|
Ładowanie…
Reference in New Issue