diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemListAdapter.kt b/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemListAdapter.kt index 37f238b0..77e503bd 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemListAdapter.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemListAdapter.kt @@ -10,7 +10,10 @@ import dev.jdtech.jellyfin.R import dev.jdtech.jellyfin.databinding.BaseItemBinding import org.jellyfin.sdk.model.api.BaseItemDto -class ViewItemListAdapter(private val fixedWidth: Boolean = false) : +class ViewItemListAdapter( + private val onClickListener: OnClickListener, + private val fixedWidth: Boolean = false, + ) : ListAdapter(DiffCallback) { class ItemViewHolder(private var binding: BaseItemBinding, private val parent: ViewGroup) : @@ -51,6 +54,13 @@ class ViewItemListAdapter(private val fixedWidth: Boolean = false) : override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { val item = getItem(position) + holder.itemView.setOnClickListener { + onClickListener.onClick(item) + } holder.bind(item, fixedWidth) } + + class OnClickListener(val clickListener: (item: BaseItemDto) -> Unit) { + fun onClick(item: BaseItemDto) = clickListener(item) + } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt b/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt index d77c60f1..159c0d42 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt @@ -9,14 +9,15 @@ import dev.jdtech.jellyfin.databinding.ViewItemBinding import dev.jdtech.jellyfin.models.View class ViewListAdapter( - private val onClickListener: OnClickListener + private val onClickListener: OnClickListener, + private val onItemClickListener: ViewItemListAdapter.OnClickListener ) : ListAdapter(DiffCallback) { class ViewViewHolder(private var binding: ViewItemBinding) : RecyclerView.ViewHolder(binding.root) { - fun bind(view: View, onClickListener: OnClickListener) { + fun bind(view: View, onClickListener: OnClickListener, onItemClickListener: ViewItemListAdapter.OnClickListener) { binding.view = view // TODO: Change to string placeholder binding.viewName.text = "Latest ${view.name}" - binding.itemsRecyclerView.adapter = ViewItemListAdapter(fixedWidth = true) + binding.itemsRecyclerView.adapter = ViewItemListAdapter(onItemClickListener, fixedWidth = true) binding.viewAll.setOnClickListener { onClickListener.onClick(view) } @@ -40,7 +41,7 @@ class ViewListAdapter( override fun onBindViewHolder(holder: ViewViewHolder, position: Int) { val view = getItem(position) - holder.bind(view, onClickListener) + holder.bind(view, onClickListener, onItemClickListener) } class OnClickListener(val clickListener: (view: View) -> Unit) { diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt index 4fed9744..1a2f00a5 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt @@ -8,6 +8,7 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import dev.jdtech.jellyfin.R +import dev.jdtech.jellyfin.adapters.ViewItemListAdapter import dev.jdtech.jellyfin.adapters.ViewListAdapter import dev.jdtech.jellyfin.databinding.FragmentHomeBinding import dev.jdtech.jellyfin.viewmodels.HomeViewModel @@ -30,6 +31,13 @@ class HomeFragment : Fragment() { it.name ) ) + }, ViewItemListAdapter.OnClickListener { + findNavController().navigate( + HomeFragmentDirections.actionNavigationHomeToMediaInfoFragment( + it.id, + it.name + ) + ) }) binding.errorLayout.findViewById(R.id.retry_button).setOnClickListener { diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt index 59c070f0..54ca058b 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt @@ -6,6 +6,7 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import dev.jdtech.jellyfin.viewmodels.LibraryViewModel import dev.jdtech.jellyfin.adapters.ViewItemListAdapter @@ -32,9 +33,18 @@ class LibraryFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val viewModelFactory = LibraryViewModelFactory(requireNotNull(this.activity).application, args.libraryId) + val viewModelFactory = + LibraryViewModelFactory(requireNotNull(this.activity).application, args.libraryId) viewModel = ViewModelProvider(this, viewModelFactory).get(LibraryViewModel::class.java) binding.viewModel = viewModel - binding.itemsRecyclerView.adapter = ViewItemListAdapter() + binding.itemsRecyclerView.adapter = + ViewItemListAdapter(ViewItemListAdapter.OnClickListener { + findNavController().navigate( + LibraryFragmentDirections.actionLibraryFragmentToMediaInfoFragment( + it.id, + it.name + ) + ) + }) } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt new file mode 100644 index 00000000..6945061b --- /dev/null +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt @@ -0,0 +1,29 @@ +package dev.jdtech.jellyfin.fragments + +import androidx.lifecycle.ViewModelProvider +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import dev.jdtech.jellyfin.viewmodels.MediaInfoViewModel +import dev.jdtech.jellyfin.R + +class MediaInfoFragment : Fragment() { + + private lateinit var viewModel: MediaInfoViewModel + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_media_info, container, false) + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + viewModel = ViewModelProvider(this).get(MediaInfoViewModel::class.java) + // TODO: Use the ViewModel + } + +} \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt new file mode 100644 index 00000000..34d51988 --- /dev/null +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt @@ -0,0 +1,7 @@ +package dev.jdtech.jellyfin.viewmodels + +import androidx.lifecycle.ViewModel + +class MediaInfoViewModel : ViewModel() { + // TODO: Implement the ViewModel +} \ No newline at end of file diff --git a/app/src/main/res/layout/base_item.xml b/app/src/main/res/layout/base_item.xml index d0657b77..3fdf58cc 100644 --- a/app/src/main/res/layout/base_item.xml +++ b/app/src/main/res/layout/base_item.xml @@ -16,6 +16,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="12dp" android:layout_marginBottom="24dp" + android:foreground="?android:attr/selectableItemBackground" android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/navigation/main_navigation.xml b/app/src/main/res/navigation/main_navigation.xml index a98cdf81..a4b9390b 100644 --- a/app/src/main/res/navigation/main_navigation.xml +++ b/app/src/main/res/navigation/main_navigation.xml @@ -17,6 +17,9 @@ app:exitAnim="@anim/nav_default_exit_anim" app:popEnterAnim="@anim/nav_default_pop_enter_anim" app:popExitAnim="@anim/nav_default_pop_exit_anim" /> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d180b3b6..6b7d8be1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,4 +21,8 @@ View all Error loading data Retry + Genres + Director + Writers + \ No newline at end of file