summaryrefslogtreecommitdiff
path: root/app/src/main/java/org/terst/feedreader/ui/SettingsScreen.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/ui/SettingsScreen.kt')
-rw-r--r--app/src/main/java/org/terst/feedreader/ui/SettingsScreen.kt32
1 files changed, 28 insertions, 4 deletions
diff --git a/app/src/main/java/org/terst/feedreader/ui/SettingsScreen.kt b/app/src/main/java/org/terst/feedreader/ui/SettingsScreen.kt
index 5f8eca7..966d36b 100644
--- a/app/src/main/java/org/terst/feedreader/ui/SettingsScreen.kt
+++ b/app/src/main/java/org/terst/feedreader/ui/SettingsScreen.kt
@@ -27,6 +27,7 @@ import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
+import androidx.compose.material3.Slider
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
@@ -44,13 +45,16 @@ import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
import org.terst.feedreader.data.AppDatabase
+import org.terst.feedreader.data.DEFAULT_READER_FONT_SIZE_PX
import org.terst.feedreader.data.FeedEntity
import org.terst.feedreader.data.FilterAction
import org.terst.feedreader.data.FilterRuleEntity
import org.terst.feedreader.data.Net
+import org.terst.feedreader.data.READER_FONT_SIZE_RANGE_PX
import org.terst.feedreader.data.Settings
import org.terst.feedreader.stash.StashClient
import org.terst.feedreader.stash.StashVerifyResult
+import kotlin.math.roundToInt
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -65,9 +69,11 @@ fun SettingsScreen(onBack: () -> Unit) {
var stashKeyVisible by remember { mutableStateOf(false) }
var isVerifyingStash by remember { mutableStateOf(false) }
var stashStatus by remember { mutableStateOf<String?>(null) }
+ var fontSizePx by remember { mutableStateOf(DEFAULT_READER_FONT_SIZE_PX) }
LaunchedEffect(Unit) {
stashUrl = settings.stashBaseUrlNow()
stashKey = settings.stashApiKeyNow()
+ fontSizePx = settings.readerFontSizePxNow()
}
var newRulePattern by remember { mutableStateOf("") }
@@ -98,10 +104,9 @@ fun SettingsScreen(onBack: () -> Unit) {
Text("FeeDreader", style = MaterialTheme.typography.titleMedium)
Spacer(modifier = Modifier.height(4.dp))
Text(
- "If a site paywalls its own feed, that's the site's call. But this reader " +
- "won't go out of its way to help a soft paywall block you from reading " +
- "something you already subscribed to get -- reader mode extracts the " +
- "article you were sent, nothing more, nothing sneaky.",
+ "FeeDreader exists to avoid tracking, manipulation, and junk fees. If an " +
+ "article's full text is something you could just as easily find with a " +
+ "search, reader mode will pull it up here too.",
style = MaterialTheme.typography.bodyMedium
)
}
@@ -110,6 +115,25 @@ fun SettingsScreen(onBack: () -> Unit) {
item {
Column(modifier = Modifier.padding(16.dp)) {
+ Text("Reading", style = MaterialTheme.typography.titleMedium)
+ Spacer(modifier = Modifier.height(8.dp))
+ Text("Font size: ${fontSizePx}px", style = MaterialTheme.typography.bodyMedium)
+ Slider(
+ value = fontSizePx.toFloat(),
+ onValueChange = { fontSizePx = it.roundToInt() },
+ valueRange = READER_FONT_SIZE_RANGE_PX.first.toFloat()..READER_FONT_SIZE_RANGE_PX.last.toFloat(),
+ steps = READER_FONT_SIZE_RANGE_PX.last - READER_FONT_SIZE_RANGE_PX.first - 1,
+ // Persist on release, not on every onValueChange -- a drag crosses many
+ // integer values in a fraction of a second, and there's no reason to hit
+ // DataStore that often for a value nothing reads until the next article load.
+ onValueChangeFinished = { scope.launch { settings.setReaderFontSizePx(fontSizePx) } }
+ )
+ }
+ HorizontalDivider()
+ }
+
+ item {
+ Column(modifier = Modifier.padding(16.dp)) {
Text("Stash", style = MaterialTheme.typography.titleMedium)
Spacer(modifier = Modifier.height(8.dp))
OutlinedTextField(