diff --git a/app/build.gradle b/app/build.gradle index 68e72ca0..dd99cb1b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.application' id 'kotlin-android' id 'org.jetbrains.kotlin.kapt' + id 'androidx.navigation.safeargs.kotlin' } android { diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/CollectionListAdapter.kt b/app/src/main/java/dev/jdtech/jellyfin/adapters/CollectionListAdapter.kt index ba580e3b..13fd7e84 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/adapters/CollectionListAdapter.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/adapters/CollectionListAdapter.kt @@ -8,9 +8,10 @@ import androidx.recyclerview.widget.RecyclerView import dev.jdtech.jellyfin.databinding.CollectionItemBinding import org.jellyfin.sdk.model.api.BaseItemDto -class CollectionListAdapter : - ListAdapter(DiffCallback) { - class ViewViewHolder(private var binding: CollectionItemBinding) : +class CollectionListAdapter( + private val onClickListener: OnClickListener +) : ListAdapter(DiffCallback) { + class CollectionViewHolder(private var binding: CollectionItemBinding) : RecyclerView.ViewHolder(binding.root) { fun bind(collection: BaseItemDto) { binding.collection = collection @@ -28,8 +29,8 @@ class CollectionListAdapter : } } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewViewHolder { - return ViewViewHolder( + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CollectionViewHolder { + return CollectionViewHolder( CollectionItemBinding.inflate( LayoutInflater.from(parent.context), parent, @@ -38,8 +39,15 @@ class CollectionListAdapter : ) } - override fun onBindViewHolder(holder: ViewViewHolder, position: Int) { + override fun onBindViewHolder(holder: CollectionViewHolder, position: Int) { val collection = getItem(position) + holder.itemView.setOnClickListener { + onClickListener.onClick(collection) + } holder.bind(collection) } + + class OnClickListener(val clickListener: (collection: BaseItemDto) -> Unit) { + fun onClick(collection: BaseItemDto) = clickListener(collection) + } } \ No newline at end of file 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 6ed674af..59c070f0 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt @@ -6,23 +6,23 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.navigation.fragment.navArgs import dev.jdtech.jellyfin.viewmodels.LibraryViewModel import dev.jdtech.jellyfin.adapters.ViewItemListAdapter import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding +import dev.jdtech.jellyfin.viewmodels.LibraryViewModelFactory class LibraryFragment : Fragment() { - companion object { - fun newInstance() = LibraryFragment() - } - private lateinit var binding: FragmentLibraryBinding private lateinit var viewModel: LibraryViewModel + private val args: LibraryFragmentArgs by navArgs() + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { binding = FragmentLibraryBinding.inflate(inflater, container, false) binding.lifecycleOwner = this @@ -32,7 +32,8 @@ class LibraryFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - viewModel = ViewModelProvider(this).get(LibraryViewModel::class.java) + val viewModelFactory = LibraryViewModelFactory(requireNotNull(this.activity).application, args.libraryId) + viewModel = ViewModelProvider(this, viewModelFactory).get(LibraryViewModel::class.java) binding.viewModel = viewModel binding.itemsRecyclerView.adapter = ViewItemListAdapter() } diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt index ad02f9d1..be955d98 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt @@ -7,7 +7,6 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController -import dev.jdtech.jellyfin.R import dev.jdtech.jellyfin.adapters.CollectionListAdapter import dev.jdtech.jellyfin.databinding.FragmentMediaBinding import dev.jdtech.jellyfin.viewmodels.MediaViewModel @@ -23,7 +22,15 @@ class MediaFragment : Fragment() { binding.lifecycleOwner = this binding.viewModel = viewModel - binding.viewsRecyclerView.adapter = CollectionListAdapter() + binding.viewsRecyclerView.adapter = + CollectionListAdapter(CollectionListAdapter.OnClickListener { library -> + findNavController().navigate( + MediaFragmentDirections.actionNavigationMediaToLibraryFragment( + library.id + ) + ) + + }) viewModel.finishedLoading.observe(viewLifecycleOwner, { if (it) { @@ -31,10 +38,6 @@ class MediaFragment : Fragment() { } }) - binding.button.setOnClickListener { - findNavController().navigate(R.id.action_navigation_media_to_libraryFragment) - } - return binding.root } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt index ab9d4637..81f6864d 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt @@ -5,7 +5,6 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import dev.jdtech.jellyfin.R diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt index 14e428a0..0d165137 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.withContext import org.jellyfin.sdk.model.api.BaseItemDto import java.util.* -class LibraryViewModel(application: Application) : AndroidViewModel(application) { +class LibraryViewModel(application: Application, userId: UUID) : AndroidViewModel(application) { private val jellyfinApi = JellyfinApi.getInstance(application, "") private val _items = MutableLiveData>() @@ -20,7 +20,7 @@ class LibraryViewModel(application: Application) : AndroidViewModel(application) init { viewModelScope.launch { - _items.value = getItems(jellyfinApi.userId!!, UUID.fromString("0c419071-40d8-02bb-5843-0fed7e2cd79e")) + _items.value = getItems(jellyfinApi.userId!!, userId) _finishedLoading.value = true } } diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModelFactory.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModelFactory.kt new file mode 100644 index 00000000..d39b4d90 --- /dev/null +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModelFactory.kt @@ -0,0 +1,20 @@ +package dev.jdtech.jellyfin.viewmodels + +import android.app.Application +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import java.lang.IllegalArgumentException +import java.util.* + +class LibraryViewModelFactory( + private val application: Application, + private val libraryId: UUID +) : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + if (modelClass.isAssignableFrom(LibraryViewModel::class.java)) { + @Suppress("UNCHECKED_CAST") + return LibraryViewModel(application, libraryId) as T + } + throw IllegalArgumentException("Unknown ViewModel class") + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/collection_item.xml b/app/src/main/res/layout/collection_item.xml index 14b78619..e56d2a3b 100644 --- a/app/src/main/res/layout/collection_item.xml +++ b/app/src/main/res/layout/collection_item.xml @@ -15,6 +15,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="12dp" android:layout_marginBottom="32dp" + android:foreground="?android:attr/selectableItemBackground" android:orientation="vertical"> -