From d3dd6e5d1c0f4bdcdc1eea75186a55d61cac2028 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Wed, 6 Jul 2022 17:20:33 +0100 Subject: [PATCH] fix android terminal scroll (#786) --- .../main/java/chat/simplex/app/views/TerminalView.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/TerminalView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/TerminalView.kt index 52340e2ac..46709dd1c 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/TerminalView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/TerminalView.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.lazy.* import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material.* import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily @@ -17,8 +18,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.app.model.* import chat.simplex.app.ui.theme.SimpleXTheme -import chat.simplex.app.views.chat.ComposeState -import chat.simplex.app.views.chat.SendMsgView +import chat.simplex.app.views.chat.* import chat.simplex.app.views.helpers.* import com.google.accompanist.insets.ProvideWindowInsets import com.google.accompanist.insets.navigationBarsWithImePadding @@ -82,6 +82,10 @@ fun TerminalLayout( @Composable fun TerminalLog(terminalItems: List) { val listState = rememberLazyListState() + val keyboardState by getKeyboardState() + val ciListState = rememberSaveable(stateSaver = CIListStateSaver) { + mutableStateOf(CIListState(false, terminalItems.count(), keyboardState)) + } val scope = rememberCoroutineScope() LazyColumn(state = listState) { items(terminalItems) { item -> @@ -101,8 +105,9 @@ fun TerminalLog(terminalItems: List) { ) } val len = terminalItems.count() - if (len > 1) { + if (len > 1 && (keyboardState != ciListState.value.keyboardState || !ciListState.value.scrolled || len != ciListState.value.itemCount)) { scope.launch { + ciListState.value = CIListState(true, len, keyboardState) listState.animateScrollToItem(len - 1) } }