mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-05 12:07:25 +00:00
Fixed satellite entries search behaviour
This commit is contained in:
1 parent
747a7620b0
commit
f89a462216
2 files changed
+78
-78
No files matched your search
@@ -22,15 +22,88 @@ package com.rtbishop.look4sat.ui.adapters
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.SearchView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.rtbishop.look4sat.data.SatEntry
|
import com.rtbishop.look4sat.data.SatEntry
|
||||||
import com.rtbishop.look4sat.databinding.ItemSatEntryBinding
|
import com.rtbishop.look4sat.databinding.ItemSatEntryBinding
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class EntriesAdapter(private var entries: MutableList<SatEntry> = mutableListOf()) :
|
class EntriesAdapter : RecyclerView.Adapter<EntriesAdapter.SatEntryHolder>(),
|
||||||
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) :
|
inner class SatEntryHolder(itemView: View, private val binding: ItemSatEntryBinding) :
|
||||||
RecyclerView.ViewHolder(itemView) {
|
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.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.SearchView
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.res.ResourcesCompat
|
import androidx.core.content.res.ResourcesCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
@@ -22,8 +21,7 @@ import com.rtbishop.look4sat.ui.adapters.EntriesAdapter
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class EntriesFragment : Fragment(R.layout.fragment_entries),
|
class EntriesFragment : Fragment(R.layout.fragment_entries),
|
||||||
SourcesDialog.SourcesSubmitListener,
|
SourcesDialog.SourcesSubmitListener {
|
||||||
SearchView.OnQueryTextListener {
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var factory: ViewModelFactory
|
lateinit var factory: ViewModelFactory
|
||||||
@@ -47,7 +45,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries),
|
|||||||
binding.apply {
|
binding.apply {
|
||||||
importWeb.setOnClickListener { showSourcesDialog() }
|
importWeb.setOnClickListener { showSourcesDialog() }
|
||||||
importFile.setOnClickListener { showFileDialog() }
|
importFile.setOnClickListener { showFileDialog() }
|
||||||
searchBar.setOnQueryTextListener(this@EntriesFragment)
|
searchBar.setOnQueryTextListener(entriesAdapter)
|
||||||
selectAll.setOnClickListener { entriesAdapter.selectAll() }
|
selectAll.setOnClickListener { entriesAdapter.selectAll() }
|
||||||
entriesRecycler.apply {
|
entriesRecycler.apply {
|
||||||
val linearLayoutMgr = LinearLayoutManager(requireContext())
|
val linearLayoutMgr = LinearLayoutManager(requireContext())
|
||||||
@@ -111,14 +109,4 @@ class EntriesFragment : Fragment(R.layout.fragment_entries),
|
|||||||
viewModel.updateEntriesSelection(catNumList)
|
viewModel.updateEntriesSelection(catNumList)
|
||||||
requireView().findNavController().navigate(R.id.action_entries_to_passes)
|
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user