mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -13,19 +13,14 @@ import io.legado.app.databinding.ActivityImportBookBinding
|
||||
import io.legado.app.lib.theme.backgroundColor
|
||||
import io.legado.app.ui.about.AppLogDialog
|
||||
import io.legado.app.ui.book.remote.manager.RemoteBookWebDav
|
||||
import io.legado.app.ui.book.source.manage.BookSourceActivity
|
||||
import io.legado.app.ui.widget.SelectActionBar
|
||||
import io.legado.app.ui.widget.dialog.WaitDialog
|
||||
import io.legado.app.utils.cnCompare
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
import io.legado.app.utils.toastOnUi
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.conflate
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.File
|
||||
import java.util.ArrayList
|
||||
|
||||
/**
|
||||
* 展示远程书籍
|
||||
@@ -40,8 +35,6 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
|
||||
private val adapter by lazy { RemoteBookAdapter(this, this) }
|
||||
private val waitDialog by lazy { WaitDialog(this) }
|
||||
private var groupMenu: SubMenu? = null
|
||||
private var sortKey = Sort.Default
|
||||
private var sortAscending = false
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
binding.titleBar.setTitle(R.string.remote_book)
|
||||
initView()
|
||||
@@ -58,57 +51,18 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
|
||||
}
|
||||
|
||||
private fun sortCheck(sortKey: Sort) {
|
||||
if (this.sortKey == sortKey) {
|
||||
sortAscending = !sortAscending
|
||||
if (viewModel.sortKey == sortKey) {
|
||||
viewModel.sortAscending = !viewModel.sortAscending
|
||||
} else {
|
||||
sortAscending = true
|
||||
this.sortKey = sortKey
|
||||
viewModel.sortAscending = true
|
||||
viewModel.sortKey = sortKey
|
||||
}
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
binding.refreshProgressBar.isAutoLoading = true
|
||||
launch {
|
||||
viewModel.dataFlow.conflate().map { remoteBooks ->
|
||||
|
||||
val dirList = ArrayList<RemoteBook>()
|
||||
val bookList = ArrayList<RemoteBook>()
|
||||
|
||||
remoteBooks.forEach {
|
||||
if (it.isDir)
|
||||
dirList.add(it)
|
||||
else
|
||||
bookList.add(it)
|
||||
}
|
||||
//默认情况下,为按修改时间倒序显示
|
||||
if (sortAscending) when (sortKey) {
|
||||
Sort.Name -> {
|
||||
dirList.sortedBy { it.filename } +
|
||||
bookList.sortedBy { it.filename }
|
||||
}
|
||||
Sort.UpdateTime -> {
|
||||
dirList.sortedBy { it.lastModify } +
|
||||
bookList.sortedBy { it.lastModify }
|
||||
}
|
||||
else -> dirList + bookList
|
||||
}
|
||||
else when (sortKey) {
|
||||
|
||||
Sort.Name -> {
|
||||
dirList.sortedByDescending { it.filename } +
|
||||
bookList.sortedByDescending { it.filename }
|
||||
}
|
||||
Sort.UpdateTime -> {
|
||||
dirList.sortedByDescending { it.lastModify } +
|
||||
bookList.sortedByDescending { it.lastModify }
|
||||
}
|
||||
//按修改时间倒序显示
|
||||
else -> {
|
||||
dirList.sortedByDescending { it.lastModify } +
|
||||
bookList.sortedByDescending { it.lastModify }
|
||||
}
|
||||
}
|
||||
|
||||
}.conflate().collect { sortedRemoteBooks ->
|
||||
viewModel.dataFlow.conflate().collect { sortedRemoteBooks ->
|
||||
binding.refreshProgressBar.isAutoLoading = false
|
||||
binding.tvEmptyMsg.isGone = sortedRemoteBooks.isNotEmpty()
|
||||
adapter.setItems(sortedRemoteBooks)
|
||||
@@ -120,7 +74,7 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
|
||||
|
||||
private fun initEvent() {
|
||||
binding.tvGoBack.setOnClickListener {
|
||||
goBackDir()
|
||||
goBackDir()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,22 +87,14 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
|
||||
when (item.itemId) {
|
||||
R.id.menu_refresh -> upPath()
|
||||
R.id.menu_log -> showDialogFragment<AppLogDialog>()
|
||||
R.id.menu_sort_auto -> {
|
||||
item.isChecked = true
|
||||
toastOnUi("menu_sort_auto")
|
||||
sortCheck(Sort.Default)
|
||||
upPath()
|
||||
}
|
||||
R.id.menu_sort_name -> {
|
||||
item.isChecked = true
|
||||
toastOnUi("menu_sort_name")
|
||||
sortCheck(Sort.Name)
|
||||
upPath()
|
||||
}
|
||||
R.id.menu_sort_time -> {
|
||||
item.isChecked = true
|
||||
toastOnUi("menu_sort_time")
|
||||
sortCheck(Sort.UpdateTime)
|
||||
sortCheck(Sort.Default)
|
||||
upPath()
|
||||
}
|
||||
}
|
||||
@@ -158,8 +104,11 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
|
||||
override fun onPrepareOptionsMenu(menu: Menu): Boolean {
|
||||
groupMenu = menu.findItem(R.id.menu_sort)?.subMenu
|
||||
groupMenu?.setGroupCheckable(R.id.menu_group_sort, true, true)
|
||||
groupMenu?.findItem(R.id.menu_sort_name)?.isChecked = viewModel.sortKey == Sort.Name
|
||||
groupMenu?.findItem(R.id.menu_sort_time)?.isChecked = viewModel.sortKey == Sort.Default
|
||||
return super.onPrepareOptionsMenu(menu)
|
||||
}
|
||||
|
||||
override fun revertSelection() {
|
||||
adapter.revertSelection()
|
||||
}
|
||||
@@ -221,7 +170,4 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
|
||||
binding.selectActionBar.upCountView(adapter.selected.size, adapter.checkableCount)
|
||||
}
|
||||
|
||||
enum class Sort {
|
||||
Default, Name, UpdateTime
|
||||
}
|
||||
}
|
||||
@@ -10,10 +10,12 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
import kotlinx.coroutines.flow.callbackFlow
|
||||
import kotlinx.coroutines.flow.flowOn
|
||||
import kotlinx.coroutines.flow.map
|
||||
import java.util.*
|
||||
|
||||
class RemoteBookViewModel(application: Application): BaseViewModel(application){
|
||||
|
||||
class RemoteBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
var sortKey = Sort.Default
|
||||
var sortAscending = false
|
||||
val dirList = arrayListOf<RemoteBook>()
|
||||
|
||||
var dataCallback: DataCallback? = null
|
||||
@@ -44,6 +46,14 @@ class RemoteBookViewModel(application: Application): BaseViewModel(application){
|
||||
awaitClose {
|
||||
dataCallback = null
|
||||
}
|
||||
}.map { list ->
|
||||
if (sortAscending) when (sortKey) {
|
||||
Sort.Name -> list.sortedWith(compareBy({ !it.isDir }, { it.filename }))
|
||||
else -> list.sortedWith(compareBy({ !it.isDir }, { it.lastModify }))
|
||||
} else when (sortKey) {
|
||||
Sort.Name -> list.sortedWith(compareBy({ it.isDir }, { it.filename })).reversed()
|
||||
else -> list.sortedWith(compareBy({ it.isDir }, { it.lastModify })).reversed()
|
||||
}
|
||||
}.flowOn(Dispatchers.IO)
|
||||
|
||||
init {
|
||||
|
||||
5
app/src/main/java/io/legado/app/ui/book/remote/Sort.kt
Normal file
5
app/src/main/java/io/legado/app/ui/book/remote/Sort.kt
Normal file
@@ -0,0 +1,5 @@
|
||||
package io.legado.app.ui.book.remote
|
||||
|
||||
enum class Sort {
|
||||
Default, Name
|
||||
}
|
||||
@@ -20,12 +20,6 @@
|
||||
android:id="@+id/menu_group_sort"
|
||||
android:checkableBehavior="single">
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_sort_default"
|
||||
android:checkable="true"
|
||||
android:checked="true"
|
||||
android:title="@string/sort_default" />
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_sort_name"
|
||||
android:checkable="true"
|
||||
@@ -36,7 +30,6 @@
|
||||
android:checkable="true"
|
||||
android:title="@string/sort_by_lastUpdateTime" />
|
||||
|
||||
|
||||
</group>
|
||||
|
||||
</menu>
|
||||
|
||||
Reference in New Issue
Block a user