#18 Basic structure of editing profile screen
This commit is contained in:
parent
3ff4f82298
commit
8ad82dda43
5 changed files with 83 additions and 5 deletions
|
@ -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,
|
||||||
|
|
|
@ -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 (
|
||||||
{}
|
{}
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package be.ugent.sel.studeez.screens.profile
|
||||||
|
|
||||||
|
data class ProfileEditUiState (
|
||||||
|
val username: String = ""
|
||||||
|
)
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -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>
|
||||||
|
|
Reference in a new issue