From 79ed70bb175bd8fdbc037a83c7c537922fcd7d60 Mon Sep 17 00:00:00 2001 From: brreynie Date: Wed, 10 May 2023 11:49:18 +0200 Subject: [PATCH 1/5] generate random color --- .../studeez/screens/subjects/form/SubjectFormViewModel.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt index 533123b..e927a13 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt @@ -10,6 +10,7 @@ import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.screens.StudeezViewModel import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject +import kotlin.random.Random abstract class SubjectFormViewModel( protected val subjectDAO: SubjectDAO, @@ -42,9 +43,12 @@ class SubjectCreateFormViewModel @Inject constructor( override val uiState = mutableStateOf(SubjectFormUiState()) fun onCreate(openAndPopUp: (String, String) -> Unit) { + val random = Random + val mask: Long = (0x000000FFL shl random.nextInt(0, 3)).inv() + val randomColor = random.nextLong(0xFF000000L, 0xFFFFFFFFL) and mask val newSubject = Subject( name = name, - argb_color = color, + argb_color = randomColor, ) subjectDAO.saveSubject( newSubject From 00751aaf51f6fd3706fd8cb79790bcd918736607 Mon Sep 17 00:00:00 2001 From: brreynie Date: Wed, 10 May 2023 11:59:28 +0200 Subject: [PATCH 2/5] colorgenerator as extension of Color --- .../java/be/ugent/sel/studeez/common/ext/ColorExt.kt | 10 ++++++++++ .../screens/subjects/form/SubjectFormViewModel.kt | 8 +++----- 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/be/ugent/sel/studeez/common/ext/ColorExt.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/common/ext/ColorExt.kt b/app/src/main/java/be/ugent/sel/studeez/common/ext/ColorExt.kt new file mode 100644 index 0000000..87ce226 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/common/ext/ColorExt.kt @@ -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 +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt index e927a13..eb7ee6f 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt @@ -2,6 +2,8 @@ package be.ugent.sel.studeez.screens.subjects.form import androidx.compose.runtime.MutableState 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.local.models.task.Subject import be.ugent.sel.studeez.domain.LogService @@ -10,7 +12,6 @@ import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.screens.StudeezViewModel import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject -import kotlin.random.Random abstract class SubjectFormViewModel( protected val subjectDAO: SubjectDAO, @@ -43,12 +44,9 @@ class SubjectCreateFormViewModel @Inject constructor( override val uiState = mutableStateOf(SubjectFormUiState()) fun onCreate(openAndPopUp: (String, String) -> Unit) { - val random = Random - val mask: Long = (0x000000FFL shl random.nextInt(0, 3)).inv() - val randomColor = random.nextLong(0xFF000000L, 0xFFFFFFFFL) and mask val newSubject = Subject( name = name, - argb_color = randomColor, + argb_color = Color.generateRandomArgb(), ) subjectDAO.saveSubject( newSubject From 4b09a8011c5aeb48cd83f0f40afb141305225297 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 13 May 2023 17:22:40 +0200 Subject: [PATCH 3/5] button to regenerate color --- app/build.gradle | 3 -- .../subjects/form/SubjectFormScreen.kt | 45 +++++++++++++++---- .../subjects/form/SubjectFormUiState.kt | 5 ++- .../subjects/form/SubjectFormViewModel.kt | 2 +- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a19cbd7..68d4e47 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,9 +123,6 @@ dependencies { implementation 'com.google.firebase:firebase-firestore-ktx' implementation 'com.google.firebase:firebase-perf-ktx' implementation 'com.google.firebase:firebase-config-ktx' - - // Colorpicker - implementation 'com.github.skydoves:colorpicker-compose:1.0.2' } // Allow references to generate code diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt index 19e6816..da59eda 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt @@ -1,20 +1,26 @@ package be.ugent.sel.studeez.screens.subjects.form import androidx.annotation.StringRes +import androidx.compose.foundation.BorderStroke 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.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource 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.DeleteButton +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.fieldModifier +import be.ugent.sel.studeez.common.ext.generateRandomArgb import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.R.string as AppText @@ -31,7 +37,7 @@ fun SubjectCreateRoute( uiState = uiState, onConfirm = { viewModel.onCreate(openAndPopUp) }, onNameChange = viewModel::onNameChange, - onColorChange = {}, + onColorChange = viewModel::onColorChange, ) } @@ -48,7 +54,7 @@ fun SubjectEditRoute( uiState = uiState, onConfirm = { viewModel.onEdit(openAndPopUp) }, onNameChange = viewModel::onNameChange, - onColorChange = {}, + onColorChange = viewModel::onColorChange, ) { DeleteButton(text = AppText.delete_subject) { viewModel.onDelete(openAndPopUp) @@ -63,7 +69,7 @@ fun SubjectForm( uiState: SubjectFormUiState, onConfirm: () -> Unit, onNameChange: (String) -> Unit, - onColorChange: (Color) -> Unit, + onColorChange: (Long) -> Unit, extraButton: @Composable () -> Unit = {}, ) { SecondaryScreenTemplate( @@ -71,13 +77,13 @@ fun SubjectForm( popUp = goBack, ) { Column { - OutlinedTextField( + LabelledInputField( singleLine = true, value = uiState.name, - onValueChange = onNameChange, - placeholder = { Text(stringResource(id = AppText.name)) }, - modifier = Modifier.fieldModifier(), + onNewValue = onNameChange, + label = AppText.name, ) + ColorPicker(onColorChange, uiState) BasicButton( text = AppText.confirm, 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 @Composable fun AddSubjectFormPreview() { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormUiState.kt b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormUiState.kt index 9fdba01..10a18e8 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormUiState.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormUiState.kt @@ -1,6 +1,9 @@ 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( val name: String = "", - val color: Long = 0xFFFFD200, + val color: Long = Color.generateRandomArgb(), ) \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt index eb7ee6f..7847a63 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormViewModel.kt @@ -46,7 +46,7 @@ class SubjectCreateFormViewModel @Inject constructor( fun onCreate(openAndPopUp: (String, String) -> Unit) { val newSubject = Subject( name = name, - argb_color = Color.generateRandomArgb(), + argb_color = color, ) subjectDAO.saveSubject( newSubject From 360fb122f73bce5f7bdc6442aed131a7de8c7437 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 13 May 2023 17:24:46 +0200 Subject: [PATCH 4/5] some code polishing --- .../sel/studeez/screens/subjects/form/SubjectFormScreen.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt index da59eda..d01061b 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt @@ -101,15 +101,11 @@ fun ColorPicker( ) { Button( onClick = { onColorChange(Color.generateRandomArgb()) }, - modifier = Modifier - .fieldModifier(), + 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") } From df0325074d04bbf042383d0653eb7e2125ca420a Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 13 May 2023 17:29:25 +0200 Subject: [PATCH 5/5] i18n for regenerate button --- .../sel/studeez/screens/subjects/form/SubjectFormScreen.kt | 6 +++--- app/src/main/res/values/strings.xml | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt index d01061b..b89a851 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/subjects/form/SubjectFormScreen.kt @@ -1,17 +1,16 @@ package be.ugent.sel.studeez.screens.subjects.form import androidx.annotation.StringRes -import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.Column 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.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import be.ugent.sel.studeez.common.composable.BasicButton @@ -104,10 +103,11 @@ fun ColorPicker( modifier = Modifier.fieldModifier(), colors = ButtonDefaults.buttonColors( backgroundColor = Color(uiState.color), + contentColor = Color.White, ), shape = RoundedCornerShape(4.dp), ) { - Text(text = "Regenerate color") + Text(text = stringResource(id = AppText.regenerate_color)) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 70c4558..fa27f51 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -46,6 +46,7 @@ Delete Subject Delete Task View + Regenerate Color 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.