mirror of
https://github.com/gkd-kit/gkd.git
synced 2024-11-16 11:42:22 +08:00
This commit is contained in:
parent
b4474f5041
commit
dbc4a28e08
|
@ -44,7 +44,6 @@ plugins {
|
|||
alias(libs.plugins.kotlin.serialization)
|
||||
alias(libs.plugins.kotlin.compose)
|
||||
alias(libs.plugins.google.ksp)
|
||||
alias(libs.plugins.google.hilt)
|
||||
alias(libs.plugins.rikka.refine)
|
||||
}
|
||||
|
||||
|
@ -243,10 +242,6 @@ dependencies {
|
|||
implementation(libs.destinations.core)
|
||||
ksp(libs.destinations.ksp)
|
||||
|
||||
implementation(libs.google.hilt.android)
|
||||
ksp(libs.google.hilt.android.compiler)
|
||||
implementation(libs.androidx.hilt.navigation.compose)
|
||||
|
||||
implementation(libs.reorderable)
|
||||
|
||||
implementation(libs.androidx.splashscreen)
|
||||
|
|
|
@ -8,7 +8,6 @@ import com.blankj.utilcode.util.LogUtils
|
|||
import com.blankj.utilcode.util.Utils
|
||||
import com.hjq.toast.Toaster
|
||||
import com.tencent.mmkv.MMKV
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.MainScope
|
||||
import li.songe.gkd.debug.clearHttpSubs
|
||||
|
@ -38,7 +37,6 @@ val applicationInfo by lazy {
|
|||
|
||||
val channel by lazy { applicationInfo.metaData.getString("channel") }
|
||||
|
||||
@HiltAndroidApp
|
||||
class App : Application() {
|
||||
override fun attachBaseContext(base: Context?) {
|
||||
super.attachBaseContext(base)
|
||||
|
|
|
@ -14,7 +14,6 @@ import com.blankj.utilcode.util.ServiceUtils
|
|||
import com.dylanc.activityresult.launcher.PickContentLauncher
|
||||
import com.dylanc.activityresult.launcher.StartActivityLauncher
|
||||
import com.ramcosta.composedestinations.DestinationsNavHost
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
|
@ -42,7 +41,6 @@ import li.songe.gkd.util.launchTry
|
|||
import li.songe.gkd.util.map
|
||||
import li.songe.gkd.util.storeFlow
|
||||
|
||||
@AndroidEntryPoint
|
||||
class MainActivity : CompositionActivity({
|
||||
this as MainActivity
|
||||
useLifeCycleLog()
|
||||
|
@ -120,7 +118,8 @@ class MainActivity : CompositionActivity({
|
|||
activityVisibleFlow.update { it - 1 }
|
||||
}
|
||||
|
||||
var lastBackPressedTime = 0L
|
||||
private var lastBackPressedTime = 0L
|
||||
|
||||
@Suppress("OVERRIDE_DEPRECATION")
|
||||
override fun onBackPressed() {
|
||||
// onBackPressedDispatcher.addCallback is not work, it will be covered by compose navigation
|
||||
|
|
|
@ -29,8 +29,8 @@ import androidx.compose.ui.platform.LocalContext
|
|||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import androidx.paging.compose.itemKey
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
|
@ -52,7 +52,7 @@ import li.songe.gkd.util.throttle
|
|||
fun ActivityLogPage() {
|
||||
val context = LocalContext.current as MainActivity
|
||||
val mainVm = context.mainVm
|
||||
val vm = hiltViewModel<ActivityLogVm>()
|
||||
val vm = viewModel<ActivityLogVm>()
|
||||
val navController = LocalNavController.current
|
||||
|
||||
val logCount by vm.logCountFlow.collectAsState()
|
||||
|
|
|
@ -1,19 +1,15 @@
|
|||
package li.songe.gkd.ui
|
||||
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.paging.Pager
|
||||
import androidx.paging.PagingConfig
|
||||
import androidx.paging.cachedIn
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import li.songe.gkd.db.DbSet
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class ActivityLogVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel() {
|
||||
class ActivityLogVm : ViewModel() {
|
||||
val pagingDataFlow = Pager(PagingConfig(pageSize = 100)) { DbSet.activityLogDao.pagingSource() }
|
||||
.flow.cachedIn(viewModelScope)
|
||||
|
||||
|
|
|
@ -52,8 +52,8 @@ import androidx.compose.ui.text.style.TextDecoration
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import com.dylanc.activityresult.launcher.launchForResult
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
|
@ -107,7 +107,7 @@ import rikka.shizuku.Shizuku
|
|||
@Composable
|
||||
fun AdvancedPage() {
|
||||
val context = LocalContext.current as MainActivity
|
||||
val vm = hiltViewModel<AdvancedVm>()
|
||||
val vm = viewModel<AdvancedVm>()
|
||||
val launcher = LocalLauncher.current
|
||||
val navController = LocalNavController.current
|
||||
val store by storeFlow.collectAsState()
|
||||
|
|
|
@ -2,16 +2,13 @@ package li.songe.gkd.ui
|
|||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import li.songe.gkd.db.DbSet
|
||||
import li.songe.gkd.ui.component.UploadOptions
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class AdvancedVm @Inject constructor() : ViewModel() {
|
||||
class AdvancedVm : ViewModel() {
|
||||
val snapshotCountFlow =
|
||||
DbSet.snapshotDao.count().stateIn(viewModelScope, SharingStarted.Eagerly, 0)
|
||||
|
||||
|
|
|
@ -46,8 +46,8 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
|
|||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
||||
import com.ramcosta.composedestinations.navigation.navigate
|
||||
|
@ -80,7 +80,7 @@ import li.songe.gkd.util.throttle
|
|||
@Composable
|
||||
fun AppConfigPage(appId: String) {
|
||||
val navController = LocalNavController.current
|
||||
val vm = hiltViewModel<AppConfigVm>()
|
||||
val vm = viewModel<AppConfigVm>()
|
||||
val ruleSortType by vm.ruleSortTypeFlow.collectAsState()
|
||||
val appInfoCache by appInfoCacheFlow.collectAsState()
|
||||
val appInfo = appInfoCache[appId]
|
||||
|
|
|
@ -3,7 +3,6 @@ package li.songe.gkd.ui
|
|||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.combine
|
||||
|
@ -20,10 +19,8 @@ import li.songe.gkd.util.collator
|
|||
import li.songe.gkd.util.getGroupRawEnable
|
||||
import li.songe.gkd.util.subsIdToRawFlow
|
||||
import li.songe.gkd.util.subsItemsFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class AppConfigVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel() {
|
||||
class AppConfigVm (stateHandle: SavedStateHandle) : ViewModel() {
|
||||
private val args = AppConfigPageDestination.argsFrom(stateHandle)
|
||||
|
||||
private val latestGlobalLogsFlow = DbSet.clickLogDao.queryAppLatest(
|
||||
|
|
|
@ -51,8 +51,8 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
|
|||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.blankj.utilcode.util.ClipboardUtils
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
|
@ -75,7 +75,6 @@ import li.songe.gkd.util.LocalMainViewModel
|
|||
import li.songe.gkd.util.LocalNavController
|
||||
import li.songe.gkd.util.ProfileTransitions
|
||||
import li.songe.gkd.util.appInfoCacheFlow
|
||||
import li.songe.json5.encodeToJson5String
|
||||
import li.songe.gkd.util.getGroupRawEnable
|
||||
import li.songe.gkd.util.json
|
||||
import li.songe.gkd.util.launchAsFn
|
||||
|
@ -84,6 +83,7 @@ import li.songe.gkd.util.throttle
|
|||
import li.songe.gkd.util.toast
|
||||
import li.songe.gkd.util.updateSubscription
|
||||
import li.songe.json5.Json5
|
||||
import li.songe.json5.encodeToJson5String
|
||||
|
||||
@RootNavGraph
|
||||
@Destination(style = ProfileTransitions::class)
|
||||
|
@ -95,7 +95,7 @@ fun AppItemPage(
|
|||
) {
|
||||
val navController = LocalNavController.current
|
||||
val mainVm = LocalMainViewModel.current
|
||||
val vm = hiltViewModel<AppItemVm>()
|
||||
val vm = viewModel<AppItemVm>()
|
||||
val subsItem = vm.subsItemFlow.collectAsState().value
|
||||
val subsRaw = vm.subsRawFlow.collectAsState().value
|
||||
val subsConfigs by vm.subsConfigsFlow.collectAsState()
|
||||
|
@ -285,7 +285,7 @@ fun AppItemPage(
|
|||
},
|
||||
)
|
||||
}
|
||||
if (editable && subsRaw != null) {
|
||||
if (editable && subsRaw != null && subsItem != null) {
|
||||
DropdownMenuItem(
|
||||
text = {
|
||||
Text(text = "删除", color = MaterialTheme.colorScheme.error)
|
||||
|
|
|
@ -3,7 +3,6 @@ package li.songe.gkd.ui
|
|||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
|
@ -13,10 +12,8 @@ import li.songe.gkd.ui.destinations.AppItemPageDestination
|
|||
import li.songe.gkd.util.map
|
||||
import li.songe.gkd.util.subsIdToRawFlow
|
||||
import li.songe.gkd.util.subsItemsFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class AppItemVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel() {
|
||||
class AppItemVm (stateHandle: SavedStateHandle) : ViewModel() {
|
||||
private val args = AppItemPageDestination.argsFrom(stateHandle)
|
||||
|
||||
val subsItemFlow =
|
||||
|
|
|
@ -42,8 +42,8 @@ import androidx.compose.ui.Modifier
|
|||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -72,7 +72,7 @@ fun CategoryPage(subsItemId: Long) {
|
|||
val navController = LocalNavController.current
|
||||
val mainVm = LocalMainViewModel.current
|
||||
|
||||
val vm = hiltViewModel<CategoryVm>()
|
||||
val vm = viewModel<CategoryVm>()
|
||||
val subsItem by vm.subsItemFlow.collectAsState()
|
||||
val subsRaw by vm.subsRawFlow.collectAsState()
|
||||
val categoryConfigs by vm.categoryConfigsFlow.collectAsState()
|
||||
|
|
|
@ -3,7 +3,6 @@ package li.songe.gkd.ui
|
|||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import li.songe.gkd.db.DbSet
|
||||
|
@ -11,10 +10,8 @@ import li.songe.gkd.ui.destinations.CategoryPageDestination
|
|||
import li.songe.gkd.util.map
|
||||
import li.songe.gkd.util.subsIdToRawFlow
|
||||
import li.songe.gkd.util.subsItemsFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class CategoryVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel() {
|
||||
class CategoryVm (stateHandle: SavedStateHandle) : ViewModel() {
|
||||
private val args = CategoryPageDestination.argsFrom(stateHandle)
|
||||
|
||||
val subsItemFlow =
|
||||
|
|
|
@ -38,8 +38,8 @@ import androidx.compose.ui.text.style.TextAlign
|
|||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import androidx.paging.compose.itemKey
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
|
@ -78,7 +78,7 @@ fun ClickLogPage() {
|
|||
val context = LocalContext.current as MainActivity
|
||||
val mainVm = context.mainVm
|
||||
val navController = LocalNavController.current
|
||||
val vm = hiltViewModel<ClickLogVm>()
|
||||
val vm = viewModel<ClickLogVm>()
|
||||
val clickLogCount by vm.clickLogCountFlow.collectAsState()
|
||||
val clickDataItems = vm.pagingDataFlow.collectAsLazyPagingItems()
|
||||
val appInfoCache by appInfoCacheFlow.collectAsState()
|
||||
|
|
|
@ -6,7 +6,6 @@ import androidx.paging.Pager
|
|||
import androidx.paging.PagingConfig
|
||||
import androidx.paging.cachedIn
|
||||
import androidx.paging.map
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
|
@ -14,10 +13,8 @@ import li.songe.gkd.data.SubsConfig
|
|||
import li.songe.gkd.data.Tuple3
|
||||
import li.songe.gkd.db.DbSet
|
||||
import li.songe.gkd.util.subsIdToRawFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class ClickLogVm @Inject constructor() : ViewModel() {
|
||||
class ClickLogVm : ViewModel() {
|
||||
|
||||
val pagingDataFlow = Pager(PagingConfig(pageSize = 100)) { DbSet.clickLogDao.pagingSource() }
|
||||
.flow.cachedIn(viewModelScope)
|
||||
|
|
|
@ -56,8 +56,8 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
|
|||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.google.accompanist.drawablepainter.rememberDrawablePainter
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
||||
|
@ -84,7 +84,7 @@ import li.songe.gkd.util.toast
|
|||
@Composable
|
||||
fun GlobalRuleExcludePage(subsItemId: Long, groupKey: Int) {
|
||||
val navController = LocalNavController.current
|
||||
val vm = hiltViewModel<GlobalRuleExcludeVm>()
|
||||
val vm = viewModel<GlobalRuleExcludeVm>()
|
||||
val rawSubs = vm.rawSubsFlow.collectAsState().value
|
||||
val group = vm.groupFlow.collectAsState().value
|
||||
val excludeData = vm.excludeDataFlow.collectAsState().value
|
||||
|
@ -221,17 +221,15 @@ fun GlobalRuleExcludePage(subsItemId: Long, groupKey: Int) {
|
|||
)
|
||||
DropdownMenuItem(
|
||||
text = {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Checkbox(
|
||||
checked = showHiddenApp,
|
||||
onCheckedChange = {
|
||||
vm.showHiddenAppFlow.value =
|
||||
!vm.showHiddenAppFlow.value
|
||||
})
|
||||
Text("显示隐藏应用")
|
||||
}
|
||||
Text("显示隐藏应用")
|
||||
},
|
||||
trailingIcon = {
|
||||
Checkbox(
|
||||
checked = showHiddenApp,
|
||||
onCheckedChange = {
|
||||
vm.showHiddenAppFlow.value =
|
||||
!vm.showHiddenAppFlow.value
|
||||
})
|
||||
},
|
||||
onClick = {
|
||||
vm.showHiddenAppFlow.value = !vm.showHiddenAppFlow.value
|
||||
|
|
|
@ -3,7 +3,6 @@ package li.songe.gkd.ui
|
|||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.combine
|
||||
|
@ -17,10 +16,8 @@ import li.songe.gkd.util.SortTypeOption
|
|||
import li.songe.gkd.util.map
|
||||
import li.songe.gkd.util.orderedAppInfosFlow
|
||||
import li.songe.gkd.util.subsIdToRawFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class GlobalRuleExcludeVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel() {
|
||||
class GlobalRuleExcludeVm (stateHandle: SavedStateHandle) : ViewModel() {
|
||||
private val args = GlobalRuleExcludePageDestination.argsFrom(stateHandle)
|
||||
|
||||
val rawSubsFlow = subsIdToRawFlow.map(viewModelScope) { it[args.subsItemId] }
|
||||
|
|
|
@ -52,8 +52,8 @@ import androidx.compose.ui.text.style.TextAlign
|
|||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.blankj.utilcode.util.ClipboardUtils
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
|
@ -72,13 +72,13 @@ import li.songe.gkd.ui.style.itemPadding
|
|||
import li.songe.gkd.util.LocalMainViewModel
|
||||
import li.songe.gkd.util.LocalNavController
|
||||
import li.songe.gkd.util.ProfileTransitions
|
||||
import li.songe.json5.encodeToJson5String
|
||||
import li.songe.gkd.util.json
|
||||
import li.songe.gkd.util.launchAsFn
|
||||
import li.songe.gkd.util.launchTry
|
||||
import li.songe.gkd.util.throttle
|
||||
import li.songe.gkd.util.toast
|
||||
import li.songe.gkd.util.updateSubscription
|
||||
import li.songe.json5.encodeToJson5String
|
||||
|
||||
@RootNavGraph
|
||||
@Destination(style = ProfileTransitions::class)
|
||||
|
@ -86,7 +86,7 @@ import li.songe.gkd.util.updateSubscription
|
|||
fun GlobalRulePage(subsItemId: Long, focusGroupKey: Int? = null) {
|
||||
val navController = LocalNavController.current
|
||||
val mainVm = LocalMainViewModel.current
|
||||
val vm = hiltViewModel<GlobalRuleVm>()
|
||||
val vm = viewModel<GlobalRuleVm>()
|
||||
val subsItem by vm.subsItemFlow.collectAsState()
|
||||
val rawSubs = vm.subsRawFlow.collectAsState().value
|
||||
val subsConfigs by vm.subsConfigsFlow.collectAsState()
|
||||
|
@ -246,7 +246,7 @@ fun GlobalRulePage(subsItemId: Long, focusGroupKey: Int? = null) {
|
|||
)
|
||||
}
|
||||
)
|
||||
if (editable) {
|
||||
if (editable && rawSubs != null) {
|
||||
DropdownMenuItem(
|
||||
text = {
|
||||
Text(text = "删除", color = MaterialTheme.colorScheme.error)
|
||||
|
|
|
@ -3,7 +3,6 @@ package li.songe.gkd.ui
|
|||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import li.songe.gkd.db.DbSet
|
||||
|
@ -11,10 +10,8 @@ import li.songe.gkd.ui.destinations.GlobalRulePageDestination
|
|||
import li.songe.gkd.util.map
|
||||
import li.songe.gkd.util.subsIdToRawFlow
|
||||
import li.songe.gkd.util.subsItemsFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class GlobalRuleVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel() {
|
||||
class GlobalRuleVm (stateHandle: SavedStateHandle) : ViewModel() {
|
||||
private val args = GlobalRulePageDestination.argsFrom(stateHandle)
|
||||
val subsItemFlow =
|
||||
subsItemsFlow.map(viewModelScope) { s -> s.find { v -> v.id == args.subsItemId } }
|
||||
|
|
|
@ -38,8 +38,8 @@ import androidx.compose.ui.text.style.TextAlign
|
|||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.blankj.utilcode.util.ClipboardUtils
|
||||
import com.blankj.utilcode.util.ImageUtils
|
||||
import com.blankj.utilcode.util.UriUtils
|
||||
|
@ -80,7 +80,7 @@ fun SnapshotPage() {
|
|||
|
||||
val pickContentLauncher = LocalPickContentLauncher.current
|
||||
|
||||
val vm = hiltViewModel<SnapshotVm>()
|
||||
val vm = viewModel<SnapshotVm>()
|
||||
val snapshots by vm.snapshotsState.collectAsState()
|
||||
|
||||
vm.uploadOptions.ShowDialog()
|
||||
|
|
|
@ -2,17 +2,13 @@ package li.songe.gkd.ui
|
|||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import li.songe.gkd.db.DbSet
|
||||
import li.songe.gkd.ui.component.UploadOptions
|
||||
import li.songe.gkd.util.IMPORT_BASE_URL
|
||||
import javax.inject.Inject
|
||||
|
||||
|
||||
@HiltViewModel
|
||||
class SnapshotVm @Inject constructor() : ViewModel() {
|
||||
class SnapshotVm : ViewModel() {
|
||||
val snapshotsState = DbSet.snapshotDao.query()
|
||||
.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
|
||||
|
||||
|
|
|
@ -44,8 +44,8 @@ import androidx.compose.ui.focus.FocusRequester
|
|||
import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
||||
|
@ -65,13 +65,13 @@ import li.songe.gkd.util.LocalNavController
|
|||
import li.songe.gkd.util.ProfileTransitions
|
||||
import li.songe.gkd.util.SortTypeOption
|
||||
import li.songe.gkd.util.appInfoCacheFlow
|
||||
import li.songe.json5.encodeToJson5String
|
||||
import li.songe.gkd.util.json
|
||||
import li.songe.gkd.util.launchAsFn
|
||||
import li.songe.gkd.util.launchTry
|
||||
import li.songe.gkd.util.throttle
|
||||
import li.songe.gkd.util.toast
|
||||
import li.songe.gkd.util.updateSubscription
|
||||
import li.songe.json5.encodeToJson5String
|
||||
|
||||
|
||||
@RootNavGraph
|
||||
|
@ -83,7 +83,7 @@ fun SubsPage(
|
|||
val navController = LocalNavController.current
|
||||
val mainVm = LocalMainViewModel.current
|
||||
|
||||
val vm = hiltViewModel<SubsVm>()
|
||||
val vm = viewModel<SubsVm>()
|
||||
val subsItem = vm.subsItemFlow.collectAsState().value
|
||||
val appAndConfigs by vm.filterAppAndConfigsFlow.collectAsState()
|
||||
val searchStr by vm.searchStrFlow.collectAsState()
|
||||
|
|
|
@ -3,7 +3,6 @@ package li.songe.gkd.ui
|
|||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.combine
|
||||
|
@ -22,10 +21,8 @@ import li.songe.gkd.util.getGroupRawEnable
|
|||
import li.songe.gkd.util.map
|
||||
import li.songe.gkd.util.subsIdToRawFlow
|
||||
import li.songe.gkd.util.subsItemsFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class SubsVm @Inject constructor(stateHandle: SavedStateHandle) : ViewModel() {
|
||||
class SubsVm (stateHandle: SavedStateHandle) : ViewModel() {
|
||||
private val args = SubsPageDestination.argsFrom(stateHandle)
|
||||
|
||||
val subsItemFlow =
|
||||
|
|
|
@ -58,8 +58,8 @@ import androidx.compose.ui.text.style.TextAlign
|
|||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.blankj.utilcode.util.KeyboardUtils
|
||||
import com.google.accompanist.drawablepainter.rememberDrawablePainter
|
||||
import com.ramcosta.composedestinations.navigation.navigate
|
||||
|
@ -91,7 +91,7 @@ fun useAppListPage(): ScaffoldExt {
|
|||
val context = LocalContext.current as MainActivity
|
||||
val softwareKeyboardController = LocalSoftwareKeyboardController.current
|
||||
|
||||
val vm = hiltViewModel<HomeVm>()
|
||||
val vm = viewModel<HomeVm>()
|
||||
val showSystemApp by vm.showSystemAppFlow.collectAsState()
|
||||
val showHiddenApp by vm.showHiddenAppFlow.collectAsState()
|
||||
val sortType by vm.sortTypeFlow.collectAsState()
|
||||
|
|
|
@ -26,8 +26,8 @@ import androidx.compose.ui.Modifier
|
|||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.ramcosta.composedestinations.navigation.navigate
|
||||
import li.songe.gkd.MainActivity
|
||||
import li.songe.gkd.permission.notificationState
|
||||
|
@ -57,7 +57,7 @@ val controlNav = BottomNavItem(label = "主页", icon = Icons.Outlined.Home)
|
|||
fun useControlPage(): ScaffoldExt {
|
||||
val context = LocalContext.current as MainActivity
|
||||
val navController = LocalNavController.current
|
||||
val vm = hiltViewModel<HomeVm>()
|
||||
val vm = viewModel<HomeVm>()
|
||||
val latestRecordDesc by vm.latestRecordDescFlow.collectAsState()
|
||||
val subsStatus by vm.subsStatusFlow.collectAsState()
|
||||
val store by storeFlow.collectAsState()
|
||||
|
|
|
@ -12,8 +12,8 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
||||
|
@ -36,7 +36,7 @@ data class BottomNavItem(
|
|||
@Composable
|
||||
fun HomePage() {
|
||||
val context = LocalContext.current as MainActivity
|
||||
val vm = hiltViewModel<HomeVm>()
|
||||
val vm = viewModel<HomeVm>()
|
||||
val tab by vm.tabFlow.collectAsState()
|
||||
|
||||
val controlPage = useControlPage()
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package li.songe.gkd.ui.home
|
||||
|
||||
import android.webkit.URLUtil
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import io.ktor.client.request.get
|
||||
import io.ktor.client.statement.bodyAsText
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -14,6 +14,7 @@ import kotlinx.coroutines.flow.combine
|
|||
import kotlinx.coroutines.flow.debounce
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import kotlinx.coroutines.launch
|
||||
import li.songe.gkd.appScope
|
||||
import li.songe.gkd.data.RawSubscription
|
||||
import li.songe.gkd.data.SubsItem
|
||||
|
@ -33,10 +34,14 @@ import li.songe.gkd.util.subsItemsFlow
|
|||
import li.songe.gkd.util.subsRefreshingFlow
|
||||
import li.songe.gkd.util.toast
|
||||
import li.songe.gkd.util.updateSubscription
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class HomeVm @Inject constructor() : ViewModel() {
|
||||
class HomeVm(stateHandle: SavedStateHandle) : ViewModel() {
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
LogUtils.d(this, stateHandle)
|
||||
}
|
||||
}
|
||||
|
||||
val tabFlow = MutableStateFlow(controlNav)
|
||||
|
||||
private val latestRecordFlow =
|
||||
|
|
|
@ -35,8 +35,8 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
|
|||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.ramcosta.composedestinations.navigation.navigate
|
||||
import kotlinx.coroutines.flow.update
|
||||
import li.songe.gkd.BuildConfig
|
||||
|
@ -73,7 +73,7 @@ fun useSettingsPage(): ScaffoldExt {
|
|||
val mainVm = LocalMainViewModel.current
|
||||
val navController = LocalNavController.current
|
||||
val store by storeFlow.collectAsState()
|
||||
val vm = hiltViewModel<HomeVm>()
|
||||
val vm = viewModel<HomeVm>()
|
||||
|
||||
var showToastInputDlg by remember {
|
||||
mutableStateOf(false)
|
||||
|
|
|
@ -54,8 +54,8 @@ import androidx.compose.ui.platform.LocalContext
|
|||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.dylanc.activityresult.launcher.launchForResult
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -101,7 +101,7 @@ fun useSubsManagePage(): ScaffoldExt {
|
|||
val launcher = LocalLauncher.current
|
||||
val mainVm = LocalMainViewModel.current
|
||||
|
||||
val vm = hiltViewModel<HomeVm>()
|
||||
val vm = viewModel<HomeVm>()
|
||||
val subItems by subsItemsFlow.collectAsState()
|
||||
val subsIdToRaw by subsIdToRawFlow.collectAsState()
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@ buildscript {
|
|||
|
||||
plugins {
|
||||
alias(libs.plugins.google.ksp) apply false
|
||||
alias(libs.plugins.google.hilt) apply false
|
||||
|
||||
alias(libs.plugins.android.library) apply false
|
||||
alias(libs.plugins.android.application) apply false
|
||||
|
|
|
@ -7,7 +7,6 @@ rikka = "4.4.0"
|
|||
room = "2.6.1"
|
||||
paging = "3.3.2"
|
||||
ktor = "2.3.12"
|
||||
hilt = "2.52"
|
||||
destinations = "1.10.2"
|
||||
coil = "2.7.0"
|
||||
|
||||
|
@ -57,9 +56,6 @@ ktor_client_content_negotiation = { module = "io.ktor:ktor-client-content-negoti
|
|||
ktor_serialization_kotlinx_json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
|
||||
kotlinx_serialization_json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version = "1.7.1" }
|
||||
kotlinx_collections_immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version = "0.3.7" }
|
||||
google_hilt_android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" }
|
||||
google_hilt_android_compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt" }
|
||||
androidx_hilt_navigation_compose = { module = "androidx.hilt:hilt-navigation-compose", version = "1.2.0" }
|
||||
destinations_core = { module = "io.github.raamcosta.compose-destinations:core", version.ref = "destinations" }
|
||||
destinations_ksp = { module = "io.github.raamcosta.compose-destinations:ksp", version.ref = "destinations" }
|
||||
coil_compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
|
||||
|
@ -80,5 +76,4 @@ kotlin_android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
|||
kotlin_compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
||||
rikka_refine = { id = "dev.rikka.tools.refine", version.ref = "rikka" }
|
||||
google_ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
||||
google_hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
|
||||
androidx_room = { id = "androidx.room", version.ref = "room" }
|
||||
|
|
Loading…
Reference in New Issue
Block a user