Add justify text preference, reduce the number of times web content is refreshed
Refresh was being triggered by reading progress events, this prevents us from reloading content on those events.
This commit is contained in:
@ -15,6 +15,7 @@ object DatastoreKeys {
|
||||
const val preferredWebMaxWidthPercentage = "preferredWebMaxWidthPercentage"
|
||||
const val preferredWebFontFamily = "preferredWebFontFamily"
|
||||
const val prefersWebHighContrastText = "prefersWebHighContrastText"
|
||||
const val prefersJustifyText = "prefersJustifyText"
|
||||
const val lastUsedSavedItemFilter = "lastUsedSavedItemFilter"
|
||||
const val lastUsedSavedItemSortFilter = "lastUsedSavedItemSortFilter"
|
||||
const val preferredTheme = "preferredTheme"
|
||||
|
||||
@ -49,6 +49,9 @@ fun WebPreferencesView(webReaderViewModel: WebReaderViewModel) {
|
||||
val currentWebPreferences = webReaderViewModel.storedWebPreferences(isDark)
|
||||
val isFontListExpanded = remember { mutableStateOf(false) }
|
||||
val highContrastTextSwitchState = remember { mutableStateOf(currentWebPreferences.prefersHighContrastText) }
|
||||
|
||||
val justifyTextSwitchState = remember { mutableStateOf(currentWebPreferences.prefersJustifyText) }
|
||||
|
||||
val selectedWebFontRawValue = remember { mutableStateOf(currentWebPreferences.fontFamily.rawValue) }
|
||||
|
||||
Column(
|
||||
@ -98,6 +101,18 @@ fun WebPreferencesView(webReaderViewModel: WebReaderViewModel) {
|
||||
)
|
||||
}
|
||||
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Text("Justify Text")
|
||||
Spacer(modifier = Modifier.weight(1.0F))
|
||||
Switch(
|
||||
checked = justifyTextSwitchState.value,
|
||||
onCheckedChange = {
|
||||
justifyTextSwitchState.value = it
|
||||
webReaderViewModel.updateJustifyText(it)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
@ -200,5 +215,6 @@ data class WebPreferences(
|
||||
val themeKey: String,
|
||||
val storedThemePreference: String,
|
||||
val fontFamily: WebFont,
|
||||
val prefersHighContrastText: Boolean
|
||||
val prefersHighContrastText: Boolean,
|
||||
val prefersJustifyText: Boolean
|
||||
)
|
||||
|
||||
@ -30,8 +30,8 @@ import java.util.*
|
||||
@SuppressLint("SetJavaScriptEnabled")
|
||||
@Composable
|
||||
fun WebReader(
|
||||
params: WebReaderParams,
|
||||
preferences: WebPreferences,
|
||||
styledContent: String,
|
||||
webReaderViewModel: WebReaderViewModel
|
||||
) {
|
||||
val javascriptActionLoopUUID: UUID by webReaderViewModel
|
||||
@ -39,14 +39,6 @@ fun WebReader(
|
||||
.observeAsState(UUID.randomUUID())
|
||||
|
||||
WebView.setWebContentsDebuggingEnabled(true)
|
||||
|
||||
val webReaderContent = WebReaderContent(
|
||||
preferences = preferences,
|
||||
item = params.item,
|
||||
articleContent = params.articleContent,
|
||||
)
|
||||
|
||||
val styledContent = webReaderContent.styledContent()
|
||||
val isInDarkMode = preferences.themeKey == "Dark" || preferences.themeKey == "Black"
|
||||
|
||||
Box {
|
||||
|
||||
@ -122,17 +122,29 @@ fun WebReaderLoadingContainer(slug: String? = null, requestID: String? = null, o
|
||||
webReaderViewModel.maxToolbarHeightPx = with(LocalDensity.current) { maxToolbarHeight.roundToPx().toFloat() }
|
||||
webReaderViewModel.loadItem(slug = slug, requestID = requestID)
|
||||
|
||||
val styledContent =
|
||||
if (webReaderParams != null) {
|
||||
val webReaderContent = WebReaderContent(
|
||||
preferences = webReaderViewModel.storedWebPreferences(isSystemInDarkTheme()),
|
||||
item = webReaderParams!!.item,
|
||||
articleContent = webReaderParams!!.articleContent,
|
||||
)
|
||||
webReaderContent.styledContent()
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.systemBarsPadding()
|
||||
.background(color = backgroundColor)
|
||||
) {
|
||||
if (webReaderParams != null) {
|
||||
if (styledContent != null) {
|
||||
WebReader(
|
||||
webReaderParams!!,
|
||||
webReaderViewModel.storedWebPreferences(isSystemInDarkTheme()),
|
||||
webReaderViewModel
|
||||
preferences = webReaderViewModel.storedWebPreferences(isSystemInDarkTheme()),
|
||||
styledContent = styledContent,
|
||||
webReaderViewModel = webReaderViewModel
|
||||
)
|
||||
|
||||
TopAppBar(
|
||||
|
||||
@ -266,6 +266,7 @@ class WebReaderViewModel @Inject constructor(
|
||||
val storedWebFont = WebFont.values().first { it.rawValue == storedFontFamily }
|
||||
|
||||
val prefersHighContrastFont = datastoreRepo.getString(DatastoreKeys.prefersWebHighContrastText) == "true"
|
||||
val prefersJustifyText = datastoreRepo.getString(DatastoreKeys.prefersJustifyText) == "true"
|
||||
|
||||
WebPreferences(
|
||||
textFontSize = storedFontSize ?: 12,
|
||||
@ -274,7 +275,8 @@ class WebReaderViewModel @Inject constructor(
|
||||
themeKey = themeKey(isDarkMode, storedThemePreference),
|
||||
storedThemePreference = storedThemePreference,
|
||||
fontFamily = storedWebFont,
|
||||
prefersHighContrastText = prefersHighContrastFont
|
||||
prefersHighContrastText = prefersHighContrastFont,
|
||||
prefersJustifyText = prefersJustifyText
|
||||
)
|
||||
}
|
||||
|
||||
@ -352,6 +354,14 @@ class WebReaderViewModel @Inject constructor(
|
||||
enqueueScript(script)
|
||||
}
|
||||
|
||||
fun updateJustifyText(justifyText: Boolean) {
|
||||
runBlocking {
|
||||
datastoreRepo.putString(DatastoreKeys.prefersJustifyText, justifyText.toString())
|
||||
}
|
||||
val script = "var event = new Event('updateJustifyText');event.justifyText = $justifyText;document.dispatchEvent(event);"
|
||||
enqueueScript(script)
|
||||
}
|
||||
|
||||
fun applyWebFont(font: WebFont) {
|
||||
runBlocking {
|
||||
datastoreRepo.putString(DatastoreKeys.preferredWebFontFamily, font.rawValue)
|
||||
|
||||
Reference in New Issue
Block a user