From d4805c97793544ca4297cecab42c84177f34ea90 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Sat, 17 Sep 2022 16:22:37 +0200 Subject: [PATCH] Add: EnumPref DialogUI --- .../fdroid/ui/dialog/SelectionDialogUI.kt | 65 ++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/machiav3lli/fdroid/ui/dialog/SelectionDialogUI.kt b/src/main/kotlin/com/machiav3lli/fdroid/ui/dialog/SelectionDialogUI.kt index 4957f7c4..dbac4a0c 100644 --- a/src/main/kotlin/com/machiav3lli/fdroid/ui/dialog/SelectionDialogUI.kt +++ b/src/main/kotlin/com/machiav3lli/fdroid/ui/dialog/SelectionDialogUI.kt @@ -26,6 +26,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.machiav3lli.fdroid.content.NonBooleanPrefsMeta import com.machiav3lli.fdroid.content.Preferences +import com.machiav3lli.fdroid.content.PrefsEntries import com.machiav3lli.fdroid.ui.compose.components.DialogNegativeButton import com.machiav3lli.fdroid.ui.compose.components.DialogPositiveButton import com.machiav3lli.fdroid.ui.compose.components.SingleSelectionListItem @@ -92,4 +93,66 @@ fun LanguagePrefDialogUI( } } } -} \ No newline at end of file +} + + +@Composable +fun EnumSelectionPrefDialogUI( + prefKey: Preferences.Key>, + openDialogCustom: MutableState +) { + val context = LocalContext.current + var selected by remember { mutableStateOf(Preferences[prefKey]) } + val entryPairs = PrefsEntries[prefKey]?.entries?.toList() ?: emptyList() + + Card( + shape = MaterialTheme.shapes.large, + modifier = Modifier.padding(8.dp), + elevation = CardDefaults.elevatedCardElevation(8.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.background) + ) { + Column( + modifier = Modifier.padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = stringResource(NonBooleanPrefsMeta[prefKey] ?: -1), + style = MaterialTheme.typography.titleLarge + ) + LazyColumn( + modifier = Modifier + .padding(top = 16.dp, bottom = 8.dp) + .weight(1f, false) + ) { + items(items = entryPairs) { + val isSelected = rememberSaveable(selected) { + mutableStateOf(selected == it.key) + } + SingleSelectionListItem( + text = stringResource(id = it.value), + isSelected = isSelected.value + ) { + selected = it.key + } + } + } + + Row( + Modifier.fillMaxWidth() + ) { + DialogNegativeButton( + onClick = { openDialogCustom.value = false } + ) + Spacer(Modifier.weight(1f)) + DialogPositiveButton( + modifier = Modifier.padding(start = 16.dp), + onClick = { + Preferences[prefKey] = selected + openDialogCustom.value = false + } + ) + } + } + } +}