Merge branch 'development' into bugfixes
This commit is contained in:
commit
53993bb2f0
6 changed files with 49 additions and 12 deletions
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package be.ugent.sel.studeez.common.ext
|
||||||
|
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import kotlin.random.Random
|
||||||
|
|
||||||
|
fun Color.Companion.generateRandomArgb(): Long {
|
||||||
|
val random = Random
|
||||||
|
val mask: Long = (0x000000FFL shl random.nextInt(0, 3)).inv()
|
||||||
|
return random.nextLong(0xFF000000L, 0xFFFFFFFFL) and mask
|
||||||
|
}
|
|
@ -2,7 +2,9 @@ package be.ugent.sel.studeez.screens.subjects.form
|
||||||
|
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
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.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
|
||||||
|
@ -11,11 +13,15 @@ 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.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.FormComposable
|
import be.ugent.sel.studeez.common.composable.FormComposable
|
||||||
|
import be.ugent.sel.studeez.common.composable.LabelledInputField
|
||||||
|
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 kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import be.ugent.sel.studeez.R.string as AppText
|
import be.ugent.sel.studeez.R.string as AppText
|
||||||
|
@ -33,7 +39,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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,7 +57,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) {
|
||||||
coroutineScope.launch {
|
coroutineScope.launch {
|
||||||
|
@ -68,7 +74,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 = {},
|
||||||
) {
|
) {
|
||||||
FormComposable(
|
FormComposable(
|
||||||
|
@ -76,13 +82,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(),
|
||||||
|
@ -93,6 +99,24 @@ 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 = Color.White,
|
||||||
|
),
|
||||||
|
shape = RoundedCornerShape(4.dp),
|
||||||
|
) {
|
||||||
|
Text(text = stringResource(id = AppText.regenerate_color))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Preview
|
@Preview
|
||||||
@Composable
|
@Composable
|
||||||
fun AddSubjectFormPreview() {
|
fun AddSubjectFormPreview() {
|
||||||
|
|
|
@ -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(),
|
||||||
)
|
)
|
|
@ -2,6 +2,8 @@ package be.ugent.sel.studeez.screens.subjects.form
|
||||||
|
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import be.ugent.sel.studeez.common.ext.generateRandomArgb
|
||||||
import be.ugent.sel.studeez.data.SelectedSubject
|
import be.ugent.sel.studeez.data.SelectedSubject
|
||||||
import be.ugent.sel.studeez.data.local.models.task.Subject
|
import be.ugent.sel.studeez.data.local.models.task.Subject
|
||||||
import be.ugent.sel.studeez.domain.LogService
|
import be.ugent.sel.studeez.domain.LogService
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
<string name="delete_subject">Delete Subject</string>
|
<string name="delete_subject">Delete Subject</string>
|
||||||
<string name="delete_task">Delete Task</string>
|
<string name="delete_task">Delete Task</string>
|
||||||
<string name="view_tasks">View</string>
|
<string name="view_tasks">View</string>
|
||||||
|
<string name="regenerate_color">Regenerate Color</string>
|
||||||
|
|
||||||
<!-- Sessions -->
|
<!-- Sessions -->
|
||||||
<string name="sessions_temp_description">Looks like you found the sessions screen! In here, your upcoming studying sessions with friends will be listed. You can accept invites or edit your own.</string> <!-- TODO Remove this description line once implemented. -->
|
<string name="sessions_temp_description">Looks like you found the sessions screen! In here, your upcoming studying sessions with friends will be listed. You can accept invites or edit your own.</string> <!-- TODO Remove this description line once implemented. -->
|
||||||
|
|
Reference in a new issue