From 3c8f2f6db4b445393b6cce679bfd5b66f853cc3a Mon Sep 17 00:00:00 2001 From: Abdourahamane Boinaidi Date: Fri, 23 Aug 2024 16:43:04 +0200 Subject: [PATCH 1/8] Bump to kotlin 2.0.20 --- gradle/libs.versions.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e9b563b58..7f6944265 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,6 +8,7 @@ coreKtx = "1.13.1" junit = "4.13.2" junitVersion = "1.2.1" kotlin = "2.0.10" +kotlin = "2.0.20" lifecycleRuntimeKtx = "2.8.4" material3Beta = "1.3.0-beta05" navigation = "2.8.0-beta07" From e3bf3e13497f52e67b792e732d46c9e0de2d5840 Mon Sep 17 00:00:00 2001 From: Abdourahamane Boinaidi Date: Fri, 23 Aug 2024 16:43:49 +0200 Subject: [PATCH 2/8] Add hilt + support compose navigation --- app/build.gradle.kts | 11 +++++++++++ build.gradle.kts | 2 ++ gradle/libs.versions.toml | 8 +++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 53db98b1d..9b2abe070 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -2,6 +2,8 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.compose.compiler) + alias(libs.plugins.kapt) + alias(libs.plugins.hilt) kotlin("plugin.serialization") version libs.versions.kotlin } @@ -52,6 +54,10 @@ android { } } +kapt { + correctErrorTypes = true +} + dependencies { implementation(kotlin("reflect")) @@ -76,6 +82,11 @@ dependencies { implementation(libs.compose.ui.tooling.preview) debugImplementation(libs.compose.ui.tooling) + // Hilt + implementation(libs.hilt.android) + kapt(libs.hilt.android.compiler) + implementation(libs.hilt.navigation.compose) + // Others implementation(libs.kotlinx.serialization) diff --git a/build.gradle.kts b/build.gradle.kts index dd6fa5fbf..88ab05926 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,4 +10,6 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.compose.compiler) apply false + alias(libs.plugins.kapt) apply false + alias(libs.plugins.hilt) apply false } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7f6944265..8ec09265c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,9 +5,10 @@ agp = "8.5.2" composeBom = "2024.06.00" constraintlayoutCompose = "1.0.1" coreKtx = "1.13.1" +hilt = "2.52" +hiltNavigationCompose = "1.2.0" junit = "4.13.2" junitVersion = "1.2.1" -kotlin = "2.0.10" kotlin = "2.0.20" lifecycleRuntimeKtx = "2.8.4" material3Beta = "1.3.0-beta05" @@ -29,6 +30,9 @@ compose-ui = { group = "androidx.compose.ui", name = "ui" } compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } +hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" } +hilt-android-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt" } +hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltNavigationCompose" } kotlinx-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization" } navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" } # Tests @@ -38,4 +42,6 @@ junit = { group = "junit", name = "junit", version.ref = "junit" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } +kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } From 31e117e133a8702862121738a0ed61709a5bad3b Mon Sep 17 00:00:00 2001 From: Abdourahamane Boinaidi Date: Fri, 23 Aug 2024 16:46:20 +0200 Subject: [PATCH 3/8] Add coroutinesDispatchersModule --- .../di/CoroutinesDispatchersModule.kt | 42 +++++++++++++++++++ .../swisstransfer/di/CoroutinesQualifiers.kt | 34 +++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/di/CoroutinesDispatchersModule.kt create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/di/CoroutinesQualifiers.kt diff --git a/app/src/main/java/com/infomaniak/swisstransfer/di/CoroutinesDispatchersModule.kt b/app/src/main/java/com/infomaniak/swisstransfer/di/CoroutinesDispatchersModule.kt new file mode 100644 index 000000000..22debd640 --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/di/CoroutinesDispatchersModule.kt @@ -0,0 +1,42 @@ +/* + * Infomaniak SwissTransfer - Android + * Copyright (C) 2023-2024 Infomaniak Network SA + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.infomaniak.swisstransfer.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +@Module +@InstallIn(SingletonComponent::class) +object CoroutinesDispatchersModule { + + @DefaultDispatcher + @Provides + fun providesDefaultDispatcher(): CoroutineDispatcher = Dispatchers.Default + + @IoDispatcher + @Provides + fun providesIoDispatcher(): CoroutineDispatcher = Dispatchers.IO + + @MainDispatcher + @Provides + fun providesMainDispatcher(): CoroutineDispatcher = Dispatchers.Main +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/di/CoroutinesQualifiers.kt b/app/src/main/java/com/infomaniak/swisstransfer/di/CoroutinesQualifiers.kt new file mode 100644 index 000000000..757d9fe39 --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/di/CoroutinesQualifiers.kt @@ -0,0 +1,34 @@ +/* + * Infomaniak SwissTransfer - Android + * Copyright (C) 2023-2024 Infomaniak Network SA + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.infomaniak.swisstransfer.di + +import javax.inject.Qualifier + +//region Globals qualifiers +@Retention(AnnotationRetention.BINARY) +@Qualifier +annotation class DefaultDispatcher + +@Retention(AnnotationRetention.BINARY) +@Qualifier +annotation class IoDispatcher + +@Retention(AnnotationRetention.BINARY) +@Qualifier +annotation class MainDispatcher +//endregion From 4611473843fb098e9111a01bcacf73d98d0290fe Mon Sep 17 00:00:00 2001 From: Abdourahamane Boinaidi Date: Fri, 23 Aug 2024 16:51:06 +0200 Subject: [PATCH 4/8] Init application Module --- .../swisstransfer/di/ApplicationModule.kt | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/di/ApplicationModule.kt diff --git a/app/src/main/java/com/infomaniak/swisstransfer/di/ApplicationModule.kt b/app/src/main/java/com/infomaniak/swisstransfer/di/ApplicationModule.kt new file mode 100644 index 000000000..21147fd99 --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/di/ApplicationModule.kt @@ -0,0 +1,31 @@ +/* + * Infomaniak SwissTransfer - Android + * Copyright (C) 2024 Infomaniak Network SA + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.infomaniak.swisstransfer.di + +import dagger.Provides +import javax.inject.Singleton + +object ApplicationModule { + + @Provides + @Singleton + fun providesSwissTransferInjection() { + // TODO: Implement this method + } +} From d9bb29c40c294e328fee73a941e09fd9ffbdd020 Mon Sep 17 00:00:00 2001 From: Abdourahamane Boinaidi Date: Fri, 23 Aug 2024 16:55:18 +0200 Subject: [PATCH 5/8] init hilt --- app/src/main/AndroidManifest.xml | 1 + .../swisstransfer/ui/MainActivity.kt | 2 ++ .../swisstransfer/ui/MainApplication.kt | 26 +++++++++++++++++++ .../swisstransfer/ui/NewTransferActivity.kt | 2 ++ 4 files changed, 31 insertions(+) create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/MainApplication.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 67cb97e24..042344caf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,6 +20,7 @@ xmlns:tools="http://schemas.android.com/tools"> . + */ + +package com.infomaniak.swisstransfer.ui + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class MainApplication : Application() { +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/NewTransferActivity.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/NewTransferActivity.kt index 3ccb50164..75c0eb2dd 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/NewTransferActivity.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/NewTransferActivity.kt @@ -24,7 +24,9 @@ import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import com.infomaniak.swisstransfer.ui.screen.newtransfer.NewTransferScreen import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class NewTransferActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { From 1eb0402d4d1141cdabe642af7a187a3637546778 Mon Sep 17 00:00:00 2001 From: Abdourahamane Boinaidi Date: Fri, 23 Aug 2024 16:59:19 +0200 Subject: [PATCH 6/8] Add a hilt sample --- .../swisstransfer/di/ApplicationModule.kt | 13 +++++-------- .../swisstransfer/ui/screen/main/sent/SentScreen.kt | 4 ++-- .../ui/screen/main/sent/SentViewModel.kt | 5 ++++- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/di/ApplicationModule.kt b/app/src/main/java/com/infomaniak/swisstransfer/di/ApplicationModule.kt index 21147fd99..046c0eb13 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/di/ApplicationModule.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/di/ApplicationModule.kt @@ -18,14 +18,11 @@ package com.infomaniak.swisstransfer.di -import dagger.Provides -import javax.inject.Singleton - object ApplicationModule { - @Provides - @Singleton - fun providesSwissTransferInjection() { - // TODO: Implement this method - } +// @Provides +// @Singleton +// fun providesSwissTransferInjection() { +// // TODO: Implement this method +// } } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt index 77ae84904..435d5b77e 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt @@ -32,8 +32,8 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout +import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.lifecycle.viewmodel.compose.viewModel import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.components.NewTransferFab import com.infomaniak.swisstransfer.ui.components.NewTransferFabType @@ -48,7 +48,7 @@ import com.infomaniak.swisstransfer.ui.utils.PreviewTablet @Composable fun SentScreen( navigateToDetails: (transferId: Int) -> Unit, - sentViewModel: SentViewModel = viewModel(), + sentViewModel: SentViewModel = hiltViewModel(), ) { val transfers by sentViewModel.transfers.collectAsStateWithLifecycle() SentScreen( diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentViewModel.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentViewModel.kt index 51e431c74..c7d236558 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentViewModel.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentViewModel.kt @@ -20,10 +20,13 @@ package com.infomaniak.swisstransfer.ui.screen.main.sent import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.stateIn +import javax.inject.Inject -class SentViewModel : ViewModel() { +@HiltViewModel +class SentViewModel @Inject constructor() : ViewModel() { val transfers = flow> { emit(emptyList()) }.stateIn(viewModelScope, SharingStarted.Eagerly, null) } From 961ac589653e85d21e0e9edc2d5865f3df49fa54 Mon Sep 17 00:00:00 2001 From: Abdourahamane Boinaidi Date: Fri, 23 Aug 2024 17:00:40 +0200 Subject: [PATCH 7/8] Update libs --- gradle/libs.versions.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8ec09265c..545482f80 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,8 @@ [versions] activityCompose = "1.9.1" -adaptiveLayout = "1.0.0-beta04" +adaptiveLayout = "1.0.0-rc01" agp = "8.5.2" -composeBom = "2024.06.00" +composeBom = "2024.08.00" constraintlayoutCompose = "1.0.1" coreKtx = "1.13.1" hilt = "2.52" @@ -11,8 +11,8 @@ junit = "4.13.2" junitVersion = "1.2.1" kotlin = "2.0.20" lifecycleRuntimeKtx = "2.8.4" -material3Beta = "1.3.0-beta05" -navigation = "2.8.0-beta07" +material3Beta = "1.3.0-rc01" +navigation = "2.8.0-rc01" serialization = "1.7.1" [libraries] From 0a98458c31e51db288142fd0b047554d2d6b6b8a Mon Sep 17 00:00:00 2001 From: Abdourahamane Boinaidi Date: Fri, 23 Aug 2024 17:05:59 +0200 Subject: [PATCH 8/8] Add missing it string --- app/src/main/res/values-it/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 837145866..82b500c04 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -47,6 +47,7 @@ Vicino Codice QR Trasferimento + Invia i vostri file tramite Macchina fotografica Sfogliare i file Galleria di foto e video