RequestFragment.kt 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package io.r_a_d.radio2.ui.songs.request
  2. import android.os.Bundle
  3. import android.util.Log
  4. import android.view.LayoutInflater
  5. import android.view.View
  6. import android.view.ViewGroup
  7. import android.widget.SearchView
  8. import androidx.fragment.app.Fragment
  9. import androidx.lifecycle.Observer
  10. import androidx.recyclerview.widget.LinearLayoutManager
  11. import androidx.recyclerview.widget.RecyclerView
  12. import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
  13. import io.r_a_d.radio2.R
  14. class RequestFragment : Fragment() {
  15. private lateinit var recyclerView: RecyclerView
  16. private lateinit var viewAdapter: RecyclerView.Adapter<*>
  17. private lateinit var viewManager: RecyclerView.LayoutManager
  18. private lateinit var searchView: SearchView
  19. private val listener : SearchView.OnQueryTextListener = object : SearchView.OnQueryTextListener{
  20. override fun onQueryTextSubmit(query: String?): Boolean {
  21. if (query == null || query.isEmpty())
  22. Requestor.instance.snackBarText.value = "Field is empty, no search possible."
  23. else
  24. Requestor.instance.search(query)
  25. return true
  26. }
  27. override fun onQueryTextChange(newText: String?): Boolean {
  28. if (newText == "")
  29. {
  30. Requestor.instance.reset()
  31. viewAdapter.notifyDataSetChanged() // this is to remove the "Load more" button
  32. }
  33. return true
  34. }
  35. }
  36. private val requestSongObserver = Observer<Boolean> {
  37. Log.d(tag, "request song list changed")
  38. viewAdapter.notifyDataSetChanged()
  39. }
  40. override fun onCreateView(
  41. inflater: LayoutInflater, container: ViewGroup?,
  42. savedInstanceState: Bundle?
  43. ): View? {
  44. // Inflate the layout for this fragment
  45. val root = inflater.inflate(R.layout.fragment_request, container, false)
  46. val recyclerSwipe = root.findViewById(R.id.recyclerSwipe) as SwipeRefreshLayout
  47. recyclerSwipe.isEnabled = false // don't need to pull-to-refresh for Request
  48. searchView = root.findViewById(R.id.searchBox)
  49. searchView.setOnQueryTextListener(listener)
  50. viewManager = LinearLayoutManager(context)
  51. viewAdapter = RequestSongAdapter(Requestor.instance.requestSongArray)
  52. recyclerView = root.findViewById<RecyclerView>(R.id.request_recycler).apply {
  53. // use this setting to improve performance if you know that changes
  54. // in content do not change the layout size of the RecyclerView
  55. setHasFixedSize(true)
  56. // use a linear layout manager
  57. layoutManager = viewManager
  58. // specify an viewAdapter (see also next example)
  59. adapter = viewAdapter
  60. }
  61. Requestor.instance.isRequestResultUpdated.observe(viewLifecycleOwner, requestSongObserver)
  62. return root
  63. }
  64. companion object {
  65. @JvmStatic
  66. fun newInstance() = RequestFragment()
  67. }
  68. }