diff --git a/src/app/build.gradle b/src/app/build.gradle index dcd6d53..ba6efaa 100644 --- a/src/app/build.gradle +++ b/src/app/build.gradle @@ -1,6 +1,8 @@ plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' + id "kotlin-kapt" + id "dagger.hilt.android.plugin" } android { @@ -66,5 +68,10 @@ dependencies { debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version" implementation("androidx.core:core-splashscreen:1.0.1") + //Hilt + implementation "com.google.dagger:hilt-android:$hilt_version" + kapt "com.google.dagger:hilt-android-compiler:$hilt_version" + implementation "androidx.hilt:hilt-navigation-compose:1.0.0" + implementation 'com.github.racra:smooth-corner-rect-android-compose:v1.0.0' } diff --git a/src/app/src/main/AndroidManifest.xml b/src/app/src/main/AndroidManifest.xml index 207fd85..b5080f8 100644 --- a/src/app/src/main/AndroidManifest.xml +++ b/src/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools"> diff --git a/src/app/src/main/java/fr/iut/alldev/allin/AllInApplication.kt b/src/app/src/main/java/fr/iut/alldev/allin/AllInApplication.kt new file mode 100644 index 0000000..b45771b --- /dev/null +++ b/src/app/src/main/java/fr/iut/alldev/allin/AllInApplication.kt @@ -0,0 +1,7 @@ +package fr.iut.alldev.allin + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class AllInApplication : Application() \ No newline at end of file diff --git a/src/app/src/main/java/fr/iut/alldev/allin/MainActivity.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/MainActivity.kt similarity index 94% rename from src/app/src/main/java/fr/iut/alldev/allin/MainActivity.kt rename to src/app/src/main/java/fr/iut/alldev/allin/ui/MainActivity.kt index 462e0f0..ef2e42a 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/MainActivity.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/MainActivity.kt @@ -1,4 +1,4 @@ -package fr.iut.alldev.allin +package fr.iut.alldev.allin.ui import android.app.Activity import android.os.Build @@ -11,9 +11,11 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat +import dagger.hilt.android.AndroidEntryPoint import fr.iut.alldev.allin.ui.navigation.AllInNavHost import fr.iut.alldev.allin.ui.theme.AllInTheme +@AndroidEntryPoint class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt index d5fc0d7..6bc4eeb 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt @@ -14,6 +14,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.hilt.navigation.compose.hiltViewModel import fr.iut.alldev.allin.R import fr.iut.alldev.allin.ui.core.AllInGradientButton import fr.iut.alldev.allin.ui.core.AllInPasswordField @@ -24,7 +25,8 @@ import fr.iut.alldev.allin.ui.theme.AllInTheme @Composable fun LoginScreen( onClickLogin: ()->Unit, - onClickRegister: ()->Unit + onClickRegister: ()->Unit, + loginViewModel: LoginViewModel = hiltViewModel() ) { val bringIntoViewRequester = BringIntoViewRequester() diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginViewModel.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginViewModel.kt new file mode 100644 index 0000000..149c6de --- /dev/null +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginViewModel.kt @@ -0,0 +1,11 @@ +package fr.iut.alldev.allin.ui.login + +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class LoginViewModel @Inject constructor( +) : ViewModel() { + +} \ No newline at end of file diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt index 89a25df..a20fb8e 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.hilt.navigation.compose.hiltViewModel import fr.iut.alldev.allin.R import fr.iut.alldev.allin.ui.core.AllInGradientButton import fr.iut.alldev.allin.ui.core.AllInPasswordField @@ -25,12 +26,15 @@ import fr.iut.alldev.allin.ui.theme.AllInTheme @OptIn(ExperimentalFoundationApi::class) @Composable fun RegisterScreen( - onClickRegister: ()->Unit, - onClickLogin: ()->Unit + onClickRegister: () -> Unit, + onClickLogin: () -> Unit, + registerViewModel: RegisterViewModel = hiltViewModel(), ) { - var username by remember{ - mutableStateOf("") - } + val (username, setUsername) = remember{ registerViewModel.username } + val (email, setEmail) = remember{ registerViewModel.email } + val (password, setPassword) = remember{ registerViewModel.password } + val (passwordValidation, setPasswordValidation) = remember{ registerViewModel.passwordValidation } + val bringIntoViewRequester = remember { BringIntoViewRequester() } Box( @@ -78,30 +82,30 @@ fun RegisterScreen( modifier = Modifier.fillMaxWidth(), placeholder = stringResource(id = R.string.username), value = username, - onValueChange = { username = it }, + onValueChange = setUsername, maxChar = 20, bringIntoViewRequester = bringIntoViewRequester ) AllInTextField( modifier = Modifier.fillMaxWidth(), placeholder = stringResource(id = R.string.email), - value = "", - onValueChange = { }, + value = email, + onValueChange = setEmail, keyboardType = KeyboardType.Email, bringIntoViewRequester = bringIntoViewRequester ) AllInPasswordField( modifier = Modifier.fillMaxWidth(), placeholder = stringResource(id = R.string.password), - value = "", - onValueChange = { }, + value = password, + onValueChange = setPassword, bringIntoViewRequester = bringIntoViewRequester ) AllInPasswordField( modifier = Modifier.fillMaxWidth(), placeholder = stringResource(id = R.string.confirm_password), - value = "", - onValueChange = { }, + value = passwordValidation, + onValueChange = setPasswordValidation, bringIntoViewRequester = bringIntoViewRequester ) } diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt new file mode 100644 index 0000000..50cee46 --- /dev/null +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt @@ -0,0 +1,18 @@ +package fr.iut.alldev.allin.ui.register + +import androidx.compose.runtime.mutableStateOf +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import fr.iut.alldev.allin.data.repository.UserRepository +import javax.inject.Inject + +@HiltViewModel +class RegisterViewModel @Inject constructor( + val userRepository: UserRepository +) : ViewModel() { + + val username = mutableStateOf("") + val email = mutableStateOf("") + val password = mutableStateOf("") + val passwordValidation = mutableStateOf("") +} \ No newline at end of file diff --git a/src/build.gradle b/src/build.gradle index ddeebca..3acbbfe 100644 --- a/src/build.gradle +++ b/src/build.gradle @@ -2,10 +2,13 @@ buildscript { ext { compose_version = '1.2.0' accompanist_version = '0.25.1' + hilt_version = "2.45" } }// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '7.4.2' apply false id 'com.android.library' version '7.4.2' apply false id 'org.jetbrains.kotlin.android' version '1.7.0' apply false + id("com.google.dagger.hilt.android") version "$hilt_version" apply false + } \ No newline at end of file diff --git a/src/data/build.gradle b/src/data/build.gradle index bed0e47..1864193 100644 --- a/src/data/build.gradle +++ b/src/data/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' + id "kotlin-kapt" } android { @@ -38,4 +39,8 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + + //Hilt + implementation "com.google.dagger:hilt-android:$hilt_version" + kapt "com.google.dagger:hilt-android-compiler:$hilt_version" } \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/di/RepositoryModule.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/di/RepositoryModule.kt new file mode 100644 index 0000000..2e8b757 --- /dev/null +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/di/RepositoryModule.kt @@ -0,0 +1,17 @@ +package fr.iut.alldev.allin.data.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import fr.iut.alldev.allin.data.repository.UserRepository +import fr.iut.alldev.allin.data.repository.impl.UserRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +abstract class RepositoryModule { + @Singleton + @Binds + abstract fun provideUserRepository(userRepositoryImpl: UserRepositoryImpl): UserRepository +} \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/model/User.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/model/User.kt new file mode 100644 index 0000000..5a4e882 --- /dev/null +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/model/User.kt @@ -0,0 +1,8 @@ +package fr.iut.alldev.allin.data.model + +data class User( + val id : String, + val username : String, + val email : String, + val coins : Int +) \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/UserRepository.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/UserRepository.kt new file mode 100644 index 0000000..2b7ebe4 --- /dev/null +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/UserRepository.kt @@ -0,0 +1,4 @@ +package fr.iut.alldev.allin.data.repository + +abstract class UserRepository { +} \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/UserRepositoryImpl.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/UserRepositoryImpl.kt new file mode 100644 index 0000000..7e0194f --- /dev/null +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/UserRepositoryImpl.kt @@ -0,0 +1,10 @@ +package fr.iut.alldev.allin.data.repository.impl + +import fr.iut.alldev.allin.data.repository.UserRepository +import javax.inject.Inject + +class UserRepositoryImpl @Inject constructor( + +) : UserRepository() { + +} \ No newline at end of file