添加阅读记录开关

This commit is contained in:
kunfei
2022-02-20 19:47:08 +08:00
parent ab47eeb36e
commit 2f2f1e0ca5
14 changed files with 68 additions and 29 deletions
@@ -94,6 +94,7 @@ object PreferKey {
const val checkSource = "checkSource"
const val uploadRule = "uploadRule"
const val tocUiUseReplace = "tocUiUseReplace"
const val enableReadRecord = "enableReadRecord"
const val cPrimary = "colorPrimary"
const val cAccent = "colorAccent"
@@ -256,6 +256,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
appCtx.putPrefBoolean(PreferKey.tocUiUseReplace, value)
}
var enableReadRecord: Boolean
get() = appCtx.getPrefBoolean(PreferKey.enableReadRecord, true)
set(value) {
appCtx.putPrefBoolean(PreferKey.enableReadRecord, value)
}
val autoChangeSource: Boolean
get() = appCtx.getPrefBoolean(PreferKey.autoChangeSource, true)
@@ -114,11 +114,13 @@ object ReadBook : CoroutineScope by MainScope() {
}
}
fun upReadStartTime() {
fun upReadTime() {
Coroutine.async {
readRecord.readTime = readRecord.readTime + System.currentTimeMillis() - readStartTime
readStartTime = System.currentTimeMillis()
appDb.readRecordDao.insert(readRecord)
if (AppConfig.enableReadRecord) {
appDb.readRecordDao.insert(readRecord)
}
}
}
@@ -205,7 +207,7 @@ object ReadBook : CoroutineScope by MainScope() {
if (BaseReadAloudService.isRun) {
readAloud(!BaseReadAloudService.pause)
}
upReadStartTime()
upReadTime()
preDownload()
ImageProvider.clearOut(durChapterIndex)
}
@@ -353,7 +353,7 @@ abstract class BaseReadAloudService : BaseService(),
abstract fun aloudServicePendingIntent(actionStr: String): PendingIntent?
open fun nextChapter() {
ReadBook.upReadStartTime()
ReadBook.upReadTime()
if (!ReadBook.moveToNextChapter(true)) {
stopSelf()
}
@@ -13,6 +13,7 @@ import io.legado.app.data.appDb
import io.legado.app.data.entities.ReadRecordShow
import io.legado.app.databinding.ActivityReadRecordBinding
import io.legado.app.databinding.ItemReadRecordBinding
import io.legado.app.help.AppConfig
import io.legado.app.lib.dialogs.alert
import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.book.search.SearchActivity
@@ -20,7 +21,6 @@ import io.legado.app.utils.cnCompare
import io.legado.app.utils.startActivity
import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -41,6 +41,11 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
return super.onCompatCreateOptionsMenu(menu)
}
override fun onMenuOpened(featureId: Int, menu: Menu): Boolean {
menu.findItem(R.id.menu_enable_record)?.isChecked = AppConfig.enableReadRecord
return super.onMenuOpened(featureId, menu)
}
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_sort_name -> {
@@ -51,6 +56,9 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
sortMode = 1
initData()
}
R.id.menu_enable_record -> {
AppConfig.enableReadRecord = !item.isChecked
}
}
return super.onCompatOptionsItemSelected(item)
}
@@ -70,23 +78,22 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
}
private fun initData() {
launch(IO) {
val allTime = appDb.readRecordDao.allTime
withContext(Main) {
binding.readRecord.tvReadTime.text = formatDuring(allTime)
launch {
val allTime = withContext(IO) {
appDb.readRecordDao.allTime
}
var readRecords = appDb.readRecordDao.allShow
readRecords = when (sortMode) {
1 -> readRecords.sortedBy { it.readTime }
else -> {
readRecords.sortedWith { o1, o2 ->
o1.bookName.cnCompare(o2.bookName)
binding.readRecord.tvReadTime.text = formatDuring(allTime)
val readRecords = withContext(IO) {
appDb.readRecordDao.allShow.let { records ->
when (sortMode) {
1 -> records.sortedBy { it.readTime }
else -> records.sortedWith { o1, o2 ->
o1.bookName.cnCompare(o2.bookName)
}
}
}
}
withContext(Main) {
adapter.setItems(readRecords)
}
adapter.setItems(readRecords)
}
}