Dependency Injection using Hilt
continuous-integration/drone/push Build is passing Details

pull/3/head
Arthur VALIN 1 year ago
parent 16c6cb2309
commit 8c0cd243ae

@ -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'
}

@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">
<application
android:name=".AllInApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
@ -12,7 +13,7 @@
android:theme="@style/Theme.Allin"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:name=".ui.MainActivity"
android:exported="true"
android:theme="@style/Theme.Allin">
<intent-filter>

@ -0,0 +1,7 @@
package fr.iut.alldev.allin
import android.app.Application
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class AllInApplication : Application()

@ -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)

@ -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()

@ -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() {
}

@ -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
)
}

@ -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("")
}

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

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

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

@ -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
)

@ -0,0 +1,4 @@
package fr.iut.alldev.allin.data.repository
abstract class UserRepository {
}

@ -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() {
}
Loading…
Cancel
Save