From 141264d22f931789516bb1e59dd7a8aa27f78746 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sylwester=20Zieli=C5=84ski?= Date: Tue, 3 May 2022 13:56:36 +0200 Subject: [PATCH] Make output section adapted to the screen size --- .../nordicsemi/android/uart/data/UARTData.kt | 2 +- .../android/uart/view/UARTContentView.kt | 27 ++++++++++++++++--- .../android/uart/view/UARTScreen.kt | 19 ++++++++----- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/data/UARTData.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/data/UARTData.kt index ce96c0fc..95803e2d 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/data/UARTData.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/data/UARTData.kt @@ -5,7 +5,7 @@ internal data class UARTData( val batteryLevel: Int? = null, ) { - val displayMessages = messages.reversed().take(10) + val displayMessages = messages.take(50) } internal data class UARTRecord( diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTContentView.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTContentView.kt index cb1cf801..14f0a027 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTContentView.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTContentView.kt @@ -1,6 +1,8 @@ package no.nordicsemi.android.uart.view import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Delete @@ -8,14 +10,17 @@ import androidx.compose.material.icons.filled.Edit import androidx.compose.material3.* import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import kotlinx.coroutines.launch import no.nordicsemi.android.material.you.* import no.nordicsemi.android.theme.view.SectionTitle import no.nordicsemi.android.uart.R @@ -35,10 +40,12 @@ internal fun UARTContentView( ) { Column( horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.padding(16.dp).fillMaxSize() + modifier = Modifier + .padding(16.dp) + .fillMaxSize() ) { - ScreenSection(modifier = Modifier.fillMaxSize()) { + ScreenSection(modifier = Modifier.weight(1f)) { OutputSection(state.displayMessages, onEvent) } @@ -209,7 +216,8 @@ private fun DeleteConfigurationDialog(onEvent: (UARTViewEvent) -> Unit, onDismis @Composable private fun OutputSection(records: List, onEvent: (UARTViewEvent) -> Unit) { Column( - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxSize() ) { Row( modifier = Modifier.fillMaxWidth(), @@ -232,7 +240,18 @@ private fun OutputSection(records: List, onEvent: (UARTViewEvent) -> Spacer(modifier = Modifier.size(16.dp)) - Column(modifier = Modifier.fillMaxWidth()) { + val coroutineScope = rememberCoroutineScope() + val scrollState = rememberScrollState() + + Column(modifier = Modifier + .fillMaxWidth() + .verticalScroll(scrollState) + .onGloballyPositioned { + coroutineScope.launch { + scrollState.animateScrollTo(Int.MAX_VALUE) + } + } + ) { if (records.isEmpty()) { Text(text = stringResource(id = R.string.uart_output_placeholder)) } else { diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt index 43ef2738..5fc75aa0 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt @@ -35,18 +35,25 @@ fun UARTScreen() { viewModel.onEvent(OpenLogger) } - Column(modifier = Modifier.verticalScroll(rememberScrollState())) { + Column(modifier = Modifier) { when (state.uartManagerState) { NoDeviceState -> NoDeviceView() is WorkingState -> when (state.uartManagerState.result) { - is ConnectingResult -> DeviceConnectingView { viewModel.onEvent(DisconnectEvent) } - is DisconnectedResult -> DeviceDisconnectedView(Reason.USER, navigateUp) - is LinkLossResult -> DeviceDisconnectedView(Reason.LINK_LOSS, navigateUp) - is MissingServiceResult -> DeviceDisconnectedView(Reason.MISSING_SERVICE, navigateUp) - is UnknownErrorResult -> DeviceDisconnectedView(Reason.UNKNOWN, navigateUp) + is ConnectingResult -> Scroll { DeviceConnectingView { viewModel.onEvent(DisconnectEvent) } } + is DisconnectedResult -> Scroll { DeviceDisconnectedView(Reason.USER, navigateUp) } + is LinkLossResult -> Scroll { DeviceDisconnectedView(Reason.LINK_LOSS, navigateUp) } + is MissingServiceResult -> Scroll { DeviceDisconnectedView(Reason.MISSING_SERVICE, navigateUp) } + is UnknownErrorResult -> Scroll { DeviceDisconnectedView(Reason.UNKNOWN, navigateUp) } is SuccessResult -> UARTContentView(state.uartManagerState.result.data, state) { viewModel.onEvent(it) } } }.exhaustive } } } + +@Composable +fun Scroll(content: @Composable () -> Unit) { + Column(modifier = Modifier.verticalScroll(rememberScrollState())) { + content() + } +}