阅读记录添加最后阅读时间
This commit is contained in:
@@ -10,12 +10,28 @@ interface ReadRecordDao {
|
||||
@get:Query("select * from readRecord")
|
||||
val all: List<ReadRecord>
|
||||
|
||||
@get:Query("select bookName, sum(readTime) as readTime, max(lastRead) as lastRead from readRecord group by bookName order by bookName collate localized")
|
||||
@get:Query(
|
||||
"""
|
||||
select bookName, sum(readTime) as readTime, max(lastRead) as lastRead
|
||||
from readRecord
|
||||
group by bookName
|
||||
order by bookName collate localized"""
|
||||
)
|
||||
val allShow: List<ReadRecordShow>
|
||||
|
||||
@get:Query("select sum(readTime) from readRecord")
|
||||
val allTime: Long
|
||||
|
||||
@Query(
|
||||
"""
|
||||
select bookName, sum(readTime) as readTime, max(lastRead) as lastRead
|
||||
from readRecord
|
||||
where bookName like '%' || :searchKey || '%'
|
||||
group by bookName
|
||||
order by bookName collate localized"""
|
||||
)
|
||||
fun search(searchKey: String): List<ReadRecordShow>
|
||||
|
||||
@Query("select sum(readTime) from readRecord where bookName = :bookName")
|
||||
fun getReadTime(bookName: String): Long?
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.BaseActivity
|
||||
import io.legado.app.base.adapter.ItemViewHolder
|
||||
@@ -16,10 +17,11 @@ import io.legado.app.databinding.ActivityReadRecordBinding
|
||||
import io.legado.app.databinding.ItemReadRecordBinding
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.theme.primaryTextColor
|
||||
import io.legado.app.ui.book.read.ReadBookActivity
|
||||
import io.legado.app.ui.book.search.SearchActivity
|
||||
import io.legado.app.utils.applyTint
|
||||
import io.legado.app.utils.cnCompare
|
||||
import io.legado.app.utils.gone
|
||||
import io.legado.app.utils.startActivity
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
@@ -30,11 +32,15 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
|
||||
|
||||
private val adapter by lazy { RecordAdapter(this) }
|
||||
private var sortMode = 0
|
||||
private val searchView: SearchView by lazy {
|
||||
binding.titleBar.findViewById(R.id.search_view)
|
||||
}
|
||||
|
||||
override val binding by viewBinding(ActivityReadRecordBinding::inflate)
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
initView()
|
||||
initAllTime()
|
||||
initData()
|
||||
}
|
||||
|
||||
@@ -72,13 +78,10 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
|
||||
return super.onCompatOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
private fun initView() = binding.run {
|
||||
readRecord.tvBookName.setText(R.string.all_read_time)
|
||||
readRecord.tvLastReadTimeTag.gone()
|
||||
readRecord.tvLastReadTimeTag.gone()
|
||||
readRecord.tvLastReadTime.gone()
|
||||
recyclerView.adapter = adapter
|
||||
readRecord.tvRemove.setOnClickListener {
|
||||
private fun initView() {
|
||||
initSearchView()
|
||||
binding.tvBookName.setText(R.string.all_read_time)
|
||||
binding.tvRemove.setOnClickListener {
|
||||
alert(R.string.delete, R.string.sure_del) {
|
||||
yesButton {
|
||||
appDb.readRecordDao.clear()
|
||||
@@ -87,16 +90,41 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
|
||||
noButton()
|
||||
}
|
||||
}
|
||||
binding.recyclerView.adapter = adapter
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
private fun initSearchView() {
|
||||
searchView.applyTint(primaryTextColor)
|
||||
searchView.onActionViewExpanded()
|
||||
searchView.isSubmitButtonEnabled = true
|
||||
searchView.queryHint = getString(R.string.search)
|
||||
searchView.clearFocus()
|
||||
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
||||
override fun onQueryTextSubmit(query: String): Boolean {
|
||||
searchView.clearFocus()
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onQueryTextChange(newText: String?): Boolean {
|
||||
initData(newText)
|
||||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun initAllTime() {
|
||||
launch {
|
||||
val allTime = withContext(IO) {
|
||||
appDb.readRecordDao.allTime
|
||||
}
|
||||
binding.readRecord.tvReadingTime.text = formatDuring(allTime)
|
||||
binding.tvReadingTime.text = formatDuring(allTime)
|
||||
}
|
||||
}
|
||||
|
||||
private fun initData(searchKey: String? = null) {
|
||||
launch {
|
||||
val readRecords = withContext(IO) {
|
||||
appDb.readRecordDao.allShow.let { records ->
|
||||
appDb.readRecordDao.search(searchKey ?: "").let { records ->
|
||||
when (sortMode) {
|
||||
1 -> records.sortedByDescending { it.readTime }
|
||||
2 -> records.sortedByDescending { it.lastRead }
|
||||
|
||||
Reference in New Issue
Block a user