Skip to content

Commit b4474f5

Browse files
committed
feat: subs settings action
1 parent 8e3246a commit b4474f5

File tree

5 files changed

+66
-18
lines changed

5 files changed

+66
-18
lines changed

app/src/main/kotlin/li/songe/gkd/ui/component/TextMenu.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import li.songe.gkd.util.allSubObject
2424

2525
@Composable
2626
fun <T> TextMenu(
27+
modifier: Modifier = Modifier,
2728
title: String,
2829
option: Option<T>,
2930
onOptionChange: ((Option<T>) -> Unit),
@@ -34,8 +35,13 @@ fun <T> TextMenu(
3435
.clickable {
3536
expanded = true
3637
}
37-
.fillMaxWidth()
38-
.itemPadding(),
38+
.fillMaxWidth().let {
39+
if (modifier == Modifier) {
40+
it.itemPadding()
41+
} else {
42+
it.then(modifier)
43+
}
44+
},
3945
verticalAlignment = Alignment.CenterVertically,
4046
horizontalArrangement = Arrangement.SpaceBetween
4147
) {

app/src/main/kotlin/li/songe/gkd/ui/home/SettingsPage.kt

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ import li.songe.gkd.util.DarkThemeOption
5656
import li.songe.gkd.util.LocalMainViewModel
5757
import li.songe.gkd.util.LocalNavController
5858
import li.songe.gkd.util.UpdateChannelOption
59-
import li.songe.gkd.util.UpdateTimeOption
6059
import li.songe.gkd.util.checkUpdate
6160
import li.songe.gkd.util.findOption
6261
import li.songe.gkd.util.launchAsFn
@@ -313,21 +312,14 @@ fun useSettingsPage(): ScaffoldExt {
313312
})
314313
}
315314

316-
Text(
317-
text = "更新",
318-
modifier = Modifier.titleItemPadding(),
319-
style = MaterialTheme.typography.titleSmall,
320-
color = MaterialTheme.colorScheme.primary,
321-
)
322-
323-
TextMenu(
324-
title = "更新订阅",
325-
option = UpdateTimeOption.allSubObject.findOption(store.updateSubsInterval)
326-
) {
327-
storeFlow.update { s -> s.copy(updateSubsInterval = it.value) }
328-
}
329-
330315
if (BuildConfig.ENABLED_UPDATE) {
316+
Text(
317+
text = "更新",
318+
modifier = Modifier.titleItemPadding(),
319+
style = MaterialTheme.typography.titleSmall,
320+
color = MaterialTheme.colorScheme.primary,
321+
)
322+
331323
TextSwitch(
332324
name = "自动更新",
333325
desc = "打开应用时检测新版本",

app/src/main/kotlin/li/songe/gkd/ui/home/SubsManagePage.kt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,15 @@ import androidx.compose.ui.Alignment
5151
import androidx.compose.ui.Modifier
5252
import androidx.compose.ui.input.nestedscroll.nestedScroll
5353
import androidx.compose.ui.platform.LocalContext
54+
import androidx.compose.ui.res.painterResource
5455
import androidx.compose.ui.unit.dp
5556
import androidx.compose.ui.window.Dialog
5657
import androidx.hilt.navigation.compose.hiltViewModel
5758
import androidx.lifecycle.viewModelScope
5859
import com.dylanc.activityresult.launcher.launchForResult
5960
import kotlinx.collections.immutable.toImmutableList
6061
import kotlinx.coroutines.Dispatchers
62+
import kotlinx.coroutines.flow.update
6163
import kotlinx.coroutines.launch
6264
import li.songe.gkd.MainActivity
6365
import li.songe.gkd.data.Value
@@ -66,16 +68,22 @@ import li.songe.gkd.data.exportData
6668
import li.songe.gkd.data.importData
6769
import li.songe.gkd.db.DbSet
6870
import li.songe.gkd.ui.component.SubsItemCard
71+
import li.songe.gkd.ui.component.TextMenu
6972
import li.songe.gkd.ui.component.waitResult
73+
import li.songe.gkd.ui.style.itemVerticalPadding
7074
import li.songe.gkd.util.LOCAL_SUBS_ID
7175
import li.songe.gkd.util.LocalLauncher
7276
import li.songe.gkd.util.LocalMainViewModel
77+
import li.songe.gkd.util.SafeR
78+
import li.songe.gkd.util.UpdateTimeOption
7379
import li.songe.gkd.util.checkSubsUpdate
80+
import li.songe.gkd.util.findOption
7481
import li.songe.gkd.util.isSafeUrl
7582
import li.songe.gkd.util.launchAsFn
7683
import li.songe.gkd.util.launchTry
7784
import li.songe.gkd.util.saveFileToDownloads
7885
import li.songe.gkd.util.shareFile
86+
import li.songe.gkd.util.storeFlow
7987
import li.songe.gkd.util.subsIdToRawFlow
8088
import li.songe.gkd.util.subsItemsFlow
8189
import li.songe.gkd.util.subsRefreshingFlow
@@ -181,6 +189,29 @@ fun useSubsManagePage(): ScaffoldExt {
181189
})
182190
}
183191

