103 lines
No EOL
3.5 KiB
Kotlin
103 lines
No EOL
3.5 KiB
Kotlin
package dev.jdtech.jellyfin.fragments
|
|
|
|
import android.os.Bundle
|
|
import android.view.*
|
|
import androidx.appcompat.widget.SearchView
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.fragment.app.viewModels
|
|
import androidx.navigation.fragment.findNavController
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import dev.jdtech.jellyfin.R
|
|
import dev.jdtech.jellyfin.adapters.CollectionListAdapter
|
|
import dev.jdtech.jellyfin.databinding.FragmentMediaBinding
|
|
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
|
import dev.jdtech.jellyfin.viewmodels.MediaViewModel
|
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
|
|
|
@AndroidEntryPoint
|
|
class MediaFragment : Fragment() {
|
|
|
|
private lateinit var binding: FragmentMediaBinding
|
|
private val viewModel: MediaViewModel by viewModels()
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setHasOptionsMenu(true)
|
|
}
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
|
inflater.inflate(R.menu.media_menu, menu)
|
|
|
|
val search = menu.findItem(R.id.action_search)
|
|
val searchView = search.actionView as SearchView
|
|
searchView.queryHint = "Search movies, shows, episodes..."
|
|
|
|
searchView.setOnQueryTextListener(object: SearchView.OnQueryTextListener {
|
|
override fun onQueryTextSubmit(p0: String?): Boolean {
|
|
if (p0 != null) {
|
|
navigateToSearchResultFragment(p0)
|
|
}
|
|
return true
|
|
}
|
|
|
|
override fun onQueryTextChange(p0: String?): Boolean {
|
|
return false
|
|
}
|
|
})
|
|
}
|
|
|
|
override fun onCreateView(
|
|
inflater: LayoutInflater,
|
|
container: ViewGroup?,
|
|
savedInstanceState: Bundle?
|
|
): View {
|
|
binding = FragmentMediaBinding.inflate(inflater, container, false)
|
|
|
|
binding.lifecycleOwner = viewLifecycleOwner
|
|
binding.viewModel = viewModel
|
|
binding.viewsRecyclerView.adapter =
|
|
CollectionListAdapter(CollectionListAdapter.OnClickListener { library ->
|
|
navigateToLibraryFragment(library)
|
|
})
|
|
|
|
viewModel.finishedLoading.observe(viewLifecycleOwner, {
|
|
binding.loadingIndicator.visibility = if (it) View.GONE else View.VISIBLE
|
|
})
|
|
|
|
viewModel.error.observe(viewLifecycleOwner, { error ->
|
|
if (error != null) {
|
|
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
|
binding.viewsRecyclerView.visibility = View.GONE
|
|
} else {
|
|
binding.errorLayout.errorPanel.visibility = View.GONE
|
|
binding.viewsRecyclerView.visibility = View.VISIBLE
|
|
}
|
|
})
|
|
|
|
binding.errorLayout.errorRetryButton.setOnClickListener {
|
|
viewModel.loadData()
|
|
}
|
|
|
|
binding.errorLayout.errorDetailsButton.setOnClickListener {
|
|
ErrorDialogFragment(viewModel.error.value ?: getString(R.string.unknown_error)).show(parentFragmentManager, "errordialog")
|
|
}
|
|
|
|
return binding.root
|
|
}
|
|
|
|
private fun navigateToLibraryFragment(library: BaseItemDto) {
|
|
findNavController().navigate(
|
|
MediaFragmentDirections.actionNavigationMediaToLibraryFragment(
|
|
library.id,
|
|
library.name,
|
|
library.collectionType,
|
|
)
|
|
)
|
|
}
|
|
|
|
private fun navigateToSearchResultFragment(query: String) {
|
|
findNavController().navigate(
|
|
MediaFragmentDirections.actionNavigationMediaToSearchResultFragment(query)
|
|
)
|
|
}
|
|
} |