From 0a06ccdc6746369787a221f490577776dd8cfa33 Mon Sep 17 00:00:00 2001 From: acclorite Date: Wed, 12 Jun 2024 17:04:30 +0300 Subject: [PATCH] ReaderScreen: Great performance improvement by reducing recompositions count. (v1.0.1) --- .../screens/reader/ReaderScreen.kt | 23 ++++--------------- .../components/app_bar/ReaderBottomBar.kt | 3 --- .../components/text/ReaderTextParagraph.kt | 1 - .../screens/reader/data/ReaderEvent.kt | 1 - .../screens/reader/data/ReaderViewModel.kt | 6 +---- 5 files changed, 5 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt index e412c5a0..7fcfbdfd 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt @@ -92,16 +92,6 @@ fun ReaderScreenRoot() { state.value.listState.canScrollBackward && state.value.listState.canScrollForward } } - val firstVisibleItemIndex = remember { - derivedStateOf { - state.value.listState.firstVisibleItemIndex - } - } - val firstVisibleItemOffset = remember { - derivedStateOf { - state.value.listState.firstVisibleItemScrollOffset - } - } LaunchedEffect(Unit) { viewModel.init( @@ -119,21 +109,16 @@ fun ReaderScreenRoot() { ).show() } ) + viewModel.onUpdateProgress( + onLibraryEvent = libraryViewModel::onEvent, + onHistoryEvent = historyViewModel::onEvent + ) } LaunchedEffect(canScroll) { if (!canScroll && !state.value.showMenu && !state.value.loading) { viewModel.onEvent(ReaderEvent.OnShowHideMenu(context = context)) } } - LaunchedEffect(firstVisibleItemIndex.value, firstVisibleItemOffset.value) { - viewModel.onUpdateProgress( - firstVisibleItemIndex = firstVisibleItemIndex.value, - firstVisibleItemOffset = firstVisibleItemOffset.value, - navigator = navigator, - onLibraryEvent = libraryViewModel::onEvent, - onHistoryEvent = historyViewModel::onEvent - ) - } DisposableEffect(Unit) { onDispose { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/app_bar/ReaderBottomBar.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/app_bar/ReaderBottomBar.kt index 952d1ac7..5d3de79c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/app_bar/ReaderBottomBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/app_bar/ReaderBottomBar.kt @@ -21,7 +21,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.data.LocalNavigator import ua.acclorite.book_story.presentation.data.removeDigits import ua.acclorite.book_story.presentation.data.removeTrailingZero import ua.acclorite.book_story.presentation.screens.history.data.HistoryEvent @@ -45,7 +44,6 @@ fun ReaderBottomBar( onLibraryUpdateEvent: (LibraryEvent.OnUpdateBook) -> Unit, onHistoryUpdateEvent: (HistoryEvent.OnUpdateBook) -> Unit ) { - val navigator = LocalNavigator.current val progress by remember(state.value.book.progress) { derivedStateOf { (state.value.book.progress * 100) @@ -86,7 +84,6 @@ fun ReaderBottomBar( onEvent( ReaderEvent.OnChangeProgress( progress = it, - navigator = navigator, firstVisibleItemIndex = state.value.listState.firstVisibleItemIndex, firstVisibleItemOffset = 0, refreshList = { book -> diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/text/ReaderTextParagraph.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/text/ReaderTextParagraph.kt index 36908d1b..482a9086 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/text/ReaderTextParagraph.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/text/ReaderTextParagraph.kt @@ -217,5 +217,4 @@ fun LazyItemScope.ReaderTextParagraph( ) ) } - } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderEvent.kt index 99008bbd..92cd0d41 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderEvent.kt @@ -70,7 +70,6 @@ sealed class ReaderEvent { data class OnChangeProgress( val progress: Float, - val navigator: Navigator, val firstVisibleItemIndex: Int, val firstVisibleItemOffset: Int, val refreshList: (Book) -> Unit diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt index 63d86b0b..38aadc9a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt @@ -1270,14 +1270,11 @@ class ReaderViewModel @Inject constructor( @OptIn(FlowPreview::class) suspend fun onUpdateProgress( - firstVisibleItemIndex: Int, - firstVisibleItemOffset: Int, - navigator: Navigator, onLibraryEvent: (LibraryEvent) -> Unit, onHistoryEvent: (HistoryEvent) -> Unit ) { snapshotFlow { - firstVisibleItemIndex to firstVisibleItemOffset + _state.value.listState.firstVisibleItemIndex to _state.value.listState.firstVisibleItemScrollOffset } .debounce(300) .collectLatest { items -> @@ -1307,7 +1304,6 @@ class ReaderViewModel @Inject constructor( onEvent( ReaderEvent.OnChangeProgress( progress = progress, - navigator = navigator, firstVisibleItemIndex = items.first, firstVisibleItemOffset = items.second, refreshList = { book ->