diff --git a/android/app/src/main/java/com/fabledsword/minstrel/player/output/OutputPickerSheet.kt b/android/app/src/main/java/com/fabledsword/minstrel/player/output/OutputPickerSheet.kt index 173fcb46..4a9039c3 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/player/output/OutputPickerSheet.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/player/output/OutputPickerSheet.kt @@ -4,8 +4,11 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -69,12 +72,19 @@ fun OutputPickerSheet( color = MaterialTheme.colorScheme.onSurface, modifier = Modifier.padding(vertical = 8.dp), ) - snapshot.available.forEach { route -> - RouteRow( - route = route, - isSelected = route.id == snapshot.current.id, - onClick = { onRouteSelected(route) }, - ) + LazyColumn( + modifier = Modifier + .fillMaxWidth() + .heightIn(max = ROUTE_LIST_MAX_HEIGHT_DP.dp), + verticalArrangement = Arrangement.spacedBy(4.dp), + ) { + items(items = snapshot.available, key = { it.id }) { route -> + RouteRow( + route = route, + isSelected = route.id == snapshot.current.id, + onClick = { onRouteSelected(route) }, + ) + } } if (permissionDenied) { PermissionHintRow() @@ -198,3 +208,4 @@ private fun defaultSubtitle(route: OutputRoute): String = when (route.kind) { private const val ROW_ICON_DP = 24 private const val HINT_ICON_DP = 20 +private const val ROUTE_LIST_MAX_HEIGHT_DP = 400