Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] main from gkd-kit:main #29

Merged
merged 2 commits into from
May 18, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
refactor: ui, padding, text
  • Loading branch information
lisonge committed May 18, 2024
commit 30da7f6ccb97b7048ffc87a1a803d8a2d2c56305
22 changes: 22 additions & 0 deletions app/src/main/kotlin/li/songe/gkd/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.blankj.utilcode.util.LogUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import li.songe.gkd.data.RawSubscription
import li.songe.gkd.data.SubsItem
Expand All @@ -12,6 +16,7 @@ import li.songe.gkd.permission.authReasonFlow
import li.songe.gkd.util.checkUpdate
import li.songe.gkd.util.launchTry
import li.songe.gkd.util.logZipDir
import li.songe.gkd.util.map
import li.songe.gkd.util.newVersionApkDir
import li.songe.gkd.util.snapshotZipDir
import li.songe.gkd.util.storeFlow
Expand Down Expand Up @@ -60,8 +65,25 @@ class MainViewModel : ViewModel() {
}
}
}

viewModelScope.launch {
storeFlow.map(viewModelScope) { s -> s.log2FileSwitch }.collect {
LogUtils.getConfig().isLog2FileSwitch = it
}
}
}

val enableDarkThemeFlow = storeFlow.debounce(200).map { s -> s.enableDarkTheme }.stateIn(
viewModelScope,
SharingStarted.Eagerly,
storeFlow.value.enableDarkTheme
)
val enableDynamicColorFlow = storeFlow.debounce(300).map { s -> s.enableDynamicColor }.stateIn(
viewModelScope,
SharingStarted.Eagerly,
storeFlow.value.enableDynamicColor
)


override fun onCleared() {
super.onCleared()
Expand Down
17 changes: 17 additions & 0 deletions app/src/main/kotlin/li/songe/gkd/data/RawSubscription.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,23 @@ data class RawSubscription(
}
}

val categoryToAppMap by lazy {
val map = mutableMapOf<RawCategory, MutableList<RawApp>>()
categories.forEach { c ->
apps.forEach { a ->
if (a.groups.any { g -> g.name.startsWith(c.name) }) {
val list = map[c]
if (list == null) {
map[c] = mutableListOf(a)
} else {
list.add(a)
}
}
}
}
map
}

