Change how ViewModels get created

This commit is contained in:
Jarne Demeulemeester 2021-07-05 15:25:30 +02:00
parent 4342448c1e
commit 5e6099de93
No known key found for this signature in database
GPG key ID: 60884A0C1EBA43E5
10 changed files with 29 additions and 20 deletions

View file

@ -1,7 +1,8 @@
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'org.jetbrains.kotlin.kapt'
id 'kotlin-parcelize'
id 'kotlin-kapt'
id 'androidx.navigation.safeargs.kotlin'
}

View file

@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import dev.jdtech.jellyfin.R
@ -12,13 +13,14 @@ import dev.jdtech.jellyfin.databinding.FragmentAddServerBinding
import dev.jdtech.jellyfin.viewmodels.AddServerViewModel
class AddServerFragment : Fragment() {
private val viewModel: AddServerViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val binding = FragmentAddServerBinding.inflate(inflater)
val viewModel =
ViewModelProvider(this).get(AddServerViewModel::class.java)
binding.lifecycleOwner = this
binding.viewModel = viewModel

View file

@ -4,7 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.navArgs
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import dev.jdtech.jellyfin.databinding.EpisodeBottomSheetBinding
@ -21,7 +21,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
): View {
val binding = EpisodeBottomSheetBinding.inflate(inflater, container, false)
val viewModelFactory = EpisodeBottomSheetViewModelFactory(requireNotNull(this.activity).application, args.episodeId)
val viewModel = ViewModelProvider(this, viewModelFactory).get(EpisodeBottomSheetViewModel::class.java)
val viewModel: EpisodeBottomSheetViewModel by viewModels { viewModelFactory }
binding.lifecycleOwner = this
binding.viewModel = viewModel

View file

@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import dev.jdtech.jellyfin.R
@ -15,13 +16,15 @@ import dev.jdtech.jellyfin.databinding.FragmentHomeBinding
import dev.jdtech.jellyfin.viewmodels.HomeViewModel
class HomeFragment : Fragment() {
private val viewModel: HomeViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val binding = FragmentHomeBinding.inflate(inflater, container, false)
val viewModel = ViewModelProvider(this).get(HomeViewModel::class.java)
binding.lifecycleOwner = this
binding.viewModel = viewModel

View file

@ -1,11 +1,11 @@
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 androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import dev.jdtech.jellyfin.viewmodels.LibraryViewModel
@ -16,7 +16,6 @@ import dev.jdtech.jellyfin.viewmodels.LibraryViewModelFactory
class LibraryFragment : Fragment() {
private lateinit var binding: FragmentLibraryBinding
private lateinit var viewModel: LibraryViewModel
private val args: LibraryFragmentArgs by navArgs()
@ -35,7 +34,7 @@ class LibraryFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
val viewModelFactory =
LibraryViewModelFactory(requireNotNull(this.activity).application, args.libraryId)
viewModel = ViewModelProvider(this, viewModelFactory).get(LibraryViewModel::class.java)
val viewModel: LibraryViewModel by viewModels { viewModelFactory }
binding.viewModel = viewModel
binding.itemsRecyclerView.adapter =
ViewItemListAdapter(ViewItemListAdapter.OnClickListener {

View file

@ -5,19 +5,21 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.databinding.FragmentLoginBinding
import dev.jdtech.jellyfin.viewmodels.LoginViewModel
class LoginFragment : Fragment() {
private val viewModel: LoginViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val binding = FragmentLoginBinding.inflate(inflater)
val viewModel = ViewModelProvider(this).get(LoginViewModel::class.java)
binding.lifecycleOwner = this
binding.viewModel = viewModel

View file

@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import dev.jdtech.jellyfin.adapters.CollectionListAdapter
@ -12,13 +13,15 @@ import dev.jdtech.jellyfin.databinding.FragmentMediaBinding
import dev.jdtech.jellyfin.viewmodels.MediaViewModel
class MediaFragment : Fragment() {
private val viewModel: MediaViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val binding = FragmentMediaBinding.inflate(inflater, container, false)
val viewModel = ViewModelProvider(this).get(MediaViewModel::class.java)
binding.lifecycleOwner = this
binding.viewModel = viewModel

View file

@ -7,7 +7,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import dev.jdtech.jellyfin.adapters.PersonListAdapter
@ -19,7 +19,6 @@ import dev.jdtech.jellyfin.viewmodels.MediaInfoViewModelFactory
class MediaInfoFragment : Fragment() {
private lateinit var binding: FragmentMediaInfoBinding
private lateinit var viewModel: MediaInfoViewModel
private val args: MediaInfoFragmentArgs by navArgs()
@ -39,7 +38,8 @@ class MediaInfoFragment : Fragment() {
val viewModelFactory =
MediaInfoViewModelFactory(requireNotNull(this.activity).application, args.itemId)
viewModel = ViewModelProvider(this, viewModelFactory).get(MediaInfoViewModel::class.java)
val viewModel: MediaInfoViewModel by viewModels { viewModelFactory }
binding.viewModel = viewModel
viewModel.item.observe(viewLifecycleOwner, { item ->

View file

@ -1,11 +1,11 @@
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 androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import dev.jdtech.jellyfin.adapters.EpisodeListAdapter
@ -15,7 +15,6 @@ import dev.jdtech.jellyfin.viewmodels.SeasonViewModelFactory
class SeasonFragment : Fragment() {
private lateinit var viewModel: SeasonViewModel
private lateinit var binding: FragmentSeasonBinding
private val args: SeasonFragmentArgs by navArgs()
@ -36,7 +35,7 @@ class SeasonFragment : Fragment() {
args.seriesId,
args.seasonId
)
viewModel = ViewModelProvider(this, viewModelFactory).get(SeasonViewModel::class.java)
val viewModel: SeasonViewModel by viewModels { viewModelFactory }
binding.viewModel = viewModel
binding.episodesRecyclerView.adapter =
EpisodeListAdapter(EpisodeListAdapter.OnClickListener {

View file

@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import dev.jdtech.jellyfin.R
@ -28,8 +29,7 @@ class ServerSelectFragment : Fragment() {
val dataSource = ServerDatabase.getInstance(application).serverDatabaseDao
val viewModelFactory = ServerSelectViewModelFactory(dataSource, application)
val viewModel =
ViewModelProvider(this, viewModelFactory).get(ServerSelectViewModel::class.java)
val viewModel: ServerSelectViewModel by viewModels { viewModelFactory }
binding.lifecycleOwner = this
binding.viewModel = viewModel