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

View file

@ -54,6 +54,7 @@ sealed class MainEvent {
data class OnChangeHighlightedReadingThickness(val value: Int) : MainEvent() data class OnChangeHighlightedReadingThickness(val value: Int) : MainEvent()
data class OnChangeChapterTitleAlignment(val value: String) : MainEvent() data class OnChangeChapterTitleAlignment(val value: String) : MainEvent()
data class OnChangeImages(val value: Boolean) : MainEvent() data class OnChangeImages(val value: Boolean) : MainEvent()
data class OnChangeImagesCaptions(val value: Boolean) : MainEvent()
data class OnChangeImagesCornersRoundness(val value: Int) : MainEvent() data class OnChangeImagesCornersRoundness(val value: Int) : MainEvent()
data class OnChangeImagesAlignment(val value: String) : MainEvent() data class OnChangeImagesAlignment(val value: String) : MainEvent()
data class OnChangeImagesWidth(val value: Float) : 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( is MainEvent.OnChangeImagesCornersRoundness -> handleDatastoreUpdate(
key = DataStoreData.IMAGES_CORNERS_ROUNDNESS, key = DataStoreData.IMAGES_CORNERS_ROUNDNESS,
value = event.value, value = event.value,

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -76,6 +76,7 @@ fun ReaderScaffold(
backgroundColor: Color, backgroundColor: Color,
fontColor: Color, fontColor: Color,
images: Boolean, images: Boolean,
imagesCaptions: Boolean,
imagesCornersRoundness: Dp, imagesCornersRoundness: Dp,
imagesAlignment: HorizontalAlignment, imagesAlignment: HorizontalAlignment,
imagesWidth: Float, imagesWidth: Float,
@ -180,6 +181,7 @@ fun ReaderScaffold(
backgroundColor = backgroundColor, backgroundColor = backgroundColor,
fontColor = fontColor, fontColor = fontColor,
images = images, images = images,
imagesCaptions = imagesCaptions,
imagesCornersRoundness = imagesCornersRoundness, imagesCornersRoundness = imagesCornersRoundness,
imagesAlignment = imagesAlignment, imagesAlignment = imagesAlignment,
imagesWidth = imagesWidth, 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.R
import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory 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.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.ImagesColorEffectsOption
import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesCornersRoundnessOption import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesCornersRoundnessOption
import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesOption import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesOption
@ -37,6 +38,10 @@ fun LazyListScope.ImagesSubcategory(
ImagesOption() ImagesOption()
} }
item {
ImagesCaptionsOption()
}
item { item {
ImagesColorEffectsOption() 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_option_desc">Підсвічувати початок кожного слова</string>
<string name="highlighted_reading_thickness_option">Товщина підсвічування</string> <string name="highlighted_reading_thickness_option">Товщина підсвічування</string>
<string name="images_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_corners_roundness_option">Округлість кутків</string>
<string name="images_alignment_option">Розташування</string> <string name="images_alignment_option">Розташування</string>
<string name="images_width_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_option_desc">Highlight the beginning of each word</string>
<string name="highlighted_reading_thickness_option">Highlight thickness</string> <string name="highlighted_reading_thickness_option">Highlight thickness</string>
<string name="images_option">Images</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_corners_roundness_option">Corners roundness</string>
<string name="images_alignment_option">Alignment</string> <string name="images_alignment_option">Alignment</string>
<string name="images_width_option">Size</string> <string name="images_width_option">Size</string>