Skip to content

Commit 5ec300a

Browse files
committed
android: use lazycolumn in airpods settings for better performance and navigation transitions
1 parent e158ba1 commit 5ec300a

File tree

1 file changed

+63
-55
lines changed

1 file changed

+63
-55
lines changed

android/app/src/main/java/me/kavishdevar/librepods/screens/AirPodsSettingsScreen.kt

Lines changed: 63 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@ import androidx.compose.foundation.layout.fillMaxSize
3838
import androidx.compose.foundation.layout.fillMaxWidth
3939
import androidx.compose.foundation.layout.height
4040
import androidx.compose.foundation.layout.padding
41-
import androidx.compose.foundation.rememberScrollState
41+
import androidx.compose.foundation.lazy.LazyColumn
4242
import androidx.compose.foundation.shape.RoundedCornerShape
43-
import androidx.compose.foundation.verticalScroll
4443
import androidx.compose.material3.ExperimentalMaterial3Api
4544
import androidx.compose.material3.SnackbarHostState
4645
import androidx.compose.material3.Text
@@ -212,84 +211,93 @@ fun AirPodsSettingsScreen(dev: BluetoothDevice?, service: AirPodsService,
212211
snackbarHostState = snackbarHostState
213212
) { spacerHeight, hazeState ->
214213
if (isLocallyConnected || isRemotelyConnected) {
215-
Column(
214+
LazyColumn(
216215
modifier = Modifier
217216
.fillMaxSize()
218217
.hazeSource(hazeState)
219218
.padding(horizontal = 16.dp)
220219
.layerBackdrop(backdrop)
221-
.verticalScroll(rememberScrollState())
222220
) {
223-
Spacer(modifier = Modifier.height(spacerHeight))
224-
LaunchedEffect(service) {
225-
service.let {
226-
it.sendBroadcast(Intent(AirPodsNotifications.BATTERY_DATA).apply {
227-
putParcelableArrayListExtra("data", ArrayList(it.getBattery()))
228-
})
229-
it.sendBroadcast(Intent(AirPodsNotifications.ANC_DATA).apply {
230-
putExtra("data", it.getANC())
231-
})
221+
item { Spacer(modifier = Modifier.height(spacerHeight)) }
222+
item {
223+
LaunchedEffect(service) {
224+
service.let {
225+
it.sendBroadcast(Intent(AirPodsNotifications.BATTERY_DATA).apply {
226+
putParcelableArrayListExtra("data", ArrayList(it.getBattery()))
227+
})
228+
it.sendBroadcast(Intent(AirPodsNotifications.ANC_DATA).apply {
229+
putExtra("data", it.getANC())
230+
})
231+
}
232232
}
233-
}
234233

235-
BatteryView(service = service)
236-
Spacer(modifier = Modifier.height(32.dp))
234+
BatteryView(service = service)
235+
}
236+
item { Spacer(modifier = Modifier.height(32.dp)) }
237237

238-
NavigationButton(
239-
to = "rename",
240-
name = stringResource(R.string.name),
241-
currentState = deviceName.text,
242-
navController = navController,
243-
independent = true
244-
)
238+
item {
239+
NavigationButton(
240+
to = "rename",
241+
name = stringResource(R.string.name),
242+
currentState = deviceName.text,
243+
navController = navController,
244+
independent = true
245+
)
246+
}
245247

246-
Spacer(modifier = Modifier.height(32.dp))
247-
NavigationButton(to = "hearing_aid", stringResource(R.string.hearing_aid), navController)
248+
item { Spacer(modifier = Modifier.height(32.dp)) }
249+
item { NavigationButton(to = "hearing_aid", stringResource(R.string.hearing_aid), navController) }
248250

249-
Spacer(modifier = Modifier.height(16.dp))
250-
NoiseControlSettings(service = service)
251+
item { Spacer(modifier = Modifier.height(16.dp)) }
252+
item { NoiseControlSettings(service = service) }
251253

252-
Spacer(modifier = Modifier.height(16.dp))
253-
PressAndHoldSettings(navController = navController)
254+
item { Spacer(modifier = Modifier.height(16.dp)) }
255+
item { PressAndHoldSettings(navController = navController) }
254256

255-
Spacer(modifier = Modifier.height(16.dp))
256-
CallControlSettings(hazeState = hazeState)
257+
item { Spacer(modifier = Modifier.height(16.dp)) }
258+
item { CallControlSettings(hazeState = hazeState) }
257259

258260
// camera control goes here, airpods side is done, i just need to figure out how to listen to app open/close events
259261

260-
Spacer(modifier = Modifier.height(16.dp))
261-
AudioSettings(navController = navController)
262+
item { Spacer(modifier = Modifier.height(16.dp)) }
263+
item { AudioSettings(navController = navController) }
262264

263-
Spacer(modifier = Modifier.height(16.dp))
264-
ConnectionSettings()
265+
item { Spacer(modifier = Modifier.height(16.dp)) }
266+
item { ConnectionSettings() }
265267

266-
Spacer(modifier = Modifier.height(16.dp))
267-
MicrophoneSettings(hazeState)
268+
item { Spacer(modifier = Modifier.height(16.dp)) }
269+
item { MicrophoneSettings(hazeState) }
268270

269-
Spacer(modifier = Modifier.height(16.dp))
270-
StyledToggle(
271-
label = stringResource(R.string.sleep_detection),
272-
controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.SLEEP_DETECTION_CONFIG
273-
)
271+
item { Spacer(modifier = Modifier.height(16.dp)) }
272+
item {
273+
StyledToggle(
274+
label = stringResource(R.string.sleep_detection),
275+
controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.SLEEP_DETECTION_CONFIG
276+
)
277+
}
274278

275-
Spacer(modifier = Modifier.height(16.dp))
276-
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))
279+
item { Spacer(modifier = Modifier.height(16.dp)) }
280+
item {
281+
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))
282+
}
277283

278-
Spacer(modifier = Modifier.height(16.dp))
279-
NavigationButton(to = "accessibility", name = stringResource(R.string.accessibility), navController = navController)
284+
item { Spacer(modifier = Modifier.height(16.dp)) }
285+
item { NavigationButton(to = "accessibility", name = stringResource(R.string.accessibility), navController = navController) }
280286

281-
Spacer(modifier = Modifier.height(16.dp))
282-
StyledToggle(
283-
label = stringResource(R.string.off_listening_mode),
284-
controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.ALLOW_OFF_OPTION,
285-
description = stringResource(R.string.off_listening_mode_description)
286-
)
287+
item { Spacer(modifier = Modifier.height(16.dp)) }
288+
item {
289+
StyledToggle(
290+
label = stringResource(R.string.off_listening_mode),
291+
controlCommandIdentifier = AACPManager.Companion.ControlCommandIdentifiers.ALLOW_OFF_OPTION,
292+
description = stringResource(R.string.off_listening_mode_description)
293+
)
294+
}
287295

288296
// an about card- everything but the version number is unknown - will add later if i find out
289297

290-
Spacer(modifier = Modifier.height(16.dp))
291-
NavigationButton("debug", "Debug", navController)
292-
Spacer(Modifier.height(24.dp))
298+
item { Spacer(modifier = Modifier.height(16.dp)) }
299+
item { NavigationButton("debug", "Debug", navController) }
300+
item { Spacer(Modifier.height(24.dp)) }
293301
}
294302
}
295303
else {

0 commit comments

Comments
 (0)