mirror of
https://github.com/gkd-kit/gkd.git
synced 2024-11-16 11:42:22 +08:00
perf: update time interval
This commit is contained in:
parent
262559fe53
commit
526a67bf78
|
@ -47,6 +47,7 @@ import li.songe.gkd.shizuku.shizukuIsSafeOK
|
||||||
import li.songe.gkd.shizuku.useSafeGetTasksFc
|
import li.songe.gkd.shizuku.useSafeGetTasksFc
|
||||||
import li.songe.gkd.shizuku.useSafeInputTapFc
|
import li.songe.gkd.shizuku.useSafeInputTapFc
|
||||||
import li.songe.gkd.shizuku.useShizukuAliveState
|
import li.songe.gkd.shizuku.useShizukuAliveState
|
||||||
|
import li.songe.gkd.ui.home.UpdateTimeOption
|
||||||
import li.songe.gkd.util.VOLUME_CHANGED_ACTION
|
import li.songe.gkd.util.VOLUME_CHANGED_ACTION
|
||||||
import li.songe.gkd.util.checkSubsUpdate
|
import li.songe.gkd.util.checkSubsUpdate
|
||||||
import li.songe.gkd.util.launchTry
|
import li.songe.gkd.util.launchTry
|
||||||
|
@ -387,7 +388,7 @@ class GkdAbService : CompositionAbService({
|
||||||
val i = storeFlow.value.updateSubsInterval
|
val i = storeFlow.value.updateSubsInterval
|
||||||
if (i <= 0) return@onAccessibilityEvent
|
if (i <= 0) return@onAccessibilityEvent
|
||||||
val t = System.currentTimeMillis()
|
val t = System.currentTimeMillis()
|
||||||
if (t - lastUpdateSubsTime > i.coerceAtLeast(60 * 60_000)) {
|
if (t - lastUpdateSubsTime > i.coerceAtLeast(UpdateTimeOption.Everyday.value)) {
|
||||||
lastUpdateSubsTime = t
|
lastUpdateSubsTime = t
|
||||||
checkSubsUpdate()
|
checkSubsUpdate()
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,13 +58,18 @@ import li.songe.gkd.data.CategoryConfig
|
||||||
import li.songe.gkd.data.RawSubscription
|
import li.songe.gkd.data.RawSubscription
|
||||||
import li.songe.gkd.db.DbSet
|
import li.songe.gkd.db.DbSet
|
||||||
import li.songe.gkd.ui.component.getDialogResult
|
import li.songe.gkd.ui.component.getDialogResult
|
||||||
import li.songe.gkd.ui.home.enableGroupRadioOptions
|
|
||||||
import li.songe.gkd.util.LocalNavController
|
import li.songe.gkd.util.LocalNavController
|
||||||
import li.songe.gkd.util.ProfileTransitions
|
import li.songe.gkd.util.ProfileTransitions
|
||||||
import li.songe.gkd.util.launchTry
|
import li.songe.gkd.util.launchTry
|
||||||
import li.songe.gkd.util.toast
|
import li.songe.gkd.util.toast
|
||||||
import li.songe.gkd.util.updateSubscription
|
import li.songe.gkd.util.updateSubscription
|
||||||
|
|
||||||
|
val enableGroupRadioOptions = arrayOf(
|
||||||
|
"跟随订阅" to null,
|
||||||
|
"全部启用" to true,
|
||||||
|
"全部关闭" to false,
|
||||||
|
)
|
||||||
|
|
||||||
@RootNavGraph
|
@RootNavGraph
|
||||||
@Destination(style = ProfileTransitions::class)
|
@Destination(style = ProfileTransitions::class)
|
||||||
@Composable
|
@Composable
|
||||||
|
|
|
@ -46,6 +46,7 @@ import com.blankj.utilcode.util.ClipboardUtils
|
||||||
import com.blankj.utilcode.util.LogUtils
|
import com.blankj.utilcode.util.LogUtils
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.flow.update
|
||||||
import li.songe.gkd.MainActivity
|
import li.songe.gkd.MainActivity
|
||||||
import li.songe.gkd.appScope
|
import li.songe.gkd.appScope
|
||||||
import li.songe.gkd.ui.component.SettingItem
|
import li.songe.gkd.ui.component.SettingItem
|
||||||
|
@ -102,26 +103,25 @@ fun useSettingsPage(): ScaffoldExt {
|
||||||
.padding(16.dp),
|
.padding(16.dp),
|
||||||
shape = RoundedCornerShape(16.dp),
|
shape = RoundedCornerShape(16.dp),
|
||||||
) {
|
) {
|
||||||
updateTimeRadioOptions.forEach { option ->
|
UpdateTimeOption.allSubObject.forEach { option ->
|
||||||
Row(
|
Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.selectable(selected = (option.second == store.updateSubsInterval),
|
.selectable(
|
||||||
|
selected = (option.value == store.updateSubsInterval),
|
||||||
onClick = {
|
onClick = {
|
||||||
storeFlow.value =
|
storeFlow.update { it.copy(updateSubsInterval = option.value) }
|
||||||
store.copy(updateSubsInterval = option.second)
|
|
||||||
|
|
||||||
})
|
})
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp)
|
||||||
) {
|
) {
|
||||||
RadioButton(
|
RadioButton(
|
||||||
selected = (option.second == store.updateSubsInterval),
|
selected = (option.value == store.updateSubsInterval),
|
||||||
onClick = {
|
onClick = {
|
||||||
storeFlow.value = store.copy(updateSubsInterval = option.second)
|
storeFlow.update { it.copy(updateSubsInterval = option.value) }
|
||||||
})
|
})
|
||||||
Text(
|
Text(
|
||||||
text = option.first, modifier = Modifier.padding(start = 16.dp)
|
text = option.label, modifier = Modifier.padding(start = 16.dp)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -376,7 +376,7 @@ fun useSettingsPage(): ScaffoldExt {
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = updateTimeRadioOptions.find { it.second == store.updateSubsInterval }?.first
|
text = UpdateTimeOption.allSubObject.find { it.value == store.updateSubsInterval }?.label
|
||||||
?: store.updateSubsInterval.toString(), fontSize = 14.sp
|
?: store.updateSubsInterval.toString(), fontSize = 14.sp
|
||||||
)
|
)
|
||||||
Icon(
|
Icon(
|
||||||
|
@ -478,21 +478,19 @@ fun useSettingsPage(): ScaffoldExt {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val updateTimeRadioOptions = listOf(
|
sealed class UpdateTimeOption(val value: Long, val label: String) {
|
||||||
"暂停" to -1L,
|
data object Pause : UpdateTimeOption(-1, "暂停")
|
||||||
"每小时" to 60 * 60_000L,
|
data object Everyday : UpdateTimeOption(24 * 60 * 60_000, "每天")
|
||||||
"每6小时" to 6 * 60 * 60_000L,
|
data object Every3Days : UpdateTimeOption(24 * 60 * 60_000 * 3, "每3天")
|
||||||
"每12小时" to 12 * 60 * 60_000L,
|
data object Every7Days : UpdateTimeOption(24 * 60 * 60_000 * 7, "每7天")
|
||||||
"每天" to 24 * 60 * 60_000L
|
|
||||||
)
|
|
||||||
|
|
||||||
private val darkThemeRadioOptions = listOf(
|
companion object {
|
||||||
|
val allSubObject by lazy { arrayOf(Pause, Everyday, Every3Days, Every7Days) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val darkThemeRadioOptions = arrayOf(
|
||||||
"跟随系统" to null,
|
"跟随系统" to null,
|
||||||
"启用" to true,
|
"启用" to true,
|
||||||
"关闭" to false,
|
"关闭" to false,
|
||||||
)
|
)
|
||||||
val enableGroupRadioOptions = listOf(
|
|
||||||
"跟随订阅" to null,
|
|
||||||
"全部启用" to true,
|
|
||||||
"全部关闭" to false,
|
|
||||||
)
|
|
|
@ -1,5 +1,6 @@
|
||||||
package li.songe.gkd.util
|
package li.songe.gkd.util
|
||||||
|
|
||||||
|
|
||||||
sealed class SortTypeOption(val value: Int, val label: String) {
|
sealed class SortTypeOption(val value: Int, val label: String) {
|
||||||
data object SortByName : SortTypeOption(0, "按名称")
|
data object SortByName : SortTypeOption(0, "按名称")
|
||||||
data object SortByAppMtime : SortTypeOption(1, "按更新时间")
|
data object SortByAppMtime : SortTypeOption(1, "按更新时间")
|
||||||
|
|
|
@ -10,6 +10,7 @@ import kotlinx.coroutines.withContext
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.encodeToString
|
import kotlinx.serialization.encodeToString
|
||||||
import li.songe.gkd.appScope
|
import li.songe.gkd.appScope
|
||||||
|
import li.songe.gkd.ui.home.UpdateTimeOption
|
||||||
|
|
||||||
private inline fun <reified T> createStorageFlow(
|
private inline fun <reified T> createStorageFlow(
|
||||||
key: String,
|
key: String,
|
||||||
|
@ -45,7 +46,7 @@ data class Store(
|
||||||
val excludeFromRecents: Boolean = false,
|
val excludeFromRecents: Boolean = false,
|
||||||
val captureScreenshot: Boolean = false,
|
val captureScreenshot: Boolean = false,
|
||||||
val httpServerPort: Int = 8888,
|
val httpServerPort: Int = 8888,
|
||||||
val updateSubsInterval: Long = 6 * 60 * 60_000L,
|
val updateSubsInterval: Long = UpdateTimeOption.Everyday.value,
|
||||||
val captureVolumeChange: Boolean = false,
|
val captureVolumeChange: Boolean = false,
|
||||||
val autoCheckAppUpdate: Boolean = true,
|
val autoCheckAppUpdate: Boolean = true,
|
||||||
val toastWhenClick: Boolean = true,
|
val toastWhenClick: Boolean = true,
|
||||||
|
@ -63,7 +64,15 @@ data class Store(
|
||||||
)
|
)
|
||||||
|
|
||||||
val storeFlow by lazy {
|
val storeFlow by lazy {
|
||||||
createStorageFlow("store-v2") { Store() }
|
createStorageFlow("store-v2") { Store() }.apply {
|
||||||
|
if (UpdateTimeOption.allSubObject.all { it.value != value.updateSubsInterval }) {
|
||||||
|
update {
|
||||||
|
it.copy(
|
||||||
|
updateSubsInterval = UpdateTimeOption.Everyday.value
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
|
Loading…
Reference in New Issue
Block a user