@@ -40,6 +40,7 @@ import androidx.compose.foundation.layout.Spacer
4040import androidx.compose.foundation.layout.fillMaxSize
4141import androidx.compose.foundation.layout.fillMaxWidth
4242import androidx.compose.foundation.layout.height
43+ import androidx.compose.foundation.layout.navigationBarsPadding
4344import androidx.compose.foundation.layout.padding
4445import androidx.compose.foundation.layout.size
4546import androidx.compose.foundation.layout.width
@@ -49,6 +50,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape
4950import androidx.compose.material.icons.Icons
5051import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft
5152import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight
53+ import androidx.compose.material.icons.filled.Check
5254import androidx.compose.material.icons.filled.Delete
5355import androidx.compose.material.icons.filled.MoreVert
5456import androidx.compose.material.icons.filled.Send
@@ -89,33 +91,18 @@ import androidx.compose.ui.text.input.TextFieldValue
8991import androidx.compose.ui.unit.dp
9092import androidx.compose.ui.unit.sp
9193import androidx.navigation.NavController
94+ import dev.chrisbanes.haze.HazeEffectScope
9295import dev.chrisbanes.haze.HazeState
93- import dev.chrisbanes.haze.haze
94- import dev.chrisbanes.haze.hazeChild
96+ import dev.chrisbanes.haze.hazeEffect
97+ import dev.chrisbanes.haze.hazeSource
9598import dev.chrisbanes.haze.materials.CupertinoMaterials
9699import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
97- import kotlinx.coroutines.flow.MutableStateFlow
98100import kotlinx.coroutines.delay
99101import kotlinx.coroutines.launch
100- import kotlinx.coroutines.Dispatchers
101- import kotlinx.coroutines.CoroutineScope
102102import me.kavishdevar.librepods.R
103103import me.kavishdevar.librepods.services.ServiceManager
104104import me.kavishdevar.librepods.utils.BatteryStatus
105105import me.kavishdevar.librepods.utils.isHeadTrackingData
106- import me.kavishdevar.librepods.composables.StyledSwitch
107- import androidx.compose.foundation.layout.navigationBarsPadding
108- import androidx.compose.foundation.layout.imePadding
109- import androidx.compose.ui.geometry.Offset
110- import androidx.compose.ui.input.pointer.pointerInput
111- import androidx.compose.ui.platform.LocalDensity
112- import androidx.compose.ui.layout.onGloballyPositioned
113- import androidx.compose.ui.layout.positionInRoot
114- import androidx.compose.ui.text.style.TextAlign
115- import androidx.compose.foundation.gestures.detectTapGestures
116- import androidx.compose.foundation.gestures.detectDragGestures
117- import androidx.compose.material.icons.filled.Check
118- import androidx.compose.ui.input.pointer.PointerInputChange
119106
120107data class PacketInfo (
121108 val type : String ,
@@ -349,30 +336,30 @@ fun DebugScreen(navController: NavController) {
349336 val scrollOffset by remember { derivedStateOf { listState.firstVisibleItemScrollOffset } }
350337 val focusManager = LocalFocusManager .current
351338 val coroutineScope = rememberCoroutineScope()
352-
339+
353340 val showMenu = remember { mutableStateOf(false ) }
354-
341+
355342 val airPodsService = remember { ServiceManager .getService() }
356343 val packetLogs = airPodsService?.packetLogsFlow?.collectAsState(emptySet())?.value ? : emptySet()
357344 val shouldScrollToBottom = remember { mutableStateOf(true ) }
358-
345+
359346 val refreshTrigger = remember { mutableStateOf(0 ) }
360347 LaunchedEffect (refreshTrigger.value) {
361348 while (true ) {
362349 delay(1000 )
363350 refreshTrigger.value = refreshTrigger.value + 1
364351 }
365352 }
366-
353+
367354 val expandedItems = remember { mutableStateOf(setOf<Int >()) }
368-
355+
369356 fun copyToClipboard (text : String ) {
370357 val clipboard = context.getSystemService(Context .CLIPBOARD_SERVICE ) as ClipboardManager
371358 val clip = ClipData .newPlainText(" Packet Data" , text)
372359 clipboard.setPrimaryClip(clip)
373360 Toast .makeText(context, " Packet copied to clipboard" , Toast .LENGTH_SHORT ).show()
374361 }
375-
362+
376363 LaunchedEffect (packetLogs.size, refreshTrigger.value) {
377364 if (shouldScrollToBottom.value && packetLogs.isNotEmpty()) {
378365 listState.animateScrollToItem(packetLogs.size - 1 )
@@ -415,7 +402,7 @@ fun DebugScreen(navController: NavController) {
415402 tint = if (isSystemInDarkTheme()) Color .White else Color .Black
416403 )
417404 }
418-
405+
419406 DropdownMenu (
420407 expanded = showMenu.value,
421408 onDismissRequest = { showMenu.value = false },
@@ -446,17 +433,17 @@ fun DebugScreen(navController: NavController) {
446433 )
447434 }
448435 },
449- onClick = {
436+ onClick = {
450437 shouldScrollToBottom.value = ! shouldScrollToBottom.value
451438 showMenu.value = false
452439 }
453440 )
454-
441+
455442 HorizontalDivider (
456443 color = if (isSystemInDarkTheme()) Color (0xFF3A3A3C ) else Color (0xFFE5E5EA ),
457444 thickness = 0.5 .dp
458445 )
459-
446+
460447 DropdownMenuItem (
461448 text = {
462449 Row (
@@ -478,7 +465,7 @@ fun DebugScreen(navController: NavController) {
478465 )
479466 }
480467 },
481- onClick = {
468+ onClick = {
482469 ServiceManager .getService()?.clearLogs()
483470 expandedItems.value = emptySet()
484471 showMenu.value = false
@@ -487,13 +474,12 @@ fun DebugScreen(navController: NavController) {
487474 }
488475 }
489476 },
490- modifier = Modifier .hazeChild (
477+ modifier = Modifier .hazeEffect (
491478 state = hazeState,
492479 style = CupertinoMaterials .thick(),
493- block = {
480+ block = fun HazeEffectScope .() {
494481 alpha = if (scrollOffset > 0 ) 1f else 0f
495- }
496- ),
482+ }),
497483 colors = TopAppBarDefaults .topAppBarColors(containerColor = Color .Transparent ),
498484 )
499485 },
@@ -502,7 +488,7 @@ fun DebugScreen(navController: NavController) {
502488 Column (
503489 modifier = Modifier
504490 .fillMaxSize()
505- .haze (hazeState)
491+ .hazeSource (hazeState)
506492 .padding(top = paddingValues.calculateTopPadding())
507493 .navigationBarsPadding()
508494 ) {
@@ -633,7 +619,7 @@ fun DebugScreen(navController: NavController) {
633619 airPodsService?.value?.sendPacket(packet.value.text)
634620 packet.value = TextFieldValue (" " )
635621 focusManager.clearFocus()
636-
622+
637623 if (shouldScrollToBottom.value && packetLogs.isNotEmpty()) {
638624 coroutineScope.launch {
639625 try {
@@ -643,6 +629,7 @@ fun DebugScreen(navController: NavController) {
643629 scrollOffset = 0
644630 )
645631 } catch (e: Exception ) {
632+ e.printStackTrace()
646633 listState.scrollToItem(
647634 index = (packetLogs.size - 1 ).coerceAtLeast(0 )
648635 )
0 commit comments