mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
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:
parent
7d04a9811e
commit
94bf4515ac
5 changed files with 46 additions and 15 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue