android: use lazycolumn in airpods settings for better performance and navigation transitions

This commit is contained in:
Kavish Devar
2025-09-28 17:10:49 +05:30
parent e158ba1b27
commit 5ec300aad8

View File

@@ -38,9 +38,8 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -212,15 +211,15 @@ fun AirPodsSettingsScreen(dev: BluetoothDevice?, service: AirPodsService,
snackbarHostState = snackbarHostState snackbarHostState = snackbarHostState
) { spacerHeight, hazeState -> ) { spacerHeight, hazeState ->
if (isLocallyConnected || isRemotelyConnected) { if (isLocallyConnected || isRemotelyConnected) {
Column( LazyColumn(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.hazeSource(hazeState) .hazeSource(hazeState)
.padding(horizontal = 16.dp) .padding(horizontal = 16.dp)
.layerBackdrop(backdrop) .layerBackdrop(backdrop)
.verticalScroll(rememberScrollState())
) { ) {
Spacer(modifier = Modifier.height(spacerHeight)) item { Spacer(modifier = Modifier.height(spacerHeight)) }
item {
LaunchedEffect(service) { LaunchedEffect(service) {
service.let { service.let {
it.sendBroadcast(Intent(AirPodsNotifications.BATTERY_DATA).apply { it.sendBroadcast(Intent(AirPodsNotifications.BATTERY_DATA).apply {
@@ -233,8 +232,10 @@ fun AirPodsSettingsScreen(dev: BluetoothDevice?, service: AirPodsService,
} }
BatteryView(service = service) BatteryView(service = service)
Spacer(modifier = Modifier.height(32.dp)) }
item { Spacer(modifier = Modifier.height(32.dp)) }
item {
NavigationButton( NavigationButton(
to = "rename", to = "rename",
name = stringResource(R.string.name), name = stringResource(R.string.name),
@@ -242,54 +243,61 @@ fun AirPodsSettingsScreen(dev: BluetoothDevice?, service: AirPodsService,
navController = navController, navController = navController,
independent = true independent = true
) )
}
Spacer(modifier = Modifier.height(32.dp)) item { Spacer(modifier = Modifier.height(32.dp)) }
NavigationButton(to = "hearing_aid", stringResource(R.string.hearing_aid), navController) item { NavigationButton(to = "hearing_aid", stringResource(R.string.hearing_aid), navController) }
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
NoiseControlSettings(service = service) item { NoiseControlSettings(service = service) }
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
PressAndHoldSettings(navController = navController) item { PressAndHoldSettings(navController = navController) }
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
CallControlSettings(hazeState = hazeState) item { CallControlSettings(hazeState = hazeState) }
// camera control goes here, airpods side is done, i just need to figure out how to listen to app open/close events // camera control goes here, airpods side is done, i just need to figure out how to listen to app open/close events
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
AudioSettings(navController = navController) item { AudioSettings(navController = navController) }
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
ConnectionSettings() item { ConnectionSettings() }
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
MicrophoneSettings(hazeState) item { MicrophoneSettings(hazeState) }
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
item {
StyledToggle( StyledToggle(
label = stringResource(R.string.sleep_detection), label = stringResource(R.string.sleep_detection),
controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.SLEEP_DETECTION_CONFIG controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.SLEEP_DETECTION_CONFIG
) )
}
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
item {
NavigationButton(to = "head_tracking", name = stringResource(R.string.head_gestures), navController = navController, currentState = if (sharedPreferences.getBoolean("head_gestures", false)) stringResource(R.string.on) else stringResource(R.string.off)) NavigationButton(to = "head_tracking", name = stringResource(R.string.head_gestures), navController = navController, currentState = if (sharedPreferences.getBoolean("head_gestures", false)) stringResource(R.string.on) else stringResource(R.string.off))
}
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
NavigationButton(to = "accessibility", name = stringResource(R.string.accessibility), navController = navController) item { NavigationButton(to = "accessibility", name = stringResource(R.string.accessibility), navController = navController) }
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
item {
StyledToggle( StyledToggle(
label = stringResource(R.string.off_listening_mode), label = stringResource(R.string.off_listening_mode),
controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.ALLOW_OFF_OPTION, controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.ALLOW_OFF_OPTION,
description = stringResource(R.string.off_listening_mode_description) description = stringResource(R.string.off_listening_mode_description)
) )
}
// an about card- everything but the version number is unknown - will add later if i find out // an about card- everything but the version number is unknown - will add later if i find out
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
NavigationButton("debug", "Debug", navController) item { NavigationButton("debug", "Debug", navController) }
Spacer(Modifier.height(24.dp)) item { Spacer(Modifier.height(24.dp)) }
} }
} }
else { else {