192+
var showSettingsDlg by remember { mutableStateOf(false) }
193+
if (showSettingsDlg) {
194+
AlertDialog(
195+
onDismissRequest = { showSettingsDlg = false },
196+
title = { Text("订阅设置") },
197+
text = {
198+
val store by storeFlow.collectAsState()
199+
TextMenu(
200+
modifier = Modifier.padding(0.dp, itemVerticalPadding),
201+
title = "更新订阅",
202+
option = UpdateTimeOption.allSubObject.findOption(store.updateSubsInterval)
203+
) {
204+
storeFlow.update { s -> s.copy(updateSubsInterval = it.value) }
205+
}
206+
},
207+
confirmButton = {
208+
TextButton(onClick = { showSettingsDlg = false }) {
209+
Text("关闭")
210+
}
211+
}
212+
)
213+
}
214+
184215
ShareDataDialog(vm)
185216

186217
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
@@ -254,6 +285,14 @@ fun useSubsManagePage(): ScaffoldExt {
254285
)
255286
}
256287
} else {
288+
IconButton(onClick = {
289+
showSettingsDlg = true
290+
}) {
291+
Icon(
292+
painter = painterResource(id = SafeR.ic_page_info),
293+
contentDescription = null,
294+
)
295+
}
257296
IconButton(onClick = {
258297
if (subsRefreshingFlow.value) {
259298
toast("正在刷新订阅,请稍后操作")

app/src/main/kotlin/li/songe/gkd/util/SafeR.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import li.songe.gkd.R
55
/**
66
* ![image](https://github.com/gkd-kit/gkd/assets/38517192/c9325110-d90f-4041-a01d-404d14c5d34d)
77
*/
8-
@Suppress("UNRESOLVED_REFERENCE")
8+
@Suppress("UNRESOLVED_REFERENCE") // fix android studio can't find R
99
object SafeR {
1010
val app_name: Int = R.string.app_name
1111
val ic_status: Int = R.drawable.ic_status
12+
val ic_page_info: Int = R.drawable.ic_page_info
1213
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M710,810Q647,810 603.5,766.5Q560,723 560,660Q560,597 603.5,553.5Q647,510 710,510Q773,510 816.5,553.5Q860,597 860,660Q860,723 816.5,766.5Q773,810 710,810ZM710,730Q739,730 759.5,709.5Q780,689 780,660Q780,631 759.5,610.5Q739,590 710,590Q681,590 660.5,610.5Q640,631 640,660Q640,689 660.5,709.5Q681,730 710,730ZM160,700L160,620L480,620L480,700L160,700ZM250,450Q187,450 143.5,406.5Q100,363 100,300Q100,237 143.5,193.5Q187,150 250,150Q313,150 356.5,193.5Q400,237 400,300Q400,363 356.5,406.5Q313,450 250,450ZM250,370Q279,370 299.5,349.5Q320,329 320,300Q320,271 299.5,250.5Q279,230 250,230Q221,230 200.5,250.5Q180,271 180,300Q180,329 200.5,349.5Q221,370 250,370ZM480,340L480,260L800,260L800,340L480,340ZM710,660Q710,660 710,660Q710,660 710,660Q710,660 710,660Q710,660 710,660Q710,660 710,660Q710,660 710,660Q710,660 710,660Q710,660 710,660ZM250,300Q250,300 250,300Q250,300 250,300Q250,300 250,300Q250,300 250,300Q250,300 250,300Q250,300 250,300Q250,300 250,300Q250,300 250,300Z"/>
10+
</vector>

0 commit comments

Comments
 (0)