@@ -22,6 +22,7 @@ import androidx.compose.foundation.layout.width
2222import androidx.compose.foundation.lazy.grid.GridCells
2323import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
2424import androidx.compose.foundation.lazy.grid.items
25+ import androidx.compose.foundation.lazy.grid.rememberLazyGridState
2526import androidx.compose.foundation.text.KeyboardOptions
2627import androidx.compose.material3.Button
2728import androidx.compose.material3.Checkbox
@@ -40,6 +41,7 @@ import androidx.compose.material3.TopAppBarDefaults.topAppBarColors
4041import androidx.compose.runtime.Composable
4142import androidx.compose.runtime.getValue
4243import androidx.compose.runtime.mutableStateOf
44+ import androidx.compose.runtime.rememberCoroutineScope
4345import androidx.compose.runtime.saveable.rememberSaveable
4446import androidx.compose.runtime.setValue
4547import androidx.compose.ui.Alignment
@@ -53,6 +55,7 @@ import com.fazecast.jSerialComm.SerialPort
5355import com.fazecast.jSerialComm.SerialPortDataListener
5456import com.fazecast.jSerialComm.SerialPortEvent
5557import com.zhaoxinsoft.serialtester.ui.theme.SerialTesterTheme
58+ import kotlinx.coroutines.launch
5659import java.text.SimpleDateFormat
5760import java.util.Date
5861import java.util.Locale
@@ -100,7 +103,7 @@ class MainActivity : ComponentActivity() {
100103 val str = if (viewModel.hexMode.value) {
101104 newData.joinToString(" " ) { String .format(" %02X" , it) }
102105 } else {
103- newData.toString(Charsets .UTF_8 )
106+ newData.toString(Charsets .UTF_8 ).trimEnd()
104107 }
105108 val timestamp = SimpleDateFormat (" HH:mm:ss.SSS" , Locale .getDefault()).format(Date ())
106109 viewModel.receivedData.add(" [$timestamp ] RX: $str " )
@@ -139,12 +142,10 @@ class MainActivity : ComponentActivity() {
139142 private fun disconnect () {
140143 serialPort?.closePort()
141144 serialPort?.removeDataListener()
142- viewModel.receivedData.clear()
143145 viewModel.isConnected.value = false
144146 }
145147
146148 private fun clear () {
147- // viewModel.data.value = null
148149 viewModel.receivedData.clear()
149150 }
150151
@@ -285,16 +286,26 @@ class MainActivity : ComponentActivity() {
285286 Text (" Send" )
286287 }
287288 }
289+ } else if (viewModel.receivedData.isNotEmpty()) {
290+ OutlinedButton (onClick = { clear() }) {
291+ Text (" Clear" )
292+ }
288293 }
294+ val lazyGridState = rememberLazyGridState()
295+ val coroutineScope = rememberCoroutineScope()
289296 LazyVerticalGrid (
290- columns = GridCells .Fixed (1 ), modifier = Modifier .fillMaxWidth(),
297+ columns = GridCells .Fixed (1 ), modifier = Modifier .fillMaxWidth(), state = lazyGridState
291298 ) {
292299 item {
293300 // put static item here
294301 }
295302 items(viewModel.receivedData) { data ->
296303 Text (data)
297304 }
305+ coroutineScope.launch {
306+ if (viewModel.receivedData.isNotEmpty())
307+ lazyGridState.scrollToItem(viewModel.receivedData.size - 1 )
308+ }
298309 }
299310 }
300311 }
0 commit comments