ui(settings): Explain compatibility options in plain language

The three compatibility toggles described their own mechanism ("Don't
delegate data filtering to the system", "broadcast instead of callback")
without saying which symptom they address, so a non-technical user had no
way to tell whether a row applied to them. Each summary now leads with the
symptom and keeps a plain description of what changes. Titles are
unchanged: they name the mechanism and are referenced verbatim in issue
replies.

The category description "Don't touch if everything works ;)" stopped
rendering in 63692595 when the res/xml preference screens were replaced by
Compose, since SettingsCategoryHeader only took a title. The string and its
~75 translations survived unused. Added an optional subtitle to the header
and wired it back up.

Also rewrote the extra-notification summary, which named the "Device
status" channel but never said where to find it.

Reported via a Play Store review (vi, 4 stars, 5.2.3-rc0).
This commit is contained in:
darken
2026-08-21 01:13:13 +02:00
parent b07428f894
commit 289dcd660e
3 changed files with 37 additions and 12 deletions
@@ -1,5 +1,6 @@
package eu.darken.capod.common.settings
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -13,15 +14,27 @@ import eu.darken.capod.common.compose.PreviewWrapper
@Composable
fun SettingsCategoryHeader(
text: String,
modifier: Modifier = Modifier
modifier: Modifier = Modifier,
subtitle: String? = null,
) {
Text(
text = text,
style = MaterialTheme.typography.titleSmall,
color = MaterialTheme.colorScheme.primary,
fontWeight = FontWeight.Medium,
Column(
modifier = modifier.padding(horizontal = 16.dp, vertical = 12.dp)
)
) {
Text(
text = text,
style = MaterialTheme.typography.titleSmall,
color = MaterialTheme.colorScheme.primary,
fontWeight = FontWeight.Medium,
)
subtitle?.let {
Text(
text = it,
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(top = 2.dp),
)
}
}
}
@Preview2
@@ -29,3 +42,12 @@ fun SettingsCategoryHeader(
private fun SettingsCategoryHeaderPreview() = PreviewWrapper {
SettingsCategoryHeader(text = "Other")
}
@Preview2
@Composable
private fun SettingsCategoryHeaderWithSubtitlePreview() = PreviewWrapper {
SettingsCategoryHeader(
text = "Compatibility options",
subtitle = "Don't touch if everything works ;)",
)
}
@@ -220,7 +220,10 @@ fun GeneralSettingsScreen(
)
}
item {
SettingsCategoryHeader(text = stringResource(R.string.settings_category_compatibility_options_title))
SettingsCategoryHeader(
text = stringResource(R.string.settings_category_compatibility_options_title),
subtitle = stringResource(R.string.settings_category_compatibility_options_description),
)
}
item {
SettingsBaseItem(
+4 -4
View File
@@ -35,7 +35,7 @@
<string name="settings_monitor_connected_notification_label">Extra notification</string>
<string name="settings_monitor_connected_notification_description">Shows an extra notification when a device is connected. This lets you hide the permanent \"No devices\" notification by disabling the \"Device status\" channel.</string>
<string name="settings_monitor_connected_notification_description">Shows a second notification that only appears while a device is connected. With this on, you can hide the permanent \"No devices\" notification: turn off the \"Device status\" category in Android\'s notification settings for CAPod.</string>
<string name="settings_keep_notification_after_disconnect_label">Keep notification after disconnect</string>
<string name="settings_keep_notification_after_disconnect_description">Continue showing the last known battery levels even after your AirPods disconnect</string>
<string name="settings_autopause_label">Auto pause</string>
@@ -61,9 +61,9 @@
<string name="settings_category_compatibility_options_title">Compatibility options</string>
<string name="settings_category_compatibility_options_description">Don\'t touch if everything works ;)</string>
<string name="settings_compat_offloaded_filtering_disabled_title">Disable hardware filtering</string>
<string name="settings_compat_offloaded_filtering_disabled_summary">Don\'t delegate data filtering to the system, instead get all data and filter within the app.</string>
<string name="settings_compat_offloaded_filtering_disabled_summary">Try this if your AirPods are never detected. The app will look through all nearby Bluetooth signals itself, instead of letting your phone pre-select them.</string>
<string name="settings_compat_offloaded_batching_disabled_title">Disable hardware batching</string>
<string name="settings_compat_offloaded_batching_disabled_summary">Don\'t let the system group collected BLE data before forwarding it to us.</string>
<string name="settings_compat_offloaded_batching_disabled_summary">Try this if battery levels only update late or in bursts. Your phone will pass on each Bluetooth signal right away, instead of collecting them first.</string>
<string name="settings_onepod_mode_label">One pod mode</string>
<string name="settings_onepod_mode_description">Auto play/pause and auto-connect react to a single pod instead of requiring both.</string>
@@ -183,7 +183,7 @@
<string name="widget_config_preset_green">Green</string>
<string name="widget_config_preset_red">Red</string>
<string name="settings_compat_indirectcallback_title">Indirect data delivery</string>
<string name="settings_compat_indirectcallback_summary">Use an alternative method to receive BLE data from the system (broadcast instead of callback).</string>
<string name="settings_compat_indirectcallback_summary">Try this if the other compatibility options didn\'t help. Android will hand Bluetooth signals to the app in the background, instead of the app listening for them directly.</string>
<string name="troubleshooter_title">Troubleshooter</string>
<string name="troubleshooter_summary">Diagnose and fix Bluetooth connectivity issues.</string>