Skip to content
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ plugins {
alias(libs.plugins.hilt)
//ksp
alias(libs.plugins.ksp)
alias(libs.plugins.google.gms.google.services)
// alias(libs.plugins.google.gms.google.services)
Comment thread
nirvan73 marked this conversation as resolved.
Outdated
}

val localPropertiesFile = rootProject.file("local.properties")
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/com/tpc/nudj/ui/components/TextFields.kt
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,14 @@ fun NudjTextField(
fun EmailTextField(
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier,
placeholder: String = "Institute Mail id"
) {
NudjTextField(
value = value,
onValueChange = onValueChange,
placeholder = placeholder,
modifier = modifier,
leadingIcon = {
Icon(
imageVector = Icons.Outlined.Mail,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
package com.tpc.nudj.ui.screen.auth.Reset

import android.content.res.Configuration
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.tpc.nudj.ui.components.LoadingIndicator
import com.tpc.nudj.ui.theme.LocalAppColors
import com.tpc.nudj.viewmodels.auth.ResetPassword.ResetPasswordViewModel
import com.tpc.nudj.R
import com.tpc.nudj.ui.components.NudjLogo
import com.tpc.nudj.ui.components.PasswordTextField
import com.tpc.nudj.ui.components.PrimaryButton
import com.tpc.nudj.ui.components.TertiaryButton
import com.tpc.nudj.ui.theme.NudjTheme

@Composable
fun ResetPasswordScreen(
viewModel: ResetPasswordViewModel = hiltViewModel(),
onLoginClick :() ->Unit
) {
Scaffold(
containerColor = LocalAppColors.current.background
) { paddingValues ->

val uiState by viewModel.resetPasswordUiState.collectAsState()
LoadingIndicator(isLoading = uiState.isLoading) {
ResetPasswordScreenLayout(
modifier = Modifier.padding(paddingValues),
uiState = uiState,
onPasswordInput = viewModel::onPasswordChange,
onConfirmPasswordInput = viewModel::onConfirmPasswordChange,
onPasswordVisibilityToggle = viewModel::togglePasswordVisibility,
onConfirmPasswordVisibilityToggle = viewModel::toggleConfirmPasswordVisibility,
onSubmitClick = viewModel::onSubmitClick,
onLoginClick = onLoginClick
)
}
}
}@Composable
fun ResetPasswordScreenLayout(
uiState: ResetPasswordUiState,
modifier: Modifier = Modifier,
onPasswordInput: (String) -> Unit,
onConfirmPasswordInput: (String) -> Unit,
onPasswordVisibilityToggle: () -> Unit,
onConfirmPasswordVisibilityToggle: () -> Unit,
onSubmitClick: () -> Unit,
onLoginClick: () -> Unit
) {
Column(
modifier = modifier
.fillMaxSize()
.background(LocalAppColors.current.background)
.padding(horizontal = 24.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(56.dp))
NudjLogo()

Spacer(modifier = Modifier.height(96.dp))

Text(
text = "Reset Password",
style = MaterialTheme.typography.titleLarge,
color = LocalAppColors.current.onBackground
)

Spacer(modifier = Modifier.height(16.dp))

Card(
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(16.dp),
colors = CardDefaults.cardColors(
containerColor = LocalAppColors.current.surfaceColor
)
) {
Column(
modifier = Modifier.padding(16.dp)
) {
PasswordTextField(
value = uiState.password,
onValueChange = onPasswordInput,
passwordVisible = uiState.passwordVisible,
onPasswordVisibilityToggle =
onPasswordVisibilityToggle,
placeholder = "New Password"
)

Spacer(modifier = Modifier.height(16.dp))

PasswordTextField(
value = uiState.confirmPassword,
onValueChange = onConfirmPasswordInput,
passwordVisible = uiState.confirmPasswordVisible,
onPasswordVisibilityToggle = onConfirmPasswordVisibilityToggle,
placeholder = "Confirm Password"
)
}
}

Spacer(modifier = Modifier.height(64.dp))

PrimaryButton(
text = "Submit",
onClick = onSubmitClick,
enabled = !uiState.isLoading,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp)
)

Spacer(modifier = Modifier.weight(1f))

Row(
modifier = Modifier.padding(bottom = 40.dp),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Already have an account?",
style = MaterialTheme.typography.bodyMedium,
color = LocalAppColors.current.onBackground
)

TertiaryButton(
text = "Login",
onClick = onLoginClick
)
}
}
}
@Preview(showBackground = true)
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ResetPasswordScreenLayoutPreview() {
NudjTheme {
ResetPasswordScreenLayout(
uiState = ResetPasswordUiState(),
onPasswordInput = {},
onConfirmPasswordInput = {},
onPasswordVisibilityToggle = {},
onConfirmPasswordVisibilityToggle = {},
onSubmitClick = {},
onLoginClick = {}
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.tpc.nudj.ui.screen.auth.Reset

data class ResetPasswordUiState(
val isLoading: Boolean = false,
val errorMessage: String? = null,
val toastMessage: String? = null,
val password: String = "",
val confirmPassword: String = "",
val passwordVisible: Boolean = false,
val confirmPasswordVisible: Boolean = false
)
Original file line number Diff line number Diff line change
@@ -1,44 +1,55 @@
package com.tpc.nudj.ui.screen.auth.forgotPassword

import android.content.res.Configuration
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.tpc.nudj.R
import com.tpc.nudj.ui.components.EmailTextField
import com.tpc.nudj.ui.components.LoadingIndicator
import com.tpc.nudj.ui.components.NudjLogo
import com.tpc.nudj.ui.components.NudjTopAppBar
import com.tpc.nudj.ui.components.PrimaryButton
import com.tpc.nudj.ui.components.TertiaryButton
import com.tpc.nudj.ui.screen.auth.login.LoginScreenLayout
import com.tpc.nudj.ui.screen.auth.login.LoginUiState
import com.tpc.nudj.ui.theme.LocalAppColors
import com.tpc.nudj.ui.theme.NudjTheme
import com.tpc.nudj.viewmodels.auth.forgotPassword.ForgotPasswordViewModel

@Composable
fun ForgetPasswordScreen(
viewModel: ForgotPasswordViewModel = hiltViewModel(),
onLoginClick: () -> Unit

) {
Scaffold(
topBar = {
NudjTopAppBar(
onBackClick = {}
)
}
containerColor = LocalAppColors.current.background
) { paddingValues ->
val uiState by viewModel.forgotPasswordUiState.collectAsState()
LoadingIndicator(isLoading = uiState.isLoading) {
Expand All @@ -47,6 +58,7 @@ fun ForgetPasswordScreen(
modifier = Modifier.padding(paddingValues),
uiState = uiState,
onEmailInput = viewModel::onEmailChange,
onLoginClick = onLoginClick,
onSendEmailClick = viewModel::onSendEmailClick

)
Expand All @@ -59,30 +71,76 @@ fun ForgetPasswordScreenLayout(
modifier: Modifier = Modifier,
uiState: ForgotPasswordUiState,
onEmailInput : (String) -> Unit,
onLoginClick :()-> Unit,
onSendEmailClick: () -> Unit

){

Column(
modifier = modifier
.fillMaxSize()
.background(MaterialTheme.colorScheme.background)
.background(LocalAppColors.current.background)
Comment thread
nirvan73 marked this conversation as resolved.
Outdated
.padding(horizontal = 32.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(72.dp))

){
NudjLogo()

EmailTextField(
value = uiState.email,
onValueChange = onEmailInput,
placeholder = "Enter your email"
Spacer(modifier = Modifier.height(120.dp))

Text(
text = "Enter your email address",
style = MaterialTheme.typography.titleLarge,
color = LocalAppColors.current.secondaryButtonTextColor
Comment thread
nirvan73 marked this conversation as resolved.
Outdated
)
Spacer(modifier = Modifier.height(24.dp))

Spacer(modifier = Modifier.height(16.dp))

Card(
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(16.dp),
colors = CardDefaults.cardColors(
containerColor = LocalAppColors.current.surfaceColor
)
) {
EmailTextField(
value = uiState.email,
onValueChange = onEmailInput,
placeholder = "Institute mail id",
modifier = Modifier.padding(16.dp)
)
}

Spacer(modifier = Modifier.height(32.dp))

PrimaryButton(
text = "Send Email",
text = "Reset Password",
onClick = onSendEmailClick,
modifier = Modifier.fillMaxWidth()
enabled = !uiState.isLoading,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp)
)

Spacer(modifier = Modifier.weight(1f))

Row(
modifier = Modifier.padding(bottom = 40.dp),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Already have an account?",
style = MaterialTheme.typography.bodyMedium,
color = LocalAppColors.current.onBackground
)

TertiaryButton(
text = "Login",
onClick = onLoginClick
)
}
}

}
Expand All @@ -96,6 +154,7 @@ private fun ForgetPasswordScreenLayoutPreview() {
modifier = Modifier,
uiState = ForgotPasswordUiState(),
onEmailInput = {},
onLoginClick = {},
onSendEmailClick = {}
)
}
Expand Down
Loading