优化
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user