From aab5f5e0de573afee627c2f4c54f5d09a4ccad55 Mon Sep 17 00:00:00 2001 From: Adrian Kuta Date: Mon, 29 Jul 2024 12:07:13 +0200 Subject: [PATCH] Implemented AssistedInject for details screen --- .idea/.gitignore | 3 + .idea/.name | 1 + .idea/compiler.xml | 6 ++ .idea/deploymentTargetSelector.xml | 18 ++++++ .idea/gradle.xml | 39 +++++++++++++ .idea/inspectionProfiles/Project_Default.xml | 53 ++++++++++++++++++ .idea/kotlinc.xml | 6 ++ .idea/migrations.xml | 10 ++++ .idea/misc.xml | 10 ++++ .idea/vcs.xml | 6 ++ build-logic/.gitignore | 1 + .../8.7/executionHistory/executionHistory.bin | Bin 62380 -> 0 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .../buildOutputCleanup.lock | Bin 17 -> 0 bytes .../buildOutputCleanup/cache.properties | 2 - .../buildOutputCleanup/outputFiles.bin | Bin 18857 -> 0 bytes build-logic/.gradle/file-system.probe | Bin 8 -> 0 bytes .../adriankuta/pixabay/core/ui/SearchField.kt | 1 + data/build.gradle.kts | 11 +++- .../pixabay/data/di/PersistanceModule.kt | 3 + .../data/repository/PixabayImageRepository.kt | 2 +- .../feature/details/PhotoDetailRoute.kt | 12 ++-- .../feature/details/PhotoDetailViewModel.kt | 32 ++++------- .../di/PhotoDetailsViewModelFactory.kt | 9 +++ gradle/libs.versions.toml | 4 +- 25 files changed, 195 insertions(+), 34 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/deploymentTargetSelector.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/kotlinc.xml create mode 100644 .idea/migrations.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 build-logic/.gitignore delete mode 100644 build-logic/.gradle/8.7/executionHistory/executionHistory.bin delete mode 100644 build-logic/.gradle/8.7/executionHistory/executionHistory.lock delete mode 100644 build-logic/.gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 build-logic/.gradle/buildOutputCleanup/cache.properties delete mode 100644 build-logic/.gradle/buildOutputCleanup/outputFiles.bin delete mode 100644 build-logic/.gradle/file-system.probe create mode 100644 feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/di/PhotoDetailsViewModelFactory.kt diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..56a1a9a --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Pixabay \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..3d2d36b --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..6109387 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,39 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..6806f5a --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,53 @@ + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..148fdd2 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0ad17cb --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/build-logic/.gitignore b/build-logic/.gitignore new file mode 100644 index 0000000..ac96206 --- /dev/null +++ b/build-logic/.gitignore @@ -0,0 +1 @@ +.gradle/ \ No newline at end of file diff --git a/build-logic/.gradle/8.7/executionHistory/executionHistory.bin b/build-logic/.gradle/8.7/executionHistory/executionHistory.bin deleted file mode 100644 index 04641e142828118ee93fd05f1eddae2d36868406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62380 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 aJw@I=v*z&c2IR1(K-_vLWfS$@o%erwNK+C3 diff --git a/build-logic/.gradle/8.7/executionHistory/executionHistory.lock b/build-logic/.gradle/8.7/executionHistory/executionHistory.lock deleted file mode 100644 index 50d326cdbea96ae0bc902401be499e2b13d9b69f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZQpzEOVUYFcUy0|c-G05(MgT>t<8 diff --git a/build-logic/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/build-logic/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index 7cbd852d287b0c83f0d0ce205267884275f72483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZQR@MUxG@onBm7$86#07IY!VE_OC diff --git a/build-logic/.gradle/buildOutputCleanup/cache.properties b/build-logic/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index c70171b..0000000 --- a/build-logic/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Wed Jul 24 13:11:02 CEST 2024 -gradle.version=8.7 diff --git a/build-logic/.gradle/buildOutputCleanup/outputFiles.bin b/build-logic/.gradle/buildOutputCleanup/outputFiles.bin deleted file mode 100644 index 8e9a042d3b43830f5e139d54a2a81874d6c4c568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18857 zcmeI%K}ge49Ki9n45S%3Az>Ycb&6_)F%T~r;SSqDcM!XI@L)k9Y$aLHMNueBC_JPL z$F!BqQdp-TD)Nwur%{PfLZPDDq41EXB=(>G-;WUzc<7+HTK0^g`|N_)LBGso|vb zW7?BLce0&h&#PtspV~hp5;ycKln*ob-C_Ykl{Z zCzG9aHi3EV>#b#vPEUkK?FYe-_FwNxLYZ4V(gRWLnpMpo_%s9R%8Zb|0eAfp2xLM3wx)eKh$2Cayi$huT4v@(ta^@?`qxUsgJV%8|}@` z^K0G*HT|-_OM4{qGW}w~`sVEsNNc}&VrgXJ^V?Ul{)~40G{&)FKjV%70tg_000Iag zfB*srAbtDU~mwkQ%nDZYc diff --git a/build-logic/.gradle/file-system.probe b/build-logic/.gradle/file-system.probe deleted file mode 100644 index 7d504d7a1f60c3eef2f08879c2dc19f3ac255334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 PcmZQzV4UzI|Bo#I3Gf3R diff --git a/core/ui/src/main/kotlin/dev/adriankuta/pixabay/core/ui/SearchField.kt b/core/ui/src/main/kotlin/dev/adriankuta/pixabay/core/ui/SearchField.kt index 5a385b7..379c08f 100644 --- a/core/ui/src/main/kotlin/dev/adriankuta/pixabay/core/ui/SearchField.kt +++ b/core/ui/src/main/kotlin/dev/adriankuta/pixabay/core/ui/SearchField.kt @@ -23,6 +23,7 @@ fun SearchField( value = query, onValueChange = onQueryChange, modifier = modifier, + maxLines = 1, placeholder = { if (hint != null) { Text(text = hint) diff --git a/data/build.gradle.kts b/data/build.gradle.kts index b7b975d..3c29364 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -1,3 +1,5 @@ +import java.util.Properties + @Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.convention.android.library) @@ -9,10 +11,15 @@ android { buildFeatures { buildConfig = true } - defaultConfig { - buildConfigField("String", "PIXABAY_API_KEY", "\"\"") + val localPropertiesFile = project.rootProject.file("local.properties") + val properties = Properties() + properties.load(localPropertiesFile.inputStream()) + + val apiKey = properties.getProperty("PIXABAY_API_KEY") ?: "" + buildConfigField("String", "PIXABAY_API_KEY", "\"$apiKey\"") } + } dependencies { diff --git a/data/src/main/kotlin/dev/adriankuta/pixabay/data/di/PersistanceModule.kt b/data/src/main/kotlin/dev/adriankuta/pixabay/data/di/PersistanceModule.kt index 0de1b41..d02fa8f 100644 --- a/data/src/main/kotlin/dev/adriankuta/pixabay/data/di/PersistanceModule.kt +++ b/data/src/main/kotlin/dev/adriankuta/pixabay/data/di/PersistanceModule.kt @@ -9,10 +9,13 @@ import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import dev.adriankuta.pixabay.data.room.AppDatabase import dev.adriankuta.pixabay.data.room.dao.PixabayImagesDao +import javax.inject.Singleton @InstallIn(SingletonComponent::class) @Module internal class PersistanceModule { + + @Singleton @Provides fun provideRoomDb(@ApplicationContext context: Context): AppDatabase { return Room.databaseBuilder( diff --git a/data/src/main/kotlin/dev/adriankuta/pixabay/data/repository/PixabayImageRepository.kt b/data/src/main/kotlin/dev/adriankuta/pixabay/data/repository/PixabayImageRepository.kt index 7cfc6a8..d910c2a 100644 --- a/data/src/main/kotlin/dev/adriankuta/pixabay/data/repository/PixabayImageRepository.kt +++ b/data/src/main/kotlin/dev/adriankuta/pixabay/data/repository/PixabayImageRepository.kt @@ -75,6 +75,6 @@ internal class PixabayImageRepository @Inject constructor( companion object { const val NETWORK_PAGE_SIZE = 30 - const val USE_CACHE_PAGER = false + const val USE_CACHE_PAGER = true } } \ No newline at end of file diff --git a/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/PhotoDetailRoute.kt b/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/PhotoDetailRoute.kt index 7761499..9a704db 100644 --- a/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/PhotoDetailRoute.kt +++ b/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/PhotoDetailRoute.kt @@ -14,7 +14,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment @@ -34,6 +33,7 @@ import dev.adriankuta.pixabay.core.ui.R.drawable import dev.adriankuta.pixabay.core.ui.R.string import dev.adriankuta.pixabay.core.ui.StatsItem import dev.adriankuta.pixabay.data.model.PixabayImage +import dev.adriankuta.pixabay.feature.details.di.PhotoDetailsViewModelFactory @Composable @@ -41,15 +41,15 @@ fun PhotoDetailRoute( photoId: Int, onBack: () -> Unit, modifier: Modifier = Modifier, - viewModel: PhotoDetailViewModel = hiltViewModel() + viewModel: PhotoDetailViewModel = hiltViewModel( + creationCallback = { factory: PhotoDetailsViewModelFactory -> + factory.create(photoId) + } + ) ) { val uiState by viewModel.uiState.collectAsState() - LaunchedEffect(photoId) { - viewModel.loadImage(photoId) - } - PhotoDetailScreen( state = uiState, modifier = modifier diff --git a/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/PhotoDetailViewModel.kt b/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/PhotoDetailViewModel.kt index 91db8c6..02b1794 100644 --- a/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/PhotoDetailViewModel.kt +++ b/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/PhotoDetailViewModel.kt @@ -1,31 +1,26 @@ -@file:OptIn(ExperimentalCoroutinesApi::class) - package dev.adriankuta.pixabay.feature.details import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import dagger.assisted.Assisted +import dagger.assisted.AssistedInject import dagger.hilt.android.lifecycle.HiltViewModel import dev.adriankuta.pixabay.data.repository.ImageRepository -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.MutableStateFlow +import dev.adriankuta.pixabay.feature.details.di.PhotoDetailsViewModelFactory import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn -import javax.inject.Inject -@HiltViewModel -class PhotoDetailViewModel @Inject constructor( - private val imageRepository: ImageRepository +@HiltViewModel(assistedFactory = PhotoDetailsViewModelFactory::class) +class PhotoDetailViewModel @AssistedInject constructor( + private val imageRepository: ImageRepository, + @Assisted private val imageId: Int ) : ViewModel() { - private val _idToLoad = MutableStateFlow(null) - - private val loadedData = _idToLoad - .filterNotNull() - .map { id -> - imageRepository.searchImageById(id) - } + private val loadedData = flow { + emit(imageRepository.searchImageById(imageId)) + } val uiState = loadedData .map { PhotoDetailUiState.Success(it) } @@ -34,9 +29,4 @@ class PhotoDetailViewModel @Inject constructor( started = SharingStarted.WhileSubscribed(stopTimeoutMillis = 5000), initialValue = PhotoDetailUiState.Loading ) - - - fun loadImage(id: Int) { - _idToLoad.value = id - } } \ No newline at end of file diff --git a/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/di/PhotoDetailsViewModelFactory.kt b/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/di/PhotoDetailsViewModelFactory.kt new file mode 100644 index 0000000..42e05fc --- /dev/null +++ b/feature/details/src/main/kotlin/dev/adriankuta/pixabay/feature/details/di/PhotoDetailsViewModelFactory.kt @@ -0,0 +1,9 @@ +package dev.adriankuta.pixabay.feature.details.di + +import dagger.assisted.AssistedFactory +import dev.adriankuta.pixabay.feature.details.PhotoDetailViewModel + +@AssistedFactory +internal interface PhotoDetailsViewModelFactory { + fun create(imageId: Int): PhotoDetailViewModel +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 27ef67e..3aecf0c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,13 +1,13 @@ [versions] androidxNavigation = "2.7.7" androidGradlePlugin = "8.1.4" -agp = "8.6.0-beta01" +agp = "8.6.0-beta02" coilCompose = "2.6.0" composeCompiler = "1.5.14" kotlin = "1.9.24" kotlinSerialization = "2.0.0" coreKtx = "1.13.1" -androidxHilt = "1.0.0" +androidxHilt = "1.2.0" junit = "4.13.2" junitVersion = "1.2.1" espressoCore = "3.6.1"