From 5e6099de9391ecccc3ffb999e853f8f2cf22eb87 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Mon, 5 Jul 2021 15:25:30 +0200 Subject: [PATCH] Change how ViewModels get created --- app/build.gradle | 3 ++- .../java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt | 6 ++++-- .../jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt | 4 ++-- .../main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt | 5 ++++- .../java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt | 5 ++--- .../java/dev/jdtech/jellyfin/fragments/LoginFragment.kt | 6 ++++-- .../java/dev/jdtech/jellyfin/fragments/MediaFragment.kt | 5 ++++- .../java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt | 6 +++--- .../java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt | 5 ++--- .../dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt | 4 ++-- 10 files changed, 29 insertions(+), 20 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3b6f4440..b8527d0a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' } diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt index f5c505e8..5389a18d 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt @@ -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 diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt index 7734a07f..83823522 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt @@ -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 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 a11da41c..ab5af83c 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt @@ -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 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 54ca058b..b5b78c56 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt @@ -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 { diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt index ec338fc2..9db19b3f 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt @@ -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 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 7285e6c8..d81e471f 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt @@ -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 diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt index 971d843d..173f0c8e 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt @@ -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 -> diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt index cbd41831..671126ff 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt @@ -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 { 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 81f6864d..2e0b5e5b 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt @@ -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