pull/83/head
kunfei 5 years ago
parent d940849dec
commit e9d8cbf87b
  1. 34
      app/src/main/java/io/legado/app/ui/importbook/ImportBookActivity.kt
  2. 47
      app/src/main/java/io/legado/app/ui/importbook/ImportBookAdapter.kt

@ -32,7 +32,7 @@ class ImportBookActivity : VMBaseActivity<ImportBookViewModel>(R.layout.activity
private val requestCodeSelectFolder = 342 private val requestCodeSelectFolder = 342
private var rootDoc: DocumentFile? = null private var rootDoc: DocumentFile? = null
private val subDocs = arrayListOf<DocumentFile>() private val subDocs = arrayListOf<DocumentFile>()
private lateinit var importBookAdapter: ImportBookAdapter private lateinit var adapter: ImportBookAdapter
private var localUriLiveData: LiveData<List<String>>? = null private var localUriLiveData: LiveData<List<String>>? = null
override val viewModel: ImportBookViewModel override val viewModel: ImportBookViewModel
@ -59,8 +59,8 @@ class ImportBookActivity : VMBaseActivity<ImportBookViewModel>(R.layout.activity
private fun initView() { private fun initView() {
recycler_view.layoutManager = LinearLayoutManager(this) recycler_view.layoutManager = LinearLayoutManager(this)
importBookAdapter = ImportBookAdapter(this, this) adapter = ImportBookAdapter(this, this)
recycler_view.adapter = importBookAdapter recycler_view.adapter = adapter
rotate_loading.loadingColor = accentColor rotate_loading.loadingColor = accentColor
} }
@ -74,13 +74,16 @@ class ImportBookActivity : VMBaseActivity<ImportBookViewModel>(R.layout.activity
btn_delete.onClick { btn_delete.onClick {
} }
cb_selected_all.onClick {
adapter.selectAll(cb_selected_all.isChecked)
}
} }
private fun initData() { private fun initData() {
localUriLiveData?.removeObservers(this) localUriLiveData?.removeObservers(this)
localUriLiveData = App.db.bookDao().observeLocalUri() localUriLiveData = App.db.bookDao().observeLocalUri()
localUriLiveData?.observe(this, Observer { localUriLiveData?.observe(this, Observer {
importBookAdapter.upBookHas(it) adapter.upBookHas(it)
}) })
} }
@ -104,8 +107,8 @@ class ImportBookActivity : VMBaseActivity<ImportBookViewModel>(R.layout.activity
path = path + doc.name + File.separator path = path + doc.name + File.separator
} }
tv_path.text = path tv_path.text = path
importBookAdapter.selectedUris.clear() adapter.selectedUris.clear()
importBookAdapter.clearItems() adapter.clearItems()
rotate_loading.show() rotate_loading.show()
launch(IO) { launch(IO) {
val docList = DocumentUtils.listFiles( val docList = DocumentUtils.listFiles(
@ -123,7 +126,7 @@ class ImportBookActivity : VMBaseActivity<ImportBookViewModel>(R.layout.activity
docList.sortWith(compareBy({ !it.isDir }, { it.name })) docList.sortWith(compareBy({ !it.isDir }, { it.name }))
withContext(Main) { withContext(Main) {
rotate_loading.hide() rotate_loading.hide()
importBookAdapter.setItems(docList) adapter.setData(docList)
} }
} }
} }
@ -179,16 +182,29 @@ class ImportBookActivity : VMBaseActivity<ImportBookViewModel>(R.layout.activity
} }
override fun upCountView() { override fun upCountView() {
if (importBookAdapter.selectedUris.isEmpty()) { if (adapter.selectedUris.isEmpty()) {
btn_add_book.setText(R.string.nb_file_add_shelf) btn_add_book.setText(R.string.nb_file_add_shelf)
//设置某些按钮的是否可点击 //设置某些按钮的是否可点击
setMenuClickable(false) setMenuClickable(false)
} else { } else {
btn_add_book.text = btn_add_book.text =
getString(R.string.nb_file_add_shelves, importBookAdapter.selectedUris.size) getString(R.string.nb_file_add_shelves, adapter.selectedUris.size)
//设置某些按钮的是否可点击 //设置某些按钮的是否可点击
setMenuClickable(true) setMenuClickable(true)
} }
if (adapter.checkableCount == 0) {
cb_selected_all.isChecked = false
} else {
cb_selected_all.isChecked = adapter.selectedUris.size >= adapter.checkableCount
}
//重置全选的文字
if (cb_selected_all.isChecked) {
cb_selected_all.setText(R.string.cancel)
} else {
cb_selected_all.setText(R.string.select_all)
}
} }
private fun setMenuClickable(isClickable: Boolean) { private fun setMenuClickable(isClickable: Boolean) {

@ -14,12 +14,45 @@ import org.jetbrains.anko.sdk27.listeners.onClick
class ImportBookAdapter(context: Context, val callBack: CallBack) : class ImportBookAdapter(context: Context, val callBack: CallBack) :
SimpleRecyclerAdapter<DocItem>(context, R.layout.item_import_book) { SimpleRecyclerAdapter<DocItem>(context, R.layout.item_import_book) {
var selectedUris = linkedSetOf<String>() var selectedUris = linkedSetOf<String>()
private var localUri = arrayListOf<String>() var checkableCount = 0
private var bookshelf = arrayListOf<String>()
fun upBookHas(uriList: List<String>) { fun upBookHas(uriList: List<String>) {
localUri.clear() bookshelf.clear()
localUri.addAll(uriList) bookshelf.addAll(uriList)
notifyDataSetChanged() notifyDataSetChanged()
upCheckableCount()
}
fun setData(data: List<DocItem>) {
setItems(data)
upCheckableCount()
}
private fun upCheckableCount() {
checkableCount = 0
getItems().forEach {
if (!it.isDir && !bookshelf.contains(it.uri.toString())) {
checkableCount++
}
}
callBack.upCountView()
}
fun selectAll(selectAll: Boolean) {
if (selectAll) {
getItems().forEach {
if (!it.isDir && !bookshelf.contains(it.uri.toString())) {
selectedUris.add(it.uri.toString())
}
}
notifyDataSetChanged()
callBack.upCountView()
} else {
selectedUris.clear()
notifyDataSetChanged()
callBack.upCountView()
}
} }
override fun convert(holder: ItemViewHolder, item: DocItem, payloads: MutableList<Any>) { override fun convert(holder: ItemViewHolder, item: DocItem, payloads: MutableList<Any>) {
@ -29,8 +62,9 @@ class ImportBookAdapter(context: Context, val callBack: CallBack) :
iv_icon.visible() iv_icon.visible()
cb_select.invisible() cb_select.invisible()
ll_brief.gone() ll_brief.gone()
cb_select.isChecked = false
} else { } else {
if (localUri.contains(item.uri.toString())) { if (bookshelf.contains(item.uri.toString())) {
iv_icon.setImageResource(R.drawable.ic_book_has) iv_icon.setImageResource(R.drawable.ic_book_has)
iv_icon.visible() iv_icon.visible()
cb_select.invisible() cb_select.invisible()
@ -42,19 +76,20 @@ class ImportBookAdapter(context: Context, val callBack: CallBack) :
tv_tag.text = item.name.substringAfterLast(".") tv_tag.text = item.name.substringAfterLast(".")
tv_size.text = StringUtils.toSize(item.size) tv_size.text = StringUtils.toSize(item.size)
tv_date.text = AppConst.DATE_FORMAT.format(item.date) tv_date.text = AppConst.DATE_FORMAT.format(item.date)
cb_select.isChecked = selectedUris.contains(item.uri.toString())
} }
tv_name.text = item.name tv_name.text = item.name
cb_select.isChecked = selectedUris.contains(item.uri.toString())
onClick { onClick {
if (item.isDir) { if (item.isDir) {
callBack.nextDoc(DocumentFile.fromSingleUri(context, item.uri)!!) callBack.nextDoc(DocumentFile.fromSingleUri(context, item.uri)!!)
} else { } else if (!bookshelf.contains(item.uri.toString())) {
cb_select.isChecked = !cb_select.isChecked cb_select.isChecked = !cb_select.isChecked
if (cb_select.isChecked) { if (cb_select.isChecked) {
selectedUris.add(item.uri.toString()) selectedUris.add(item.uri.toString())
} else { } else {
selectedUris.remove(item.uri.toString()) selectedUris.remove(item.uri.toString())
} }
callBack.upCountView()
} }
} }
} }

Loading…
Cancel
Save