Optimized Reader loading speed and performance.
This commit is contained in:
parent
0e5c4a13e8
commit
2cf5899fbf
6 changed files with 12 additions and 23 deletions
|
|
@ -1,15 +1,11 @@
|
||||||
package ua.acclorite.book_story.domain.use_case
|
package ua.acclorite.book_story.domain.use_case
|
||||||
|
|
||||||
import ua.acclorite.book_story.domain.model.ReaderLine
|
|
||||||
import ua.acclorite.book_story.domain.repository.BookRepository
|
import ua.acclorite.book_story.domain.repository.BookRepository
|
||||||
import ua.acclorite.book_story.domain.util.ID
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class GetText @Inject constructor(private val repository: BookRepository) {
|
class GetText @Inject constructor(private val repository: BookRepository) {
|
||||||
|
|
||||||
suspend fun execute(textPath: String): Map<ID, ReaderLine> {
|
suspend fun execute(textPath: String): List<String> {
|
||||||
return repository.getBookText(textPath = textPath).withIndex().associate {
|
return repository.getBookText(textPath = textPath)
|
||||||
it.index to ReaderLine(line = it.value)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -534,7 +534,7 @@ class BookInfoViewModel @Inject constructor(
|
||||||
val updatedText = updatedBook.text
|
val updatedText = updatedBook.text
|
||||||
val text = getText.execute(book.textPath)
|
val text = getText.execute(book.textPath)
|
||||||
|
|
||||||
if (updatedText != text.map { it.value.line }) {
|
if (updatedText != text) {
|
||||||
textUpdated = true
|
textUpdated = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ import ua.acclorite.book_story.domain.util.Constants
|
||||||
import ua.acclorite.book_story.domain.util.OnNavigate
|
import ua.acclorite.book_story.domain.util.OnNavigate
|
||||||
import ua.acclorite.book_story.presentation.components.CustomAnimatedVisibility
|
import ua.acclorite.book_story.presentation.components.CustomAnimatedVisibility
|
||||||
import ua.acclorite.book_story.presentation.components.CustomSelectionContainer
|
import ua.acclorite.book_story.presentation.components.CustomSelectionContainer
|
||||||
import ua.acclorite.book_story.presentation.components.customItems
|
import ua.acclorite.book_story.presentation.components.customItemsIndexed
|
||||||
import ua.acclorite.book_story.presentation.components.is_messages.IsError
|
import ua.acclorite.book_story.presentation.components.is_messages.IsError
|
||||||
import ua.acclorite.book_story.presentation.data.LocalNavigator
|
import ua.acclorite.book_story.presentation.data.LocalNavigator
|
||||||
import ua.acclorite.book_story.presentation.data.MainEvent
|
import ua.acclorite.book_story.presentation.data.MainEvent
|
||||||
|
|
@ -188,9 +188,6 @@ private fun ReaderScreen(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val text = remember(state.value.text) {
|
|
||||||
state.value.text.toList().sortedBy { it.first }
|
|
||||||
}
|
|
||||||
val fontFamily = remember(mainState.value.fontFamily) {
|
val fontFamily = remember(mainState.value.fontFamily) {
|
||||||
Constants.FONTS.find {
|
Constants.FONTS.find {
|
||||||
it.id == mainState.value.fontFamily
|
it.id == mainState.value.fontFamily
|
||||||
|
|
@ -359,11 +356,11 @@ private fun ReaderScreen(
|
||||||
Spacer(modifier = Modifier.height(18.dp))
|
Spacer(modifier = Modifier.height(18.dp))
|
||||||
}
|
}
|
||||||
|
|
||||||
customItems(
|
customItemsIndexed(
|
||||||
text, key = { key -> key.first }
|
state.value.text, key = { _, index -> index }
|
||||||
) { line ->
|
) { _, line ->
|
||||||
ReaderTextParagraph(
|
ReaderTextParagraph(
|
||||||
line = line.second,
|
line = line,
|
||||||
context = context,
|
context = context,
|
||||||
fontFamily = fontFamily,
|
fontFamily = fontFamily,
|
||||||
fontColor = fontColor.value,
|
fontColor = fontColor.value,
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.TextUnit
|
import androidx.compose.ui.unit.TextUnit
|
||||||
import ua.acclorite.book_story.R
|
import ua.acclorite.book_story.R
|
||||||
import ua.acclorite.book_story.domain.model.FontWithName
|
import ua.acclorite.book_story.domain.model.FontWithName
|
||||||
import ua.acclorite.book_story.domain.model.ReaderLine
|
|
||||||
import ua.acclorite.book_story.presentation.screens.reader.data.ReaderEvent
|
import ua.acclorite.book_story.presentation.screens.reader.data.ReaderEvent
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -44,7 +43,7 @@ import ua.acclorite.book_story.presentation.screens.reader.data.ReaderEvent
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun LazyItemScope.ReaderTextParagraph(
|
fun LazyItemScope.ReaderTextParagraph(
|
||||||
line: ReaderLine,
|
line: String,
|
||||||
context: Context,
|
context: Context,
|
||||||
fontFamily: FontWithName,
|
fontFamily: FontWithName,
|
||||||
fontColor: Color,
|
fontColor: Color,
|
||||||
|
|
@ -72,7 +71,7 @@ fun LazyItemScope.ReaderTextParagraph(
|
||||||
append(" ")
|
append(" ")
|
||||||
}
|
}
|
||||||
|
|
||||||
append(line.line)
|
append(line)
|
||||||
},
|
},
|
||||||
modifier = Modifier.then(
|
modifier = Modifier.then(
|
||||||
if (
|
if (
|
||||||
|
|
@ -85,7 +84,7 @@ fun LazyItemScope.ReaderTextParagraph(
|
||||||
onDoubleClick = {
|
onDoubleClick = {
|
||||||
onEvent(
|
onEvent(
|
||||||
ReaderEvent.OnOpenTranslator(
|
ReaderEvent.OnOpenTranslator(
|
||||||
textToTranslate = line.line,
|
textToTranslate = line,
|
||||||
context = context as ComponentActivity,
|
context = context as ComponentActivity,
|
||||||
noAppsFound = {
|
noAppsFound = {
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,13 @@ package ua.acclorite.book_story.presentation.screens.reader.data
|
||||||
import androidx.compose.foundation.lazy.LazyListState
|
import androidx.compose.foundation.lazy.LazyListState
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import ua.acclorite.book_story.domain.model.Book
|
import ua.acclorite.book_story.domain.model.Book
|
||||||
import ua.acclorite.book_story.domain.model.ReaderLine
|
|
||||||
import ua.acclorite.book_story.domain.util.Constants
|
import ua.acclorite.book_story.domain.util.Constants
|
||||||
import ua.acclorite.book_story.domain.util.ID
|
|
||||||
import ua.acclorite.book_story.domain.util.UIText
|
import ua.acclorite.book_story.domain.util.UIText
|
||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
data class ReaderState(
|
data class ReaderState(
|
||||||
val book: Book = Constants.EMPTY_BOOK,
|
val book: Book = Constants.EMPTY_BOOK,
|
||||||
val text: Map<ID, ReaderLine> = emptyMap(),
|
val text: List<String> = emptyList(),
|
||||||
val words: Int = 0,
|
val words: Int = 0,
|
||||||
val letters: Int = 0,
|
val letters: Int = 0,
|
||||||
val listState: LazyListState = LazyListState(),
|
val listState: LazyListState = LazyListState(),
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,6 @@ class ReaderViewModel @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
val textAsLine = text
|
val textAsLine = text
|
||||||
.map { it.value.line }
|
|
||||||
.joinToString(
|
.joinToString(
|
||||||
separator = "\n"
|
separator = "\n"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue