Skip to content

Update InputComponents.kt #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Mar 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 30 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

118 changes: 59 additions & 59 deletions app/src/main/java/com/scouting/app/components/InputComponents.kt
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,65 @@ fun LabeledRatingBar(
}
}

@Composable
fun QuadButtonBlock(
headerText: String,
buttonLabelOne: String,
buttonLabelTwo: String,
buttonLabelThree: String,
buttonLabelFour: String,
modifier: Modifier = Modifier,
onValueChange: (Int) -> Unit,
initialSelection: Int = 0,
enabled: Boolean = true,
) {
var currentSelection by rememberInitial(initialSelection)
Column(
modifier = Modifier
.fillMaxWidth()
.then(modifier)
) {
Text(
text = headerText,
style = MaterialTheme.typography.headlineSmall,
modifier = Modifier.padding(bottom = 20.dp)
)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
listOf(buttonLabelOne, buttonLabelTwo, buttonLabelThree, buttonLabelFour).forEachIndexed { index, item ->
val color = if (currentSelection == index) {
MaterialTheme.colorScheme.primary
} else {
NeutralGrayLight
}
Button(
onClick = {
currentSelection = index
onValueChange.invoke(index)
},
modifier = Modifier.height(55.dp),
shape = MaterialTheme.shapes.medium,
elevation = ButtonDefaults.buttonElevation(0.dp),
colors = ButtonDefaults.buttonColors(
containerColor = color,
disabledContainerColor = color,
disabledContentColor = MaterialTheme.colorScheme.onBackground
),
enabled = enabled,
) {
Text(
text = item,
style = MaterialTheme.typography.bodyLarge
)
}
}
}
}
}

@Composable
fun SettingsPreference(
title: String,
Expand Down Expand Up @@ -411,62 +470,3 @@ fun SettingsPreference(
endContent?.invoke()
}
}

