This commit is contained in:
Horis
2025-04-30 14:58:01 +08:00
parent 5d981808bf
commit a5457661ac
20 changed files with 83 additions and 77 deletions
@@ -68,7 +68,7 @@ class ChangeBookSourceAdapter(
} else { } else {
for (i in payloads.indices) { for (i in payloads.indices) {
val bundle = payloads[i] as Bundle val bundle = payloads[i] as Bundle
bundle.keySet().map { bundle.keySet().forEach {
when (it) { when (it) {
"name" -> tvOrigin.text = item.originName "name" -> tvOrigin.text = item.originName
"latest" -> tvLast.text = item.getDisplayLastChapterTitle() "latest" -> tvLast.text = item.getDisplayLastChapterTitle()
@@ -38,12 +38,12 @@ import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
import io.legado.app.utils.StartActivityContract import io.legado.app.utils.StartActivityContract
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.cnCompare
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
import io.legado.app.utils.getCompatDrawable import io.legado.app.utils.getCompatDrawable
import io.legado.app.utils.observeEvent import io.legado.app.utils.observeEvent
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@@ -407,14 +407,12 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
*/ */
private fun upGroupMenu() { private fun upGroupMenu() {
binding.toolBar.menu.findItem(R.id.menu_group)?.run { binding.toolBar.menu.findItem(R.id.menu_group)?.run {
subMenu?.let { menu -> subMenu?.transaction { menu ->
val selectedGroup = AppConfig.searchGroup val selectedGroup = AppConfig.searchGroup
menu.removeGroup(R.id.source_group) menu.removeGroup(R.id.source_group)
val allItem = menu.add(R.id.source_group, Menu.NONE, Menu.NONE, R.string.all_source) val allItem = menu.add(R.id.source_group, Menu.NONE, Menu.NONE, R.string.all_source)
var hasSelectedGroup = false var hasSelectedGroup = false
groups.sortedWith { o1, o2 -> groups.forEach { group ->
o1.cnCompare(o2)
}.forEach { group ->
menu.add(R.id.source_group, Menu.NONE, Menu.NONE, group)?.let { menu.add(R.id.source_group, Menu.NONE, Menu.NONE, group)?.let {
if (group == selectedGroup) { if (group == selectedGroup) {
it.isChecked = true it.isChecked = true
@@ -65,7 +65,7 @@ class ChangeChapterSourceAdapter(
} else { } else {
for (i in payloads.indices) { for (i in payloads.indices) {
val bundle = payloads[i] as Bundle val bundle = payloads[i] as Bundle
bundle.keySet().map { bundle.keySet().forEach {
when (it) { when (it) {
"name" -> tvOrigin.text = item.originName "name" -> tvOrigin.text = item.originName
"latest" -> tvLast.text = item.getDisplayLastChapterTitle() "latest" -> tvLast.text = item.getDisplayLastChapterTitle()
@@ -37,13 +37,13 @@ import io.legado.app.ui.book.source.manage.BookSourceActivity
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.StartActivityContract import io.legado.app.utils.StartActivityContract
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.cnCompare
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
import io.legado.app.utils.gone import io.legado.app.utils.gone
import io.legado.app.utils.observeEvent import io.legado.app.utils.observeEvent
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible import io.legado.app.utils.visible
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@@ -376,14 +376,12 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c
* 更新分组菜单 * 更新分组菜单
*/ */
private fun upGroupMenu() { private fun upGroupMenu() {
binding.toolBar.menu.findItem(R.id.menu_group)?.subMenu?.let { menu -> binding.toolBar.menu.findItem(R.id.menu_group)?.subMenu?.transaction { menu ->
val selectedGroup = AppConfig.searchGroup val selectedGroup = AppConfig.searchGroup
menu.removeGroup(R.id.source_group) menu.removeGroup(R.id.source_group)
val allItem = menu.add(R.id.source_group, Menu.NONE, Menu.NONE, R.string.all_source) val allItem = menu.add(R.id.source_group, Menu.NONE, Menu.NONE, R.string.all_source)
var hasSelectedGroup = false var hasSelectedGroup = false
groups.sortedWith { o1, o2 -> groups.forEach { group ->
o1.cnCompare(o2)
}.forEach { group ->
menu.add(R.id.source_group, Menu.NONE, Menu.NONE, group)?.let { menu.add(R.id.source_group, Menu.NONE, Menu.NONE, group)?.let {
if (group == selectedGroup) { if (group == selectedGroup) {
it.isChecked = true it.isChecked = true
@@ -44,6 +44,7 @@ import io.legado.app.utils.putPrefBoolean
import io.legado.app.utils.setEdgeEffectColor import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.showDialogFragment import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible import io.legado.app.utils.visible
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@@ -109,6 +110,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
} }
override fun onMenuOpened(featureId: Int, menu: Menu): Boolean { override fun onMenuOpened(featureId: Int, menu: Menu): Boolean {
menu.transaction {
menu.removeGroup(R.id.menu_group_1) menu.removeGroup(R.id.menu_group_1)
menu.removeGroup(R.id.menu_group_2) menu.removeGroup(R.id.menu_group_2)
var hasChecked = false var hasChecked = false
@@ -143,6 +145,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
} }
menu.setGroupCheckable(R.id.menu_group_1, true, false) menu.setGroupCheckable(R.id.menu_group_1, true, false)
menu.setGroupCheckable(R.id.menu_group_2, true, true) menu.setGroupCheckable(R.id.menu_group_2, true, true)
}
return super.onMenuOpened(featureId, menu) return super.onMenuOpened(featureId, menu)
} }
@@ -67,6 +67,7 @@ import io.legado.app.utils.showHelp
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@@ -590,7 +591,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
} }
} }
private fun upGroupMenu() = groupMenu?.let { menu -> private fun upGroupMenu() = groupMenu?.transaction { menu ->
menu.removeGroup(R.id.source_group) menu.removeGroup(R.id.source_group)
groups.forEach { groups.forEach {
menu.add(R.id.source_group, Menu.NONE, Menu.NONE, it) menu.add(R.id.source_group, Menu.NONE, Menu.NONE, it)
@@ -648,7 +649,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
adapter.itemCount, adapter.itemCount,
bundleOf(Pair("checkSourceMessage", null)) bundleOf(Pair("checkSourceMessage", null))
) )
groups.map { group -> groups.forEach { group ->
if (group.contains("失效") && searchView.query.isEmpty()) { if (group.contains("失效") && searchView.query.isEmpty()) {
searchView.setQuery("失效", true) searchView.setQuery("失效", true)
toastOnUi("发现有失效书源,已为您自动筛选!") toastOnUi("发现有失效书源,已为您自动筛选!")
@@ -104,7 +104,7 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) :
} else { } else {
for (i in payloads.indices) { for (i in payloads.indices) {
val bundle = payloads[i] as Bundle val bundle = payloads[i] as Bundle
bundle.keySet().map { bundle.keySet().forEach {
when (it) { when (it) {
"enabled" -> swtEnabled.isChecked = bundle.getBoolean("enabled") "enabled" -> swtEnabled.isChecked = bundle.getBoolean("enabled")
"upName" -> cbBookSource.text = item.getDisPlayNameGroup() "upName" -> cbBookSource.text = item.getDisPlayNameGroup()
@@ -254,7 +254,7 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application)
fun addGroup(group: String) { fun addGroup(group: String) {
execute { execute {
val sources = appDb.bookSourceDao.noGroup val sources = appDb.bookSourceDao.noGroup
sources.map { source -> sources.forEach { source ->
source.bookSourceGroup = group source.bookSourceGroup = group
} }
appDb.bookSourceDao.update(*sources.toTypedArray()) appDb.bookSourceDao.update(*sources.toTypedArray())
@@ -264,7 +264,7 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application)
fun upGroup(oldGroup: String, newGroup: String?) { fun upGroup(oldGroup: String, newGroup: String?) {
execute { execute {
val sources = appDb.bookSourceDao.getByGroup(oldGroup) val sources = appDb.bookSourceDao.getByGroup(oldGroup)
sources.map { source -> sources.forEach { source ->
source.bookSourceGroup?.splitNotBlank(",")?.toHashSet()?.let { source.bookSourceGroup?.splitNotBlank(",")?.toHashSet()?.let {
it.remove(oldGroup) it.remove(oldGroup)
if (!newGroup.isNullOrEmpty()) if (!newGroup.isNullOrEmpty())
@@ -280,7 +280,7 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application)
execute { execute {
execute { execute {
val sources = appDb.bookSourceDao.getByGroup(group) val sources = appDb.bookSourceDao.getByGroup(group)
sources.map { source -> sources.forEach { source ->
source.removeGroup(group) source.removeGroup(group)
} }
appDb.bookSourceDao.update(*sources.toTypedArray()) appDb.bookSourceDao.update(*sources.toTypedArray())
@@ -86,7 +86,7 @@ class TxtTocRuleAdapter(context: Context, private val callBack: CallBack) :
} else { } else {
for (i in payloads.indices) { for (i in payloads.indices) {
val bundle = payloads[i] as Bundle val bundle = payloads[i] as Bundle
bundle.keySet().map { bundle.keySet().forEach {
when (it) { when (it) {
"selected" -> cbSource.isChecked = selected.contains(item) "selected" -> cbSource.isChecked = selected.contains(item)
"upName" -> cbSource.text = item.name "upName" -> cbSource.text = item.name
@@ -259,7 +259,7 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex),
} else { } else {
for (i in payloads.indices) { for (i in payloads.indices) {
val bundle = payloads[i] as Bundle val bundle = payloads[i] as Bundle
bundle.keySet().map { bundle.keySet().forEach {
when (it) { when (it) {
"upName" -> rbRegexName.text = item.name "upName" -> rbRegexName.text = item.name
"upExample" -> titleExample.text = item.example "upExample" -> titleExample.text = item.example
@@ -103,7 +103,7 @@ class DictRuleAdapter(context: Context, var callBack: CallBack) :
} else { } else {
for (i in payloads.indices) { for (i in payloads.indices) {
val bundle = payloads[i] as Bundle val bundle = payloads[i] as Bundle
bundle.keySet().map { bundle.keySet().forEach {
when (it) { when (it) {
"selected" -> cbName.isChecked = selected.contains(item) "selected" -> cbName.isChecked = selected.contains(item)
"upName" -> cbName.text = item.name "upName" -> cbName.text = item.name
@@ -29,10 +29,10 @@ import io.legado.app.ui.book.search.SearchScope
import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.main.MainFragmentInterface import io.legado.app.ui.main.MainFragmentInterface
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.cnCompare
import io.legado.app.utils.flowWithLifecycleAndDatabaseChange import io.legado.app.utils.flowWithLifecycleAndDatabaseChange
import io.legado.app.utils.setEdgeEffectColor import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@@ -171,11 +171,9 @@ class ExploreFragment() : VMBaseFragment<ExploreViewModel>(R.layout.fragment_exp
} }
} }
private fun upGroupsMenu() = groupsMenu?.let { subMenu -> private fun upGroupsMenu() = groupsMenu?.transaction { subMenu ->
subMenu.removeGroup(R.id.menu_group_text) subMenu.removeGroup(R.id.menu_group_text)
groups.sortedWith { o1, o2 -> groups.forEach {
o1.cnCompare(o2)
}.forEach {
subMenu.add(R.id.menu_group_text, Menu.NONE, Menu.NONE, it) subMenu.add(R.id.menu_group_text, Menu.NONE, Menu.NONE, it)
} }
} }
@@ -28,11 +28,11 @@ import io.legado.app.ui.rss.source.edit.RssSourceEditActivity
import io.legado.app.ui.rss.source.manage.RssSourceActivity import io.legado.app.ui.rss.source.manage.RssSourceActivity
import io.legado.app.ui.rss.subscription.RuleSubActivity import io.legado.app.ui.rss.subscription.RuleSubActivity
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.cnCompare
import io.legado.app.utils.flowWithLifecycleAndDatabaseChange import io.legado.app.utils.flowWithLifecycleAndDatabaseChange
import io.legado.app.utils.openUrl import io.legado.app.utils.openUrl
import io.legado.app.utils.setEdgeEffectColor import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@@ -100,11 +100,9 @@ class RssFragment() : VMBaseFragment<RssViewModel>(R.layout.fragment_rss),
searchView.clearFocus() searchView.clearFocus()
} }
private fun upGroupsMenu() = groupsMenu?.let { subMenu -> private fun upGroupsMenu() = groupsMenu?.transaction { subMenu ->
subMenu.removeGroup(R.id.menu_group_text) subMenu.removeGroup(R.id.menu_group_text)
groups.sortedWith { o1, o2 -> groups.forEach {
o1.cnCompare(o2)
}.forEach {
subMenu.add(R.id.menu_group_text, Menu.NONE, Menu.NONE, it) subMenu.add(R.id.menu_group_text, Menu.NONE, Menu.NONE, it)
} }
} }
@@ -49,6 +49,7 @@ import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.showHelp import io.legado.app.utils.showHelp
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@@ -282,10 +283,10 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
return false return false
} }
private fun upGroupMenu() { private fun upGroupMenu() = groupMenu?.transaction { menu ->
groupMenu?.removeGroup(R.id.replace_group) menu.removeGroup(R.id.replace_group)
groups.map { groups.forEach {
groupMenu?.add(R.id.replace_group, Menu.NONE, Menu.NONE, it) menu.add(R.id.replace_group, Menu.NONE, Menu.NONE, it)
} }
} }
@@ -111,7 +111,7 @@ class ReplaceRuleAdapter(context: Context, var callBack: CallBack) :
} else { } else {
for (i in payloads.indices) { for (i in payloads.indices) {
val bundle = payloads[i] as Bundle val bundle = payloads[i] as Bundle
bundle.keySet().map { bundle.keySet().forEach {
when (it) { when (it) {
"selected" -> cbName.isChecked = selected.contains(item) "selected" -> cbName.isChecked = selected.contains(item)
"upName" -> cbName.text = item.getDisplayNameGroup() "upName" -> cbName.text = item.getDisplayNameGroup()
@@ -96,7 +96,7 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application
fun addGroup(group: String) { fun addGroup(group: String) {
execute { execute {
val sources = appDb.replaceRuleDao.noGroup val sources = appDb.replaceRuleDao.noGroup
sources.map { source -> sources.forEach { source ->
source.group = group source.group = group
} }
appDb.replaceRuleDao.update(*sources.toTypedArray()) appDb.replaceRuleDao.update(*sources.toTypedArray())
@@ -106,7 +106,7 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application
fun upGroup(oldGroup: String, newGroup: String?) { fun upGroup(oldGroup: String, newGroup: String?) {
execute { execute {
val sources = appDb.replaceRuleDao.getByGroup(oldGroup) val sources = appDb.replaceRuleDao.getByGroup(oldGroup)
sources.map { source -> sources.forEach { source ->
source.group?.splitNotBlank(",")?.toHashSet()?.let { source.group?.splitNotBlank(",")?.toHashSet()?.let {
it.remove(oldGroup) it.remove(oldGroup)
if (!newGroup.isNullOrEmpty()) if (!newGroup.isNullOrEmpty())
@@ -122,7 +122,7 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application
execute { execute {
execute { execute {
val sources = appDb.replaceRuleDao.getByGroup(group) val sources = appDb.replaceRuleDao.getByGroup(group)
sources.map { source -> sources.forEach { source ->
source.group?.splitNotBlank(",")?.toHashSet()?.let { source.group?.splitNotBlank(",")?.toHashSet()?.let {
it.remove(group) it.remove(group)
source.group = TextUtils.join(",", it) source.group = TextUtils.join(",", it)
@@ -32,7 +32,6 @@ import io.legado.app.ui.widget.recycler.ItemTouchCallback
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.ACache import io.legado.app.utils.ACache
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.cnCompare
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
import io.legado.app.utils.hideSoftInput import io.legado.app.utils.hideSoftInput
import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isAbsUrl
@@ -47,6 +46,7 @@ import io.legado.app.utils.showHelp
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@@ -308,11 +308,9 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
} }
} }
private fun upGroupMenu() = groupMenu?.let { menu -> private fun upGroupMenu() = groupMenu?.transaction { menu ->
menu.removeGroup(R.id.source_group) menu.removeGroup(R.id.source_group)
groups.sortedWith { o1, o2 -> groups.forEach {
o1.cnCompare(o2)
}.map {
menu.add(R.id.source_group, Menu.NONE, Menu.NONE, it) menu.add(R.id.source_group, Menu.NONE, Menu.NONE, it)
} }
} }
@@ -81,7 +81,7 @@ class RssSourceAdapter(context: Context, val callBack: CallBack) :
} else { } else {
for (i in payloads.indices) { for (i in payloads.indices) {
val bundle = payloads[i] as Bundle val bundle = payloads[i] as Bundle
bundle.keySet().map { bundle.keySet().forEach {
when (it) { when (it) {
"upName" -> cbSource.text = item.getDisplayNameGroup() "upName" -> cbSource.text = item.getDisplayNameGroup()
"enabled" -> swtEnabled.isChecked = bundle.getBoolean("enabled") "enabled" -> swtEnabled.isChecked = bundle.getBoolean("enabled")
@@ -113,7 +113,7 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application)
fun addGroup(group: String) { fun addGroup(group: String) {
execute { execute {
val sources = appDb.rssSourceDao.noGroup val sources = appDb.rssSourceDao.noGroup
sources.map { source -> sources.forEach { source ->
source.sourceGroup = group source.sourceGroup = group
} }
appDb.rssSourceDao.update(*sources.toTypedArray()) appDb.rssSourceDao.update(*sources.toTypedArray())
@@ -123,7 +123,7 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application)
fun upGroup(oldGroup: String, newGroup: String?) { fun upGroup(oldGroup: String, newGroup: String?) {
execute { execute {
val sources = appDb.rssSourceDao.getByGroup(oldGroup) val sources = appDb.rssSourceDao.getByGroup(oldGroup)
sources.map { source -> sources.forEach { source ->
source.sourceGroup?.splitNotBlank(",")?.toHashSet()?.let { source.sourceGroup?.splitNotBlank(",")?.toHashSet()?.let {
it.remove(oldGroup) it.remove(oldGroup)
if (!newGroup.isNullOrEmpty()) if (!newGroup.isNullOrEmpty())
@@ -139,7 +139,7 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application)
execute { execute {
execute { execute {
val sources = appDb.rssSourceDao.getByGroup(group) val sources = appDb.rssSourceDao.getByGroup(group)
sources.map { source -> sources.forEach { source ->
source.sourceGroup?.splitNotBlank(",")?.toHashSet()?.let { source.sourceGroup?.splitNotBlank(",")?.toHashSet()?.let {
it.remove(group) it.remove(group)
source.sourceGroup = TextUtils.join(",", it) source.sourceGroup = TextUtils.join(",", it)
@@ -80,6 +80,17 @@ fun Menu.iconItemOnLongClick(id: Int, function: (view: View) -> Unit) {
} }
} }
@SuppressLint("RestrictedApi")
inline fun Menu.transaction(block: (Menu) -> Unit) {
val menuBuilder = this as? MenuBuilder
menuBuilder?.stopDispatchingItemsChanged()
try {
block(this)
} finally {
menuBuilder?.startDispatchingItemsChanged()
}
}
object MenuExtensions { object MenuExtensions {
fun getMenuColor( fun getMenuColor(