|
@@ -1,6 +1,5 @@
|
|
|
package io.legado.app.ui.book.remote
|
|
package io.legado.app.ui.book.remote
|
|
|
|
|
|
|
|
-import android.annotation.SuppressLint
|
|
|
|
|
import android.os.Bundle
|
|
import android.os.Bundle
|
|
|
import android.view.Menu
|
|
import android.view.Menu
|
|
|
import android.view.MenuItem
|
|
import android.view.MenuItem
|
|
@@ -9,37 +8,42 @@ import androidx.core.view.isGone
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
|
import io.legado.app.R
|
|
import io.legado.app.R
|
|
|
import io.legado.app.base.VMBaseActivity
|
|
import io.legado.app.base.VMBaseActivity
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-import io.legado.app.databinding.ActivityRemoteBookBinding
|
|
|
|
|
|
|
+import io.legado.app.databinding.ActivityImportBookBinding
|
|
|
|
|
+import io.legado.app.lib.theme.backgroundColor
|
|
|
import io.legado.app.ui.book.remote.manager.RemoteBookWebDav
|
|
import io.legado.app.ui.book.remote.manager.RemoteBookWebDav
|
|
|
|
|
+import io.legado.app.ui.widget.SelectActionBar
|
|
|
import io.legado.app.ui.widget.dialog.WaitDialog
|
|
import io.legado.app.ui.widget.dialog.WaitDialog
|
|
|
-import io.legado.app.utils.toastOnUi
|
|
|
|
|
-
|
|
|
|
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
|
|
import kotlinx.coroutines.flow.conflate
|
|
import kotlinx.coroutines.flow.conflate
|
|
|
import kotlinx.coroutines.launch
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
+import java.io.File
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 展示远程书籍
|
|
* 展示远程书籍
|
|
|
* @author qianfanguojin
|
|
* @author qianfanguojin
|
|
|
* @time 2022/05/12
|
|
* @time 2022/05/12
|
|
|
*/
|
|
*/
|
|
|
-class RemoteBookActivity : VMBaseActivity<ActivityRemoteBookBinding, RemoteBookViewModel>(),
|
|
|
|
|
- RemoteBookAdapter.CallBack {
|
|
|
|
|
- override val binding by viewBinding(ActivityRemoteBookBinding::inflate)
|
|
|
|
|
|
|
+class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookViewModel>(),
|
|
|
|
|
+ RemoteBookAdapter.CallBack,
|
|
|
|
|
+ SelectActionBar.CallBack {
|
|
|
|
|
+ override val binding by viewBinding(ActivityImportBookBinding::inflate)
|
|
|
override val viewModel by viewModels<RemoteBookViewModel>()
|
|
override val viewModel by viewModels<RemoteBookViewModel>()
|
|
|
private val adapter by lazy { RemoteBookAdapter(this, this) }
|
|
private val adapter by lazy { RemoteBookAdapter(this, this) }
|
|
|
private val waitDialog by lazy { WaitDialog(this) }
|
|
private val waitDialog by lazy { WaitDialog(this) }
|
|
|
|
|
|
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
|
|
|
|
+ binding.titleBar.setTitle(R.string.remote_book)
|
|
|
initView()
|
|
initView()
|
|
|
initData()
|
|
initData()
|
|
|
|
|
+ initEvent()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private fun initView() {
|
|
private fun initView() {
|
|
|
|
|
+ binding.layTop.setBackgroundColor(backgroundColor)
|
|
|
binding.recyclerView.layoutManager = LinearLayoutManager(this)
|
|
binding.recyclerView.layoutManager = LinearLayoutManager(this)
|
|
|
binding.recyclerView.adapter = adapter
|
|
binding.recyclerView.adapter = adapter
|
|
|
|
|
+ binding.selectActionBar.setMainActionText(R.string.add_to_shelf)
|
|
|
|
|
+ binding.selectActionBar.setCallBack(this)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private fun initData() {
|
|
private fun initData() {
|
|
@@ -51,7 +55,14 @@ class RemoteBookActivity : VMBaseActivity<ActivityRemoteBookBinding, RemoteBookV
|
|
|
adapter.setItems(remoteBooks)
|
|
adapter.setItems(remoteBooks)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- viewModel.loadRemoteBookList(RemoteBookWebDav.rootBookUrl)
|
|
|
|
|
|
|
+ upPath()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun initEvent() {
|
|
|
|
|
+ binding.tvGoBack.setOnClickListener {
|
|
|
|
|
+ viewModel.dirList.removeLastOrNull()
|
|
|
|
|
+ upPath()
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
|
|
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
|
|
@@ -62,46 +73,47 @@ class RemoteBookActivity : VMBaseActivity<ActivityRemoteBookBinding, RemoteBookV
|
|
|
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
|
|
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
when (item.itemId) {
|
|
when (item.itemId) {
|
|
|
R.id.menu_refresh -> {
|
|
R.id.menu_refresh -> {
|
|
|
- viewModel.loadRemoteBookList(
|
|
|
|
|
- viewModel.dirList.lastOrNull()?.path ?: RemoteBookWebDav.rootBookUrl
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ upPath()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
return super.onCompatOptionsItemSelected(item)
|
|
return super.onCompatOptionsItemSelected(item)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- override fun finish() {
|
|
|
|
|
- if (viewModel.dirList.isEmpty()) {
|
|
|
|
|
- super.finish()
|
|
|
|
|
- } else {
|
|
|
|
|
- viewModel.dirList.removeLastOrNull()
|
|
|
|
|
- val remoteBook = viewModel.dirList.lastOrNull()
|
|
|
|
|
- viewModel.dataCallback?.clear()
|
|
|
|
|
- if (remoteBook != null) {
|
|
|
|
|
- binding.titleBar.title = remoteBook.filename
|
|
|
|
|
- viewModel.loadRemoteBookList(remoteBook.path)
|
|
|
|
|
- } else {
|
|
|
|
|
- binding.titleBar.setTitle(R.string.remote_book)
|
|
|
|
|
- viewModel.loadRemoteBookList(RemoteBookWebDav.rootBookUrl)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ override fun revertSelection() {
|
|
|
|
|
+ adapter.revertSelection()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- override fun openDir(remoteBook: RemoteBook) {
|
|
|
|
|
- viewModel.dirList.add(remoteBook)
|
|
|
|
|
- binding.titleBar.title = remoteBook.filename
|
|
|
|
|
- viewModel.dataCallback?.clear()
|
|
|
|
|
- viewModel.loadRemoteBookList(remoteBook.path)
|
|
|
|
|
|
|
+ override fun selectAll(selectAll: Boolean) {
|
|
|
|
|
+ adapter.selectAll(selectAll)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @SuppressLint("NotifyDataSetChanged")
|
|
|
|
|
- override fun addToBookshelf(remoteBook: RemoteBook) {
|
|
|
|
|
|
|
+ override fun onClickSelectBarMainAction() {
|
|
|
waitDialog.show()
|
|
waitDialog.show()
|
|
|
- viewModel.addToBookshelf(remoteBook, success = {
|
|
|
|
|
- toastOnUi(getString(R.string.download_book_success))
|
|
|
|
|
|
|
+ viewModel.addToBookshelf(adapter.selected) {
|
|
|
adapter.notifyDataSetChanged()
|
|
adapter.notifyDataSetChanged()
|
|
|
- }) {
|
|
|
|
|
waitDialog.dismiss()
|
|
waitDialog.dismiss()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private fun upPath() {
|
|
|
|
|
+ var path = "books" + File.separator
|
|
|
|
|
+ viewModel.dirList.forEach {
|
|
|
|
|
+ path = path + it.filename + File.separator
|
|
|
|
|
+ }
|
|
|
|
|
+ binding.tvPath.text = path
|
|
|
|
|
+ viewModel.dataCallback?.clear()
|
|
|
|
|
+ adapter.selected.clear()
|
|
|
|
|
+ viewModel.loadRemoteBookList(
|
|
|
|
|
+ viewModel.dirList.lastOrNull()?.path ?: RemoteBookWebDav.rootBookUrl
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun openDir(remoteBook: RemoteBook) {
|
|
|
|
|
+ viewModel.dirList.add(remoteBook)
|
|
|
|
|
+ upPath()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun upCountView() {
|
|
|
|
|
+ binding.selectActionBar.upCountView(adapter.selected.size, adapter.checkableCount)
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|