@@ -38,22 +38,19 @@ import androidx.compose.foundation.background
3838import androidx.compose.foundation.clickable
3939import androidx.compose.foundation.layout.Arrangement
4040import androidx.compose.foundation.layout.Box
41- import androidx.compose.foundation.layout.Column
42- import androidx.compose.foundation.layout.Row
4341import androidx.compose.foundation.layout.WindowInsets
4442import androidx.compose.foundation.layout.WindowInsetsSides
4543import androidx.compose.foundation.layout.asPaddingValues
4644import androidx.compose.foundation.layout.displayCutout
4745import androidx.compose.foundation.layout.fillMaxSize
48- import androidx.compose.foundation.layout.heightIn
4946import androidx.compose.foundation.layout.only
50- import androidx.compose.foundation.layout.padding
5147import androidx.compose.foundation.layout.union
5248import androidx.compose.foundation.lazy.LazyColumn
5349import androidx.compose.foundation.lazy.LazyListScope
5450import androidx.compose.foundation.lazy.items
5551import androidx.compose.foundation.shape.RoundedCornerShape
5652import androidx.compose.material3.ExperimentalMaterial3Api
53+ import androidx.compose.material3.ListItem
5754import androidx.compose.material3.MaterialTheme
5855import androidx.compose.material3.OutlinedCard
5956import androidx.compose.material3.Text
@@ -65,7 +62,6 @@ import androidx.compose.runtime.LaunchedEffect
6562import androidx.compose.runtime.getValue
6663import androidx.compose.runtime.rememberCoroutineScope
6764import androidx.compose.runtime.rememberUpdatedState
68- import androidx.compose.ui.Alignment
6965import androidx.compose.ui.Modifier
7066import androidx.compose.ui.draw.clip
7167import androidx.compose.ui.graphics.painter.Painter
@@ -227,7 +223,7 @@ internal fun DeviceListItem(
227223 ? : R .drawable.outline_bluetooth_24,
228224) {
229225 DeviceListItem (
230- peripheralIcon = peripheralIcon?.let { painterResource(it) },
226+ iconPainter = peripheralIcon?.let { painterResource(it) },
231227 title = result.advertisingData.name ? : result.peripheral.name
232228 ? : stringResource(R .string.no_name),
233229 subtitle = result.peripheral.address,
@@ -241,51 +237,63 @@ internal fun DeviceListItem(
241237@OptIn(ExperimentalUuidApi ::class )
242238@Composable
243239fun DeviceListItem (
244- peripheralIcon : Painter ? ,
240+ iconPainter : Painter ? ,
245241 title : String ,
246242 subtitle : String ,
243+ modifier : Modifier = Modifier ,
247244 trailingContent : @Composable () -> Unit = { },
248245) {
249- OutlinedCard {
250- Row (
251- modifier = Modifier
252- .heightIn(min = 80 .dp)
253- .padding(all = 16 .dp),
254- verticalAlignment = Alignment .CenterVertically ,
255- horizontalArrangement = Arrangement .spacedBy(16 .dp)
256- ) {
257- peripheralIcon?.let {
258- CircularIcon (
259- painter = it,
260- )
261- }
262- Column (
263- verticalArrangement = Arrangement .spacedBy(4 .dp),
264- modifier = Modifier .weight(1.0f )
265- ) {
266- Text (
267- text = title,
268- color = MaterialTheme .colorScheme.onSurface,
269- maxLines = 2 ,
270- overflow = TextOverflow .Ellipsis ,
271- style = MaterialTheme .typography.titleMedium,
272- )
273- Text (
274- text = subtitle,
275- style = MaterialTheme .typography.bodyMedium,
276- maxLines = 1 ,
277- )
278- }
279- trailingContent()
280- }
246+ DeviceListItem (
247+ modifier = modifier,
248+ iconPainter = iconPainter,
249+ headlineContent = {
250+ Text (
251+ text = title,
252+ maxLines = 1 ,
253+ overflow = TextOverflow .Ellipsis ,
254+ )
255+ },
256+ supportingContent = {
257+ Text (
258+ text = subtitle,
259+ maxLines = 1 ,
260+ overflow = TextOverflow .Ellipsis ,
261+ )
262+ },
263+ trailingContent = trailingContent
264+ )
265+ }
266+
267+ @OptIn(ExperimentalUuidApi ::class )
268+ @Composable
269+ fun DeviceListItem (
270+ iconPainter : Painter ? ,
271+ headlineContent : @Composable () -> Unit ,
272+ modifier : Modifier = Modifier ,
273+ overlineContent : @Composable () -> Unit = {},
274+ supportingContent : @Composable () -> Unit = {},
275+ trailingContent : @Composable () -> Unit = {},
276+ ) {
277+ OutlinedCard (modifier) {
278+ ListItem (
279+ headlineContent = headlineContent,
280+ overlineContent = overlineContent,
281+ supportingContent = supportingContent,
282+ leadingContent = {
283+ iconPainter?.let {
284+ CircularIcon (painter = it)
285+ }
286+ },
287+ trailingContent = trailingContent,
288+ )
281289 }
282290}
283291
284292@Preview
285293@Composable
286294private fun DeviceListItemPreview () {
287295 DeviceListItem (
288- peripheralIcon = painterResource(R .drawable.outline_bluetooth_24),
296+ iconPainter = painterResource(R .drawable.outline_bluetooth_24),
289297 title = " Nordic HRM" ,
290298 subtitle = " 12:34:56:78:9A:BC" ,
291299 trailingContent = {
@@ -354,7 +362,7 @@ private fun ScannerContentPreview() {
354362 peripheral = PreviewPeripheral (
355363 scope = scope,
356364 name = " A device with a very long name" ,
357- address = " 00:11:22:33:44:55 " ,
365+ address = " 00000000-1234-1234-5678-1234567890AB " ,
358366 ),
359367 isConnectable = true ,
360368 advertisingData = AdvertisingData (raw = byteArrayOf(0x02 , 0x01 , 0x06 )),
0 commit comments