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"
}
}