// TwoWayTempConverter Corrected Example // Source code file: MainActivity.kt package it372.ssmith.twowaytempconverter import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.Button import androidx.compose.material3.RadioButton import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { MainLayout() } } } @Composable fun MainLayout( ) { // State variable for selected radiobutton var radioState = remember { mutableStateOf(0) } // Contents of TextField var tfContents = remember { mutableStateOf("") } // Label of TextField var tfLabel = remember { mutableStateOf("Enter Celsius value:") } // Result to put in Text var textResult = remember { mutableStateOf("") } Column(modifier = Modifier .padding(all = 50.dp) .background(color = Color(0xFFE0E0FF)) .fillMaxSize( ), horizontalAlignment = Alignment.CenterHorizontally) { Row(modifier = Modifier.fillMaxWidth( ) .padding(top = 20.dp), horizontalArrangement = Arrangement.Center) { RadioButton(selected = radioState.value == 0, onClick = { radioState.value = 0 tfLabel.value = "Enter Celsius value." textResult.value = "" } ) Text(text = "C to F", fontSize = 25.sp) RadioButton(selected= radioState.value == 1, onClick = { radioState.value = 1; tfLabel.value = "Enter Fahrenheit value." textResult.value = "" } ) Text(text = "F to C", fontSize = 25.sp) } TextField(value = tfContents.value, label = { Text(text = tfLabel.value, fontSize = 15.sp) }, onValueChange = { tfContents.value = it textResult.value = "" }, modifier = Modifier .size(width = 200.dp, height = 75.dp) .background(color = Color(0xFFFFE0E0)) .fillMaxWidth( ), textStyle = TextStyle.Default.copy(fontSize = 25.sp)) Button(onClick = { if (radioState.value == 0) { var fahrenheit = "NaN" tfContents.value.toDoubleOrNull( )?.let { fahrenheit = "%.2f".format(9.0 * it / 5.0 + 32.0) textResult.value = fahrenheit } } else { var celsius = "NaN" tfContents.value.toDoubleOrNull( )?.let { celsius = "%.2f".format(5.0 * (it - 32.0) / 9.0) textResult.value = celsius } } }, modifier = Modifier.padding(top = 20.dp)) { Text(text = "Convert Temperature", fontSize = 25.sp) } Text(text = textResult.value, fontSize = 25.sp, modifier = Modifier .padding(top = 20.dp) .background(color = Color.White) .size(width = 200.dp, height = 50.dp) ) } } @Preview(showBackground = true) @Composable fun MainLayoutPreview() { MainLayout( ) }