131 lines
No EOL
4.2 KiB
Kotlin
131 lines
No EOL
4.2 KiB
Kotlin
package dev.jdtech.jellyfin.fragments
|
|
|
|
import android.os.Bundle
|
|
import android.view.*
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.fragment.app.viewModels
|
|
import androidx.navigation.fragment.findNavController
|
|
import com.google.android.material.snackbar.Snackbar
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import dev.jdtech.jellyfin.R
|
|
import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter
|
|
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
|
import dev.jdtech.jellyfin.adapters.ViewListAdapter
|
|
import dev.jdtech.jellyfin.databinding.FragmentHomeBinding
|
|
import dev.jdtech.jellyfin.viewmodels.HomeViewModel
|
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
|
|
|
@AndroidEntryPoint
|
|
class HomeFragment : Fragment() {
|
|
|
|
private lateinit var binding: FragmentHomeBinding
|
|
private val viewModel: HomeViewModel by viewModels()
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setHasOptionsMenu(true)
|
|
|
|
findNavController().graph.startDestination = R.id.homeFragment
|
|
}
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
|
inflater.inflate(R.menu.home_menu, menu)
|
|
}
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
return when (item.itemId) {
|
|
R.id.action_settings -> {
|
|
navigateToSettingsFragment()
|
|
true
|
|
}
|
|
else -> super.onOptionsItemSelected(item)
|
|
}
|
|
}
|
|
|
|
override fun onCreateView(
|
|
inflater: LayoutInflater,
|
|
container: ViewGroup?,
|
|
savedInstanceState: Bundle?
|
|
): View {
|
|
binding = FragmentHomeBinding.inflate(inflater, container, false)
|
|
|
|
val snackbar =
|
|
Snackbar.make(binding.mainLayout, getString(R.string.error_loading_data), Snackbar.LENGTH_INDEFINITE)
|
|
snackbar.setAction(getString(R.string.retry)) {
|
|
viewModel.loadData()
|
|
}
|
|
|
|
binding.lifecycleOwner = viewLifecycleOwner
|
|
binding.viewModel = viewModel
|
|
binding.viewsRecyclerView.adapter = ViewListAdapter(ViewListAdapter.OnClickListener {
|
|
navigateToLibraryFragment(it)
|
|
}, ViewItemListAdapter.OnClickListener {
|
|
navigateToMediaInfoFragment(it)
|
|
}, HomeEpisodeListAdapter.OnClickListener { item ->
|
|
when (item.type) {
|
|
"Episode" -> {
|
|
navigateToEpisodeBottomSheetFragment(item)
|
|
}
|
|
"Movie" -> {
|
|
navigateToMediaInfoFragment(item)
|
|
}
|
|
}
|
|
|
|
})
|
|
|
|
viewModel.finishedLoading.observe(viewLifecycleOwner, {
|
|
binding.loadingIndicator.visibility = if (it) View.GONE else View.VISIBLE
|
|
})
|
|
|
|
viewModel.error.observe(viewLifecycleOwner, { error ->
|
|
if (error) {
|
|
snackbar.show()
|
|
}
|
|
})
|
|
|
|
return binding.root
|
|
}
|
|
|
|
private fun navigateToLibraryFragment(view: dev.jdtech.jellyfin.models.View) {
|
|
findNavController().navigate(
|
|
HomeFragmentDirections.actionNavigationHomeToLibraryFragment(
|
|
view.id,
|
|
view.name
|
|
)
|
|
)
|
|
}
|
|
|
|
private fun navigateToMediaInfoFragment(item: BaseItemDto) {
|
|
if (item.type == "Episode") {
|
|
findNavController().navigate(
|
|
HomeFragmentDirections.actionNavigationHomeToMediaInfoFragment(
|
|
item.seriesId!!,
|
|
item.seriesName,
|
|
"Series"
|
|
)
|
|
)
|
|
} else {
|
|
findNavController().navigate(
|
|
HomeFragmentDirections.actionNavigationHomeToMediaInfoFragment(
|
|
item.id,
|
|
item.name,
|
|
item.type ?: "Unknown"
|
|
)
|
|
)
|
|
}
|
|
}
|
|
|
|
private fun navigateToEpisodeBottomSheetFragment(episode: BaseItemDto) {
|
|
findNavController().navigate(
|
|
HomeFragmentDirections.actionNavigationHomeToEpisodeBottomSheetFragment(
|
|
episode.id
|
|
)
|
|
)
|
|
}
|
|
|
|
private fun navigateToSettingsFragment() {
|
|
findNavController().navigate(
|
|
HomeFragmentDirections.actionNavigationHomeToNavigationSettings()
|
|
)
|
|
}
|
|
} |