button to regenerate color

This commit is contained in:
brreynie 2023-05-13 17:22:40 +02:00
parent 00751aaf51
commit 4b09a8011c
4 changed files with 41 additions and 14 deletions

View file

@ -123,9 +123,6 @@ dependencies {
implementation 'com.google.firebase:firebase-firestore-ktx' implementation 'com.google.firebase:firebase-firestore-ktx'
implementation 'com.google.firebase:firebase-perf-ktx' implementation 'com.google.firebase:firebase-perf-ktx'
implementation 'com.google.firebase:firebase-config-ktx' implementation 'com.google.firebase:firebase-config-ktx'
// Colorpicker
implementation 'com.github.skydoves:colorpicker-compose:1.0.2'
} }
// Allow references to generate code // Allow references to generate code

View file

@ -1,20 +1,26 @@
package be.ugent.sel.studeez.screens.subjects.form package be.ugent.sel.studeez.screens.subjects.form
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.material.OutlinedTextField import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Button
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.MaterialTheme
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.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import be.ugent.sel.studeez.common.composable.BasicButton import be.ugent.sel.studeez.common.composable.BasicButton
import be.ugent.sel.studeez.common.composable.DeleteButton import be.ugent.sel.studeez.common.composable.DeleteButton
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.basicButton import be.ugent.sel.studeez.common.ext.basicButton
import be.ugent.sel.studeez.common.ext.fieldModifier import be.ugent.sel.studeez.common.ext.fieldModifier
import be.ugent.sel.studeez.common.ext.generateRandomArgb
import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.resources
import be.ugent.sel.studeez.R.string as AppText import be.ugent.sel.studeez.R.string as AppText
@ -31,7 +37,7 @@ fun SubjectCreateRoute(
uiState = uiState, uiState = uiState,
onConfirm = { viewModel.onCreate(openAndPopUp) }, onConfirm = { viewModel.onCreate(openAndPopUp) },
onNameChange = viewModel::onNameChange, onNameChange = viewModel::onNameChange,
onColorChange = {}, onColorChange = viewModel::onColorChange,
) )
} }
@ -48,7 +54,7 @@ fun SubjectEditRoute(
uiState = uiState, uiState = uiState,
onConfirm = { viewModel.onEdit(openAndPopUp) }, onConfirm = { viewModel.onEdit(openAndPopUp) },
onNameChange = viewModel::onNameChange, onNameChange = viewModel::onNameChange,
onColorChange = {}, onColorChange = viewModel::onColorChange,
) { ) {
DeleteButton(text = AppText.delete_subject) { DeleteButton(text = AppText.delete_subject) {
viewModel.onDelete(openAndPopUp) viewModel.onDelete(openAndPopUp)
@ -63,7 +69,7 @@ fun SubjectForm(
uiState: SubjectFormUiState, uiState: SubjectFormUiState,
onConfirm: () -> Unit, onConfirm: () -> Unit,
onNameChange: (String) -> Unit, onNameChange: (String) -> Unit,
onColorChange: (Color) -> Unit, onColorChange: (Long) -> Unit,
extraButton: @Composable () -> Unit = {}, extraButton: @Composable () -> Unit = {},
) { ) {
SecondaryScreenTemplate( SecondaryScreenTemplate(
@ -71,13 +77,13 @@ fun SubjectForm(
popUp = goBack, popUp = goBack,
) { ) {
Column { Column {
OutlinedTextField( LabelledInputField(
singleLine = true, singleLine = true,
value = uiState.name, value = uiState.name,
onValueChange = onNameChange, onNewValue = onNameChange,
placeholder = { Text(stringResource(id = AppText.name)) }, label = AppText.name,
modifier = Modifier.fieldModifier(),
) )
ColorPicker(onColorChange, uiState)
BasicButton( BasicButton(
text = AppText.confirm, text = AppText.confirm,
modifier = Modifier.basicButton(), modifier = Modifier.basicButton(),
@ -88,6 +94,27 @@ fun SubjectForm(
} }
} }
@Composable
fun ColorPicker(
onColorChange: (Long) -> Unit,
uiState: SubjectFormUiState,
) {
Button(
onClick = { onColorChange(Color.generateRandomArgb()) },
modifier = Modifier
.fieldModifier(),
colors = ButtonDefaults.buttonColors(
backgroundColor = Color(uiState.color),
// contentColor = MaterialTheme.colors.onSurface.copy(alpha = 0.4f),
),
shape = RoundedCornerShape(4.dp),
// border = BorderStroke(1.dp, MaterialTheme.colors.onSurface.copy(alpha = 0.4f)),
elevation = null,
) {
Text(text = "Regenerate color")
}
}
@Preview @Preview
@Composable @Composable
fun AddSubjectFormPreview() { fun AddSubjectFormPreview() {

View file

@ -1,6 +1,9 @@
package be.ugent.sel.studeez.screens.subjects.form package be.ugent.sel.studeez.screens.subjects.form
import androidx.compose.ui.graphics.Color
import be.ugent.sel.studeez.common.ext.generateRandomArgb
data class SubjectFormUiState( data class SubjectFormUiState(
val name: String = "", val name: String = "",
val color: Long = 0xFFFFD200, val color: Long = Color.generateRandomArgb(),
) )

View file

@ -46,7 +46,7 @@ class SubjectCreateFormViewModel @Inject constructor(
fun onCreate(openAndPopUp: (String, String) -> Unit) { fun onCreate(openAndPopUp: (String, String) -> Unit) {
val newSubject = Subject( val newSubject = Subject(
name = name, name = name,
argb_color = Color.generateRandomArgb(), argb_color = color,
) )
subjectDAO.saveSubject( subjectDAO.saveSubject(
newSubject newSubject