@Compostable
fun QuadButtonBlock(
headerText: String,
buttonLabelOne: String,
buttonLabelTwo: String,
buttonLabelThree: String,
buttonLabelFour: String,
modifier: Modifier = Modifier,
onValueChange: (Int) -> Unit,
initialSelection: Int = 0,
enabled: Boolean = true,
) {
var currentSelection by rememberInitial(initialSelection)
Column(
modifier = Modifier
.fillMaxWidth()
.then(modifier)
) {
Text(
text = headerText,
style = MaterialTheme.typography.headlineSmall,
modifier = Modifier.padding(bottom = 20.dp)
)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
listOf(buttonLabelOne, buttonLabelTwo, buttonLabelThree, buttonLabelFour).forEachIndexed { index, item ->
val color = if (currentSelection == index) {
MaterialTheme.colorScheme.primary
} else {
NeutralGrayLight
}
Button(
onClick = {
currentSelection = index
onValueChange.invoke(index)
},
modifier = Modifier.height(55.dp),
shape = MaterialTheme.shapes.medium,
elevation = ButtonDefaults.buttonElevation(0.dp),
colors = ButtonDefaults.buttonColors(
containerColor = color,
disabledContainerColor = color,
disabledContentColor = MaterialTheme.colorScheme.onBackground
),
enabled = enabled,
) {
Text(
text = item,
style = MaterialTheme.typography.bodyLarge
)
}
}
}
}
}
5 changes: 4 additions & 1 deletion app/src/main/java/com/scouting/app/model/TemplateItem.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,20 @@ data class TemplateItem(
var text2: String? = null,
var text3: String? = null,
var text4: String? = null,
var text5: String? = null,
var type: TemplateTypes,
// The type of the item will always be non null so by using the type
// we can determine which of these values we know will not be null
var itemValueInt: MutableState<Int>? = null,
var itemValue2Int: MutableState<Int>? = null,
var itemValue3Int: MutableState<Int>? = null,
var itemValue4Int: MutableState<Int>? = null,
var itemValue5Int: MutableState<Int>? = null,
var itemValueBoolean: MutableState<Boolean>? = null,
var itemValueString: MutableState<String>? = null,
var saveKey: String,
var saveKey2: String? = null,
var saveKey3: String? = null,
var saveKey4: String? = null
var saveKey4: String? = null,
var saveKey5: String? = null
)
26 changes: 24 additions & 2 deletions app/src/main/java/com/scouting/app/view/scouting/ScoutingView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ fun ScoutingTemplateLoadView(list: SnapshotStateList<TemplateItem>) {
item.itemValueInt = mutableStateOf(1)
}
}
TemplateTypes.SCORE_BAR, TemplateTypes.TRI_BUTTON -> {
TemplateTypes.SCORE_BAR, TemplateTypes.TRI_BUTTON, TemplateTypes.QUAD_BUTTON -> {
if (item.itemValueInt == null) {
item.itemValueInt = mutableStateOf(0)
}
Expand Down Expand Up @@ -375,6 +375,28 @@ fun ScoutingTemplateLoadView(list: SnapshotStateList<TemplateItem>) {
)
}

TemplateTypes.QUAD_BUTTON -> {
if (item.itemValueInt == null) {
item.itemValueInt = remember { mutableStateOf(0) }
}
QuadButtonBlock(
headerText = item.text,
buttonLabelOne = item.text2.toString(),
buttonLabelTwo = item.text3.toString(),
buttonLabelThree = item.text4.toString(),
buttonLabelFour = item.text5.toString(),
onValueChange = {
item.itemValueInt!!.value = it
},
initialSelection = item.itemValueInt!!.value,
modifier = Modifier.padding(
bottom = 10.dp,
start = 30.dp,
end = 30.dp,
)
)
}

TemplateTypes.IMAGE -> {
EncodedImageComponent(
base64Image = item.text,
Expand All @@ -385,4 +407,4 @@ fun ScoutingTemplateLoadView(list: SnapshotStateList<TemplateItem>) {
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ fun EditCSVOrderView(navController: NavController, viewModel: TemplateEditorView
TemplateTypes.SCORE_BAR,
TemplateTypes.RATING_BAR,
TemplateTypes.TRI_BUTTON -> stringResource(id = R.string.template_edit_csv_type_int)
TemplateTypes.QUAD_BUTTON -> stringResource(id = R.string.template_edit_csv_type_int)

else -> stringResource(id = R.string.template_edit_csv_type_boolean)
},
Expand All @@ -166,7 +167,7 @@ fun EditCSVOrderView(navController: NavController, viewModel: TemplateEditorView
) {
Text(
text = stringResource(id = R.string.template_edit_csv_item_type_prefix),
style = MaterialTheme.typography.bodyLarge + TextStyle(
style = MaterialTheme.typography.bodyLa rge + TextStyle(
fontWeight = FontWeight.SemiBold
),
modifier = Modifier.padding(end = 10.dp)
Expand All @@ -177,6 +178,7 @@ fun EditCSVOrderView(navController: NavController, viewModel: TemplateEditorView
TemplateTypes.TRI_SCORING -> stringResource(id = R.string.template_edit_csv_item_tri_scoring_prefix)
TemplateTypes.CHECK_BOX -> stringResource(id = R.string.template_edit_csv_item_checkbox_prefix)
TemplateTypes.TRI_BUTTON -> stringResource(id = R.string.template_edit_csv_item_tri_button_prefix)
TemplateTypes.QUAD_BUTTON -> stringResource(id = R.string.template_edit_csv_type_int)
TemplateTypes.RATING_BAR -> stringResource(id = R.string.template_edit_csv_item_rating_bar_prefix)
else -> stringResource(id = R.string.template_edit_csv_item_counter_prefix)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ fun EditTemplateDialog(viewModel: TemplateEditorViewModel) {
var textFieldValueLabel4 by remember {
mutableStateOf(TextFieldValue(currentEditItem.text4.toString()))
}
var textFieldValueLabel5 by remember {
mutableStateOf(TextFieldValue(currentEditItem.text5.toString()))
}
var textFieldValueSaveKey by remember {
mutableStateOf(TextFieldValue(currentEditItem.saveKey))
}
Expand All @@ -62,6 +65,12 @@ fun EditTemplateDialog(viewModel: TemplateEditorViewModel) {
var textFieldValueSaveKey3 by remember {
mutableStateOf(TextFieldValue(currentEditItem.saveKey3.toString()))
}
var textFieldValueSaveKey4 by remember {
mutableStateOf(TextFieldValue(currentEditItem.saveKey4.toString()))
}
var textFieldValueSaveKey5 by remember {
mutableStateOf(TextFieldValue(currentEditItem.saveKey5.toString()))
}
if (currentEditItem.type != TemplateTypes.IMAGE) {
BasicInputField(
icon = painterResource(id = R.drawable.ic_text_format_center),
Expand All @@ -81,7 +90,8 @@ fun EditTemplateDialog(viewModel: TemplateEditorViewModel) {
)
}
if (currentEditItem.type == TemplateTypes.TRI_SCORING ||
currentEditItem.type == TemplateTypes.TRI_BUTTON
currentEditItem.type == TemplateTypes.TRI_BUTTON ||
currentEditItem.type == TemplateTypes.QUAD_BUTTON
) {
BasicInputField(
icon = painterResource(id = R.drawable.ic_text_format_center),
Expand All @@ -108,7 +118,9 @@ fun EditTemplateDialog(viewModel: TemplateEditorViewModel) {
.padding(horizontal = 30.dp, vertical = 10.dp)
)
}
if (currentEditItem.type == TemplateTypes.TRI_BUTTON) {
if (currentEditItem.type == TemplateTypes.TRI_BUTTON ||
currentEditItem.type == TemplateTypes.QUAD_BUTTON
) {
BasicInputField(
icon = painterResource(id = R.drawable.ic_text_format_center),
contentDescription = stringResource(id = R.string.ic_text_format_center_content_desc),
Expand All @@ -122,6 +134,20 @@ fun EditTemplateDialog(viewModel: TemplateEditorViewModel) {
.padding(horizontal = 30.dp, vertical = 10.dp)
)
}
if (currentEditItem.type == TemplateTypes.QUAD_BUTTON) {
BasicInputField(
icon = painterResource(id = R.drawable.ic_text_format_center),
contentDescription = stringResource(id = R.string.ic_text_format_center_content_desc),
hint = stringResource(id = R.string.template_editor_edit_dialog_field_5_hint),
textFieldValue = textFieldValueLabel5,
onValueChange = {
textFieldValueLabel5 = it
},
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 30.dp, vertical = 10.dp)
)
}
// Plain text has no user input, thus nothing to save
if (currentEditItem.type != TemplateTypes.PLAIN_TEXT && currentEditItem.type != TemplateTypes.IMAGE) {
BasicInputField(
Expand Down Expand Up @@ -195,9 +221,12 @@ fun EditTemplateDialog(viewModel: TemplateEditorViewModel) {
text2 = textFieldValueLabel2.text
text3 = textFieldValueLabel3.text
text4 = textFieldValueLabel4.text
text5 = textFieldValueLabel5.text
saveKey = textFieldValueSaveKey.text
saveKey2 = textFieldValueSaveKey2.text
saveKey3 = textFieldValueSaveKey3.text
saveKey4 = textFieldValueSaveKey4.text
saveKey5 = textFieldValueSaveKey5.text
}
}
showingEditDialog = false
Expand All @@ -224,4 +253,4 @@ fun EditTemplateDialog(viewModel: TemplateEditorViewModel) {
}
}
}
}
}
Loading
Loading