From b08aaec9994032983f31f7411936b146ce0cde69 Mon Sep 17 00:00:00 2001 From: Infi Date: Tue, 31 Oct 2023 20:29:27 +0100 Subject: [PATCH] feat(settings): set bio Signed-off-by: Infi --- .../java/chat/revolt/api/routes/user/User.kt | 2 +- .../components/generic/InlineMediaPicker.kt | 5 +- .../screens/settings/ProfileSettngsScreen.kt | 61 ++++++++++++++++++- app/src/main/res/values/strings.xml | 1 + 4 files changed, 64 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/chat/revolt/api/routes/user/User.kt b/app/src/main/java/chat/revolt/api/routes/user/User.kt index 70bcf1e1..2f81cb2a 100644 --- a/app/src/main/java/chat/revolt/api/routes/user/User.kt +++ b/app/src/main/java/chat/revolt/api/routes/user/User.kt @@ -67,7 +67,7 @@ suspend fun patchSelf( profileMap["background"] = background } if (bio != null) { - profileMap["bio"] = bio + profileMap["content"] = bio } body["profile"] = RevoltJson.encodeToJsonElement( diff --git a/app/src/main/java/chat/revolt/components/generic/InlineMediaPicker.kt b/app/src/main/java/chat/revolt/components/generic/InlineMediaPicker.kt index dbbb62d3..15f97ada 100644 --- a/app/src/main/java/chat/revolt/components/generic/InlineMediaPicker.kt +++ b/app/src/main/java/chat/revolt/components/generic/InlineMediaPicker.kt @@ -9,7 +9,6 @@ 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.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape @@ -87,11 +86,11 @@ fun InlineMediaPicker( onRemove() }, enabled = currentModel != null, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.width(480.dp) ) { Icon( imageVector = Icons.Default.Close, - contentDescription = stringResource(R.string.inline_media_picker_remove) + contentDescription = null ) Spacer(modifier = Modifier.width(8.dp)) diff --git a/app/src/main/java/chat/revolt/screens/settings/ProfileSettngsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/ProfileSettngsScreen.kt index 14179844..f95b4e2f 100644 --- a/app/src/main/java/chat/revolt/screens/settings/ProfileSettngsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/ProfileSettngsScreen.kt @@ -9,14 +9,21 @@ import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.FlowRow 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.safeDrawingPadding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Check +import androidx.compose.material3.Icon import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf @@ -191,7 +198,18 @@ class ProfileSettingsScreenViewModel @Inject constructor(@ApplicationContext val fun removeBackground() { viewModelScope.launch { patchSelf(remove = listOf("ProfileBackground")) - pfpModel = null + backgroundModel = null + } + } + + fun saveBio() { + viewModelScope.launch { + patchSelf(bio = pendingProfile?.content) + + fetchUserProfile(RevoltAPI.selfId!!).let { + currentProfile = it + pendingProfile = it + } } } } @@ -301,6 +319,47 @@ fun ProfileSettingsScreen( ) } } + Column( + modifier = Modifier + .padding(start = 20.dp, end = 20.dp, top = 0.dp, bottom = 20.dp) + ) { + OutlinedTextField( + value = viewModel.pendingProfile?.content ?: "", + onValueChange = { value -> + viewModel.pendingProfile?.let { + viewModel.pendingProfile = it.copy(content = value) + } + }, + label = { + Text( + text = stringResource(id = R.string.user_context_sheet_category_bio), + style = MaterialTheme.typography.labelLarge, + ) + }, + ) + + Spacer(Modifier.height(8.dp)) + + TextButton( + onClick = { + viewModel.saveBio() + }, + enabled = viewModel.pendingProfile?.content != viewModel.currentProfile?.content, + modifier = Modifier.fillMaxWidth() + ) { + Icon( + imageVector = Icons.Default.Check, + contentDescription = null + ) + + Spacer(modifier = Modifier.width(8.dp)) + + Text( + text = stringResource(id = R.string.settings_profile_save), + style = MaterialTheme.typography.bodySmall + ) + } + } } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6ebed104..684b6d45 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -398,6 +398,7 @@ Profile Profile picture Custom background + Save Sessions This Device