Coverage Summary for Class: SurferSelectionRadioKt (com.georgeci.moneysurfer.uikit.atom)

Class Class, % Method, % Branch, % Line, % Instruction, %
SurferSelectionRadioKt 100% (1/1) 66.7% (2/3) 60% (6/10) 100% (25/25) 97.4% (190/195)


 package com.georgeci.moneysurfer.uikit.atom
 
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
 import com.georgeci.moneysurfer.uikit.preview.SurferComponentPreview
 import com.georgeci.moneysurfer.uikit.theme.AppTheme
 
 /**
  * Selection dot for a row that is already clickable as a whole.
  *
  * Purely a visual indicator: it takes no click of its own and carries no semantics, because the
  * row around it owns both. Where the control itself must be focusable, use Material's
  * `RadioButton`.
  */
 @Composable
 fun SurferSelectionRadio(
     selected: Boolean,
     modifier: Modifier = Modifier,
 ) {
     Box(
         modifier = modifier
             .size(OuterSize)
             .clip(CircleShape)
             .border(
                 width = 2.dp,
                 color = if (selected) {
                     AppTheme.materialColors.primary
                 } else {
                     AppTheme.materialColors.outline
                 },
                 shape = CircleShape,
             ),
         contentAlignment = Alignment.Center,
     ) {
         if (selected) {
             Box(
                 modifier = Modifier
                     .size(InnerSize)
                     .clip(CircleShape)
                     .background(AppTheme.materialColors.primary),
             )
         }
     }
 }
 
 private val OuterSize = 22.dp
 private val InnerSize = 10.dp
 
 @Preview
 @Composable
 private fun SurferSelectionRadioPreview() {
     SurferComponentPreview {
         Row(horizontalArrangement = Arrangement.spacedBy(AppTheme.spacing.medium)) {
             SurferSelectionRadio(selected = true)
             SurferSelectionRadio(selected = false)
         }
     }
 }