新增书架新章节标记与相关设置 #384

This commit is contained in:
HapeLee
2025-11-27 00:00:13 +08:00
parent 15a25eface
commit d51b0a3199
20 changed files with 157 additions and 47 deletions
@@ -7,6 +7,7 @@ object PreferKey {
const val themeMode = "themeMode"
const val userAgent = "userAgent"
const val showUnread = "showUnread"
const val showUnreadNew = "showUnreadNew"
const val bookGroupStyle = "bookGroupStyle"
const val useDefaultCover = "useDefaultCover"
const val loadCoverOnlyWifi = "loadCoverOnlyWifi"
@@ -157,6 +157,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
appCtx.putPrefBoolean(PreferKey.showUnread, value)
}
var showUnreadNew: Boolean
get() = appCtx.getPrefBoolean(PreferKey.showUnreadNew, true)
set(value) {
appCtx.putPrefBoolean(PreferKey.showUnreadNew, value)
}
var showLastUpdateTime: Boolean
get() = appCtx.getPrefBoolean(PreferKey.showLastUpdateTime, false)
set(value) {
@@ -64,6 +64,7 @@ class BookshelfConfigBottomSheet : BaseBottomSheetDialogFragment(R.layout.dialog
}
swShowUnread.isChecked = AppConfig.showUnread
swShowUnreadNew.isChecked = AppConfig.showUnreadNew
swShowLastUpdateTime.isChecked = AppConfig.showLastUpdateTime
swShowWaitUpBooks.isChecked = AppConfig.showWaitUpCount
swShowBookshelfFastScroller.isChecked = AppConfig.showBookshelfFastScroller
@@ -119,6 +120,10 @@ class BookshelfConfigBottomSheet : BaseBottomSheetDialogFragment(R.layout.dialog
AppConfig.showUnread = swShowUnread.isChecked
postEvent(EventBus.BOOKSHELF_REFRESH, "")
}
if (AppConfig.showUnreadNew != swShowUnreadNew.isChecked) {
AppConfig.showUnreadNew = swShowUnreadNew.isChecked
postEvent(EventBus.BOOKSHELF_REFRESH, "")
}
if (AppConfig.showLastUpdateTime != swShowLastUpdateTime.isChecked) {
AppConfig.showLastUpdateTime = swShowLastUpdateTime.isChecked
postEvent(EventBus.BOOKSHELF_REFRESH, "")
@@ -3,6 +3,7 @@ package io.legado.app.ui.main.bookshelf.books.styleDefalut
import android.content.Context
import android.os.Bundle
import android.view.ViewGroup
import androidx.core.view.isVisible
import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.data.entities.Book
import io.legado.app.databinding.ItemBookshelfGridBinding
@@ -53,8 +54,11 @@ class BooksAdapterGrid(context: Context, private val callBack: CallBack) :
if (unreadCount > 0) {
binding.cdUnread.visible()
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.gone()
binding.newChapter.gone()
}
} else {
binding.cdUnread.gone()
@@ -4,6 +4,7 @@ import android.content.Context
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.data.entities.Book
import io.legado.app.databinding.ItemBookshelfGridCompactBinding
@@ -59,6 +60,8 @@ class BooksAdapterGridCompact(context: Context, private val callBack: CallBack)
if (unreadCount > 0) {
binding.cdUnread.visibility = View.VISIBLE
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.visibility = View.GONE
}
@@ -4,6 +4,7 @@ import android.content.Context
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.data.entities.Book
import io.legado.app.databinding.ItemBookshelfGridCompactBinding
@@ -60,6 +61,8 @@ class BooksAdapterGridCover(context: Context, private val callBack: CallBack) :
if (unreadCount > 0) {
binding.cdUnread.visibility = View.VISIBLE
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.visibility = View.GONE
}
@@ -79,6 +79,8 @@ class BooksAdapterList(
if (unreadCount > 0) {
binding.cdUnread.visible()
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.gone()
}
@@ -83,6 +83,8 @@ class BooksAdapterListCompact(
if (unreadCount > 0) {
binding.cdUnread.visible()
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.gone()
}
@@ -5,6 +5,7 @@ import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.data.entities.Book
@@ -110,6 +111,8 @@ class BooksAdapterGrid(context: Context, callBack: CallBack) :
if (unreadCount > 0) {
binding.cdUnread.visibility = View.VISIBLE
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.visibility = View.GONE
}
@@ -5,6 +5,7 @@ import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.data.entities.Book
@@ -117,6 +118,8 @@ class BooksAdapterGridCompact(context: Context, callBack: CallBack) :
if (unreadCount > 0) {
binding.cdUnread.visibility = View.VISIBLE
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.visibility = View.GONE
}
@@ -5,6 +5,7 @@ import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.data.entities.Book
@@ -117,6 +118,8 @@ class BooksAdapterGridCover(context: Context, callBack: CallBack) :
if (unreadCount > 0) {
binding.cdUnread.visibility = View.VISIBLE
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.visibility = View.GONE
}
@@ -4,6 +4,7 @@ import android.content.Context
import android.os.Bundle
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.data.entities.Book
@@ -131,6 +132,8 @@ class BooksAdapterList(context: Context, callBack: CallBack) :
if (unreadCount > 0) {
binding.cdUnread.visible()
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.gone()
}
@@ -4,6 +4,7 @@ import android.content.Context
import android.os.Bundle
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.data.entities.Book
@@ -129,6 +130,8 @@ class BooksAdapterListCompact(context: Context, callBack: CallBack) :
if (unreadCount > 0) {
binding.cdUnread.visible()
binding.tvUnread.text = unreadCount.toString()
if (AppConfig.showUnreadNew)
binding.newChapter.isVisible = item.lastCheckCount > 0
} else {
binding.cdUnread.gone()
}
@@ -48,6 +48,12 @@
android:layout_height="wrap_content"
android:text="@string/show_unread" />
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/sw_show_unread_new"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_unread_new" />
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/sw_show_last_update_time"
android:layout_width="match_parent"
+25 -10
View File
@@ -64,17 +64,32 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/colorOnSecondary"
android:textSize="10sp"
android:padding="4dp"
android:textStyle="bold"
android:includeFontPadding="false"
tools:text="5"
tools:ignore="SmallSp" />
android:gravity="center_vertical"
android:orientation="horizontal">
<com.google.android.material.circularreveal.cardview.CircularRevealCardView
android:id="@+id/new_chapter"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_marginStart="4dp"
app:strokeWidth="0dp"
app:cardBackgroundColor="?attr/colorSecondaryContainer" />
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/colorOnSecondary"
android:textSize="9sp"
android:padding="4dp"
android:textStyle="bold"
android:includeFontPadding="false"
tools:text="5"
tools:ignore="SmallSp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
@@ -48,24 +48,40 @@
android:id="@+id/cd_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|end"
android:layout_margin="4dp"
android:visibility="visible"
app:cardBackgroundColor="?attr/colorSecondaryVariant"
app:cardCornerRadius="4dp"
app:strokeWidth="0dp">
app:strokeWidth="0dp"
app:cardBackgroundColor="?attr/colorSecondaryVariant"
android:layout_gravity="end|top">
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:padding="4dp"
android:textColor="?attr/colorOnSecondary"
android:textSize="10sp"
android:textStyle="bold"
tools:ignore="SmallSp"
tools:text="5" />
android:gravity="center_vertical"
android:orientation="horizontal">
<com.google.android.material.circularreveal.cardview.CircularRevealCardView
android:id="@+id/new_chapter"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_marginStart="4dp"
app:strokeWidth="0dp"
app:cardBackgroundColor="?attr/colorSecondaryContainer" />
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/colorOnSecondary"
android:textSize="9sp"
android:padding="4dp"
android:textStyle="bold"
android:includeFontPadding="false"
tools:text="5"
tools:ignore="SmallSp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<TextView
+27 -12
View File
@@ -64,20 +64,35 @@
app:cardCornerRadius="4dp"
app:strokeWidth="0dp"
app:cardBackgroundColor="?attr/colorSecondaryVariant"
app:layout_constraintTop_toTopOf="@id/iv_cover"
app:layout_constraintEnd_toEndOf="@id/iv_cover">
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/colorOnSecondary"
android:textSize="10sp"
android:padding="4dp"
android:textStyle="bold"
android:includeFontPadding="false"
tools:text="5"
tools:ignore="SmallSp" />
android:gravity="center_vertical"
android:orientation="horizontal">
<com.google.android.material.circularreveal.cardview.CircularRevealCardView
android:id="@+id/new_chapter"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_marginStart="4dp"
app:strokeWidth="0dp"
app:cardBackgroundColor="?attr/colorSecondaryContainer" />
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/colorOnSecondary"
android:textSize="9sp"
android:padding="4dp"
android:textStyle="bold"
android:includeFontPadding="false"
tools:text="5"
tools:ignore="SmallSp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
@@ -64,20 +64,35 @@
app:cardCornerRadius="4dp"
app:strokeWidth="0dp"
app:cardBackgroundColor="?attr/colorSecondaryVariant"
app:layout_constraintTop_toTopOf="@id/iv_cover"
app:layout_constraintEnd_toEndOf="@id/iv_cover">
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/colorOnSecondary"
android:textSize="9sp"
android:padding="3dp"
android:textStyle="bold"
android:includeFontPadding="false"
tools:text="5"
tools:ignore="SmallSp" />
android:gravity="center_vertical"
android:orientation="horizontal">
<com.google.android.material.circularreveal.cardview.CircularRevealCardView
android:id="@+id/new_chapter"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_marginStart="4dp"
app:strokeWidth="0dp"
app:cardBackgroundColor="?attr/colorSecondaryContainer" />
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/colorOnSecondary"
android:textSize="9sp"
android:padding="4dp"
android:textStyle="bold"
android:includeFontPadding="false"
tools:text="5"
tools:ignore="SmallSp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
+1
View File
@@ -1347,4 +1347,5 @@
<string name="replace_purify_badge">计数替换净化</string>
<string name="page_anim_fade">渐变</string>
<string name="show_bookshelf_tab_menu">显示更多分组按钮</string>
<string name="show_unread_new">显示新章节更新标志</string>
</resources>
+1
View File
@@ -1350,4 +1350,5 @@
<string name="replace_purify_badge">计数替换净化</string>
<string name="page_anim_fade">渐变</string>
<string name="show_bookshelf_tab_menu">显示更多分组按钮</string>
<string name="show_unread_new">显示新章节更新标志</string>
</resources>