Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package me.ash.reader.infrastructure.preference

import android.content.Context
import androidx.compose.runtime.compositionLocalOf
import androidx.datastore.preferences.core.Preferences
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import me.ash.reader.ui.ext.DataStoreKey
import me.ash.reader.ui.ext.DataStoreKey.Companion.flowArticleListDateHeader
import me.ash.reader.ui.ext.dataStore
import me.ash.reader.ui.ext.put


val LocalFlowArticleListDateHeader =
compositionLocalOf<FlowArticleListDateHeaderPreference>{
FlowArticleListDateHeaderPreference.default
}

sealed class FlowArticleListDateHeaderPreference(val value : Boolean) : Preference() {

object ON : FlowArticleListDateHeaderPreference(true)
object OFF : FlowArticleListDateHeaderPreference(false)
override fun put(
context: Context,
scope: CoroutineScope
) {
scope.launch {
context.dataStore.put(
DataStoreKey.flowArticleListDateHeader,
value
)
}
}

companion object {

val default = ON
val values = listOf(ON, OFF)

fun fromPreferences(preferences: Preferences) =
when (preferences[DataStoreKey.keys[flowArticleListDateHeader]?.key as
Preferences.Key<Boolean>]) {
true -> ON
false -> OFF
else -> default
}
}
}

