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,84 +211,93 @@ 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)) }
LaunchedEffect(service) { item {
service.let { LaunchedEffect(service) {
it.sendBroadcast(Intent(AirPodsNotifications.BATTERY_DATA).apply { service.let {
putParcelableArrayListExtra("data", ArrayList(it.getBattery())) it.sendBroadcast(Intent(AirPodsNotifications.BATTERY_DATA).apply {
}) putParcelableArrayListExtra("data", ArrayList(it.getBattery()))
it.sendBroadcast(Intent(AirPodsNotifications.ANC_DATA).apply { })
putExtra("data", it.getANC()) it.sendBroadcast(Intent(AirPodsNotifications.ANC_DATA).apply {
}) putExtra("data", it.getANC())
})
}
} }
BatteryView(service = service)
}
item { Spacer(modifier = Modifier.height(32.dp)) }
item {
NavigationButton(
to = "rename",
name = stringResource(R.string.name),
currentState = deviceName.text,
navController = navController,
independent = true
)
} }
BatteryView(service = service) item { Spacer(modifier = Modifier.height(32.dp)) }
Spacer(modifier = Modifier.height(32.dp)) item { NavigationButton(to = "hearing_aid", stringResource(R.string.hearing_aid), navController) }
NavigationButton( item { Spacer(modifier = Modifier.height(16.dp)) }
to = "rename", item { NoiseControlSettings(service = service) }
name = stringResource(R.string.name),
currentState = deviceName.text,
navController = navController,
independent = true
)
Spacer(modifier = Modifier.height(32.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
NavigationButton(to = "hearing_aid", stringResource(R.string.hearing_aid), navController) item { PressAndHoldSettings(navController = navController) }
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
NoiseControlSettings(service = service) item { CallControlSettings(hazeState = hazeState) }
Spacer(modifier = Modifier.height(16.dp))
PressAndHoldSettings(navController = navController)
Spacer(modifier = Modifier.height(16.dp))
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)) }
StyledToggle( item {
label = stringResource(R.string.sleep_detection), StyledToggle(
controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.SLEEP_DETECTION_CONFIG label = stringResource(R.string.sleep_detection),
) controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.SLEEP_DETECTION_CONFIG
)
}
Spacer(modifier = Modifier.height(16.dp)) item { Spacer(modifier = Modifier.height(16.dp)) }
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)) 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))
}
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)) }
StyledToggle( item {
label = stringResource(R.string.off_listening_mode), StyledToggle(
controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.ALLOW_OFF_OPTION, label = stringResource(R.string.off_listening_mode),
description = stringResource(R.string.off_listening_mode_description) controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.ALLOW_OFF_OPTION,
) 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 {