diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6d7a09a84..524fe903a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -257,6 +257,11 @@
android:name=".ui.login.SourceLogin"
android:configChanges="orientation|screenSize"
android:hardwareAccelerated="true" />
+
+
+ @get:Query("select sum(readTime) from readRecord")
+ val allTime: Long
+
@Query("select 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
new file mode 100644
index 000000000..6ff52d229
--- /dev/null
+++ b/app/src/main/java/io/legado/app/ui/about/ReadRecordActivity.kt
@@ -0,0 +1,77 @@
+package io.legado.app.ui.about
+
+import android.content.Context
+import android.os.Bundle
+import androidx.recyclerview.widget.LinearLayoutManager
+import io.legado.app.App
+import io.legado.app.R
+import io.legado.app.base.BaseActivity
+import io.legado.app.base.adapter.ItemViewHolder
+import io.legado.app.base.adapter.SimpleRecyclerAdapter
+import io.legado.app.data.entities.ReadRecord
+import kotlinx.android.synthetic.main.activity_read_record.*
+import kotlinx.android.synthetic.main.item_read_record.*
+import kotlinx.android.synthetic.main.item_read_record.view.*
+import kotlinx.coroutines.Dispatchers.IO
+import kotlinx.coroutines.Dispatchers.Main
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+class ReadRecordActivity : BaseActivity(R.layout.activity_read_record) {
+
+ lateinit var adapter: RecordAdapter
+
+ override fun onActivityCreated(savedInstanceState: Bundle?) {
+ initView()
+ initData()
+ }
+
+ private fun initView() {
+ tv_book_name.text = "总阅读时间"
+ recycler_view.layoutManager = LinearLayoutManager(this)
+ adapter = RecordAdapter(this)
+ recycler_view.adapter = adapter
+ }
+
+ private fun initData() {
+ launch(IO) {
+ val allTime = App.db.readRecordDao().allTime
+ withContext(Main) {
+ tv_read_time.text = formatDuring(allTime)
+ }
+ val readRecords = App.db.readRecordDao().all
+ withContext(Main) {
+ adapter.setItems(readRecords)
+ }
+ }
+ }
+
+ inner class RecordAdapter(context: Context) :
+ SimpleRecyclerAdapter(context, R.layout.item_read_record) {
+
+ override fun convert(holder: ItemViewHolder, item: ReadRecord, payloads: MutableList) {
+ holder.itemView.apply {
+ tv_book_name.text = item.bookName
+ tv_read_time.text = formatDuring(item.readTime)
+ }
+ }
+
+ override fun registerListener(holder: ItemViewHolder) {
+
+ }
+
+ }
+
+ fun formatDuring(mss: Long): String {
+ val days = mss / (1000 * 60 * 60 * 24)
+ val hours = mss % (1000 * 60 * 60 * 24) / (1000 * 60 * 60)
+ val minutes = mss % (1000 * 60 * 60) / (1000 * 60)
+ val seconds = mss % (1000 * 60) / 1000
+ val d = if (days > 0) "${days}天" else ""
+ val h = if (hours > 0) "${hours}小时" else ""
+ val m = if (minutes > 0) "${minutes}分钟" else ""
+ val s = if (seconds > 0) "${seconds}秒" else ""
+ return "$d$h$m$s"
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt
index 79758fc01..e4bc131ba 100644
--- a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt
+++ b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt
@@ -18,6 +18,7 @@ import io.legado.app.lib.theme.ATH
import io.legado.app.service.WebService
import io.legado.app.ui.about.AboutActivity
import io.legado.app.ui.about.DonateActivity
+import io.legado.app.ui.about.ReadRecordActivity
import io.legado.app.ui.book.source.manage.BookSourceActivity
import io.legado.app.ui.config.BackupRestoreUi
import io.legado.app.ui.config.ConfigActivity
@@ -140,6 +141,7 @@ class MyFragment : BaseFragment(R.layout.fragment_my_config), FileChooserDialog.
"theme_setting" -> context?.startActivity(
Pair("configType", ConfigViewModel.TYPE_THEME_CONFIG)
)
+ "readRecord" -> context?.startActivity()
"donate" -> context?.startActivity()
"about" -> context?.startActivity()
}
diff --git a/app/src/main/res/drawable/ic_cfg_e_lnk.xml b/app/src/main/res/drawable/ic_cfg_e_lnk.xml
deleted file mode 100644
index b94a8eb4d..000000000
--- a/app/src/main/res/drawable/ic_cfg_e_lnk.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_faq.xml b/app/src/main/res/drawable/ic_faq.xml
deleted file mode 100644
index b6d620eb5..000000000
--- a/app/src/main/res/drawable/ic_faq.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_read_record.xml b/app/src/main/res/layout/activity_read_record.xml
new file mode 100644
index 000000000..382d390bf
--- /dev/null
+++ b/app/src/main/res/layout/activity_read_record.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_read_record.xml b/app/src/main/res/layout/item_read_record.xml
new file mode 100644
index 000000000..b28197be6
--- /dev/null
+++ b/app/src/main/res/layout/item_read_record.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index f9d881de9..2b3b4c2ef 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -746,4 +746,6 @@
导入订阅源
您的支持是我更新的动力
公众号[开源阅读软件]
+ 阅读记录
+ 阅读时间记录
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 6aaf6b82f..59e5fc685 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -746,5 +746,7 @@
导入订阅源
您的支持是我更新的动力
公众号[开源阅读软件]
+ 阅读记录
+ 阅读时间记录
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 27aa2a8f8..3e6402a56 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -746,4 +746,6 @@
导入订阅源
您的支持是我更新的动力
公众号[开源阅读软件]
+ 阅读记录
+ 阅读时间记录
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2b1b21058..585b95bd0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -747,5 +747,7 @@
导入订阅源
您的支持是我更新的动力
公众号[开源阅读软件]
+ 阅读记录
+ 阅读时间记录
\ No newline at end of file
diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml
index 1cdd5127f..6bb378f56 100644
--- a/app/src/main/res/xml/pref_main.xml
+++ b/app/src/main/res/xml/pref_main.xml
@@ -76,6 +76,13 @@
app:iconSpaceReserved="false"
app:layout="@layout/view_preference_category">
+
+