SongsFragment.kt 3.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package io.r_a_d.radio2.ui.songs
  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.TextView
  8. import androidx.fragment.app.Fragment
  9. import androidx.fragment.app.FragmentPagerAdapter
  10. import androidx.lifecycle.Observer
  11. import androidx.lifecycle.ViewModelProviders
  12. import androidx.viewpager.widget.ViewPager
  13. import com.google.android.material.snackbar.BaseTransientBottomBar
  14. import com.google.android.material.snackbar.Snackbar
  15. import com.google.android.material.tabs.TabLayout
  16. import io.r_a_d.radio2.R
  17. import io.r_a_d.radio2.preferenceStore
  18. import io.r_a_d.radio2.ui.songs.queuelp.LastPlayedFragment
  19. import io.r_a_d.radio2.ui.songs.queuelp.QueueFragment
  20. import io.r_a_d.radio2.ui.songs.request.FavoritesFragment
  21. import io.r_a_d.radio2.ui.songs.request.RequestFragment
  22. import io.r_a_d.radio2.ui.songs.request.Requestor
  23. class SongsFragment : Fragment() {
  24. private lateinit var adapter : SongsPagerAdapter
  25. private lateinit var snackBar : Snackbar
  26. private lateinit var root: View
  27. private lateinit var viewPager: ViewPager
  28. private val snackBarTextObserver: Observer<String?> = Observer {
  29. if (Requestor.instance.snackBarText.value != "")
  30. {
  31. val snackBarLength = if (preferenceStore.getBoolean("snackbarPersistent", true))
  32. Snackbar.LENGTH_INDEFINITE
  33. else Snackbar.LENGTH_LONG
  34. snackBar = Snackbar.make(viewPager, "", snackBarLength)
  35. if (snackBarLength == Snackbar.LENGTH_INDEFINITE)
  36. snackBar.setAction("OK") {
  37. snackBar.dismiss()
  38. }
  39. snackBar.behavior = BaseTransientBottomBar.Behavior().apply {
  40. setSwipeDirection(BaseTransientBottomBar.Behavior.SWIPE_DIRECTION_ANY)
  41. }
  42. val snackBarView = snackBar.view
  43. val textView =
  44. snackBarView.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
  45. if (Requestor.instance.addRequestMeta != "")
  46. textView.maxLines = 4
  47. else
  48. textView.maxLines = 2
  49. snackBar.setText((it as CharSequence))
  50. snackBar.show()
  51. Requestor.instance.snackBarText.value = "" // resetting afterwards to avoid re-triggering it when we enter again the fragment
  52. Requestor.instance.addRequestMeta = ""
  53. }
  54. }
  55. override fun onCreateView(
  56. inflater: LayoutInflater,
  57. container: ViewGroup?,
  58. savedInstanceState: Bundle?
  59. ): View? {
  60. root = inflater.inflate(R.layout.fragment_songs, container, false)
  61. viewPager = root.findViewById(R.id.tabPager)
  62. adapter = SongsPagerAdapter(childFragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
  63. adapter.addFragment(LastPlayedFragment.newInstance(), "last played")
  64. adapter.addFragment(QueueFragment.newInstance(), "queue")
  65. adapter.addFragment(RequestFragment.newInstance(), "request")
  66. adapter.addFragment(FavoritesFragment.newInstance(), "Favorites")
  67. viewPager.adapter = adapter
  68. val tabLayout : TabLayout = root.findViewById(R.id.tabLayout)
  69. tabLayout.setupWithViewPager(viewPager)
  70. Log.d(tag, "SongFragment view created")
  71. Requestor.instance.snackBarText.observeForever(snackBarTextObserver)
  72. return root
  73. }
  74. override fun onDestroyView() {
  75. Requestor.instance.snackBarText.removeObserver(snackBarTextObserver)
  76. super.onDestroyView()
  77. }
  78. }