diff --git a/app/build.gradle b/app/build.gradle index bbe991a6e..52844a9ee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -197,7 +197,6 @@ dependencies { implementation("com.google.android.exoplayer:extension-okhttp:$exoplayer_version") //Splitties - implementation("com.louiscad.splitties:splitties-appctx:$splitties_version") implementation("com.louiscad.splitties:splitties-systemservices:$splitties_version") implementation("com.louiscad.splitties:splitties-views:$splitties_version") diff --git a/app/src/main/java/io/legado/app/data/dao/ReadRecordDao.kt b/app/src/main/java/io/legado/app/data/dao/ReadRecordDao.kt index 4deda1386..2846fe844 100644 --- a/app/src/main/java/io/legado/app/data/dao/ReadRecordDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/ReadRecordDao.kt @@ -10,12 +10,28 @@ interface ReadRecordDao { @get:Query("select * from readRecord") val all: List - @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 @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 + @Query("select sum(readTime) from readRecord where bookName = :bookName") fun getReadTime(bookName: String): Long? diff --git a/app/src/main/java/io/legado/app/ui/about/ReadRecordActivity.kt b/app/src/main/java/io/legado/app/ui/about/ReadRecordActivity.kt index 45dedee84..41b155139 100644 --- a/app/src/main/java/io/legado/app/ui/about/ReadRecordActivity.kt +++ b/app/src/main/java/io/legado/app/ui/about/ReadRecordActivity.kt @@ -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() { 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() { 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() { noButton() } } + binding.recyclerView.adapter = adapter + } + + 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 initData() { + 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 } diff --git a/app/src/main/res/layout/activity_read_record.xml b/app/src/main/res/layout/activity_read_record.xml index 9d94c5c8f..b2901df67 100644 --- a/app/src/main/res/layout/activity_read_record.xml +++ b/app/src/main/res/layout/activity_read_record.xml @@ -3,25 +3,60 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical"> - + android:paddingLeft="10dp" + android:paddingRight="10dp"> - + - + + + + + @@ -73,6 +74,7 @@ android:padding="6dp" android:text="@string/clear" android:textColor="@color/primaryText" + android:background="?attr/selectableItemBackground" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/menu/book_read_record.xml b/app/src/main/res/menu/book_read_record.xml index 38943ba89..33c946d12 100644 --- a/app/src/main/res/menu/book_read_record.xml +++ b/app/src/main/res/menu/book_read_record.xml @@ -17,6 +17,7 @@