|
|
@ -6,6 +6,7 @@ import android.view.Menu |
|
|
|
import android.view.MenuItem |
|
|
|
import android.view.MenuItem |
|
|
|
import androidx.activity.viewModels |
|
|
|
import androidx.activity.viewModels |
|
|
|
import androidx.appcompat.widget.PopupMenu |
|
|
|
import androidx.appcompat.widget.PopupMenu |
|
|
|
|
|
|
|
import androidx.appcompat.widget.SearchView |
|
|
|
import androidx.recyclerview.widget.ItemTouchHelper |
|
|
|
import androidx.recyclerview.widget.ItemTouchHelper |
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager |
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager |
|
|
|
import io.legado.app.R |
|
|
|
import io.legado.app.R |
|
|
@ -34,6 +35,7 @@ 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 |
|
|
|
import kotlinx.coroutines.flow.conflate |
|
|
|
import kotlinx.coroutines.flow.conflate |
|
|
|
|
|
|
|
import kotlinx.coroutines.flow.flowOn |
|
|
|
import kotlinx.coroutines.flow.map |
|
|
|
import kotlinx.coroutines.flow.map |
|
|
|
import kotlinx.coroutines.launch |
|
|
|
import kotlinx.coroutines.launch |
|
|
|
import kotlinx.coroutines.withContext |
|
|
|
import kotlinx.coroutines.withContext |
|
|
@ -55,23 +57,26 @@ class BookshelfManageActivity : |
|
|
|
private val adapter by lazy { BookAdapter(this, this) } |
|
|
|
private val adapter by lazy { BookAdapter(this, this) } |
|
|
|
private var booksFlowJob: Job? = null |
|
|
|
private var booksFlowJob: Job? = null |
|
|
|
private var menu: Menu? = null |
|
|
|
private var menu: Menu? = null |
|
|
|
private var groupId: Long = -1 |
|
|
|
private var searchView: SearchView? = null |
|
|
|
|
|
|
|
|
|
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) { |
|
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) { |
|
|
|
groupId = intent.getLongExtra("groupId", -1) |
|
|
|
viewModel.groupId = intent.getLongExtra("groupId", -1) |
|
|
|
launch { |
|
|
|
launch { |
|
|
|
binding.titleBar.subtitle = withContext(IO) { |
|
|
|
viewModel.groupName = withContext(IO) { |
|
|
|
appDb.bookGroupDao.getByID(groupId)?.groupName |
|
|
|
appDb.bookGroupDao.getByID(viewModel.groupId)?.groupName |
|
|
|
?: getString(R.string.no_group) |
|
|
|
?: getString(R.string.no_group) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
binding.titleBar.subtitle = viewModel.groupName |
|
|
|
} |
|
|
|
} |
|
|
|
initView() |
|
|
|
initRecyclerView() |
|
|
|
|
|
|
|
initOtherView() |
|
|
|
initGroupData() |
|
|
|
initGroupData() |
|
|
|
initBookData() |
|
|
|
upBookData() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { |
|
|
|
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { |
|
|
|
menuInflater.inflate(R.menu.bookshelf_manage, menu) |
|
|
|
menuInflater.inflate(R.menu.bookshelf_manage, menu) |
|
|
|
|
|
|
|
initSearchView(menu) |
|
|
|
return super.onCompatCreateOptionsMenu(menu) |
|
|
|
return super.onCompatCreateOptionsMenu(menu) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -93,7 +98,37 @@ class BookshelfManageActivity : |
|
|
|
selectGroup(groupRequestCode, 0) |
|
|
|
selectGroup(groupRequestCode, 0) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private fun initView() { |
|
|
|
private fun showTitle() { |
|
|
|
|
|
|
|
binding.titleBar.title = getString(R.string.bookshelf_management) |
|
|
|
|
|
|
|
binding.titleBar.subtitle = viewModel.groupName |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun initSearchView(menu: Menu) { |
|
|
|
|
|
|
|
searchView = menu.findItem(R.id.menu_screen).actionView as SearchView |
|
|
|
|
|
|
|
searchView?.run { |
|
|
|
|
|
|
|
setOnCloseListener { |
|
|
|
|
|
|
|
showTitle() |
|
|
|
|
|
|
|
false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
setOnSearchClickListener { |
|
|
|
|
|
|
|
binding.titleBar.title = "" |
|
|
|
|
|
|
|
binding.titleBar.subtitle = "" |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
setOnQueryTextListener(object : SearchView.OnQueryTextListener { |
|
|
|
|
|
|
|
override fun onQueryTextSubmit(query: String?): Boolean { |
|
|
|
|
|
|
|
return false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onQueryTextChange(newText: String?): Boolean { |
|
|
|
|
|
|
|
upBookData(newText) |
|
|
|
|
|
|
|
return false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun initRecyclerView() { |
|
|
|
binding.recyclerView.setEdgeEffectColor(primaryColor) |
|
|
|
binding.recyclerView.setEdgeEffectColor(primaryColor) |
|
|
|
binding.recyclerView.layoutManager = LinearLayoutManager(this) |
|
|
|
binding.recyclerView.layoutManager = LinearLayoutManager(this) |
|
|
|
binding.recyclerView.addItemDecoration(VerticalDivider(this)) |
|
|
|
binding.recyclerView.addItemDecoration(VerticalDivider(this)) |
|
|
@ -107,6 +142,9 @@ class BookshelfManageActivity : |
|
|
|
dragSelectTouchHelper.activeSlideSelect() |
|
|
|
dragSelectTouchHelper.activeSlideSelect() |
|
|
|
// Note: need judge selection first, so add ItemTouchHelper after it. |
|
|
|
// Note: need judge selection first, so add ItemTouchHelper after it. |
|
|
|
ItemTouchHelper(itemTouchCallback).attachToRecyclerView(binding.recyclerView) |
|
|
|
ItemTouchHelper(itemTouchCallback).attachToRecyclerView(binding.recyclerView) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun initOtherView() { |
|
|
|
binding.selectActionBar.setMainActionText(R.string.move_to_group) |
|
|
|
binding.selectActionBar.setMainActionText(R.string.move_to_group) |
|
|
|
binding.selectActionBar.inflateMenu(R.menu.bookshelf_menage_sel) |
|
|
|
binding.selectActionBar.inflateMenu(R.menu.bookshelf_menage_sel) |
|
|
|
binding.selectActionBar.setOnMenuItemClickListener(this) |
|
|
|
binding.selectActionBar.setOnMenuItemClickListener(this) |
|
|
@ -136,18 +174,25 @@ class BookshelfManageActivity : |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private fun initBookData() { |
|
|
|
private fun upBookData(searchKey: String? = null) { |
|
|
|
booksFlowJob?.cancel() |
|
|
|
booksFlowJob?.cancel() |
|
|
|
booksFlowJob = launch { |
|
|
|
booksFlowJob = launch { |
|
|
|
when (groupId) { |
|
|
|
when (viewModel.groupId) { |
|
|
|
AppConst.rootGroupId -> appDb.bookDao.flowNetNoGroup() |
|
|
|
AppConst.rootGroupId -> appDb.bookDao.flowNetNoGroup() |
|
|
|
AppConst.bookGroupAllId -> appDb.bookDao.flowAll() |
|
|
|
AppConst.bookGroupAllId -> appDb.bookDao.flowAll() |
|
|
|
AppConst.bookGroupLocalId -> appDb.bookDao.flowLocal() |
|
|
|
AppConst.bookGroupLocalId -> appDb.bookDao.flowLocal() |
|
|
|
AppConst.bookGroupAudioId -> appDb.bookDao.flowAudio() |
|
|
|
AppConst.bookGroupAudioId -> appDb.bookDao.flowAudio() |
|
|
|
AppConst.bookGroupNetNoneId -> appDb.bookDao.flowNetNoGroup() |
|
|
|
AppConst.bookGroupNetNoneId -> appDb.bookDao.flowNetNoGroup() |
|
|
|
AppConst.bookGroupLocalNoneId -> appDb.bookDao.flowLocalNoGroup() |
|
|
|
AppConst.bookGroupLocalNoneId -> appDb.bookDao.flowLocalNoGroup() |
|
|
|
else -> appDb.bookDao.flowByGroup(groupId) |
|
|
|
else -> appDb.bookDao.flowByGroup(viewModel.groupId) |
|
|
|
}.conflate().map { books -> |
|
|
|
}.conflate().map { list -> |
|
|
|
|
|
|
|
val books = if (searchKey.isNullOrBlank()) { |
|
|
|
|
|
|
|
list |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
list.filter { |
|
|
|
|
|
|
|
it.name.contains(searchKey) || it.author.contains(searchKey) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
when (getPrefInt(PreferKey.bookshelfSort)) { |
|
|
|
when (getPrefInt(PreferKey.bookshelfSort)) { |
|
|
|
1 -> books.sortedByDescending { |
|
|
|
1 -> books.sortedByDescending { |
|
|
|
it.latestChapterTime |
|
|
|
it.latestChapterTime |
|
|
@ -162,7 +207,8 @@ class BookshelfManageActivity : |
|
|
|
it.durChapterTime |
|
|
|
it.durChapterTime |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}.conflate().collect { books -> |
|
|
|
}.flowOn(IO) |
|
|
|
|
|
|
|
.conflate().collect { books -> |
|
|
|
adapter.setItems(books) |
|
|
|
adapter.setItems(books) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -172,9 +218,11 @@ class BookshelfManageActivity : |
|
|
|
when (item.itemId) { |
|
|
|
when (item.itemId) { |
|
|
|
R.id.menu_group_manage -> showDialogFragment<GroupManageDialog>() |
|
|
|
R.id.menu_group_manage -> showDialogFragment<GroupManageDialog>() |
|
|
|
else -> if (item.groupId == R.id.menu_group) { |
|
|
|
else -> if (item.groupId == R.id.menu_group) { |
|
|
|
|
|
|
|
viewModel.groupName = item.title.toString() |
|
|
|
binding.titleBar.subtitle = item.title |
|
|
|
binding.titleBar.subtitle = item.title |
|
|
|
groupId = appDb.bookGroupDao.getByName(item.title.toString())?.groupId ?: 0 |
|
|
|
viewModel.groupId = |
|
|
|
initBookData() |
|
|
|
appDb.bookGroupDao.getByName(item.title.toString())?.groupId ?: 0 |
|
|
|
|
|
|
|
upBookData() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return super.onCompatOptionsItemSelected(item) |
|
|
|
return super.onCompatOptionsItemSelected(item) |
|
|
|