Use column instead of lazycolumn on settings screen

This commit is contained in:
Juha Heinanen
2026-02-06 06:16:13 +02:00
parent 1eb87b0d11
commit 60ddb9bbeb
@@ -36,9 +36,9 @@ import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.ArrowDropDown import androidx.compose.material.icons.filled.ArrowDropDown
@@ -150,11 +150,14 @@ private fun SettingsScreen(
} }
Scaffold( Scaffold(
modifier = Modifier.fillMaxSize().imePadding(), modifier = Modifier
.fillMaxSize()
.imePadding(),
containerColor = MaterialTheme.colorScheme.background, containerColor = MaterialTheme.colorScheme.background,
topBar = { topBar = {
Column( Column(
modifier = Modifier.fillMaxWidth() modifier = Modifier
.fillMaxWidth()
.background(MaterialTheme.colorScheme.background) .background(MaterialTheme.colorScheme.background)
.padding( .padding(
top = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() top = WindowInsets.statusBars.asPaddingValues().calculateTopPadding()
@@ -236,7 +239,6 @@ private fun SettingsContent(
activity: Activity, activity: Activity,
onRestartApp: () -> Unit onRestartApp: () -> Unit
) { ) {
val alertTitleText = stringResource(R.string.alert) val alertTitleText = stringResource(R.string.alert)
val errorTitleText = stringResource(R.string.error) val errorTitleText = stringResource(R.string.error)
val noticeTitleText = stringResource(R.string.notice) val noticeTitleText = stringResource(R.string.notice)
@@ -271,7 +273,9 @@ private fun SettingsContent(
val startAutomaticallyHelp = stringResource(R.string.start_automatically_help) val startAutomaticallyHelp = stringResource(R.string.start_automatically_help)
val appearOnTopPermissionMessage = stringResource(R.string.appear_on_top_permission) val appearOnTopPermissionMessage = stringResource(R.string.appear_on_top_permission)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -319,7 +323,9 @@ private fun SettingsContent(
val addressFamilyTitle = stringResource(R.string.address_family) val addressFamilyTitle = stringResource(R.string.address_family)
val addressFamilyHelp = stringResource(R.string.address_family_help) val addressFamilyHelp = stringResource(R.string.address_family_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -382,7 +388,9 @@ private fun SettingsContent(
val listenAddressTitle = stringResource(R.string.listen_address) val listenAddressTitle = stringResource(R.string.listen_address)
val listenAddressHelp = stringResource(R.string.listen_address_help) val listenAddressHelp = stringResource(R.string.listen_address_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start, horizontalArrangement = Arrangement.Start,
) { ) {
@@ -413,7 +421,9 @@ private fun SettingsContent(
val transportProtocolsTitle = stringResource(R.string.transport_protocols) val transportProtocolsTitle = stringResource(R.string.transport_protocols)
val transportProtocolsHelp = stringResource(R.string.transport_protocols_help) val transportProtocolsHelp = stringResource(R.string.transport_protocols_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -442,7 +452,9 @@ private fun SettingsContent(
val dnsServersTitle = stringResource(R.string.dns_servers) val dnsServersTitle = stringResource(R.string.dns_servers)
val dnsServersHelp = stringResource(R.string.dns_servers_help) val dnsServersHelp = stringResource(R.string.dns_servers_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -511,7 +523,9 @@ private fun SettingsContent(
val showAlertDialog = remember { mutableStateOf(false) } val showAlertDialog = remember { mutableStateOf(false) }
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -589,12 +603,15 @@ private fun SettingsContent(
val verifyServerTitle = stringResource(R.string.verify_server) val verifyServerTitle = stringResource(R.string.verify_server)
val verifyServerHelp = stringResource(R.string.verify_server_help) val verifyServerHelp = stringResource(R.string.verify_server_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
Text(text = verifyServerTitle, Text(text = verifyServerTitle,
modifier = Modifier.weight(1f) modifier = Modifier
.weight(1f)
.clickable { .clickable {
alertTitle.value = verifyServerTitle alertTitle.value = verifyServerTitle
alertMessage.value = verifyServerHelp alertMessage.value = verifyServerHelp
@@ -648,13 +665,16 @@ private fun SettingsContent(
} }
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
val ctx = LocalContext.current val ctx = LocalContext.current
Text(text = tlsCaFileTitle, Text(text = tlsCaFileTitle,
modifier = Modifier.weight(1f) modifier = Modifier
.weight(1f)
.clickable { .clickable {
alertTitle.value = tlsCaFileTitle alertTitle.value = tlsCaFileTitle
alertMessage.value = tlsCaFileHelp alertMessage.value = tlsCaFileHelp
@@ -717,7 +737,9 @@ private fun SettingsContent(
val userAgentTitle = stringResource(R.string.user_agent) val userAgentTitle = stringResource(R.string.user_agent)
val userAgentHelp = stringResource(R.string.user_agent_help) val userAgentHelp = stringResource(R.string.user_agent_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -743,13 +765,16 @@ private fun SettingsContent(
@Composable @Composable
fun AudioSettings(navController: NavController) { fun AudioSettings(navController: NavController) {
Row( Row(
Modifier.fillMaxWidth().padding(top = 12.dp), Modifier
.fillMaxWidth()
.padding(top = 12.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
Text( Text(
text = stringResource(R.string.audio_settings), text = stringResource(R.string.audio_settings),
modifier = Modifier.weight(1f) modifier = Modifier
.weight(1f)
.clickable { navController.navigate("audio") }, .clickable { navController.navigate("audio") },
fontSize = 18.sp, fontSize = 18.sp,
fontWeight = FontWeight. Bold fontWeight = FontWeight. Bold
@@ -769,7 +794,10 @@ private fun SettingsContent(
val noAndroidContactsMessage = stringResource(R.string.no_android_contacts) val noAndroidContactsMessage = stringResource(R.string.no_android_contacts)
val showAlertDialog = remember { mutableStateOf(false) } val showAlertDialog = remember { mutableStateOf(false) }
Row( Row(
Modifier.fillMaxWidth().padding(top = 12.dp).padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(top = 12.dp)
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -915,7 +943,9 @@ private fun SettingsContent(
} }
} }
Row( Row(
Modifier.fillMaxWidth().padding(top = 12.dp), Modifier
.fillMaxWidth()
.padding(top = 12.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -952,7 +982,9 @@ private fun SettingsContent(
val batteryOptimizationsTitle = stringResource(R.string.battery_optimizations) val batteryOptimizationsTitle = stringResource(R.string.battery_optimizations)
val batteryOptimizationsHelp = stringResource(R.string.battery_optimizations_help) val batteryOptimizationsHelp = stringResource(R.string.battery_optimizations_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -991,7 +1023,9 @@ private fun SettingsContent(
val darkThemeTitle = stringResource(R.string.dark_theme) val darkThemeTitle = stringResource(R.string.dark_theme)
val darkThemeHelp = stringResource(R.string.dark_theme_help) val darkThemeHelp = stringResource(R.string.dark_theme_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -1018,12 +1052,15 @@ private fun SettingsContent(
val dynamicColorsTitle = stringResource(R.string.dynamic_colors) val dynamicColorsTitle = stringResource(R.string.dynamic_colors)
val dynamicColorsHelp = stringResource(R.string.dynamic_colors_help) val dynamicColorsHelp = stringResource(R.string.dynamic_colors_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
Text(text = dynamicColorsTitle, Text(text = dynamicColorsTitle,
modifier = Modifier.weight(1f) modifier = Modifier
.weight(1f)
.clickable { .clickable {
alertTitle.value = dynamicColorsTitle alertTitle.value = dynamicColorsTitle
alertMessage.value = dynamicColorsHelp alertMessage.value = dynamicColorsHelp
@@ -1044,7 +1081,9 @@ private fun SettingsContent(
val colorBlindTitle = stringResource(R.string.colorblind) val colorBlindTitle = stringResource(R.string.colorblind)
val colorBlindHelp = stringResource(R.string.colorblind_help) val colorBlindHelp = stringResource(R.string.colorblind_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -1070,7 +1109,9 @@ private fun SettingsContent(
val proximitySensingTitle = stringResource(R.string.proximity_sensing) val proximitySensingTitle = stringResource(R.string.proximity_sensing)
val proximitySensingHelp = stringResource(R.string.proximity_sensing_help) val proximitySensingHelp = stringResource(R.string.proximity_sensing_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -1099,7 +1140,9 @@ private fun SettingsContent(
val defaultPhoneAppHelp = stringResource(R.string.default_phone_app_help) val defaultPhoneAppHelp = stringResource(R.string.default_phone_app_help)
val dialerRoleNotAvailableMessage = stringResource(R.string.dialer_role_not_available) val dialerRoleNotAvailableMessage = stringResource(R.string.dialer_role_not_available)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -1152,12 +1195,15 @@ private fun SettingsContent(
val debugTitle = stringResource(R.string.debug) val debugTitle = stringResource(R.string.debug)
val debugHelp = stringResource(R.string.debug_help) val debugHelp = stringResource(R.string.debug_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
Text(text = debugTitle, Text(text = debugTitle,
modifier = Modifier.weight(1f) modifier = Modifier
.weight(1f)
.clickable { .clickable {
alertTitle.value = debugTitle alertTitle.value = debugTitle
alertMessage.value = debugHelp alertMessage.value = debugHelp
@@ -1178,7 +1224,9 @@ private fun SettingsContent(
val sipTraceTitle = stringResource(R.string.sip_trace) val sipTraceTitle = stringResource(R.string.sip_trace)
val sipTraceHelp = stringResource(R.string.sip_trace_help) val sipTraceHelp = stringResource(R.string.sip_trace_help)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -1207,7 +1255,9 @@ private fun SettingsContent(
val resetConfigAlert = stringResource(R.string.reset_config_alert) val resetConfigAlert = stringResource(R.string.reset_config_alert)
val resetButtonText = stringResource(R.string.reset) val resetButtonText = stringResource(R.string.reset)
Row( Row(
Modifier.fillMaxWidth().padding(end = 10.dp), Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start horizontalArrangement = Arrangement.Start
) { ) {
@@ -1248,45 +1298,40 @@ private fun SettingsContent(
save = true save = true
} }
val lazyListState = rememberLazyListState() val scrollState = rememberScrollState()
LazyColumn( Column(
state = lazyListState, modifier = Modifier
modifier = Modifier.fillMaxWidth() .fillMaxWidth()
.padding(contentPadding) .padding(contentPadding)
.padding(start = 16.dp, end = 4.dp, top = 16.dp, bottom = 8.dp) .padding(start = 16.dp, end = 4.dp, top = 8.dp, bottom = 8.dp)
.verticalScrollbar( .verticalScrollbar(scrollState)
state = lazyListState, .verticalScroll(scrollState),
width = 4.dp,
color = MaterialTheme.colorScheme.outlineVariant
),
verticalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
item { StartAutomatically() } StartAutomatically()
item { AddressFamily() } AddressFamily()
item { ListenAddress() } ListenAddress()
item { TransportProtocols() } TransportProtocols()
item { DnsServers() } DnsServers()
item { TlsCertificateFile(activity) } TlsCertificateFile(activity)
item { VerifyServer() } VerifyServer()
item { CaFile(activity) } CaFile(activity)
item { UserAgent() } UserAgent()
item { AudioSettings(navController) } AudioSettings(navController)
item { Contacts(activity) } Contacts(activity)
item { Ringtone() } Ringtone()
item { BatteryOptimizations() } BatteryOptimizations()
item { DarkTheme() } DarkTheme()
if (VERSION.SDK_INT >= 31) { if (VERSION.SDK_INT >= 31)
item { DynamicColors() } DynamicColors()
} ColorBlind()
item { ColorBlind() } ProximitySensing()
item { ProximitySensing() } if (VERSION.SDK_INT >= 29)
if (VERSION.SDK_INT >= 29) { DefaultDialer()
item { DefaultDialer() } Debug()
} SipTrace()
item { Debug() } Reset(onRestartApp)
item { SipTrace() }
item { Reset(onRestartApp) }
} }
} }