From dc5cc2e862d737fda74794993848bc4fc3c7cf04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B0=D1=88=D0=B8=D0=BD=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC?= Date: Thu, 23 Nov 2023 22:02:38 +0400 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=B1=D0=B0=D0=BB=D0=B4=D0=B5=D1=82?= =?UTF-8?q?=D1=8C,=20=D1=8F=20=D0=BD=D0=B5=20=D0=B7=D0=BD=D0=B0=D1=8E,=20?= =?UTF-8?q?=D1=87=D1=82=D0=BE=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB,=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B0=D1=82=D0=B2=D0=BE=D1=80=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B7=D0=B0=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/labwork/pages/user/LoginPage.kt | 61 +++++++++++-------- .../example/labwork/pages/user/ProfileForm.kt | 4 +- .../labwork/viewmodel/UserViewModel.kt | 35 +++-------- 3 files changed, 46 insertions(+), 54 deletions(-) diff --git a/app/src/main/java/com/example/labwork/pages/user/LoginPage.kt b/app/src/main/java/com/example/labwork/pages/user/LoginPage.kt index 1c8df09..b04ce55 100644 --- a/app/src/main/java/com/example/labwork/pages/user/LoginPage.kt +++ b/app/src/main/java/com/example/labwork/pages/user/LoginPage.kt @@ -1,5 +1,6 @@ package com.example.labwork.pages.user +import android.widget.Toast import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -34,12 +35,11 @@ import androidx.compose.ui.unit.sp import androidx.navigation.NavController import androidx.navigation.NavHostController import com.example.labwork.R -import com.example.labwork.database.DAO.BicycleDao -import com.example.labwork.database.DAO.UserDao -import com.example.labwork.models.Bicycle import com.example.labwork.models.User import com.example.labwork.ui.theme.LightBluePolitech import com.example.labwork.viewmodel.UserViewModel +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -49,19 +49,24 @@ fun LoginPage( navHostController: NavHostController, userViewModel: UserViewModel ) { - val email by remember { mutableStateOf("") } - val password by remember { mutableStateOf("") } + var email by remember { mutableStateOf("") } + var password by remember { mutableStateOf("") } var showPassword by remember { mutableStateOf(false) } - val acceptLogin by remember { mutableStateOf(false) } var user by remember { mutableStateOf(null) } + var acceptLogin by remember { mutableStateOf(false) } - if (acceptLogin) { + if (acceptLogin == true) { user?.let { userProfile -> ProfileForm(item = userProfile, userViewModel = userViewModel, navHostController = navHostController) } - } else { + //navHostController.navigate("Info") + } + + else { Column( - modifier = Modifier.fillMaxSize().padding(16.dp), + modifier = Modifier + .fillMaxSize() + .padding(16.dp), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { @@ -74,9 +79,11 @@ fun LoginPage( TextField( value = email, - onValueChange = { userViewModel.setEmail(it) }, + onValueChange = { email = it }, label = { Text("Почта") }, - modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp), + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), textStyle = TextStyle(fontSize = 16.sp), colors = TextFieldDefaults.textFieldColors( cursorColor = LightBluePolitech, @@ -93,9 +100,11 @@ fun LoginPage( TextField( value = password, - onValueChange = { userViewModel.setPassword(it) }, + onValueChange = { password = it }, label = { Text("Пароль") }, - modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp), + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), textStyle = TextStyle(fontSize = 16.sp), colors = TextFieldDefaults.textFieldColors( cursorColor = LightBluePolitech, @@ -109,7 +118,9 @@ fun LoginPage( singleLine = true, visualTransformation = if (showPassword) VisualTransformation.None else PasswordVisualTransformation(), trailingIcon = { - IconButton(onClick = { showPassword = !showPassword }) { + IconButton( + onClick = { showPassword = !showPassword } + ) { Image( painter = if (showPassword) painterResource(R.drawable.baseline_visibility) else painterResource( R.drawable.baseline_visibility_off @@ -124,18 +135,20 @@ fun LoginPage( Button( onClick = { - userViewModel.login() + GlobalScope.launch { + val result = userViewModel.login(email, password) + user = userViewModel.getUserByEmail(email) + if (result) { + acceptLogin = true + } + } }, - modifier = Modifier.fillMaxWidth().padding(16.dp), - shape = RoundedCornerShape(16.dp), - colors = ButtonDefaults.buttonColors(backgroundColor = LightBluePolitech) + colors = ButtonDefaults.buttonColors(backgroundColor = LightBluePolitech,), + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp) ) { - Text( - text = "Войти", - color = Color.White, - fontSize = 18.sp, - textAlign = TextAlign.Center - ) + Text(text = "Авторизоваться", color = Color.White) } Spacer(modifier = Modifier.height(8.dp)) diff --git a/app/src/main/java/com/example/labwork/pages/user/ProfileForm.kt b/app/src/main/java/com/example/labwork/pages/user/ProfileForm.kt index fd96fad..100433c 100644 --- a/app/src/main/java/com/example/labwork/pages/user/ProfileForm.kt +++ b/app/src/main/java/com/example/labwork/pages/user/ProfileForm.kt @@ -37,8 +37,6 @@ fun ProfileForm(item: User, userViewModel: UserViewModel, navHostController: Nav var name by remember { mutableStateOf(item.name) } var password by remember { mutableStateOf(item.password) } - val viewModel = viewModel() - Column( modifier = Modifier.fillMaxWidth() ) { @@ -78,7 +76,7 @@ fun ProfileForm(item: User, userViewModel: UserViewModel, navHostController: Nav .fillMaxWidth() .padding(9.dp), onClick = { - viewModel.updateUser(User(item.id!!, email, name, password)) + userViewModel.updateUser(User(item.id!!, email, name, password)) navHostController.navigate("ListProduct") }, shape = RoundedCornerShape(15.dp) diff --git a/app/src/main/java/com/example/labwork/viewmodel/UserViewModel.kt b/app/src/main/java/com/example/labwork/viewmodel/UserViewModel.kt index 64f05a6..7977e04 100644 --- a/app/src/main/java/com/example/labwork/viewmodel/UserViewModel.kt +++ b/app/src/main/java/com/example/labwork/viewmodel/UserViewModel.kt @@ -12,15 +12,6 @@ class UserViewModel(private val userRepository: UserRepository) : ViewModel() { private val _users = MutableLiveData>() val users: LiveData> get() = _users - private val _loggedInUser = MutableLiveData() - val loggedInUser: LiveData get() = _loggedInUser - - private val _email = MutableLiveData() - val email: LiveData get() = _email - - private val _password = MutableLiveData() - val password: LiveData get() = _password - fun getAllUsers() { viewModelScope.launch { _users.value = userRepository.getAllUsers() @@ -30,7 +21,6 @@ class UserViewModel(private val userRepository: UserRepository) : ViewModel() { fun getUserById(userId: Int) { viewModelScope.launch { val user = userRepository.getUserById(userId) - // Обработка полученного пользователя } } @@ -52,24 +42,15 @@ class UserViewModel(private val userRepository: UserRepository) : ViewModel() { } } - - fun setEmail(email: String) { - _email.value = email + suspend fun login(email: String, password: String): Boolean { + var isSuccess = false + val user = userRepository.getUserByEmail(email) + isSuccess = user != null && user.password == password + return isSuccess } - fun setPassword(password: String) { - _password.value = password - } - - fun login() { - val email = _email.value - val password = _password.value - - if (email != null && password != null) { - viewModelScope.launch { - val user = userRepository.getUserByEmailAndPassword(email, password) - _loggedInUser.value = user - } - } + suspend fun getUserByEmail(email: String): User? { + return userRepository.getUserByEmail(email) } } +