From 8f71d9af262f1cfa414f157e8df0e9d636ce7562 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Wed, 26 Oct 2022 12:46:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/constant/PreferKey.kt | 1 + .../io/legado/app/help/config/AppConfig.kt | 6 +++ .../main/bookshelf/BaseBookshelfFragment.kt | 5 +++ .../style1/books/BaseBooksAdapter.kt | 6 ++- .../style1/books/BooksAdapterList.kt | 11 ++++++ .../bookshelf/style1/books/BooksFragment.kt | 21 ++++++++-- .../java/io/legado/app/utils/TimeUtils.kt | 39 +++++++++++++++++++ .../res/layout/dialog_bookshelf_config.xml | 13 ++++++- .../main/res/layout/item_bookshelf_list.xml | 17 ++++++++ app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-ja-rJP/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-zh-rHK/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 16 files changed, 119 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/io/legado/app/utils/TimeUtils.kt diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index 72c3c6819..71ed456f3 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -120,6 +120,7 @@ object PreferKey { const val noAnimScrollPage = "noAnimScrollPage" const val webDavDeviceName = "webDavDeviceName" const val wakeLock = "wakeLock" + const val showLastUpdateTime = "showLastUpdateTime" const val cPrimary = "colorPrimary" const val cAccent = "colorAccent" diff --git a/app/src/main/java/io/legado/app/help/config/AppConfig.kt b/app/src/main/java/io/legado/app/help/config/AppConfig.kt index 25ae7b98d..1519907d7 100644 --- a/app/src/main/java/io/legado/app/help/config/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/AppConfig.kt @@ -82,6 +82,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { appCtx.putPrefBoolean(PreferKey.showUnread, value) } + var showLastUpdateTime: Boolean + get() = appCtx.getPrefBoolean(PreferKey.showLastUpdateTime, false) + set(value) { + appCtx.putPrefBoolean(PreferKey.showLastUpdateTime, value) + } + var readBrightness: Int get() = if (isNightTheme) { appCtx.getPrefInt(PreferKey.nightBrightness, 100) diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt index f10e2aab9..745bc238b 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt @@ -136,6 +136,7 @@ abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment(context: Context) : for (i in 0 until itemCount) { getItem(i)?.let { if (it.bookUrl == bookUrl) { - notifyItemChanged(i, bundleOf(Pair("refresh", null))) + notifyItemChanged(i, bundleOf(Pair("refresh", null), Pair("lastUpdateTime", null))) return } } } } + fun upLastUpdateTime() { + notifyItemRangeChanged(0, itemCount, bundleOf(Pair("lastUpdateTime", null))) + } + interface CallBack { fun open(book: Book) fun openBookInfo(book: Book) diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksAdapterList.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksAdapterList.kt index d62eb7bb9..e3162a4aa 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksAdapterList.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksAdapterList.kt @@ -9,6 +9,7 @@ import io.legado.app.databinding.ItemBookshelfListBinding import io.legado.app.help.book.isLocal import io.legado.app.help.config.AppConfig import io.legado.app.utils.invisible +import io.legado.app.utils.toTimeAgo import splitties.views.onLongClick class BooksAdapterList(context: Context, private val callBack: CallBack) : @@ -32,6 +33,7 @@ class BooksAdapterList(context: Context, private val callBack: CallBack) : tvLast.text = item.latestChapterTitle ivCover.load(item.getDisplayCover(), item.name, item.author, false, item.origin) upRefresh(binding, item) + upLastUpdateTime(binding, item) } else { tvRead.text = item.durChapterTitle tvLast.text = item.latestChapterTitle @@ -41,6 +43,7 @@ class BooksAdapterList(context: Context, private val callBack: CallBack) : "author" -> tvAuthor.text = item.author "cover" -> ivCover.load(item.getDisplayCover(), item.name, item.author, false, item.origin) "refresh" -> upRefresh(binding, item) + "lastUpdateTime" -> upLastUpdateTime(binding, item) } } } @@ -61,6 +64,14 @@ class BooksAdapterList(context: Context, private val callBack: CallBack) : } } + private fun upLastUpdateTime(binding: ItemBookshelfListBinding, item: Book) { + if (AppConfig.showLastUpdateTime && !item.isLocal) { + binding.tvLastUpdateTime.text = item.latestChapterTime.toTimeAgo() + } else { + binding.tvLastUpdateTime.text = "" + } + } + override fun registerListener(holder: ItemViewHolder, binding: ItemBookshelfListBinding) { holder.itemView.apply { setOnClickListener { diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksFragment.kt index 588a04dc5..71952b9f7 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksFragment.kt @@ -27,14 +27,11 @@ import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.main.MainViewModel import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay +import kotlinx.coroutines.* import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import kotlinx.coroutines.launch import kotlin.math.max /** @@ -66,6 +63,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books), private var savedInstanceState: Bundle? = null private var position = 0 private var groupId = -1L + private var upLastUpdateTimeJob : Job? = null override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { this.savedInstanceState = savedInstanceState @@ -107,6 +105,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books), } } }) + startLastUpdateTimeJob() } private fun upRecyclerData() { @@ -153,6 +152,19 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books), } } + private fun startLastUpdateTimeJob() { + upLastUpdateTimeJob?.cancel() + if (!AppConfig.showLastUpdateTime) { + return + } + upLastUpdateTimeJob = launch { + while (isActive) { + booksAdapter.upLastUpdateTime() + delay(30 * 1000) + } + } + } + fun getBooks(): List { return booksAdapter.getItems() } @@ -222,6 +234,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books), } observeEvent(EventBus.BOOKSHELF_REFRESH) { booksAdapter.notifyDataSetChanged() + startLastUpdateTimeJob() } } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/utils/TimeUtils.kt b/app/src/main/java/io/legado/app/utils/TimeUtils.kt new file mode 100644 index 000000000..4e15c0f17 --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/TimeUtils.kt @@ -0,0 +1,39 @@ +package io.legado.app.utils + +import kotlin.math.abs + +fun Long.toTimeAgo(): String { + val curTime = System.currentTimeMillis() + val time = this + val seconds = abs(System.currentTimeMillis() - time) / 1000f + val end = if (time < curTime) "前" else "后" + + val start = when { + seconds < 60 -> "${seconds.toInt()}秒" + seconds < 3600 -> { + val minutes = seconds / 60f + "${minutes.toInt()}分钟" + } + seconds < 86400 -> { + val hours = seconds / 3600f + "${hours.toInt()}小时" + } + seconds < 604800 -> { + val days = seconds / 86400f + "${days.toInt()}天" + } + seconds < 2_628_000 -> { + val weeks = seconds / 604800f + "${weeks.toInt()}周" + } + seconds < 31_536_000 -> { + val months = seconds / 2_628_000f + "${months.toInt()}月" + } + else -> { + val years = seconds / 31_536_000f + "${years.toInt()}年" + } + } + return start + end +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_bookshelf_config.xml b/app/src/main/res/layout/dialog_bookshelf_config.xml index 14a436dfe..b0cf84f44 100644 --- a/app/src/main/res/layout/dialog_bookshelf_config.xml +++ b/app/src/main/res/layout/dialog_bookshelf_config.xml @@ -40,13 +40,22 @@ app:layout_constraintTop_toBottomOf="@+id/ll_group_style" tools:ignore="TouchTargetSizeCheck" /> + + + + diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index b11340517..e6cca8392 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1052,4 +1052,5 @@ 粘贴规则 多分组/书源 替换(启用/禁用) + 显示上次更新时间 diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 846fb1f30..0272c3849 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1055,4 +1055,5 @@ 粘贴规则 多分组/书源 替换(启用/禁用) + 显示上次更新时间 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 389ca352e..9dd2f96de 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1055,4 +1055,5 @@ 粘贴规则 多分组/书源 替换(启用/禁用) + 显示上次更新时间 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 4a5c9a2f9..4bdc973cb 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1052,4 +1052,5 @@ 粘贴规则 多分组/书源 替换(启用/禁用) + 显示上次更新时间 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e40a82489..d6ea4f09a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1054,4 +1054,5 @@ 粘贴规则 多分组/书源 替换(启用/禁用) + 显示上次更新时间 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 52bf0cb29..5884fea6a 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1054,4 +1054,5 @@ 粘贴规则 多分组/书源 替换(启用/禁用) + 显示上次更新时间 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 480bd7c9a..920f6d8ba 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1055,4 +1055,5 @@ 粘贴规则 多分组/书源 替换(启用/禁用) + 显示上次更新时间