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 { plugins {
id 'com.android.application' id 'com.android.application'
id 'kotlin-android' id 'kotlin-android'
id 'org.jetbrains.kotlin.kapt' id 'kotlin-parcelize'
id 'kotlin-kapt'
id 'androidx.navigation.safeargs.kotlin' id 'androidx.navigation.safeargs.kotlin'
} }

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,11 +1,11 @@
package dev.jdtech.jellyfin.fragments package dev.jdtech.jellyfin.fragments
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import dev.jdtech.jellyfin.adapters.EpisodeListAdapter import dev.jdtech.jellyfin.adapters.EpisodeListAdapter
@ -15,7 +15,6 @@ import dev.jdtech.jellyfin.viewmodels.SeasonViewModelFactory
class SeasonFragment : Fragment() { class SeasonFragment : Fragment() {
private lateinit var viewModel: SeasonViewModel
private lateinit var binding: FragmentSeasonBinding private lateinit var binding: FragmentSeasonBinding
private val args: SeasonFragmentArgs by navArgs() private val args: SeasonFragmentArgs by navArgs()
@ -36,7 +35,7 @@ class SeasonFragment : Fragment() {
args.seriesId, args.seriesId,
args.seasonId args.seasonId
) )
viewModel = ViewModelProvider(this, viewModelFactory).get(SeasonViewModel::class.java) val viewModel: SeasonViewModel by viewModels { viewModelFactory }
binding.viewModel = viewModel binding.viewModel = viewModel
binding.episodesRecyclerView.adapter = binding.episodesRecyclerView.adapter =
EpisodeListAdapter(EpisodeListAdapter.OnClickListener { EpisodeListAdapter(EpisodeListAdapter.OnClickListener {

View file

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