#18 Basic structure of editing profile screen

This commit is contained in:
Tibo De Peuter 2023-04-16 21:49:56 +02:00
parent 3ff4f82298
commit 8ad82dda43
5 changed files with 83 additions and 5 deletions

View file

@ -19,6 +19,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.input.VisualTransformation
import be.ugent.sel.studeez.common.ext.fieldModifier
@Composable @Composable
fun BasicField( fun BasicField(
@ -36,6 +37,20 @@ fun BasicField(
) )
} }
@Composable
fun LabelledInputField(
value: String,
onNewValue: (String) -> Unit,
@StringRes label: Int
) {
OutlinedTextField(
value = value,
onValueChange = onNewValue,
label = { Text(text = stringResource(id = label)) },
modifier = Modifier.fieldModifier()
)
}
@Composable @Composable
fun UsernameField( fun UsernameField(
value: String, value: String,

View file

@ -1,22 +1,44 @@
package be.ugent.sel.studeez.screens.profile package be.ugent.sel.studeez.screens.profile
import androidx.compose.foundation.layout.Column
import androidx.compose.material.Button
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.viewmodel.compose.viewModel
import be.ugent.sel.studeez.R import be.ugent.sel.studeez.R
import be.ugent.sel.studeez.common.composable.BasicButton
import be.ugent.sel.studeez.common.composable.BasicTextButton
import be.ugent.sel.studeez.common.composable.LabelledInputField
import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate
import be.ugent.sel.studeez.common.ext.textButton
import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.resources
import be.ugent.sel.studeez.ui.theme.StudeezTheme import be.ugent.sel.studeez.ui.theme.StudeezTheme
@Composable @Composable
fun EditProfileScreen( fun EditProfileScreen(
goBack: () -> Unit goBack: () -> Unit,
viewModel: ProfileEditViewModel = hiltViewModel()
) { ) {
val uiState by viewModel.uiState
SecondaryScreenTemplate( SecondaryScreenTemplate(
title = resources().getString(R.string.editing_profile), title = resources().getString(R.string.editing_profile),
popUp = goBack popUp = goBack
) { ) {
Text(text = "TODO") Column {
LabelledInputField(
value = uiState.username,
onNewValue = viewModel::onUsernameChange,
label = R.string.username
)
BasicTextButton(text = R.string.save, Modifier.textButton()) {} // TODO
BasicTextButton(text = R.string.delete_profile, Modifier.textButton()) {} // TODO
}
} }
} }
@ -24,8 +46,8 @@ fun EditProfileScreen(
@Composable @Composable
fun EditProfileScreenComposable() { fun EditProfileScreenComposable() {
StudeezTheme { StudeezTheme {
EditProfileScreen { EditProfileScreen (
{} {}
} )
} }
} }

View file

@ -0,0 +1,5 @@
package be.ugent.sel.studeez.screens.profile
data class ProfileEditUiState (
val username: String = ""
)

View file

@ -0,0 +1,31 @@
package be.ugent.sel.studeez.screens.profile
import androidx.compose.runtime.mutableStateOf
import be.ugent.sel.studeez.domain.LogService
import be.ugent.sel.studeez.screens.StudeezViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class ProfileEditViewModel @Inject constructor(
logService: LogService
) : StudeezViewModel(logService) {
var uiState = mutableStateOf(ProfileEditUiState())
private set
private val username
get() = uiState.value.username
fun onUsernameChange(newValue: String) {
uiState.value = uiState.value.copy(username = newValue)
}
fun onSaveClick() {
// TODO
}
fun onDeleteClick() {
// TODO
}
}

View file

@ -7,11 +7,15 @@
<string name="repeat_password">Repeat password</string> <string name="repeat_password">Repeat password</string>
<string name="generic_error">Something wrong happened. Please try again.</string> <string name="generic_error">Something wrong happened. Please try again.</string>
<string name="email_error">Please insert a valid email.</string> <string name="email_error">Please insert a valid email.</string>
<string name="cancel">Cancel</string>
<string name="try_again">Try again</string> <string name="try_again">Try again</string>
<string name="go_back">Go back</string> <string name="go_back">Go back</string>
<string name="menu">Menu</string> <string name="menu">Menu</string>
<!-- Actions -->
<string name="confirm">Confirm</string>
<string name="save">Save</string>
<string name="cancel">Cancel</string>
<!-- SignUpScreen --> <!-- SignUpScreen -->
<string name="create_account">Create account</string> <string name="create_account">Create account</string>
<string name="password_error">Your password should have at least six characters and include one digit, one lower case letter and one upper case letter.</string> <string name="password_error">Your password should have at least six characters and include one digit, one lower case letter and one upper case letter.</string>
@ -41,6 +45,7 @@
<string name="no_username">Unknown username</string> <string name="no_username">Unknown username</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">Edit profile</string>
<string name="editing_profile">Editing profile</string> <string name="editing_profile">Editing profile</string>
<string name="delete_profile">Delete profile</string>
<!-- Friends --> <!-- Friends -->
<string name="friends">Friends</string> <string name="friends">Friends</string>