From beb7c6f83806568c8bd948be5caff522363fa4d8 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Tue, 6 Jul 2021 15:17:22 +0200 Subject: [PATCH] Add dependency injection to LibraryViewModel --- .../jellyfin/fragments/LibraryFragment.kt | 6 ++--- .../jellyfin/repository/JellyfinRepository.kt | 2 ++ .../repository/JellyfinRepositoryImpl.kt | 8 ++++++ .../jellyfin/viewmodels/LibraryViewModel.kt | 25 +++++++------------ .../viewmodels/LibraryViewModelFactory.kt | 20 --------------- 5 files changed, 21 insertions(+), 40 deletions(-) delete mode 100644 app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModelFactory.kt 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 54d6fea7..ea132a93 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt @@ -12,13 +12,13 @@ import dagger.hilt.android.AndroidEntryPoint import dev.jdtech.jellyfin.viewmodels.LibraryViewModel import dev.jdtech.jellyfin.adapters.ViewItemListAdapter import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding -import dev.jdtech.jellyfin.viewmodels.LibraryViewModelFactory import org.jellyfin.sdk.model.api.BaseItemDto @AndroidEntryPoint class LibraryFragment : Fragment() { private lateinit var binding: FragmentLibraryBinding + private val viewModel: LibraryViewModel by viewModels() private val args: LibraryFragmentArgs by navArgs() @@ -35,14 +35,12 @@ class LibraryFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val viewModelFactory = - LibraryViewModelFactory(requireNotNull(this.activity).application, args.libraryId) - val viewModel: LibraryViewModel by viewModels { viewModelFactory } binding.viewModel = viewModel binding.itemsRecyclerView.adapter = ViewItemListAdapter(ViewItemListAdapter.OnClickListener { item -> navigateToMediaInfoFragment(item) }) + viewModel.loadItems(args.libraryId) } private fun navigateToMediaInfoFragment(item: BaseItemDto) { diff --git a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt index 7122b61a..6e40a9a9 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt @@ -5,4 +5,6 @@ import java.util.* interface JellyfinRepository { suspend fun getItem(itemId: UUID): BaseItemDto + + suspend fun getItems(parentId: UUID): List } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt index 6b0e3cdb..7558dfa1 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt @@ -14,4 +14,12 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep } return item } + + override suspend fun getItems(parentId: UUID): List { + val items: List + withContext(Dispatchers.IO) { + items = jellyfinApi.itemsApi.getItems(jellyfinApi.userId!!, parentId = parentId).content.items ?: listOf() + } + return items + } } \ No newline at end of file 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 0d165137..176c23fe 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt @@ -1,16 +1,17 @@ package dev.jdtech.jellyfin.viewmodels -import android.app.Application import androidx.lifecycle.* -import dev.jdtech.jellyfin.api.JellyfinApi -import kotlinx.coroutines.Dispatchers +import dagger.hilt.android.lifecycle.HiltViewModel +import dev.jdtech.jellyfin.repository.JellyfinRepository import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import org.jellyfin.sdk.model.api.BaseItemDto import java.util.* +import javax.inject.Inject -class LibraryViewModel(application: Application, userId: UUID) : AndroidViewModel(application) { - private val jellyfinApi = JellyfinApi.getInstance(application, "") +@HiltViewModel +class LibraryViewModel +@Inject +constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() { private val _items = MutableLiveData>() val items: LiveData> = _items @@ -18,18 +19,10 @@ class LibraryViewModel(application: Application, userId: UUID) : AndroidViewMode private val _finishedLoading = MutableLiveData() val finishedLoading: LiveData = _finishedLoading - init { + fun loadItems(parentId: UUID) { viewModelScope.launch { - _items.value = getItems(jellyfinApi.userId!!, userId) + _items.value = jellyfinRepository.getItems(parentId) _finishedLoading.value = true } } - - private suspend fun getItems(userId: UUID, parentId: UUID): List { - val items: List - withContext(Dispatchers.IO) { - items = jellyfinApi.itemsApi.getItems(userId, parentId = parentId).content.items!! - } - return items - } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModelFactory.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModelFactory.kt deleted file mode 100644 index d39b4d90..00000000 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModelFactory.kt +++ /dev/null @@ -1,20 +0,0 @@ -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