Skip to content

Commit

Permalink
[optimize|refactor] Support configure days for "Auto delete" (#26); r…
Browse files Browse the repository at this point in the history
…ewrite the "Auto delete" screen using Compose
  • Loading branch information
SkyD666 committed May 31, 2024
1 parent ff6d4bb commit ad555a1
Show file tree
Hide file tree
Showing 14 changed files with 359 additions and 147 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ android {
minSdk = 24
targetSdk = 34
versionCode = 16
versionName = "1.1-beta40"
versionName = "1.1-beta41"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

Expand Down
8 changes: 8 additions & 0 deletions app/src/main/java/com/skyd/anivu/ext/PreferenceExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ import com.skyd.anivu.model.preference.appearance.NavigationBarLabelPreference
import com.skyd.anivu.model.preference.appearance.TextFieldStylePreference
import com.skyd.anivu.model.preference.appearance.ThemePreference
import com.skyd.anivu.model.preference.appearance.feed.FeedGroupExpandPreference
import com.skyd.anivu.model.preference.autodelete.AutoDeleteArticleBeforePreference
import com.skyd.anivu.model.preference.autodelete.AutoDeleteArticleFrequencyPreference
import com.skyd.anivu.model.preference.autodelete.UseAutoDeletePreference
import com.skyd.anivu.model.preference.behavior.article.ArticleSwipeLeftActionPreference
import com.skyd.anivu.model.preference.behavior.article.ArticleTapActionPreference
import com.skyd.anivu.model.preference.behavior.article.DeduplicateTitleInDescPreference
Expand Down Expand Up @@ -42,5 +45,10 @@ fun Preferences.toSettings(): Settings {
playerShow85sButton = PlayerShow85sButtonPreference.fromPreferences(this),
playerShowScreenshotButton = PlayerShowScreenshotButtonPreference.fromPreferences(this),
hardwareDecode = HardwareDecodePreference.fromPreferences(this),

// Data
useAutoDelete = UseAutoDeletePreference.fromPreferences(this),
autoDeleteArticleFrequency = AutoDeleteArticleFrequencyPreference.fromPreferences(this),
autoDeleteArticleBefore = AutoDeleteArticleBeforePreference.fromPreferences(this),
)
}
14 changes: 14 additions & 0 deletions app/src/main/java/com/skyd/anivu/model/preference/Settings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ import com.skyd.anivu.model.preference.appearance.NavigationBarLabelPreference
import com.skyd.anivu.model.preference.appearance.TextFieldStylePreference
import com.skyd.anivu.model.preference.appearance.ThemePreference
import com.skyd.anivu.model.preference.appearance.feed.FeedGroupExpandPreference
import com.skyd.anivu.model.preference.autodelete.AutoDeleteArticleBeforePreference
import com.skyd.anivu.model.preference.autodelete.AutoDeleteArticleFrequencyPreference
import com.skyd.anivu.model.preference.autodelete.UseAutoDeletePreference
import com.skyd.anivu.model.preference.behavior.article.ArticleSwipeLeftActionPreference
import com.skyd.anivu.model.preference.behavior.article.ArticleTapActionPreference
import com.skyd.anivu.model.preference.behavior.article.DeduplicateTitleInDescPreference
Expand All @@ -24,6 +27,8 @@ import com.skyd.anivu.model.preference.player.PlayerShow85sButtonPreference
import com.skyd.anivu.model.preference.player.PlayerShowScreenshotButtonPreference
import com.skyd.anivu.ui.local.LocalArticleSwipeLeftAction
import com.skyd.anivu.ui.local.LocalArticleTapAction
import com.skyd.anivu.ui.local.LocalAutoDeleteArticleBefore
import com.skyd.anivu.ui.local.LocalAutoDeleteArticleFrequency
import com.skyd.anivu.ui.local.LocalDarkMode
import com.skyd.anivu.ui.local.LocalDateStyle
import com.skyd.anivu.ui.local.LocalDeduplicateTitleInDesc
Expand All @@ -37,6 +42,7 @@ import com.skyd.anivu.ui.local.LocalPlayerShow85sButton
import com.skyd.anivu.ui.local.LocalPlayerShowScreenshotButton
import com.skyd.anivu.ui.local.LocalTextFieldStyle
import com.skyd.anivu.ui.local.LocalTheme
import com.skyd.anivu.ui.local.LocalUseAutoDelete
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.map

Expand All @@ -60,6 +66,10 @@ data class Settings(
val playerShow85sButton: Boolean = PlayerShow85sButtonPreference.default,
val playerShowScreenshotButton: Boolean = PlayerShowScreenshotButtonPreference.default,
val hardwareDecode: Boolean = HardwareDecodePreference.default,
// Data
val useAutoDelete: Boolean = UseAutoDeletePreference.default,
val autoDeleteArticleFrequency: Long = AutoDeleteArticleFrequencyPreference.default,
val autoDeleteArticleBefore: Long = AutoDeleteArticleBeforePreference.default,
)

@Composable
Expand Down Expand Up @@ -90,6 +100,10 @@ fun SettingsProvider(
LocalPlayerShow85sButton provides settings.playerShow85sButton,
LocalPlayerShowScreenshotButton provides settings.playerShowScreenshotButton,
LocalHardwareDecode provides settings.hardwareDecode,
// Data
LocalUseAutoDelete provides settings.useAutoDelete,
LocalAutoDeleteArticleFrequency provides settings.autoDeleteArticleFrequency,
LocalAutoDeleteArticleBefore provides settings.autoDeleteArticleBefore,
) {
content()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,31 +17,7 @@ import kotlin.time.Duration.Companion.milliseconds
object AutoDeleteArticleBeforePreference : BasePreference<Long> {
private const val AUTO_DELETE_ARTICLE_BEFORE = "autoDeleteArticleBefore"

val EVERY_1_DAY = 1.days.inWholeMilliseconds
val EVERY_2_DAY = 2.days.inWholeMilliseconds
val EVERY_3_DAY = 3.days.inWholeMilliseconds
val EVERY_5_DAY = 5.days.inWholeMilliseconds
val EVERY_7_DAY = 7.days.inWholeMilliseconds
val EVERY_10_DAY = 10.days.inWholeMilliseconds
val EVERY_15_DAY = 15.days.inWholeMilliseconds
val EVERY_20_DAY = 20.days.inWholeMilliseconds
val EVERY_40_DAY = 40.days.inWholeMilliseconds
val EVERY_60_DAY = 60.days.inWholeMilliseconds

val frequencies = listOf(
EVERY_1_DAY,
EVERY_2_DAY,
EVERY_3_DAY,
EVERY_5_DAY,
EVERY_7_DAY,
EVERY_10_DAY,
EVERY_15_DAY,
EVERY_20_DAY,
EVERY_40_DAY,
EVERY_60_DAY,
)

override val default = EVERY_5_DAY
override val default = 14.days.inWholeMilliseconds

val key = longPreferencesKey(AUTO_DELETE_ARTICLE_BEFORE)

Expand All @@ -53,19 +29,21 @@ object AutoDeleteArticleBeforePreference : BasePreference<Long> {

override fun fromPreferences(preferences: Preferences): Long = preferences[key] ?: default

fun toDisplayName(
fun toDisplayNameMilliseconds(
context: Context,
value: Long = context.dataStore.getOrDefault(this),
): String = when (value) {
EVERY_1_DAY, EVERY_2_DAY, EVERY_3_DAY,
EVERY_5_DAY, EVERY_7_DAY, EVERY_10_DAY,
EVERY_15_DAY, EVERY_20_DAY, EVERY_40_DAY,
EVERY_60_DAY -> context.resources.getQuantityString(
R.plurals.before_day,
value.milliseconds.inWholeDays.toInt(),
value.milliseconds.inWholeDays.toInt(),
)
milliseconds: Long = context.dataStore.getOrDefault(this),
): String = context.resources.getQuantityString(
R.plurals.before_day,
milliseconds.milliseconds.inWholeDays.toInt(),
milliseconds.milliseconds.inWholeDays.toInt(),
)

else -> context.getString(R.string.frequency_manual)
}
fun toDisplayNameDays(
context: Context,
days: Long = context.dataStore.getOrDefault(this).milliseconds.inWholeDays,
): String = context.resources.getQuantityString(
R.plurals.before_day,
days.toInt(),
days.toInt(),
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,7 @@ import kotlin.time.Duration.Companion.milliseconds
object AutoDeleteArticleFrequencyPreference : BasePreference<Long> {
private const val AUTO_DELETE_ARTICLE_FREQUENCY = "autoDeleteArticleFrequency"

val EVERY_1_DAY = 1.days.inWholeMilliseconds
val EVERY_2_DAY = 2.days.inWholeMilliseconds
val EVERY_3_DAY = 3.days.inWholeMilliseconds
val EVERY_5_DAY = 5.days.inWholeMilliseconds
val EVERY_7_DAY = 7.days.inWholeMilliseconds
val EVERY_10_DAY = 10.days.inWholeMilliseconds

val frequencies = listOf(
EVERY_1_DAY,
EVERY_2_DAY,
EVERY_3_DAY,
EVERY_5_DAY,
EVERY_7_DAY,
EVERY_10_DAY,
)

override val default = EVERY_5_DAY
override val default = 14.days.inWholeMilliseconds

val key = longPreferencesKey(AUTO_DELETE_ARTICLE_FREQUENCY)

Expand All @@ -45,17 +29,21 @@ object AutoDeleteArticleFrequencyPreference : BasePreference<Long> {

override fun fromPreferences(preferences: Preferences): Long = preferences[key] ?: default

fun toDisplayName(
fun toDisplayNameMilliseconds(
context: Context,
value: Long = context.dataStore.getOrDefault(this),
): String = when (value) {
EVERY_1_DAY, EVERY_2_DAY, EVERY_3_DAY,
EVERY_5_DAY, EVERY_7_DAY, EVERY_10_DAY -> context.resources.getQuantityString(
R.plurals.frequency_day,
value.milliseconds.inWholeDays.toInt(),
value.milliseconds.inWholeDays.toInt(),
)

else -> context.getString(R.string.frequency_manual)
}
milliseconds: Long = context.dataStore.getOrDefault(this),
): String = context.resources.getQuantityString(
R.plurals.frequency_day,
milliseconds.milliseconds.inWholeDays.toInt(),
milliseconds.milliseconds.inWholeDays.toInt(),
)

fun toDisplayNameDays(
context: Context,
days: Long = context.dataStore.getOrDefault(this).milliseconds.inWholeDays,
): String = context.resources.getQuantityString(
R.plurals.frequency_day,
days.toInt(),
days.toInt(),
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import androidx.compose.ui.window.DialogProperties
@Composable
fun AniVuDialog(
modifier: Modifier = Modifier,
visible: Boolean,
visible: Boolean = true,
properties: DialogProperties = DialogProperties(),
onDismissRequest: () -> Unit = {},
icon: @Composable (() -> Unit)? = {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.skyd.anivu.ui.component.dialog

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.Slider
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

@Composable
fun SliderDialog(
onDismissRequest: () -> Unit,
value: Float,
onValueChange: (Float) -> Unit,
valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
valueLabel: @Composable (() -> Unit)? = null,
icon: @Composable (() -> Unit)? = {
Icon(
imageVector = Icons.Outlined.Info,
contentDescription = null,
)
},
title: @Composable (() -> Unit)? = null,
confirmButton: @Composable () -> Unit,
dismissButton: @Composable (() -> Unit)? = null,
) {
AniVuDialog(
onDismissRequest = onDismissRequest,
icon = icon,
title = title,
text = {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
if (valueLabel != null) {
valueLabel()
Spacer(modifier = Modifier.height(12.dp))
}
Slider(
value = value,
onValueChange = onValueChange,
valueRange = valueRange,
)
}
},
selectable = false,
scrollable = false,
confirmButton = confirmButton,
dismissButton = dismissButton
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ class DataFragment : BasePreferenceFragmentCompat() {
}
Preference(this).apply {
key = "autoDeleteArticle"
title = getString(R.string.auto_delete_article_fragment_name)
title = getString(R.string.auto_delete_screen_name)
summary = getString(R.string.auto_delete_article_fragment_description)
setIcon(R.drawable.ic_auto_delete_24)
setOnPreferenceClickListener {
Expand Down
Loading

0 comments on commit ad555a1

Please sign in to comment.