mirror of https://github.com/Ashinch/ReadYou.git
260 lines
10 KiB
Kotlin
260 lines
10 KiB
Kotlin
package me.ash.reader.ui.page.settings.color.feeds
|
|
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.clickable
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.runtime.*
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.draw.clip
|
|
import androidx.compose.ui.platform.LocalContext
|
|
import androidx.compose.ui.res.stringResource
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.navigation.NavHostController
|
|
import me.ash.reader.R
|
|
import me.ash.reader.infrastructure.preference.*
|
|
import me.ash.reader.ui.component.base.*
|
|
import me.ash.reader.ui.page.settings.SettingItem
|
|
import me.ash.reader.ui.theme.palette.onLight
|
|
|
|
@Composable
|
|
fun FeedsPageStylePage(
|
|
navController: NavHostController,
|
|
) {
|
|
val context = LocalContext.current
|
|
val filterBarStyle = LocalFeedsFilterBarStyle.current
|
|
val filterBarFilled = LocalFeedsFilterBarFilled.current
|
|
val filterBarPadding = LocalFeedsFilterBarPadding.current
|
|
val filterBarTonalElevation = LocalFeedsFilterBarTonalElevation.current
|
|
val topBarTonalElevation = LocalFeedsTopBarTonalElevation.current
|
|
val groupListExpand = LocalFeedsGroupListExpand.current
|
|
val groupListTonalElevation = LocalFeedsGroupListTonalElevation.current
|
|
|
|
val scope = rememberCoroutineScope()
|
|
|
|
var filterBarStyleDialogVisible by remember { mutableStateOf(false) }
|
|
var filterBarPaddingDialogVisible by remember { mutableStateOf(false) }
|
|
var filterBarTonalElevationDialogVisible by remember { mutableStateOf(false) }
|
|
var topBarTonalElevationDialogVisible by remember { mutableStateOf(false) }
|
|
var groupListTonalElevationDialogVisible by remember { mutableStateOf(false) }
|
|
|
|
var filterBarPaddingValue: Int? by remember { mutableStateOf(filterBarPadding) }
|
|
|
|
RYScaffold(
|
|
containerColor = MaterialTheme.colorScheme.surface onLight MaterialTheme.colorScheme.inverseOnSurface,
|
|
navigationIcon = {
|
|
FeedbackIconButton(
|
|
imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
|
|
contentDescription = stringResource(R.string.back),
|
|
tint = MaterialTheme.colorScheme.onSurface
|
|
) {
|
|
navController.popBackStack()
|
|
}
|
|
},
|
|
content = {
|
|
LazyColumn {
|
|
item {
|
|
DisplayText(text = stringResource(R.string.feeds_page), desc = "")
|
|
}
|
|
|
|
// Preview
|
|
item {
|
|
Row(
|
|
modifier = Modifier
|
|
.fillMaxWidth()
|
|
.padding(horizontal = 24.dp)
|
|
.clip(RoundedCornerShape(24.dp))
|
|
.background(
|
|
MaterialTheme.colorScheme.inverseOnSurface
|
|
onLight MaterialTheme.colorScheme.surface.copy(0.7f)
|
|
)
|
|
.clickable { },
|
|
horizontalArrangement = Arrangement.Center,
|
|
verticalAlignment = Alignment.CenterVertically
|
|
) {
|
|
FeedsPagePreview(
|
|
topBarTonalElevation = topBarTonalElevation,
|
|
groupListExpand = groupListExpand,
|
|
groupListTonalElevation = groupListTonalElevation,
|
|
filterBarStyle = filterBarStyle.value,
|
|
filterBarFilled = filterBarFilled.value,
|
|
filterBarPadding = filterBarPadding.dp,
|
|
filterBarTonalElevation = filterBarTonalElevation.value.dp,
|
|
)
|
|
}
|
|
Spacer(modifier = Modifier.height(24.dp))
|
|
}
|
|
|
|
// Top Bar
|
|
item {
|
|
Subtitle(
|
|
modifier = Modifier.padding(horizontal = 24.dp),
|
|
text = stringResource(R.string.top_bar)
|
|
)
|
|
SettingItem(
|
|
title = stringResource(R.string.tonal_elevation),
|
|
desc = "${topBarTonalElevation.value}dp",
|
|
onClick = {
|
|
topBarTonalElevationDialogVisible = true
|
|
},
|
|
) {}
|
|
// Tips(text = stringResource(R.string.tips_top_bar_tonal_elevation))
|
|
Spacer(modifier = Modifier.height(24.dp))
|
|
}
|
|
|
|
// Group List
|
|
item {
|
|
Subtitle(
|
|
modifier = Modifier.padding(horizontal = 24.dp),
|
|
text = stringResource(R.string.group_list)
|
|
)
|
|
SettingItem(
|
|
title = stringResource(R.string.always_expand),
|
|
onClick = {
|
|
(!groupListExpand).put(context, scope)
|
|
},
|
|
) {
|
|
RYSwitch(activated = groupListExpand.value) {
|
|
(!groupListExpand).put(context, scope)
|
|
}
|
|
}
|
|
SettingItem(
|
|
title = stringResource(R.string.tonal_elevation),
|
|
desc = "${groupListTonalElevation.value}dp",
|
|
onClick = {
|
|
groupListTonalElevationDialogVisible = true
|
|
},
|
|
) {}
|
|
Tips(text = stringResource(R.string.tips_group_list_tonal_elevation))
|
|
Spacer(modifier = Modifier.height(24.dp))
|
|
}
|
|
|
|
// Filter Bar
|
|
item {
|
|
Subtitle(
|
|
modifier = Modifier.padding(horizontal = 24.dp),
|
|
text = stringResource(R.string.filter_bar),
|
|
)
|
|
SettingItem(
|
|
title = stringResource(R.string.style),
|
|
desc = filterBarStyle.toDesc(context),
|
|
onClick = {
|
|
filterBarStyleDialogVisible = true
|
|
},
|
|
) {}
|
|
SettingItem(
|
|
title = stringResource(R.string.fill_selected_icon),
|
|
onClick = {
|
|
(!filterBarFilled).put(context, scope)
|
|
},
|
|
) {
|
|
RYSwitch(activated = filterBarFilled.value) {
|
|
(!filterBarFilled).put(context, scope)
|
|
}
|
|
}
|
|
SettingItem(
|
|
title = stringResource(R.string.horizontal_padding),
|
|
desc = "${filterBarPadding}dp",
|
|
onClick = {
|
|
filterBarPaddingValue = filterBarPadding
|
|
filterBarPaddingDialogVisible = true
|
|
},
|
|
) {}
|
|
SettingItem(
|
|
title = stringResource(R.string.tonal_elevation),
|
|
desc = "${filterBarTonalElevation.value}dp",
|
|
onClick = {
|
|
filterBarTonalElevationDialogVisible = true
|
|
},
|
|
) {}
|
|
}
|
|
item {
|
|
Spacer(modifier = Modifier.windowInsetsBottomHeight(WindowInsets.navigationBars))
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
RadioDialog(
|
|
visible = filterBarStyleDialogVisible,
|
|
title = stringResource(R.string.style),
|
|
options = FeedsFilterBarStylePreference.values.map {
|
|
RadioDialogOption(
|
|
text = it.toDesc(context),
|
|
selected = filterBarStyle == it,
|
|
) {
|
|
it.put(context, scope)
|
|
}
|
|
}
|
|
) {
|
|
filterBarStyleDialogVisible = false
|
|
}
|
|
|
|
TextFieldDialog(
|
|
visible = filterBarPaddingDialogVisible,
|
|
title = stringResource(R.string.horizontal_padding),
|
|
value = (filterBarPaddingValue ?: "").toString(),
|
|
placeholder = stringResource(R.string.value),
|
|
onValueChange = {
|
|
filterBarPaddingValue = it.filter { it.isDigit() }.toIntOrNull()
|
|
},
|
|
onDismissRequest = {
|
|
filterBarPaddingDialogVisible = false
|
|
},
|
|
onConfirm = {
|
|
FeedsFilterBarPaddingPreference.put(context, scope, filterBarPaddingValue ?: 0)
|
|
filterBarPaddingDialogVisible = false
|
|
}
|
|
)
|
|
|
|
RadioDialog(
|
|
visible = filterBarTonalElevationDialogVisible,
|
|
title = stringResource(R.string.tonal_elevation),
|
|
options = FeedsFilterBarTonalElevationPreference.values.map {
|
|
RadioDialogOption(
|
|
text = it.toDesc(context),
|
|
selected = it == filterBarTonalElevation,
|
|
) {
|
|
it.put(context, scope)
|
|
}
|
|
}
|
|
) {
|
|
filterBarTonalElevationDialogVisible = false
|
|
}
|
|
|
|
RadioDialog(
|
|
visible = topBarTonalElevationDialogVisible,
|
|
title = stringResource(R.string.tonal_elevation),
|
|
options = FeedsTopBarTonalElevationPreference.values.map {
|
|
RadioDialogOption(
|
|
text = it.toDesc(context),
|
|
selected = it == topBarTonalElevation,
|
|
) {
|
|
it.put(context, scope)
|
|
}
|
|
}
|
|
) {
|
|
topBarTonalElevationDialogVisible = false
|
|
}
|
|
|
|
RadioDialog(
|
|
visible = groupListTonalElevationDialogVisible,
|
|
title = stringResource(R.string.tonal_elevation),
|
|
options = FeedsGroupListTonalElevationPreference.values.map {
|
|
RadioDialogOption(
|
|
text = it.toDesc(context),
|
|
selected = it == groupListTonalElevation,
|
|
) {
|
|
it.put(context, scope)
|
|
}
|
|
}
|
|
) {
|
|
groupListTonalElevationDialogVisible = false
|
|
}
|
|
}
|