From 25ee7d05afb3131e3dc6200889009daca69424ad Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Mon, 5 Jul 2021 21:46:32 +0200 Subject: [PATCH] Add first dependency --- app/build.gradle | 20 +++++++++-- app/src/main/AndroidManifest.xml | 1 + .../dev/jdtech/jellyfin/BaseApplication.kt | 8 +++++ .../java/dev/jdtech/jellyfin/MainActivity.kt | 2 ++ .../java/dev/jdtech/jellyfin/SetupActivity.kt | 2 ++ .../java/dev/jdtech/jellyfin/di/AppModule.kt | 20 +++++++++++ .../dev/jdtech/jellyfin/di/DatabaseModule.kt | 29 +++++++++++++++ .../fragments/ServerSelectFragment.kt | 35 +++++++++++-------- .../viewmodels/ServerSelectViewModel.kt | 19 +++++++--- .../ServerSelectViewModelFactory.kt | 20 ----------- build.gradle | 3 ++ 11 files changed, 117 insertions(+), 42 deletions(-) create mode 100644 app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt create mode 100644 app/src/main/java/dev/jdtech/jellyfin/di/AppModule.kt create mode 100644 app/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt delete mode 100644 app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModelFactory.kt diff --git a/app/build.gradle b/app/build.gradle index b8527d0a..b5c31eee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,6 +4,7 @@ plugins { id 'kotlin-parcelize' id 'kotlin-kapt' id 'androidx.navigation.safeargs.kotlin' + id 'dagger.hilt.android.plugin' } android { @@ -37,12 +38,18 @@ android { buildFeatures { dataBinding true } + + kapt { + javacOptions { + // These options are normally set automatically via the Hilt Gradle plugin, but we + // set them manually to workaround a bug in the Kotlin 1.5.20 + option("-Adagger.fastInit=ENABLED") + option("-Adagger.hilt.android.internal.disableAndroidSuperclassValidation=true") + } + } } dependencies { - def room_version = "2.3.0" - def jellyfin_version = "1.0.0-beta.9" - implementation 'androidx.core:core-ktx:1.6.0' implementation 'androidx.core:core-splashscreen:1.0.0-alpha01' implementation 'androidx.appcompat:appcompat:1.3.0' @@ -62,17 +69,24 @@ dependencies { implementation "androidx.recyclerview:recyclerview-selection:1.1.0" // Room + def room_version = "2.3.0" implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" implementation "androidx.room:room-ktx:$room_version" // Jellyfin + def jellyfin_version = "1.0.0-beta.9" implementation "org.jellyfin.sdk:jellyfin-platform-android:$jellyfin_version" // Glide implementation 'com.github.bumptech.glide:glide:4.12.0' kapt 'com.github.bumptech.glide:compiler:4.12.0' + // Hilt + def hilt_version = "2.37" + implementation "com.google.dagger:hilt-android:$hilt_version" + kapt "com.google.dagger:hilt-compiler:$hilt_version" + // Testing testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6657f639..610b4cf6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ viewModel.connectToServer(server) @@ -45,16 +42,24 @@ class ServerSelectFragment : Fragment() { }) binding.buttonAddServer.setOnClickListener { - this.findNavController().navigate(R.id.action_serverSelectFragment_to_addServerFragment) + navigateToAddServerFragment() } viewModel.navigateToMain.observe(viewLifecycleOwner, { if (it) { - findNavController().navigate(R.id.action_serverSelectFragment_to_mainActivity) - viewModel.doneNavigatingToMain() + navigateToMainActivity() } }) return binding.root } + + private fun navigateToAddServerFragment() { + findNavController().navigate(R.id.action_serverSelectFragment_to_addServerFragment) + } + + private fun navigateToMainActivity() { + findNavController().navigate(R.id.action_serverSelectFragment_to_mainActivity) + viewModel.doneNavigatingToMain() + } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt index fef85545..1143b03e 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel import dev.jdtech.jellyfin.api.JellyfinApi import dev.jdtech.jellyfin.database.Server import dev.jdtech.jellyfin.database.ServerDatabaseDao @@ -12,11 +13,16 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.util.* +import javax.inject.Inject -class ServerSelectViewModel( - val database: ServerDatabaseDao, - val application: Application, +@HiltViewModel +class ServerSelectViewModel +@Inject +constructor( + private val application: Application, + private val database: ServerDatabaseDao, ) : ViewModel() { + private val _servers = database.getAllServers() val servers: LiveData> = _servers @@ -56,7 +62,12 @@ class ServerSelectViewModel( private suspend fun postCapabilities(jellyfinApi: JellyfinApi) { withContext(Dispatchers.IO) { - jellyfinApi.sessionApi.postCapabilities(playableMediaTypes = listOf("Video"), supportsMediaControl = false, supportsSync = false, supportsPersistentIdentifier = true) + jellyfinApi.sessionApi.postCapabilities( + playableMediaTypes = listOf("Video"), + supportsMediaControl = false, + supportsSync = false, + supportsPersistentIdentifier = true + ) } } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModelFactory.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModelFactory.kt deleted file mode 100644 index 67d528f2..00000000 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModelFactory.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 dev.jdtech.jellyfin.database.ServerDatabaseDao -import java.lang.IllegalArgumentException - -class ServerSelectViewModelFactory( - private val dataSource: ServerDatabaseDao, - private val application: Application - ) : ViewModelProvider.Factory { - override fun create(modelClass: Class): T { - if (modelClass.isAssignableFrom(ServerSelectViewModel::class.java)) { - @Suppress("UNCHECKED_CAST") - return ServerSelectViewModel(dataSource, application) as T - } - throw IllegalArgumentException("Unknown ViewModel class") - } -} \ No newline at end of file diff --git a/build.gradle b/build.gradle index d5d830db..c661393c 100644 --- a/build.gradle +++ b/build.gradle @@ -13,6 +13,9 @@ buildscript { // in the individual module build.gradle files def nav_version = "2.3.5" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" + + def hilt_version = "2.37" + classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version" } }