merge(feat): 189-disable-image-captions into develop

This commit is contained in:
Acclorite 2025-06-29 11:30:33 +03:00
commit 7c4d8e88ca
No known key found for this signature in database
GPG key ID: 6E54C611F6EE8593
13 changed files with 76 additions and 5 deletions

View file

@ -95,7 +95,7 @@ class DocumentParser @Inject constructor(
val alt = element.attr("alt").trim().takeIf {
it.clearMarkdown().containsVisibleText()
} ?: src.substringBeforeLast(".")
} ?: "Image"
element.append("\n[[$src|$alt]]\n")
}
@ -113,7 +113,7 @@ class DocumentParser @Inject constructor(
} == true
} ?: return@forEach
val alt = src.substringBeforeLast(".")
val alt = "Image"
element.append("\n[[$src|$alt]]\n")
}

View file

@ -54,6 +54,7 @@ sealed class MainEvent {
data class OnChangeHighlightedReadingThickness(val value: Int) : MainEvent()
data class OnChangeChapterTitleAlignment(val value: String) : MainEvent()
data class OnChangeImages(val value: Boolean) : MainEvent()
data class OnChangeImagesCaptions(val value: Boolean) : MainEvent()
data class OnChangeImagesCornersRoundness(val value: Int) : MainEvent()
data class OnChangeImagesAlignment(val value: String) : MainEvent()
data class OnChangeImagesWidth(val value: Float) : MainEvent()

View file

@ -416,6 +416,14 @@ class MainModel @Inject constructor(
}
)
is MainEvent.OnChangeImagesCaptions -> handleDatastoreUpdate(
key = DataStoreData.IMAGES_CAPTIONS,
value = event.value,
updateState = {
it.copy(imagesCaptions = this)
}
)
is MainEvent.OnChangeImagesCornersRoundness -> handleDatastoreUpdate(
key = DataStoreData.IMAGES_CORNERS_ROUNDNESS,
value = event.value,

View file

@ -97,6 +97,7 @@ data class MainState(
val highlightedReadingThickness: Int = provideDefaultValue { 2 },
val chapterTitleAlignment: ReaderTextAlignment = provideDefaultValue { ReaderTextAlignment.JUSTIFY },
val images: Boolean = provideDefaultValue { true },
val imagesCaptions: Boolean = provideDefaultValue { true },
val imagesCornersRoundness: Int = provideDefaultValue { 8 },
val imagesAlignment: HorizontalAlignment = provideDefaultValue { HorizontalAlignment.START },
val imagesWidth: Float = provideDefaultValue { 0.8f },
@ -327,6 +328,10 @@ data class MainState(
IMAGES
) { images },
imagesCaptions = provideValue(
IMAGES_CAPTIONS
) { imagesCaptions },
imagesCornersRoundness = provideValue(
IMAGES_CORNERS_ROUNDNESS
) { imagesCornersRoundness },

View file

@ -57,6 +57,7 @@ object DataStoreData {
val HIGHLIGHTED_READING_THICKNESS = intPreferencesKey("highlighted_reading_thickness")
val CHAPTER_TITLE_ALIGNMENT = stringPreferencesKey("chapter_title_alignment")
val IMAGES = booleanPreferencesKey("images")
val IMAGES_CAPTIONS = booleanPreferencesKey("images_captions")
val IMAGES_CORNERS_ROUNDNESS = intPreferencesKey("images_corners_roundness")
val IMAGES_ALIGNMENT = stringPreferencesKey("images_alignment")
val IMAGES_WIDTH = doublePreferencesKey("images_width")

View file

@ -439,6 +439,7 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable {
backgroundColor = backgroundColor.value,
fontColor = fontColor.value,
images = mainState.value.images,
imagesCaptions = mainState.value.imagesCaptions,
imagesCornersRoundness = imagesCornersRoundness,
imagesAlignment = mainState.value.imagesAlignment,
imagesWidth = imagesWidth,

View file

@ -72,6 +72,7 @@ fun ReaderContent(
backgroundColor: Color,
fontColor: Color,
images: Boolean,
imagesCaptions: Boolean,
imagesCornersRoundness: Dp,
imagesAlignment: HorizontalAlignment,
imagesWidth: Float,
@ -150,6 +151,7 @@ fun ReaderContent(
backgroundColor = backgroundColor,
fontColor = fontColor,
images = images,
imagesCaptions = imagesCaptions,
imagesCornersRoundness = imagesCornersRoundness,
imagesAlignment = imagesAlignment,
imagesWidth = imagesWidth,

View file

@ -71,6 +71,7 @@ fun ReaderLayout(
backgroundColor: Color,
fontColor: Color,
images: Boolean,
imagesCaptions: Boolean,
imagesCornersRoundness: Dp,
imagesAlignment: HorizontalAlignment,
imagesWidth: Float,
@ -187,8 +188,11 @@ fun ReaderLayout(
text,
key = { index, _ -> index }
) { index, entry ->
val previousEntry = text.getOrNull(index - 1)
when {
!images && entry is ReaderText.Image -> return@itemsIndexed
!images && (entry is ReaderText.Image || previousEntry is ReaderText.Image) -> return@itemsIndexed
!imagesCaptions && previousEntry is ReaderText.Image -> return@itemsIndexed
else -> {
SpacedItem(
index = index,

View file

@ -76,6 +76,7 @@ fun ReaderScaffold(
backgroundColor: Color,
fontColor: Color,
images: Boolean,
imagesCaptions: Boolean,
imagesCornersRoundness: Dp,
imagesAlignment: HorizontalAlignment,
imagesWidth: Float,
@ -180,6 +181,7 @@ fun ReaderScaffold(
backgroundColor = backgroundColor,
fontColor = fontColor,
images = images,
imagesCaptions = imagesCaptions,
imagesCornersRoundness = imagesCornersRoundness,
imagesAlignment = imagesAlignment,
imagesWidth = imagesWidth,

View file

@ -16,6 +16,7 @@ import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory
import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesAlignmentOption
import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesCaptionsOption
import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesColorEffectsOption
import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesCornersRoundnessOption
import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesOption
@ -37,6 +38,10 @@ fun LazyListScope.ImagesSubcategory(
ImagesOption()
}
item {
ImagesCaptionsOption()
}
item {
ImagesColorEffectsOption()
}

View file

@ -0,0 +1,38 @@
/*
* Book's Story free and open-source Material You eBook reader.
* Copyright (C) 2024-2025 Acclorite
* SPDX-License-Identifier: GPL-3.0-only
*/
package ua.acclorite.book_story.ui.settings.reader.images.components
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.main.MainEvent
import ua.acclorite.book_story.presentation.main.MainModel
import ua.acclorite.book_story.ui.common.components.settings.SwitchWithTitle
import ua.acclorite.book_story.ui.theme.ExpandingTransition
@Composable
fun ImagesCaptionsOption() {
val mainModel = hiltViewModel<MainModel>()
val state = mainModel.state.collectAsStateWithLifecycle()
ExpandingTransition(visible = state.value.images) {
SwitchWithTitle(
selected = state.value.imagesCaptions,
title = stringResource(id = R.string.images_captions_option),
description = stringResource(id = R.string.images_captions_option_desc),
onClick = {
mainModel.onEvent(
MainEvent.OnChangeImagesCaptions(
!state.value.imagesCaptions
)
)
}
)
}
}

View file

@ -212,7 +212,9 @@
<string name="highlighted_reading_option_desc">Підсвічувати початок кожного слова</string>
<string name="highlighted_reading_thickness_option">Товщина підсвічування</string>
<string name="images_option">Зображення</string>
<string name="images_option_desc">Показувати зображення разом із написами до них</string>
<string name="images_option_desc">Показувати зображення</string>
<string name="images_captions_option">Написи</string>
<string name="images_captions_option_desc">Показувати написи під зображеннями</string>
<string name="images_corners_roundness_option">Округлість кутків</string>
<string name="images_alignment_option">Розташування</string>
<string name="images_width_option">Розмір</string>

View file

@ -236,7 +236,9 @@
<string name="highlighted_reading_option_desc">Highlight the beginning of each word</string>
<string name="highlighted_reading_thickness_option">Highlight thickness</string>
<string name="images_option">Images</string>
<string name="images_option_desc">Display images along with their captions</string>
<string name="images_option_desc">Display images</string>
<string name="images_captions_option">Captions</string>
<string name="images_captions_option_desc">Display captions under images</string>
<string name="images_corners_roundness_option">Corners roundness</string>
<string name="images_alignment_option">Alignment</string>
<string name="images_width_option">Size</string>