Coverage Summary for Class: WifiListItemKt (release.com.greybox.projectmesh.extension)

Class Method, % Branch, % Line, % Instruction, %
WifiListItemKt$WifiListItem$1$1$1 0% (0/1) 0% (0/1) 0% (0/6)
WifiListItemKt$WifiListItem$2 0% (0/1)
WifiListItemKt$WifiListItem$2$user$1$1 0% (0/1) 0% (0/2) 0% (0/2) 0% (0/28)
WifiListItemKt$WifiListItem$3 0% (0/1) 0% (0/1) 0% (0/44)
WifiListItemKt$WifiListItem$4 0% (0/1)
WifiListItemKt$WifiListItem$5
Total 0% (0/6) 0% (0/2) 0% (0/4) 0% (0/78)


 package com.greybox.projectmesh.extension
 
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.width
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Image
 import androidx.compose.material.icons.filled.SignalCellular4Bar
 import androidx.compose.material3.HorizontalDivider
 import androidx.compose.material3.Icon
 import androidx.compose.material3.ListItem
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.unit.dp
 import com.greybox.projectmesh.GlobalApp
 import com.ustadmobile.meshrabiya.ext.addressToDotNotation
 import com.ustadmobile.meshrabiya.vnet.VirtualNode
 import kotlinx.coroutines.runBlocking
 import com.greybox.projectmesh.user.UserRepository
 
 /**
  * Displays a single Wi-Fi node in a list with device information and mesh network status.
  *
  * This composable shows the device icon, name (from IP address), IP in dot notation,
  * and mesh network details including ping time and hop count.
  *
  * @param wifiAddress The integer IP address of the Wi-Fi node.
  * @param wifiEntry The [VirtualNode.LastOriginatorMessage] containing the node's mesh message data.
  * @param onClick Optional lambda invoked when the list item is clicked, providing the node's IP in dot notation.
  */
 @Composable
 fun WifiListItem(
     wifiAddress: Int,
     wifiEntry: VirtualNode.LastOriginatorMessage,
     onClick: ((nodeAddress: String) -> Unit)? = null,
 ){
     val wifiAddressDotNotation = wifiAddress.addressToDotNotation()
     ListItem(
         modifier = Modifier.fillMaxWidth().let{
             if(onClick != null){
                 it.clickable(onClick = {
                     onClick(wifiAddressDotNotation)
                 })
             }
             else{
                 it
             }
         },
         leadingContent = {
             // The image icon on the left side
             Icon(
                 // replace this image with a custom icon or image
                 imageVector = Icons.Default.Image,
                 contentDescription = "Profile Picture",
                 modifier = Modifier.size(28.dp)
             )
         },
         headlineContent = {
             // obtain the device name according to the ip address
             val user = runBlocking {
                 GlobalApp.GlobalUserRepo.userRepository.getUserByIp(wifiAddressDotNotation)
             }
             val device = user?.name ?: "Unknown"
             if(device != null){
                 Text(text= device, fontWeight = FontWeight.Bold)
             }
             else{
                 Text(text = "Loading...", fontWeight = FontWeight.Bold)
             }
         },
         supportingContent = {
             Text(text = wifiAddressDotNotation)
         },
         trailingContent = {
             // The mesh status with signal bars and text
             Row(
                 verticalAlignment = Alignment.CenterVertically
             ) {
                 Icon(
                     imageVector = Icons.Default.SignalCellular4Bar,
                     contentDescription = "Mesh Signal Strength",
                     modifier = Modifier.size(24.dp)
                 )
                 Spacer(modifier = Modifier.width(4.dp))
                 Column{
                     Text(text = "Mesh status")
                     Spacer(modifier = Modifier.width(4.dp))
                     Text("Ping: ${wifiEntry.originatorMessage.pingTimeSum}ms "
                             + "Hops: ${wifiEntry.hopCount} ")
                 }
             }
         }
     )
     HorizontalDivider()
 }