operator fun FlowArticleListDateHeaderPreference.not(): FlowArticleListDateHeaderPreference =
when (value) {
true -> FlowArticleListDateHeaderPreference.OFF
false -> FlowArticleListDateHeaderPreference.ON
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ fun Preferences.toSettings(): Settings {
flowArticleListImage = FlowArticleListImagePreference.fromPreferences(this),
flowArticleListDesc = FlowArticleListDescPreference.fromPreferences(this),
flowArticleListTime = FlowArticleListTimePreference.fromPreferences(this),
flowArticleListDateHeader = FlowArticleListDateHeaderPreference.fromPreferences(this),
flowArticleListDateStickyHeader = FlowArticleListDateStickyHeaderPreference.fromPreferences(
this
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ data class Settings(
val flowArticleListImage: FlowArticleListImagePreference = FlowArticleListImagePreference.default,
val flowArticleListDesc: FlowArticleListDescPreference = FlowArticleListDescPreference.default,
val flowArticleListTime: FlowArticleListTimePreference = FlowArticleListTimePreference.default,
val flowArticleListDateHeader: FlowArticleListDateHeaderPreference = FlowArticleListDateHeaderPreference.default,
val flowArticleListDateStickyHeader: FlowArticleListDateStickyHeaderPreference = FlowArticleListDateStickyHeaderPreference.default,
val flowArticleListTonalElevation: FlowArticleListTonalElevationPreference = FlowArticleListTonalElevationPreference.default,
val flowArticleListReadIndicator: FlowArticleReadIndicatorPreference = FlowArticleReadIndicatorPreference.default,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ class SettingsProvider @Inject constructor(
LocalFlowArticleListImage provides settings.flowArticleListImage,
LocalFlowArticleListDesc provides settings.flowArticleListDesc,
LocalFlowArticleListTime provides settings.flowArticleListTime,
LocalFlowArticleListDateHeader provides settings.flowArticleListDateHeader,
LocalFlowArticleListDateStickyHeader provides settings.flowArticleListDateStickyHeader,
LocalFlowArticleListTonalElevation provides settings.flowArticleListTonalElevation,
LocalFlowFilterBarStyle provides settings.flowFilterBarStyle,
Expand Down
10 changes: 10 additions & 0 deletions app/src/main/java/me/ash/reader/ui/ext/DataStoreExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ sealed interface PreferencesKey {
const val flowArticleListImage = "flowArticleListImage"
const val flowArticleListDesc = "flowArticleListDescription"
const val flowArticleListTime = "flowArticleListTime"
const val flowArticleListDateHeader = "flowArticleListDateHeader"
const val flowArticleListDateStickyHeader = "flowArticleListDateStickyHeader"
const val flowArticleListTonalElevation = "flowArticleListTonalElevation"
const val flowArticleListReadIndicator = "flowArticleListReadStatusIndicator"
Expand Down Expand Up @@ -235,6 +236,7 @@ sealed interface PreferencesKey {
BooleanKey(flowArticleListImage),
BooleanKey(flowArticleListDesc),
BooleanKey(flowArticleListTime),
BooleanKey(flowArticleListDateHeader),
BooleanKey(flowArticleListDateStickyHeader),
IntKey(flowArticleListTonalElevation),
IntKey(flowArticleListReadIndicator),
Expand Down Expand Up @@ -319,6 +321,7 @@ data class DataStoreKey<T>(val key: Preferences.Key<T>, val type: Class<T>) {
const val flowArticleListImage = "flowArticleListImage"
const val flowArticleListDesc = "flowArticleListDescription"
const val flowArticleListTime = "flowArticleListTime"
const val flowArticleListDateHeader = "flowArticleListDateHeader"
const val flowArticleListDateStickyHeader = "flowArticleListDateStickyHeader"
const val flowArticleListTonalElevation = "flowArticleListTonalElevation"
const val flowArticleListReadIndicator = "flowArticleListReadStatusIndicator"
Expand Down Expand Up @@ -429,6 +432,13 @@ data class DataStoreKey<T>(val key: Preferences.Key<T>, val type: Class<T>) {
DataStoreKey(booleanPreferencesKey(flowArticleListDesc), Boolean::class.java),
flowArticleListTime to
DataStoreKey(booleanPreferencesKey(flowArticleListTime), Boolean::class.java),

flowArticleListDateHeader to
DataStoreKey(
booleanPreferencesKey(flowArticleListDateHeader),
Boolean::class.java
),

flowArticleListDateStickyHeader to
DataStoreKey(
booleanPreferencesKey(flowArticleListDateStickyHeader),
Expand Down
21 changes: 13 additions & 8 deletions app/src/main/java/me/ash/reader/ui/page/home/flow/ArticleList.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ fun LazyListScope.ArticleList(
diffMap: Map<String, Diff>,
isShowFeedIcon: Boolean,
isShowStickyHeader: Boolean,
isShowDateHeader: Boolean = true,
articleListTonalElevation: Int,
isSwipeEnabled: () -> Boolean = { false },
isMenuEnabled: Boolean = true,
Expand Down Expand Up @@ -61,10 +62,12 @@ fun LazyListScope.ArticleList(
}

is ArticleFlowItem.Date -> {
if (item.showSpacer) {
Spacer(modifier = Modifier.height(32.dp))
if (isShowDateHeader) {
if (item.showSpacer) {
Spacer(modifier = Modifier.height(32.dp))
}
StickyHeader(item.date, isShowFeedIcon, articleListTonalElevation)
}
StickyHeader(item.date, isShowFeedIcon, articleListTonalElevation)
}

else -> {}
Expand Down Expand Up @@ -96,11 +99,13 @@ fun LazyListScope.ArticleList(
}

is ArticleFlowItem.Date -> {
if (item.showSpacer) {
item { Spacer(modifier = Modifier.height(32.dp)) }
}
stickyHeader(key = key(item), contentType = contentType(item)) {
StickyHeader(item.date, isShowFeedIcon, articleListTonalElevation)
if (isShowDateHeader) {
if (item.showSpacer) {
item { Spacer(modifier = Modifier.height(32.dp)) }
}
stickyHeader(key = key(item), contentType = contentType(item)) {
StickyHeader(item.date, isShowFeedIcon, articleListTonalElevation)
}
}
}

Expand Down
3 changes: 3 additions & 0 deletions app/src/main/java/me/ash/reader/ui/page/home/flow/FlowPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ import me.ash.reader.R
import me.ash.reader.domain.data.PagerData
import me.ash.reader.domain.model.article.ArticleFlowItem
import me.ash.reader.domain.model.article.ArticleWithFeed
import me.ash.reader.infrastructure.preference.LocalFlowArticleListDateHeader
import me.ash.reader.infrastructure.preference.LocalFlowArticleListDateStickyHeader
import me.ash.reader.infrastructure.preference.LocalFlowArticleListFeedIcon
import me.ash.reader.infrastructure.preference.LocalFlowArticleListTonalElevation
Expand Down Expand Up @@ -125,6 +126,7 @@ fun FlowPage(
val keyboardController = LocalSoftwareKeyboardController.current
val articleListTonalElevation = LocalFlowArticleListTonalElevation.current
val articleListFeedIcon = LocalFlowArticleListFeedIcon.current
val articleListDateHeader = LocalFlowArticleListDateHeader.current
val articleListDateStickyHeader = LocalFlowArticleListDateStickyHeader.current
val topBarTonalElevation = LocalFlowTopBarTonalElevation.current
val filterBarStyle = LocalFlowFilterBarStyle.current
Expand Down Expand Up @@ -669,6 +671,7 @@ fun FlowPage(
pagingItems = pagingItems,
diffMap = viewModel.diffMapHolder.diffMap,
isShowFeedIcon = articleListFeedIcon.value,
isShowDateHeader = articleListDateHeader.value,
isShowStickyHeader = articleListDateStickyHeader.value,
articleListTonalElevation = articleListTonalElevation.value,
isSwipeEnabled = { listState.isScrollInProgress },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ fun FlowPageStylePage(
val articleListImage = LocalFlowArticleListImage.current
val articleListDesc = LocalFlowArticleListDesc.current
val articleListTime = LocalFlowArticleListTime.current
val articleListDateHeader = LocalFlowArticleListDateHeader.current
val articleListStickyDate = LocalFlowArticleListDateStickyHeader.current
val articleListTonalElevation = LocalFlowArticleListTonalElevation.current
val articleListReadIndicator = LocalFlowArticleListReadIndicator.current
Expand Down Expand Up @@ -177,13 +178,27 @@ fun FlowPageStylePage(
(!articleListTime).put(context, scope)
}
}
SettingItem(
title = stringResource(R.string.article_date_header),
onClick = {
(!articleListDateHeader).put(context, scope)
},
) {
RYSwitch(activated = articleListDateHeader.value) {
(!articleListDateHeader).put(context, scope)
}
}
SettingItem(
title = stringResource(R.string.article_date_sticky_header),
enabled = articleListDateHeader.value,
onClick = {
(!articleListStickyDate).put(context, scope)
},
) {
RYSwitch(activated = articleListStickyDate.value) {
RYSwitch(
activated = articleListStickyDate.value,
enable = articleListDateHeader.value,
) {
(!articleListStickyDate).put(context, scope)
}
}
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@
<string name="article_images">Article images</string>
<string name="feed_names">Feed names</string>
<string name="feed_favicons">Feed favicons</string>
<string name="article_date_header">Publication date header</string>
<string name="article_date_sticky_header">Sticky publication date header</string>
<string name="article_list">Article list</string>
<string name="group_list">Group list</string>
Expand Down
Loading