替换管理添加置顶所选和置底所选

pull/1161/head 3.21.072310
gedoor 3 years ago
parent 6642ded3f9
commit 63c310a129
  1. 28
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
  2. 21
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt
  3. 16
      app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt
  4. 21
      app/src/main/java/io/legado/app/ui/replace/ReplaceRuleAdapter.kt
  5. 20
      app/src/main/java/io/legado/app/ui/replace/ReplaceRuleViewModel.kt
  6. 20
      app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt
  7. 21
      app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceAdapter.kt
  8. 4
      app/src/main/res/menu/book_source_sel.xml
  9. 10
      app/src/main/res/menu/replace_rule_sel.xml
  10. 4
      app/src/main/res/menu/rss_source_sel.xml
  11. 2
      app/src/main/res/values-es-rES/strings.xml
  12. 2
      app/src/main/res/values-ja-rJP/strings.xml
  13. 2
      app/src/main/res/values-pt-rBR/strings.xml
  14. 4
      app/src/main/res/values-zh-rHK/strings.xml
  15. 2
      app/src/main/res/values-zh-rTW/strings.xml
  16. 2
      app/src/main/res/values-zh/strings.xml
  17. 2
      app/src/main/res/values/strings.xml

@ -84,11 +84,11 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
uri ?: return@registerForActivityResult uri ?: return@registerForActivityResult
if (uri.isContentScheme()) { if (uri.isContentScheme()) {
DocumentFile.fromTreeUri(this, uri)?.let { DocumentFile.fromTreeUri(this, uri)?.let {
viewModel.exportSelection(adapter.getSelection(), it) viewModel.exportSelection(adapter.selection, it)
} }
} else { } else {
uri.path?.let { uri.path?.let {
viewModel.exportSelection(adapter.getSelection(), File(it)) viewModel.exportSelection(adapter.selection, File(it))
} }
} }
} }
@ -122,7 +122,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
when (item.itemId) { when (item.itemId) {
R.id.menu_add_book_source -> startActivity<BookSourceEditActivity>() R.id.menu_add_book_source -> startActivity<BookSourceEditActivity>()
R.id.menu_import_qr -> qrResult.launch(null) R.id.menu_import_qr -> qrResult.launch(null)
R.id.menu_share_source -> viewModel.shareSelection(adapter.getSelection()) { R.id.menu_share_source -> viewModel.shareSelection(adapter.selection) {
startActivity(Intent.createChooser(it, getString(R.string.share_selected_source))) startActivity(Intent.createChooser(it, getString(R.string.share_selected_source)))
} }
R.id.menu_group_manage -> R.id.menu_group_manage ->
@ -302,7 +302,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
override fun onClickMainAction() { override fun onClickMainAction() {
alert(titleResource = R.string.draw, messageResource = R.string.sure_del) { alert(titleResource = R.string.draw, messageResource = R.string.sure_del) {
okButton { viewModel.delSelection(adapter.getSelection()) } okButton { viewModel.delSelection(adapter.selection) }
noButton() noButton()
}.show() }.show()
} }
@ -316,13 +316,13 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
override fun onMenuItemClick(item: MenuItem?): Boolean { override fun onMenuItemClick(item: MenuItem?): Boolean {
when (item?.itemId) { when (item?.itemId) {
R.id.menu_enable_selection -> viewModel.enableSelection(adapter.getSelection()) R.id.menu_enable_selection -> viewModel.enableSelection(adapter.selection)
R.id.menu_disable_selection -> viewModel.disableSelection(adapter.getSelection()) R.id.menu_disable_selection -> viewModel.disableSelection(adapter.selection)
R.id.menu_enable_explore -> viewModel.enableSelectExplore(adapter.getSelection()) R.id.menu_enable_explore -> viewModel.enableSelectExplore(adapter.selection)
R.id.menu_disable_explore -> viewModel.disableSelectExplore(adapter.getSelection()) R.id.menu_disable_explore -> viewModel.disableSelectExplore(adapter.selection)
R.id.menu_check_source -> checkSource() R.id.menu_check_source -> checkSource()
R.id.menu_top_sel -> viewModel.topSource(*adapter.getSelection().toTypedArray()) R.id.menu_top_sel -> viewModel.topSource(*adapter.selection.toTypedArray())
R.id.menu_bottom_sel -> viewModel.bottomSource(*adapter.getSelection().toTypedArray()) R.id.menu_bottom_sel -> viewModel.bottomSource(*adapter.selection.toTypedArray())
R.id.menu_add_group -> selectionAddToGroups() R.id.menu_add_group -> selectionAddToGroups()
R.id.menu_remove_group -> selectionRemoveFromGroups() R.id.menu_remove_group -> selectionRemoveFromGroups()
R.id.menu_export_selection -> exportDir.launch(null) R.id.menu_export_selection -> exportDir.launch(null)
@ -343,7 +343,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
CheckSource.keyword = it CheckSource.keyword = it
} }
} }
CheckSource.start(this@BookSourceActivity, adapter.getSelection()) CheckSource.start(this@BookSourceActivity, adapter.selection)
} }
noButton() noButton()
}.show() }.show()
@ -361,7 +361,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
okButton { okButton {
alertBinding.editView.text?.toString()?.let { alertBinding.editView.text?.toString()?.let {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
viewModel.selectionAddToGroups(adapter.getSelection(), it) viewModel.selectionAddToGroups(adapter.selection, it)
} }
} }
} }
@ -381,7 +381,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
okButton { okButton {
alertBinding.editView.text?.toString()?.let { alertBinding.editView.text?.toString()?.let {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
viewModel.selectionRemoveFromGroups(adapter.getSelection(), it) viewModel.selectionRemoveFromGroups(adapter.selection, it)
} }
} }
} }
@ -454,7 +454,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
override fun upCountView() { override fun upCountView() {
binding.selectActionBar binding.selectActionBar
.upCountView(adapter.getSelection().size, adapter.itemCount) .upCountView(adapter.selection.size, adapter.itemCount)
} }
override fun onQueryTextChange(newText: String?): Boolean { override fun onQueryTextChange(newText: String?): Boolean {

@ -29,6 +29,17 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) :
private val selected = linkedSetOf<BookSource>() private val selected = linkedSetOf<BookSource>()
val selection: List<BookSource>
get() {
val selection = arrayListOf<BookSource>()
getItems().map {
if (selected.contains(it)) {
selection.add(it)
}
}
return selection.sortedBy { it.customOrder }
}
val diffItemCallback: DiffUtil.ItemCallback<BookSource> val diffItemCallback: DiffUtil.ItemCallback<BookSource>
get() = object : DiffUtil.ItemCallback<BookSource>() { get() = object : DiffUtil.ItemCallback<BookSource>() {
@ -213,16 +224,6 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) :
callBack.upCountView() callBack.upCountView()
} }
fun getSelection(): List<BookSource> {
val selection = arrayListOf<BookSource>()
getItems().map {
if (selected.contains(it)) {
selection.add(it)
}
}
return selection.sortedBy { it.customOrder }
}
override fun swap(srcPosition: Int, targetPosition: Int): Boolean { override fun swap(srcPosition: Int, targetPosition: Int): Boolean {
val srcItem = getItem(srcPosition) val srcItem = getItem(srcPosition)
val targetItem = getItem(targetPosition) val targetItem = getItem(targetPosition)

@ -89,11 +89,11 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
uri ?: return@registerForActivityResult uri ?: return@registerForActivityResult
if (uri.isContentScheme()) { if (uri.isContentScheme()) {
DocumentFile.fromTreeUri(this, uri)?.let { DocumentFile.fromTreeUri(this, uri)?.let {
viewModel.exportSelection(adapter.getSelection(), it) viewModel.exportSelection(adapter.selection, it)
} }
} else { } else {
uri.path?.let { uri.path?.let {
viewModel.exportSelection(adapter.getSelection(), File(it)) viewModel.exportSelection(adapter.selection, File(it))
} }
} }
} }
@ -169,7 +169,7 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
private fun delSourceDialog() { private fun delSourceDialog() {
alert(titleResource = R.string.draw, messageResource = R.string.sure_del) { alert(titleResource = R.string.draw, messageResource = R.string.sure_del) {
okButton { viewModel.delSelection(adapter.getSelection()) } okButton { viewModel.delSelection(adapter.selection) }
noButton() noButton()
}.show() }.show()
} }
@ -218,7 +218,7 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
R.id.menu_group_manage -> R.id.menu_group_manage ->
GroupManageDialog().show(supportFragmentManager, "groupManage") GroupManageDialog().show(supportFragmentManager, "groupManage")
R.id.menu_del_selection -> viewModel.delSelection(adapter.getSelection()) R.id.menu_del_selection -> viewModel.delSelection(adapter.selection)
R.id.menu_import_onLine -> showImportDialog() R.id.menu_import_onLine -> showImportDialog()
R.id.menu_import_local -> importDoc.launch( R.id.menu_import_local -> importDoc.launch(
FilePickerParam( FilePickerParam(
@ -237,8 +237,10 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
override fun onMenuItemClick(item: MenuItem?): Boolean { override fun onMenuItemClick(item: MenuItem?): Boolean {
when (item?.itemId) { when (item?.itemId) {
R.id.menu_enable_selection -> viewModel.enableSelection(adapter.getSelection()) R.id.menu_enable_selection -> viewModel.enableSelection(adapter.selection)
R.id.menu_disable_selection -> viewModel.disableSelection(adapter.getSelection()) R.id.menu_disable_selection -> viewModel.disableSelection(adapter.selection)
R.id.menu_top_sel -> viewModel.topSelect(adapter.selection)
R.id.menu_bottom_sel -> viewModel.bottomSelect(adapter.selection)
R.id.menu_export_selection -> exportDir.launch(null) R.id.menu_export_selection -> exportDir.launch(null)
} }
return false return false
@ -304,7 +306,7 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
override fun upCountView() { override fun upCountView() {
binding.selectActionBar.upCountView( binding.selectActionBar.upCountView(
adapter.getSelection().size, adapter.selection.size,
adapter.itemCount adapter.itemCount
) )
} }

@ -27,6 +27,17 @@ class ReplaceRuleAdapter(context: Context, var callBack: CallBack) :
private val selected = linkedSetOf<ReplaceRule>() private val selected = linkedSetOf<ReplaceRule>()
val selection: LinkedHashSet<ReplaceRule>
get() {
val selection = linkedSetOf<ReplaceRule>()
getItems().map {
if (selected.contains(it)) {
selection.add(it)
}
}
return selection
}
val diffItemCallBack = object : DiffUtil.ItemCallback<ReplaceRule>() { val diffItemCallBack = object : DiffUtil.ItemCallback<ReplaceRule>() {
override fun areItemsTheSame(oldItem: ReplaceRule, newItem: ReplaceRule): Boolean { override fun areItemsTheSame(oldItem: ReplaceRule, newItem: ReplaceRule): Boolean {
@ -84,16 +95,6 @@ class ReplaceRuleAdapter(context: Context, var callBack: CallBack) :
callBack.upCountView() callBack.upCountView()
} }
fun getSelection(): LinkedHashSet<ReplaceRule> {
val selection = linkedSetOf<ReplaceRule>()
getItems().map {
if (selected.contains(it)) {
selection.add(it)
}
}
return selection
}
override fun getViewBinding(parent: ViewGroup): ItemReplaceRuleBinding { override fun getViewBinding(parent: ViewGroup): ItemReplaceRuleBinding {
return ItemReplaceRuleBinding.inflate(inflater, parent, false) return ItemReplaceRuleBinding.inflate(inflater, parent, false)
} }

@ -30,6 +30,16 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application
} }
} }
fun topSelect(rules: LinkedHashSet<ReplaceRule>) {
execute {
var minOrder = appDb.replaceRuleDao.minOrder - rules.size
rules.forEach {
it.order = ++minOrder
}
appDb.replaceRuleDao.update(*rules.toTypedArray())
}
}
fun toBottom(rule: ReplaceRule) { fun toBottom(rule: ReplaceRule) {
execute { execute {
rule.order = appDb.replaceRuleDao.maxOrder + 1 rule.order = appDb.replaceRuleDao.maxOrder + 1
@ -37,6 +47,16 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application
} }
} }
fun bottomSelect(rules: LinkedHashSet<ReplaceRule>) {
execute {
var maxOrder = appDb.replaceRuleDao.maxOrder
rules.forEach {
it.order = maxOrder++
}
appDb.replaceRuleDao.update(*rules.toTypedArray())
}
}
fun upOrder() { fun upOrder() {
execute { execute {
val rules = appDb.replaceRuleDao.all val rules = appDb.replaceRuleDao.all

@ -77,11 +77,11 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
uri ?: return@registerForActivityResult uri ?: return@registerForActivityResult
if (uri.isContentScheme()) { if (uri.isContentScheme()) {
DocumentFile.fromTreeUri(this, uri)?.let { DocumentFile.fromTreeUri(this, uri)?.let {
viewModel.exportSelection(adapter.getSelection(), it) viewModel.exportSelection(adapter.selection, it)
} }
} else { } else {
uri.path?.let { uri.path?.let {
viewModel.exportSelection(adapter.getSelection(), File(it)) viewModel.exportSelection(adapter.selection, File(it))
} }
} }
} }
@ -118,7 +118,7 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
R.id.menu_import_qr -> qrCodeResult.launch(null) R.id.menu_import_qr -> qrCodeResult.launch(null)
R.id.menu_group_manage -> GroupManageDialog() R.id.menu_group_manage -> GroupManageDialog()
.show(supportFragmentManager, "rssGroupManage") .show(supportFragmentManager, "rssGroupManage")
R.id.menu_share_source -> viewModel.shareSelection(adapter.getSelection()) { R.id.menu_share_source -> viewModel.shareSelection(adapter.selection) {
startActivity(Intent.createChooser(it, getString(R.string.share_selected_source))) startActivity(Intent.createChooser(it, getString(R.string.share_selected_source)))
} }
R.id.menu_import_default -> viewModel.importDefault() R.id.menu_import_default -> viewModel.importDefault()
@ -133,12 +133,12 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
override fun onMenuItemClick(item: MenuItem?): Boolean { override fun onMenuItemClick(item: MenuItem?): Boolean {
when (item?.itemId) { when (item?.itemId) {
R.id.menu_enable_selection -> viewModel.enableSelection(adapter.getSelection()) R.id.menu_enable_selection -> viewModel.enableSelection(adapter.selection)
R.id.menu_disable_selection -> viewModel.disableSelection(adapter.getSelection()) R.id.menu_disable_selection -> viewModel.disableSelection(adapter.selection)
R.id.menu_del_selection -> viewModel.delSelection(adapter.getSelection()) R.id.menu_del_selection -> viewModel.delSelection(adapter.selection)
R.id.menu_export_selection -> exportDir.launch(null) R.id.menu_export_selection -> exportDir.launch(null)
R.id.menu_top_sel -> viewModel.topSource(*adapter.getSelection().toTypedArray()) R.id.menu_top_sel -> viewModel.topSource(*adapter.selection.toTypedArray())
R.id.menu_bottom_sel -> viewModel.bottomSource(*adapter.getSelection().toTypedArray()) R.id.menu_bottom_sel -> viewModel.bottomSource(*adapter.selection.toTypedArray())
} }
return true return true
} }
@ -215,7 +215,7 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
private fun delSourceDialog() { private fun delSourceDialog() {
alert(titleResource = R.string.draw, messageResource = R.string.sure_del) { alert(titleResource = R.string.draw, messageResource = R.string.sure_del) {
okButton { viewModel.delSelection(adapter.getSelection()) } okButton { viewModel.delSelection(adapter.selection) }
noButton() noButton()
}.show() }.show()
} }
@ -256,7 +256,7 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
override fun upCountView() { override fun upCountView() {
binding.selectActionBar.upCountView( binding.selectActionBar.upCountView(
adapter.getSelection().size, adapter.selection.size,
adapter.itemCount adapter.itemCount
) )
} }

@ -25,6 +25,17 @@ class RssSourceAdapter(context: Context, val callBack: CallBack) :
private val selected = linkedSetOf<RssSource>() private val selected = linkedSetOf<RssSource>()
val selection: List<RssSource>
get() {
val selection = arrayListOf<RssSource>()
getItems().forEach {
if (selected.contains(it)) {
selection.add(it)
}
}
return selection.sortedBy { it.customOrder }
}
val diffItemCallback: DiffUtil.ItemCallback<RssSource> val diffItemCallback: DiffUtil.ItemCallback<RssSource>
get() = object : DiffUtil.ItemCallback<RssSource>() { get() = object : DiffUtil.ItemCallback<RssSource>() {
@ -149,16 +160,6 @@ class RssSourceAdapter(context: Context, val callBack: CallBack) :
callBack.upCountView() callBack.upCountView()
} }
fun getSelection(): List<RssSource> {
val selection = arrayListOf<RssSource>()
getItems().forEach {
if (selected.contains(it)) {
selection.add(it)
}
}
return selection.sortedBy { it.customOrder }
}
private fun showMenu(view: View, position: Int) { private fun showMenu(view: View, position: Int) {
val source = getItem(position) ?: return val source = getItem(position) ?: return
val popupMenu = PopupMenu(context, view) val popupMenu = PopupMenu(context, view)

@ -34,12 +34,12 @@
<item <item
android:id="@+id/menu_top_sel" android:id="@+id/menu_top_sel"
android:title="@string/to_top" android:title="@string/selection_to_top"
app:showAsAction="never" /> app:showAsAction="never" />
<item <item
android:id="@+id/menu_bottom_sel" android:id="@+id/menu_bottom_sel"
android:title="@string/to_bottom" android:title="@string/selection_to_bottom"
app:showAsAction="never" /> app:showAsAction="never" />
<item <item

@ -12,6 +12,16 @@
android:title="@string/disable_selection" android:title="@string/disable_selection"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/menu_top_sel"
android:title="@string/selection_to_top"
app:showAsAction="never" />
<item
android:id="@+id/menu_bottom_sel"
android:title="@string/selection_to_bottom"
app:showAsAction="never" />
<item <item
android:id="@+id/menu_export_selection" android:id="@+id/menu_export_selection"
android:title="@string/export_selection" android:title="@string/export_selection"

@ -14,12 +14,12 @@
<item <item
android:id="@+id/menu_top_sel" android:id="@+id/menu_top_sel"
android:title="@string/to_top" android:title="@string/selection_to_top"
app:showAsAction="never" /> app:showAsAction="never" />
<item <item
android:id="@+id/menu_bottom_sel" android:id="@+id/menu_bottom_sel"
android:title="@string/to_bottom" android:title="@string/selection_to_bottom"
app:showAsAction="never" /> app:showAsAction="never" />
<item <item

@ -317,7 +317,9 @@
<string name="line_size">Espacio entre líneas</string> <string name="line_size">Espacio entre líneas</string>
<string name="paragraph_size">Espacio entre párrafos</string> <string name="paragraph_size">Espacio entre párrafos</string>
<string name="to_top">Encima</string> <string name="to_top">Encima</string>
<string name="selection_to_top">Selection To Top</string>
<string name="to_bottom">Debajo</string> <string name="to_bottom">Debajo</string>
<string name="selection_to_bottom">Selection To Bottom</string>
<string name="auto_expand_find">Autoexpandir Descubrir</string> <string name="auto_expand_find">Autoexpandir Descubrir</string>
<string name="default_expand_first">Expande por defecto la primera parte de Descubrir.</string> <string name="default_expand_first">Expande por defecto la primera parte de Descubrir.</string>
<string name="threads_num">Líneas actuales %s</string> <string name="threads_num">Líneas actuales %s</string>

@ -317,7 +317,9 @@
<string name="line_size">Line spacing</string> <string name="line_size">Line spacing</string>
<string name="paragraph_size">Paragraph spacing</string> <string name="paragraph_size">Paragraph spacing</string>
<string name="to_top">To Top</string> <string name="to_top">To Top</string>
<string name="selection_to_top">Selection To Top</string>
<string name="to_bottom">To Bottom</string> <string name="to_bottom">To Bottom</string>
<string name="selection_to_bottom">Selection To Bottom</string>
<string name="auto_expand_find">Auto expand Discovery</string> <string name="auto_expand_find">Auto expand Discovery</string>
<string name="default_expand_first">Default expand the first Discovery.</string> <string name="default_expand_first">Default expand the first Discovery.</string>
<string name="threads_num">Current threads %s</string> <string name="threads_num">Current threads %s</string>

@ -317,7 +317,9 @@
<string name="line_size">Espaço entre linhas</string> <string name="line_size">Espaço entre linhas</string>
<string name="paragraph_size">Espaço entre parágrafos</string> <string name="paragraph_size">Espaço entre parágrafos</string>
<string name="to_top">Ao parte superior</string> <string name="to_top">Ao parte superior</string>
<string name="selection_to_top">Selection To Top</string>
<string name="to_bottom">Ao fundo</string> <string name="to_bottom">Ao fundo</string>
<string name="selection_to_bottom">Selection To Bottom</string>
<string name="auto_expand_find">Expansão automática de Descoberta</string> <string name="auto_expand_find">Expansão automática de Descoberta</string>
<string name="default_expand_first">A expansão padrão da primeira Descoberta.</string> <string name="default_expand_first">A expansão padrão da primeira Descoberta.</string>
<string name="threads_num">Linhas atuais %s</string> <string name="threads_num">Linhas atuais %s</string>

@ -314,6 +314,9 @@
<string name="line_size">行距</string> <string name="line_size">行距</string>
<string name="paragraph_size">段距</string> <string name="paragraph_size">段距</string>
<string name="to_top">置頂</string> <string name="to_top">置頂</string>
<string name="selection_to_top">置頂所選</string>
<string name="to_bottom">置底</string>
<string name="selection_to_bottom">置底所選</string>
<string name="auto_expand_find">自動展開發現</string> <string name="auto_expand_find">自動展開發現</string>
<string name="default_expand_first">默認展開第一組發現</string> <string name="default_expand_first">默認展開第一組發現</string>
<string name="threads_num">當前線程數 %s</string> <string name="threads_num">當前線程數 %s</string>
@ -698,7 +701,6 @@
<string name="night_background_color">夜間,背景色</string> <string name="night_background_color">夜間,背景色</string>
<string name="night_navbar_color">夜間,導航欄顏色</string> <string name="night_navbar_color">夜間,導航欄顏色</string>
<string name="auto_change_source">自動換源</string> <string name="auto_change_source">自動換源</string>
<string name="to_bottom">置底</string>
<string name="text_full_justify">文字兩端對齊</string> <string name="text_full_justify">文字兩端對齊</string>
<string name="auto_page_speed">自動翻頁速度</string> <string name="auto_page_speed">自動翻頁速度</string>
<string name="sort_by_url">地址排序</string> <string name="sort_by_url">地址排序</string>

@ -316,7 +316,9 @@
<string name="line_size">行距</string> <string name="line_size">行距</string>
<string name="paragraph_size">段距</string> <string name="paragraph_size">段距</string>
<string name="to_top">置頂</string> <string name="to_top">置頂</string>
<string name="selection_to_top">置頂所選</string>
<string name="to_bottom">置底</string> <string name="to_bottom">置底</string>
<string name="selection_to_bottom">置底所選</string>
<string name="auto_expand_find">自動展開發現</string> <string name="auto_expand_find">自動展開發現</string>
<string name="default_expand_first">預設展開第一組發現</string> <string name="default_expand_first">預設展開第一組發現</string>
<string name="threads_num">目前執行緒數 %s</string> <string name="threads_num">目前執行緒數 %s</string>

@ -316,7 +316,9 @@
<string name="line_size">行距</string> <string name="line_size">行距</string>
<string name="paragraph_size">段距</string> <string name="paragraph_size">段距</string>
<string name="to_top">置顶</string> <string name="to_top">置顶</string>
<string name="selection_to_top">置顶所选</string>
<string name="to_bottom">置底</string> <string name="to_bottom">置底</string>
<string name="selection_to_bottom">置底所选</string>
<string name="auto_expand_find">自动展开发现</string> <string name="auto_expand_find">自动展开发现</string>
<string name="default_expand_first">默认展开第一组发现</string> <string name="default_expand_first">默认展开第一组发现</string>
<string name="threads_num">当前线程数 %s</string> <string name="threads_num">当前线程数 %s</string>

@ -317,7 +317,9 @@
<string name="line_size">Line spacing</string> <string name="line_size">Line spacing</string>
<string name="paragraph_size">Paragraph spacing</string> <string name="paragraph_size">Paragraph spacing</string>
<string name="to_top">To Top</string> <string name="to_top">To Top</string>
<string name="selection_to_top">Selection To Top</string>
<string name="to_bottom">To Bottom</string> <string name="to_bottom">To Bottom</string>
<string name="selection_to_bottom">Selection To Bottom</string>
<string name="auto_expand_find">Auto expand Discovery</string> <string name="auto_expand_find">Auto expand Discovery</string>
<string name="default_expand_first">Default expand the first Discovery.</string> <string name="default_expand_first">Default expand the first Discovery.</string>
<string name="threads_num">Current threads %s</string> <string name="threads_num">Current threads %s</string>

Loading…
Cancel
Save