diff --git a/buildSrc/src/main/kotlin/Libs.kt b/buildSrc/src/main/kotlin/Libs.kt index d684b0e..399cada 100644 --- a/buildSrc/src/main/kotlin/Libs.kt +++ b/buildSrc/src/main/kotlin/Libs.kt @@ -1,7 +1,7 @@ object Libs { const val navigationVersion = "2.5.1" - const val lifecycleVersion = "2.6.0" + const val lifecycleVersion = "2.8.0" const val hiltVersion = "2.50" const val androidxHiltVersion = "1.2.0" const val dataStoreVersion = "1.0.0" diff --git a/common/src/main/java/com/flamyoad/common/di/ViewModelCoroutinesModule.kt b/common/src/main/java/com/flamyoad/common/di/ViewModelCoroutinesModule.kt new file mode 100644 index 0000000..fa7fae1 --- /dev/null +++ b/common/src/main/java/com/flamyoad/common/di/ViewModelCoroutinesModule.kt @@ -0,0 +1,28 @@ +package com.flamyoad.common.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ViewModelComponent +import dagger.hilt.android.scopes.ViewModelScoped +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import javax.inject.Named +import javax.inject.Qualifier + +@Retention(AnnotationRetention.SOURCE) +@Qualifier +annotation class ViewModelCoroutineScope + +@Module +@InstallIn(ViewModelComponent::class) +class ViewModelCoroutinesModule { + + @ViewModelCoroutineScope + @ViewModelScoped + @Provides + fun provideViewModelCoroutineScope(): CoroutineScope { + return CoroutineScope(Dispatchers.Main + SupervisorJob()) + } +} \ No newline at end of file diff --git a/explorer-impl/src/main/java/com/flamyoad/explorer_impl/ui/HomePageViewModel.kt b/explorer-impl/src/main/java/com/flamyoad/explorer_impl/ui/HomePageViewModel.kt index 44612ad..1a595f5 100644 --- a/explorer-impl/src/main/java/com/flamyoad/explorer_impl/ui/HomePageViewModel.kt +++ b/explorer-impl/src/main/java/com/flamyoad/explorer_impl/ui/HomePageViewModel.kt @@ -1,20 +1,23 @@ package com.flamyoad.explorer_impl.ui -import android.os.Environment import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.flamyoad.common.di.ViewModelCoroutineScope import com.flamyoad.file_scanner.DirectoryProvider import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.stateIn import java.io.File import javax.inject.Inject +import javax.inject.Named @HiltViewModel internal class HomePageViewModel @Inject constructor( - private val directoryProvider: DirectoryProvider -) : ViewModel() { + private val directoryProvider: DirectoryProvider, + @ViewModelCoroutineScope vmCoroutineScope: CoroutineScope, +) : ViewModel(vmCoroutineScope) { val rootDirectories: StateFlow> = directoryProvider.rootDirectories() .stateIn(