val groupToCategoryMap by lazy {
val map = mutableMapOf<RawAppGroup, RawCategory>()
categoryToGroupsMap.forEach { (key, value) ->
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/kotlin/li/songe/gkd/service/GkdAbService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ import li.songe.gkd.shizuku.shizukuIsSafeOK
import li.songe.gkd.shizuku.useSafeGetTasksFc
import li.songe.gkd.shizuku.useSafeInputTapFc
import li.songe.gkd.shizuku.useShizukuAliveState
import li.songe.gkd.ui.home.UpdateTimeOption
import li.songe.gkd.util.UpdateTimeOption
import li.songe.gkd.util.VOLUME_CHANGED_ACTION
import li.songe.gkd.util.checkSubsUpdate
import li.songe.gkd.util.launchTry
Expand Down
13 changes: 7 additions & 6 deletions app/src/main/kotlin/li/songe/gkd/ui/AboutPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import androidx.compose.ui.unit.dp
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import li.songe.gkd.BuildConfig
import li.songe.gkd.ui.style.itemPadding
import li.songe.gkd.util.GIT_COMMIT_URL
import li.songe.gkd.util.LocalNavController
import li.songe.gkd.util.ProfileTransitions
Expand Down Expand Up @@ -71,7 +72,7 @@ fun AboutPage() {
context.openUri(REPOSITORY_URL)
}
.fillMaxWidth()
.padding(16.dp, 12.dp)
.itemPadding()
) {
Text(
text = "开源地址",
Expand All @@ -86,7 +87,7 @@ fun AboutPage() {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp, 12.dp)
.itemPadding()
) {
Text(
text = "版本代码",
Expand All @@ -101,7 +102,7 @@ fun AboutPage() {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp, 12.dp)
.itemPadding()
) {
Text(
text = "版本名称",
Expand All @@ -120,7 +121,7 @@ fun AboutPage() {
context.openUri(GIT_COMMIT_URL)
}
.fillMaxWidth()
.padding(16.dp, 12.dp)
.itemPadding()
) {
Text(
text = "代码记录",
Expand All @@ -136,7 +137,7 @@ fun AboutPage() {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp, 12.dp)
.itemPadding()
) {
Text(
text = "构建时间",
Expand All @@ -151,7 +152,7 @@ fun AboutPage() {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp, 12.dp)
.itemPadding()
) {
Text(
text = "构建类型",
Expand Down
13 changes: 7 additions & 6 deletions app/src/main/kotlin/li/songe/gkd/ui/AdvancedPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ import li.songe.gkd.ui.component.AuthCard
import li.songe.gkd.ui.component.SettingItem
import li.songe.gkd.ui.component.TextSwitch
import li.songe.gkd.ui.destinations.SnapshotPageDestination
import li.songe.gkd.ui.style.itemPadding
import li.songe.gkd.util.LocalLauncher
import li.songe.gkd.util.LocalNavController
import li.songe.gkd.util.ProfileTransitions
Expand Down Expand Up @@ -124,7 +125,7 @@ fun AdvancedPage() {
) {
Text(
text = "Shizuku",
modifier = Modifier.padding(16.dp, 12.dp),
modifier = Modifier.itemPadding(),
style = MaterialTheme.typography.titleMedium,
color = MaterialTheme.colorScheme.primary,
)
Expand All @@ -150,12 +151,12 @@ fun AdvancedPage() {

Text(
text = "HTTP服务",
modifier = Modifier.padding(16.dp, 12.dp),
modifier = Modifier.itemPadding(),
style = MaterialTheme.typography.titleMedium,
color = MaterialTheme.colorScheme.primary,
)
Row(
modifier = Modifier.padding(16.dp, 14.dp),
modifier = Modifier.itemPadding(),
verticalAlignment = Alignment.CenterVertically
) {
Column(modifier = Modifier.weight(1f)) {
Expand Down Expand Up @@ -215,7 +216,7 @@ fun AdvancedPage() {
Row(
modifier = Modifier
.clickable { showPortDlg = true }
.padding(16.dp, 12.dp),
.itemPadding(),
verticalAlignment = Alignment.CenterVertically
) {
Column(modifier = Modifier.weight(1f)) {
Expand Down Expand Up @@ -245,7 +246,7 @@ fun AdvancedPage() {

Text(
text = "快照",
modifier = Modifier.padding(16.dp, 12.dp),
modifier = Modifier.itemPadding(),
style = MaterialTheme.typography.titleMedium,
color = MaterialTheme.colorScheme.primary,
)
Expand Down Expand Up @@ -335,7 +336,7 @@ fun AdvancedPage() {

Text(
text = "其它",
modifier = Modifier.padding(16.dp, 12.dp),
modifier = Modifier.itemPadding(),
style = MaterialTheme.typography.titleMedium,
color = MaterialTheme.colorScheme.primary,
)
Expand Down
16 changes: 9 additions & 7 deletions app/src/main/kotlin/li/songe/gkd/ui/AppConfigPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.RadioButton
import androidx.compose.material3.Scaffold
Expand Down Expand Up @@ -58,8 +57,10 @@ import li.songe.gkd.data.stringify
import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.destinations.AppItemPageDestination
import li.songe.gkd.ui.destinations.GlobalRulePageDestination
import li.songe.gkd.ui.style.itemPadding
import li.songe.gkd.util.LocalNavController
import li.songe.gkd.util.ProfileTransitions
import li.songe.gkd.util.RuleSortOption
import li.songe.gkd.util.appInfoCacheFlow
import li.songe.gkd.util.launchTry
import li.songe.gkd.util.navigate
Expand All @@ -80,7 +81,6 @@ fun AppConfigPage(appId: String) {
var expanded by remember { mutableStateOf(false) }
val listState = rememberLazyListState()
var isFirstVisit by remember { mutableStateOf(true) }
globalGroups.map { g -> g.group }
LaunchedEffect(globalGroups.size, appGroups.size, ruleSortType.value) {
if (isFirstVisit) {
isFirstVisit = false
Expand Down Expand Up @@ -124,7 +124,7 @@ fun AppConfigPage(appId: String) {
expanded = expanded,
onDismissRequest = { expanded = false }
) {
RuleSortType.allSubObject.forEach { s ->
RuleSortOption.allSubObject.forEach { s ->
DropdownMenuItem(
text = {
Row(
Expand Down Expand Up @@ -250,7 +250,7 @@ private fun AppGroupCard(
Row(
modifier = Modifier
.clickable(onClick = onClick)
.padding(10.dp, 6.dp),
.itemPadding(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
Expand All @@ -265,7 +265,8 @@ private fun AppGroupCard(
maxLines = 1,
softWrap = false,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.fillMaxWidth()
modifier = Modifier.fillMaxWidth(),
style = MaterialTheme.typography.bodyLarge
)
if (group.valid) {
if (!group.desc.isNullOrBlank()) {
Expand All @@ -275,14 +276,15 @@ private fun AppGroupCard(
softWrap = false,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.fillMaxWidth(),
style = MaterialTheme.typography.bodyMedium
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
} else {
Text(
text = "暂无描述",
modifier = Modifier.fillMaxWidth(),
style = MaterialTheme.typography.bodyMedium,
color = LocalContentColor.current.copy(alpha = 0.5f)
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f)
)
}
} else {
Expand Down
24 changes: 8 additions & 16 deletions app/src/main/kotlin/li/songe/gkd/ui/AppConfigVm.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.stateIn
import li.songe.gkd.data.SubsConfig
import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.destinations.AppConfigPageDestination
import li.songe.gkd.util.RuleSortOption
import li.songe.gkd.util.collator
import li.songe.gkd.util.ruleSummaryFlow
import javax.inject.Inject
Expand All @@ -29,23 +30,23 @@ class AppConfigVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel
SubsConfig.AppGroupType
)

val ruleSortTypeFlow = MutableStateFlow<RuleSortType>(RuleSortType.Default)
val ruleSortTypeFlow = MutableStateFlow<RuleSortOption>(RuleSortOption.Default)

val globalGroupsFlow = combine(
ruleSummaryFlow.map { r -> r.globalGroups },
ruleSortTypeFlow,
latestGlobalLogsFlow
) { list, type, logs ->
when (type) {
RuleSortType.Default -> list
RuleSortType.ByName -> list.sortedWith { a, b ->
RuleSortOption.Default -> list
RuleSortOption.ByName -> list.sortedWith { a, b ->
collator.compare(
a.group.name,
b.group.name
)
}

RuleSortType.ByTime -> list.sortedBy { a ->
RuleSortOption.ByTime -> list.sortedBy { a ->
-(logs.find { c -> c.groupKey == a.group.key && c.subsId == a.subsItem.id }?.id
?: 0)
}
Expand All @@ -58,15 +59,15 @@ class AppConfigVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel
latestAppLogsFlow
) { list, type, logs ->
when (type) {
RuleSortType.Default -> list
RuleSortType.ByName -> list.sortedWith { a, b ->
RuleSortOption.Default -> list
RuleSortOption.ByName -> list.sortedWith { a, b ->
collator.compare(
a.group.name,
b.group.name
)
}

RuleSortType.ByTime -> list.sortedBy { a ->
RuleSortOption.ByTime -> list.sortedBy { a ->
-(logs.find { c -> c.groupKey == a.group.key && c.subsId == a.subsItem.id }?.id
?: 0)
}
Expand All @@ -75,12 +76,3 @@ class AppConfigVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel

}

sealed class RuleSortType(val value: Int, val label: String) {
data object Default : RuleSortType(0, "按订阅顺序")
data object ByTime : RuleSortType(1, "按触发时间")
data object ByName : RuleSortType(2, "按名称")

companion object {
val allSubObject by lazy { arrayOf(Default, ByTime, ByName) }
}
}
Loading