mirror of
https://github.com/gkd-kit/gkd.git
synced 2024-11-16 03:32:38 +08:00
This commit is contained in:
parent
8e3246a9a6
commit
b4474f5041
|
@ -24,6 +24,7 @@ import li.songe.gkd.util.allSubObject
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun <T> TextMenu(
|
fun <T> TextMenu(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
title: String,
|
title: String,
|
||||||
option: Option<T>,
|
option: Option<T>,
|
||||||
onOptionChange: ((Option<T>) -> Unit),
|
onOptionChange: ((Option<T>) -> Unit),
|
||||||
|
@ -34,8 +35,13 @@ fun <T> TextMenu(
|
||||||
.clickable {
|
.clickable {
|
||||||
expanded = true
|
expanded = true
|
||||||
}
|
}
|
||||||
.fillMaxWidth()
|
.fillMaxWidth().let {
|
||||||
.itemPadding(),
|
if (modifier == Modifier) {
|
||||||
|
it.itemPadding()
|
||||||
|
} else {
|
||||||
|
it.then(modifier)
|
||||||
|
}
|
||||||
|
},
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.SpaceBetween
|
horizontalArrangement = Arrangement.SpaceBetween
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -56,7 +56,6 @@ import li.songe.gkd.util.DarkThemeOption
|
||||||
import li.songe.gkd.util.LocalMainViewModel
|
import li.songe.gkd.util.LocalMainViewModel
|
||||||
import li.songe.gkd.util.LocalNavController
|
import li.songe.gkd.util.LocalNavController
|
||||||
import li.songe.gkd.util.UpdateChannelOption
|
import li.songe.gkd.util.UpdateChannelOption
|
||||||
import li.songe.gkd.util.UpdateTimeOption
|
|
||||||
import li.songe.gkd.util.checkUpdate
|
import li.songe.gkd.util.checkUpdate
|
||||||
import li.songe.gkd.util.findOption
|
import li.songe.gkd.util.findOption
|
||||||
import li.songe.gkd.util.launchAsFn
|
import li.songe.gkd.util.launchAsFn
|
||||||
|
@ -313,21 +312,14 @@ fun useSettingsPage(): ScaffoldExt {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
Text(
|
|
||||||
text = "更新",
|
|
||||||
modifier = Modifier.titleItemPadding(),
|
|
||||||
style = MaterialTheme.typography.titleSmall,
|
|
||||||
color = MaterialTheme.colorScheme.primary,
|
|
||||||
)
|
|
||||||
|
|
||||||
TextMenu(
|
|
||||||
title = "更新订阅",
|
|
||||||
option = UpdateTimeOption.allSubObject.findOption(store.updateSubsInterval)
|
|
||||||
) {
|
|
||||||
storeFlow.update { s -> s.copy(updateSubsInterval = it.value) }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BuildConfig.ENABLED_UPDATE) {
|
if (BuildConfig.ENABLED_UPDATE) {
|
||||||
|
Text(
|
||||||
|
text = "更新",
|
||||||
|
modifier = Modifier.titleItemPadding(),
|
||||||
|
style = MaterialTheme.typography.titleSmall,
|
||||||
|
color = MaterialTheme.colorScheme.primary,
|
||||||
|
)
|
||||||
|
|
||||||
TextSwitch(
|
TextSwitch(
|
||||||
name = "自动更新",
|
name = "自动更新",
|
||||||
desc = "打开应用时检测新版本",
|
desc = "打开应用时检测新版本",
|
||||||
|
|
|
@ -51,6 +51,7 @@ import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
|
@ -58,6 +59,7 @@ import androidx.lifecycle.viewModelScope
|
||||||
import com.dylanc.activityresult.launcher.launchForResult
|
import com.dylanc.activityresult.launcher.launchForResult
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.flow.update
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import li.songe.gkd.MainActivity
|
import li.songe.gkd.MainActivity
|
||||||
import li.songe.gkd.data.Value
|
import li.songe.gkd.data.Value
|
||||||
|
@ -66,16 +68,22 @@ import li.songe.gkd.data.exportData
|
||||||
import li.songe.gkd.data.importData
|
import li.songe.gkd.data.importData
|
||||||
import li.songe.gkd.db.DbSet
|
import li.songe.gkd.db.DbSet
|
||||||
import li.songe.gkd.ui.component.SubsItemCard
|
import li.songe.gkd.ui.component.SubsItemCard
|
||||||
|
import li.songe.gkd.ui.component.TextMenu
|
||||||
import li.songe.gkd.ui.component.waitResult
|
import li.songe.gkd.ui.component.waitResult
|
||||||
|
import li.songe.gkd.ui.style.itemVerticalPadding
|
||||||
import li.songe.gkd.util.LOCAL_SUBS_ID
|
import li.songe.gkd.util.LOCAL_SUBS_ID
|
||||||
import li.songe.gkd.util.LocalLauncher
|
import li.songe.gkd.util.LocalLauncher
|
||||||
import li.songe.gkd.util.LocalMainViewModel
|
import li.songe.gkd.util.LocalMainViewModel
|
||||||
|
import li.songe.gkd.util.SafeR
|
||||||
|
import li.songe.gkd.util.UpdateTimeOption
|
||||||
import li.songe.gkd.util.checkSubsUpdate
|
import li.songe.gkd.util.checkSubsUpdate
|
||||||
|
import li.songe.gkd.util.findOption
|
||||||
import li.songe.gkd.util.isSafeUrl
|
import li.songe.gkd.util.isSafeUrl
|
||||||
import li.songe.gkd.util.launchAsFn
|
import li.songe.gkd.util.launchAsFn
|
||||||
import li.songe.gkd.util.launchTry
|
import li.songe.gkd.util.launchTry
|
||||||
import li.songe.gkd.util.saveFileToDownloads
|
import li.songe.gkd.util.saveFileToDownloads
|
||||||
import li.songe.gkd.util.shareFile
|
import li.songe.gkd.util.shareFile
|
||||||
|
import li.songe.gkd.util.storeFlow
|
||||||
import li.songe.gkd.util.subsIdToRawFlow
|
import li.songe.gkd.util.subsIdToRawFlow
|
||||||
import li.songe.gkd.util.subsItemsFlow
|
import li.songe.gkd.util.subsItemsFlow
|
||||||
import li.songe.gkd.util.subsRefreshingFlow
|
import li.songe.gkd.util.subsRefreshingFlow
|
||||||
|
@ -181,6 +189,29 @@ fun useSubsManagePage(): ScaffoldExt {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var showSettingsDlg by remember { mutableStateOf(false) }
|
||||||
|
if (showSettingsDlg) {
|
||||||
|
AlertDialog(
|
||||||
|
onDismissRequest = { showSettingsDlg = false },
|
||||||
|
title = { Text("订阅设置") },
|
||||||
|
text = {
|
||||||
|
val store by storeFlow.collectAsState()
|
||||||
|
TextMenu(
|
||||||
|
modifier = Modifier.padding(0.dp, itemVerticalPadding),
|
||||||
|
title = "更新订阅",
|
||||||
|
option = UpdateTimeOption.allSubObject.findOption(store.updateSubsInterval)
|
||||||
|
) {
|
||||||
|
storeFlow.update { s -> s.copy(updateSubsInterval = it.value) }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
confirmButton = {
|
||||||
|
TextButton(onClick = { showSettingsDlg = false }) {
|
||||||
|
Text("关闭")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
ShareDataDialog(vm)
|
ShareDataDialog(vm)
|
||||||
|
|
||||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
|
||||||
|
@ -254,6 +285,14 @@ fun useSubsManagePage(): ScaffoldExt {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
IconButton(onClick = {
|
||||||
|
showSettingsDlg = true
|
||||||
|
}) {
|
||||||
|
Icon(
|
||||||
|
painter = painterResource(id = SafeR.ic_page_info),
|
||||||
|
contentDescription = null,
|
||||||
|
)
|
||||||
|
}
|
||||||
IconButton(onClick = {
|
IconButton(onClick = {
|
||||||
if (subsRefreshingFlow.value) {
|
if (subsRefreshingFlow.value) {
|
||||||
toast("正在刷新订阅,请稍后操作")
|
toast("正在刷新订阅,请稍后操作")
|
||||||
|
|
|
@ -5,8 +5,9 @@ import li.songe.gkd.R
|
||||||
/**
|
/**
|
||||||
* ![image](https://github.com/gkd-kit/gkd/assets/38517192/c9325110-d90f-4041-a01d-404d14c5d34d)
|
* ![image](https://github.com/gkd-kit/gkd/assets/38517192/c9325110-d90f-4041-a01d-404d14c5d34d)
|
||||||
*/
|
*/
|
||||||
@Suppress("UNRESOLVED_REFERENCE")
|
@Suppress("UNRESOLVED_REFERENCE") // fix android studio can't find R
|
||||||
object SafeR {
|
object SafeR {
|
||||||
val app_name: Int = R.string.app_name
|
val app_name: Int = R.string.app_name
|
||||||
val ic_status: Int = R.drawable.ic_status
|
val ic_status: Int = R.drawable.ic_status
|
||||||
|
val ic_page_info: Int = R.drawable.ic_page_info
|
||||||
}
|
}
|
10
app/src/main/res/drawable/ic_page_info.xml
Normal file
10
app/src/main/res/drawable/ic_page_info.xml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
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"/>
|
||||||
|
</vector>
|
Loading…
Reference in New Issue
Block a user