1.整理设置界面,将有关主页面外观的设置移至[外观]设置中

2.将部分控件更换为M3E样式
3.增加导航栏标签显示自定义设置
4.现在轨道导航可以记住上次的扩展位置
5.优化共享动画
6.更新一些颜文字
7.清理代码
This commit is contained in:
HapeLee
2025-09-29 01:55:32 +08:00
parent 7a3724a3ff
commit 480dfdeb62
25 changed files with 358 additions and 253 deletions
+2 -2
View File
@@ -114,8 +114,8 @@ jobs:
- name: Check Build production - name: Check Build production
run: | run: |
echo "查看 APK 输出目录" echo "查看 APK 输出目录"
ls -R $GITHUB_WORKSPACE/app/app/build/outputs/apk/ ls -R $GITHUB_WORKSPACE/app/build/outputs/apk/
if ! ls $GITHUB_WORKSPACE/app/app/build/outputs/apk/release/*/*.apk 1> /dev/null 2>&1; then if ! ls $GITHUB_WORKSPACE/app/build/outputs/apk/*/*/*.apk 1> /dev/null 2>&1; then
echo "Build production not found! Check gradle logs." echo "Build production not found! Check gradle logs."
exit 1 exit 1
fi fi
@@ -103,7 +103,6 @@ object PreferKey {
const val mangaColorFilter = "mangaColorFilter" const val mangaColorFilter = "mangaColorFilter"
const val enableMangaEInk = "enableMangaEInk" const val enableMangaEInk = "enableMangaEInk"
const val mangaEInkThreshold = "mangaEInkThreshold" const val mangaEInkThreshold = "mangaEInkThreshold"
const val disableHorizontalAnimator = "disableHorizontalAnimator"
const val enableMangaGray = "enableMangaGray" const val enableMangaGray = "enableMangaGray"
const val autoRefresh = "auto_refresh" const val autoRefresh = "auto_refresh"
@@ -204,4 +203,5 @@ object PreferKey {
const val bookshelfLayoutGridPortrait = "bookshelfLayoutGridPortrait" const val bookshelfLayoutGridPortrait = "bookshelfLayoutGridPortrait"
const val tabletInterface = "tabletInterface" const val tabletInterface = "tabletInterface"
const val pureBlack = "pure_black" const val pureBlack = "pure_black"
const val labelVisibilityMode = "labelVisibilityMode"
} }
@@ -814,5 +814,11 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
set(value) { set(value) {
appCtx.getPrefBoolean(PreferKey.pureBlack, value) appCtx.getPrefBoolean(PreferKey.pureBlack, value)
} }
var labelVisibilityMode
get() = appCtx.getPrefString(PreferKey.labelVisibilityMode, "auto")
set(value) {
appCtx.putPrefString(PreferKey.labelVisibilityMode, value)
}
} }
@@ -41,6 +41,12 @@ by appCtx.getSharedPreferences("local", Context.MODE_PRIVATE) {
putBoolean("privacyPolicyOk", value) putBoolean("privacyPolicyOk", value)
} }
var navExtended: Boolean
get() = getBoolean("navExtended")
set(value) {
putBoolean("navExtended", value)
}
val readHelpVersionIsLast: Boolean val readHelpVersionIsLast: Boolean
get() = isLastVersion(1, "readHelpVersion", "firstRead") get() = isLastVersion(1, "readHelpVersion", "firstRead")
@@ -17,7 +17,6 @@ import androidx.preference.ListPreference
import androidx.preference.Preference import androidx.preference.Preference
import com.jeremyliao.liveeventbus.LiveEventBus import com.jeremyliao.liveeventbus.LiveEventBus
import io.legato.kazusa.R import io.legato.kazusa.R
import io.legato.kazusa.constant.EventBus
import io.legato.kazusa.constant.PreferKey import io.legato.kazusa.constant.PreferKey
import io.legato.kazusa.databinding.DialogEditTextBinding import io.legato.kazusa.databinding.DialogEditTextBinding
import io.legato.kazusa.help.AppFreezeMonitor import io.legato.kazusa.help.AppFreezeMonitor
@@ -205,7 +204,6 @@ class OtherConfigFragment : PreferenceFragment(),
setProcessTextEnable(it.getBoolean(key, true)) setProcessTextEnable(it.getBoolean(key, true))
} }
PreferKey.showDiscovery, PreferKey.showRss, PreferKey.showBottomView -> postEvent(EventBus.NOTIFY_MAIN, true)
PreferKey.language -> listView.postDelayed(1000) { PreferKey.language -> listView.postDelayed(1000) {
appCtx.restart() appCtx.restart()
} }
@@ -205,9 +205,9 @@ class ThemeConfigFragment : PreferenceFragmentCompat(),
upPreferenceSummary(key, getPrefString(key)) upPreferenceSummary(key, getPrefString(key))
} }
PreferKey.tabletInterface -> { PreferKey.showDiscovery, PreferKey.showRss,
recreateActivities() PreferKey.showBottomView, PreferKey.tabletInterface,
} PreferKey.labelVisibilityMode -> postEvent(EventBus.NOTIFY_MAIN, true)
} }
} }
@@ -20,6 +20,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.bottomnavigation.LabelVisibilityMode
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
import com.google.android.material.navigation.NavigationBarView import com.google.android.material.navigation.NavigationBarView
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
@@ -48,7 +49,6 @@ import io.legato.kazusa.ui.main.explore.ExploreFragment
import io.legato.kazusa.ui.main.my.MyFragment import io.legato.kazusa.ui.main.my.MyFragment
import io.legato.kazusa.ui.main.rss.RssFragment import io.legato.kazusa.ui.main.rss.RssFragment
import io.legato.kazusa.ui.widget.dialog.TextDialog import io.legato.kazusa.ui.widget.dialog.TextDialog
import io.legato.kazusa.utils.dpToPx
import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.gone
import io.legato.kazusa.utils.hideSoftInput import io.legato.kazusa.utils.hideSoftInput
import io.legato.kazusa.utils.observeEvent import io.legato.kazusa.utils.observeEvent
@@ -371,42 +371,67 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
} else { } else {
binding.bottomNavigationView.gone() binding.bottomNavigationView.gone()
} }
navView.labelVisibilityMode = when (AppConfig.labelVisibilityMode) {
"auto" -> LabelVisibilityMode.LABEL_VISIBILITY_AUTO
"selected" -> LabelVisibilityMode.LABEL_VISIBILITY_SELECTED
"labeled" -> LabelVisibilityMode.LABEL_VISIBILITY_LABELED
"unlabeled" -> LabelVisibilityMode.LABEL_VISIBILITY_UNLABELED
else -> LabelVisibilityMode.LABEL_VISIBILITY_AUTO
}
} else { } else {
binding.bottomNavigationView.gone() binding.bottomNavigationView.gone()
binding.navigationRailView.gone() binding.navigationRailView.gone()
} }
val efab =
binding.navigationRailView.headerView?.findViewById<ExtendedFloatingActionButton>(R.id.nav_fab)
efab?.let { it.isExtended = false }
val lp = val lp =
binding.navigationRailView.headerView?.let { it.layoutParams as FrameLayout.LayoutParams } binding.navigationRailView.headerView!!.layoutParams as FrameLayout.LayoutParams
lp!!.gravity = Gravity.START lp.gravity = Gravity.START
binding.navigationRailView.headerView?.setPadding( binding.navigationRailView.headerView!!
12.dpToPx(), .setPadding(
12.dpToPx(), binding.navigationRailView.itemActiveIndicatorExpandedMarginHorizontal,
12.dpToPx(), 0,
12.dpToPx() binding.navigationRailView.itemActiveIndicatorExpandedMarginHorizontal,
) 0)
binding.navigationRailView.headerView?.findViewById<ExtendedFloatingActionButton>(R.id.nav_fab) val efab =
?.setOnClickListener { binding.navigationRailView.headerView!!.findViewById<ExtendedFloatingActionButton>(R.id.nav_fab)
val button =
binding.navigationRailView.headerView!!.findViewById<ImageView>(R.id.nav_botton)
efab.let {
if (LocalConfig.navExtended) {
it.isExtended = true
binding.navigationRailView.expand()
button.setImageResource(R.drawable.ic_menu_open)
} else {
it.isExtended = false
binding.navigationRailView.collapse()
button.setImageResource(R.drawable.ic_menu)
}
}
efab.setOnClickListener {
startActivity<SearchActivity>() startActivity<SearchActivity>()
} }
binding.navigationRailView.headerView?.findViewById<ImageView>(R.id.nav_botton)
?.setOnClickListener { button.setOnClickListener {
efab?.let { it1 -> efab.let { it1 ->
if (it1.isExtended) { if (it1.isExtended) {
efab.isExtended = false efab.isExtended = false
binding.navigationRailView.collapse() binding.navigationRailView.collapse()
} else { button.setImageResource(R.drawable.ic_menu)
efab.isExtended = true } else {
binding.navigationRailView.expand() efab.isExtended = true
} binding.navigationRailView.expand()
button.setImageResource(R.drawable.ic_menu_open)
} }
LocalConfig.navExtended = it1.isExtended
} }
}
} }
private fun bindNavigationListener() { private fun bindNavigationListener() {
@@ -419,14 +444,6 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
} }
} }
private fun updateNavigationRailFab(position: Int) {
binding.navigationRailView.headerView?.gone()
val fragmentId = getFragmentId(position)
if (fragmentId == idBookshelf1 || fragmentId == idBookshelf2 || fragmentId == idBookshelf3) {
binding.navigationRailView.headerView?.visible()
}
}
private fun upHomePage() { private fun upHomePage() {
when (AppConfig.defaultHomePage) { when (AppConfig.defaultHomePage) {
"bookshelf" -> {} "bookshelf" -> {}
@@ -467,7 +484,6 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
idMy -> R.id.menu_my_config idMy -> R.id.menu_my_config
else -> R.id.menu_bookshelf else -> R.id.menu_bookshelf
} }
updateNavigationRailFab(position)
} }
} }
@@ -31,7 +31,7 @@ class BooksAdapterList(
item: Book, item: Book,
payloads: MutableList<Any> payloads: MutableList<Any>
) = binding.run { ) = binding.run {
binding.ivCover.transitionName = "book_${item.bookUrl}" binding.cdCover.transitionName = "book_${item.bookUrl}"
if (payloads.isEmpty()) { if (payloads.isEmpty()) {
tvName.text = item.name tvName.text = item.name
tvAuthor.text = item.author tvAuthor.text = item.author
@@ -98,13 +98,13 @@ class BooksAdapterList(
holder.itemView.apply { holder.itemView.apply {
binding.cvContent.setOnClickListener { binding.cvContent.setOnClickListener {
getItem(holder.layoutPosition)?.let { getItem(holder.layoutPosition)?.let {
callBack.open(it, binding.ivCover) callBack.open(it, binding.cdCover)
} }
} }
binding.cvContent.onLongClick { binding.cvContent.onLongClick {
getItem(holder.layoutPosition)?.let { getItem(holder.layoutPosition)?.let {
callBack.openBookInfo(it, binding.ivCover) callBack.openBookInfo(it, binding.cdCover)
} }
} }
} }
@@ -113,10 +113,10 @@ class BooksAdapterList(context: Context, callBack: CallBack) :
fun registerListener(item: Any) { fun registerListener(item: Any) {
binding.cvContent.setOnClickListener { binding.cvContent.setOnClickListener {
callBack.onItemClick(item, binding.ivCover) callBack.onItemClick(item, binding.cdCover)
} }
binding.cvContent.onLongClick { binding.cvContent.onLongClick {
callBack.onItemLongClick(item, binding.ivCover) callBack.onItemLongClick(item, binding.cdCover)
} }
} }
@@ -18,7 +18,7 @@ class EmptyMessageView @JvmOverloads constructor(
private val messageTextView: TextView private val messageTextView: TextView
private val faces = listOf( private val faces = listOf(
"(๑`^´๑)", "(´・ᴗ・`)", "(•̀ᴗ•́)و", "(ᵔᴥᵔ)", "(¬‿¬)", "(ಥ﹏ಥ)", "(。•́︿•̀。)" "(;′⌒`)", "(つ﹏⊂)", "(•̀ᴗ•́)و", "(๑•́ ₃ •̀๑)", "(눈‸눈)", "(ಥ﹏ಥ)", "(。•́︿•̀。)"
) )
init { init {
@@ -70,9 +70,4 @@ class EmptyMessageView @JvmOverloads constructor(
messageTextView.text = msg messageTextView.text = msg
} }
/** 可选:手动刷新随机颜文字 */
fun refreshFace() {
faceTextView.text = faces.random()
}
} }
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true"
tools:ignore="NewApi">
<path
android:fillColor="@android:color/white"
android:pathData="M120,720v-80L640,640v80L120,720ZM784,680L584,480L784,280l56,56L696,480L840,624l-56,56ZM120,520v-80L520,440v80L120,520ZM120,320v-80L640,240v80L120,320Z"/>
</vector>
@@ -175,7 +175,8 @@
style="@style/Widget.Material3Expressive.Button" style="@style/Widget.Material3Expressive.Button"
android:text="@string/delete_all" android:text="@string/delete_all"
app:backgroundTint="?attr/colorTertiary" app:backgroundTint="?attr/colorTertiary"
app:iconTint="?attr/colorSurface" app:iconTint="?attr/colorOnTertiary"
android:textColor="?attr/colorOnTertiary"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:icon="@drawable/ic_clear_all" app:icon="@drawable/ic_clear_all"
+2 -4
View File
@@ -20,10 +20,9 @@
android:id="@+id/bottom_navigation_view" android:id="@+id/bottom_navigation_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="56dp"
android:visibility="visible" android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/main_bnv" /> app:menu="@menu/main_bnv" />
<com.google.android.material.navigationrail.NavigationRailView <com.google.android.material.navigationrail.NavigationRailView
@@ -33,9 +32,8 @@
android:background="?attr/colorSurfaceContainer" android:background="?attr/colorSurfaceContainer"
android:visibility="visible" android:visibility="visible"
app:headerLayout="@layout/navigation_rail_fab" app:headerLayout="@layout/navigation_rail_fab"
app:layout_constraintBottom_toBottomOf="parent" app:expandedMinWidth="0dp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:menu="@menu/main_bnv" app:menu="@menu/main_bnv"
app:menuGravity="center" /> app:menuGravity="center" />
+46 -49
View File
@@ -21,21 +21,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout <com.google.android.material.card.MaterialCardView
android:id="@+id/cd_cover"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="match_parent"
app:cardCornerRadius="8dp"
android:layout_margin="8dp"
android:transitionName="img_cover"
app:strokeWidth="0dp">
<com.google.android.material.card.MaterialCardView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cd_cover"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content">
app:cardCornerRadius="8dp"
app:layout_constraintEnd_toEndOf="parent"
android:layout_margin="8dp"
android:transitionName="img_cover"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:strokeWidth="0dp">
<io.legato.kazusa.ui.widget.image.CoverImageView <io.legato.kazusa.ui.widget.image.CoverImageView
android:id="@+id/iv_cover" android:id="@+id/iv_cover"
@@ -44,49 +41,49 @@
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@drawable/image_cover_default" android:src="@drawable/image_cover_default"
tools:ignore="ImageContrastCheck" /> tools:ignore="ImageContrastCheck" />
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/rl_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="4dp"
android:layout_marginHorizontal="12dp"
android:indeterminate="true"
android:visibility="invisible"
android:layout_gravity="top"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.progressindicator.LinearProgressIndicator <com.google.android.material.card.MaterialCardView
android:id="@+id/rl_loading" android:id="@+id/cd_unread"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="4dp"
android:layout_marginHorizontal="12dp"
android:indeterminate="true"
android:visibility="invisible"
android:layout_gravity="top"
app:layout_constraintEnd_toEndOf="@id/cd_cover"
app:layout_constraintStart_toStartOf="@id/cd_cover"
app:layout_constraintTop_toTopOf="@id/cd_cover" />
<com.google.android.material.card.MaterialCardView
android:id="@+id/cd_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:visibility="visible"
app:cardCornerRadius="4dp"
app:strokeWidth="0dp"
app:cardBackgroundColor="?attr/colorSecondaryVariant"
app:layout_constraintEnd_toEndOf="@id/cd_cover"
app:layout_constraintTop_toTopOf="@id/cd_cover">
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="?attr/colorSurface" android:layout_margin="4dp"
android:textSize="10sp" android:visibility="visible"
android:padding="4dp" app:cardCornerRadius="4dp"
android:textStyle="bold" app:strokeWidth="0dp"
android:includeFontPadding="false" app:cardBackgroundColor="?attr/colorSecondaryVariant"
tools:text="5" app:layout_constraintEnd_toEndOf="parent"
tools:ignore="SmallSp" /> app:layout_constraintTop_toTopOf="parent">
</com.google.android.material.card.MaterialCardView> <TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/colorSurface"
android:textSize="10sp"
android:padding="4dp"
android:textStyle="bold"
android:includeFontPadding="false"
tools:text="5"
tools:ignore="SmallSp" />
</androidx.constraintlayout.widget.ConstraintLayout> </com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
<!-- 书名 --> <!-- 书名 -->
<TextView <TextView
+62 -54
View File
@@ -16,68 +16,76 @@
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
tools:ignore="UnusedAttribute"> tools:ignore="UnusedAttribute">
<androidx.constraintlayout.widget.ConstraintLayout <com.google.android.material.card.MaterialCardView
android:id="@+id/cl_cover" android:id="@+id/cd_cover"
android:layout_width="70dp" android:layout_width="wrap_content"
android:layout_height="98dp" android:layout_height="wrap_content"
android:layout_marginStart="8dp" app:cardCornerRadius="8dp"
android:layout_marginVertical="8dp" app:strokeWidth="0dp"
android:layout_margin="8dp"
android:transitionName="img_cover"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"> app:layout_constraintBottom_toBottomOf="parent">
<!-- 书封面 --> <androidx.constraintlayout.widget.ConstraintLayout
<io.legato.kazusa.ui.widget.image.CoverImageView android:id="@+id/cl_cover"
android:id="@+id/iv_cover" android:layout_width="70dp"
android:layout_width="match_parent" android:layout_height="98dp">
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/image_cover_default"
android:transitionName="img_cover"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:ignore="ImageContrastCheck" />
<com.google.android.material.progressindicator.LinearProgressIndicator <io.legato.kazusa.ui.widget.image.CoverImageView
android:id="@+id/rl_loading" android:id="@+id/iv_cover"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_marginVertical="4dp" android:scaleType="centerCrop"
android:layout_marginHorizontal="6dp" android:src="@drawable/image_cover_default"
android:indeterminate="true" app:layout_constraintTop_toTopOf="parent"
android:visibility="invisible" app:layout_constraintStart_toStartOf="parent"
android:layout_gravity="top" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/iv_cover" tools:ignore="ImageContrastCheck" />
app:layout_constraintStart_toStartOf="@id/iv_cover"
app:layout_constraintEnd_toEndOf="@id/iv_cover" />
<com.google.android.material.card.MaterialCardView <com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/cd_unread" android:id="@+id/rl_loading"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="4dp" android:layout_marginVertical="4dp"
android:visibility="visible" android:layout_marginHorizontal="6dp"
app:cardCornerRadius="4dp" android:indeterminate="true"
app:strokeWidth="0dp" android:visibility="invisible"
app:cardBackgroundColor="?attr/colorSecondaryVariant" android:layout_gravity="top"
app:layout_constraintTop_toTopOf="@id/iv_cover" app:layout_constraintTop_toTopOf="@id/iv_cover"
app:layout_constraintEnd_toEndOf="@id/iv_cover"> app:layout_constraintStart_toStartOf="@id/iv_cover"
app:layout_constraintEnd_toEndOf="@id/iv_cover" />
<TextView <com.google.android.material.card.MaterialCardView
android:id="@+id/tv_unread" android:id="@+id/cd_unread"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="?attr/colorSurface" android:layout_margin="4dp"
android:textSize="10sp" android:visibility="visible"
android:padding="4dp" app:cardCornerRadius="4dp"
android:textStyle="bold" app:strokeWidth="0dp"
android:includeFontPadding="false" app:cardBackgroundColor="?attr/colorSecondaryVariant"
tools:text="5" app:layout_constraintTop_toTopOf="@id/iv_cover"
tools:ignore="SmallSp" /> app:layout_constraintEnd_toEndOf="@id/iv_cover">
<TextView
android:id="@+id/tv_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/colorSurface"
android:textSize="10sp"
android:padding="4dp"
android:textStyle="bold"
android:includeFontPadding="false"
tools:text="5"
tools:ignore="SmallSp" />
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView <TextView
android:id="@+id/tv_name" android:id="@+id/tv_name"
@@ -90,9 +98,9 @@
android:text="@string/book_name" android:text="@string/book_name"
style="@style/ChapterNameText" style="@style/ChapterNameText"
tools:ignore="RtlHardcoded,RtlSymmetry" tools:ignore="RtlHardcoded,RtlSymmetry"
app:layout_constraintStart_toEndOf="@+id/cl_cover" app:layout_constraintStart_toEndOf="@+id/cd_cover"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/cl_cover" /> app:layout_constraintTop_toTopOf="@id/cd_cover" />
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_author" android:id="@+id/iv_author"
+3 -3
View File
@@ -3,8 +3,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardBackgroundColor="?attr/colorTertiaryFixed" app:cardBackgroundColor="?attr/colorTertiaryContainer"
app:strokeColor="?attr/colorTertiaryFixed" app:strokeColor="?attr/colorTertiaryContainer"
android:clickable="true" android:clickable="true"
android:focusable="true"> android:focusable="true">
<TextView <TextView
@@ -20,7 +20,7 @@
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:maxLines="1" android:maxLines="1"
android:textSize="14sp" android:textSize="14sp"
android:textColor="?attr/colorOnTertiaryFixedVariant" android:textColor="?attr/colorOnTertiaryContainer"
tools:ignore="UnusedAttribute" /> tools:ignore="UnusedAttribute" />
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
@@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/navigation_rail_fab" android:id="@+id/navigation_rail_fab"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="top|start" android:layout_gravity="top|start"
android:clipChildren="false" android:clipChildren="false"
@@ -13,6 +13,7 @@
android:id="@+id/nav_botton" android:id="@+id/nav_botton"
android:layout_width="56dp" android:layout_width="56dp"
android:layout_height="56dp" android:layout_height="56dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:scaleType="center" android:scaleType="center"
android:src="@drawable/ic_menu" /> android:src="@drawable/ic_menu" />
@@ -20,6 +21,11 @@
android:id="@+id/nav_fab" android:id="@+id/nav_fab"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:backgroundTint="?attr/colorTertiaryContainer"
app:iconTint="?attr/colorOnTertiaryContainer"
android:textColor="?attr/colorOnTertiaryContainer"
android:minWidth="0dp"
android:scrollbars="none"
android:text="@string/search" android:text="@string/search"
app:icon="@drawable/ic_search" /> app:icon="@drawable/ic_search" />
+2
View File
@@ -10,6 +10,8 @@
<item name="chipStyle">@style/Widget.MyApp.Chip.Assist</item> <item name="chipStyle">@style/Widget.MyApp.Chip.Assist</item>
<item name="popupMenuBackground">@drawable/popup_background</item> <item name="popupMenuBackground">@drawable/popup_background</item>
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item> <item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
<item name="navigationRailStyle">@style/Widget.Material3Expressive.NavigationRailView</item>
<item name="bottomNavigationStyle">@style/Widget.Material3Expressive.BottomNavigationView</item>
</style> </style>
<style name="ThemeOverlay.WhiteBackground" parent=""> <style name="ThemeOverlay.WhiteBackground" parent="">
+7
View File
@@ -136,4 +136,11 @@
<item>仅强调色</item> <item>仅强调色</item>
</string-array> </string-array>
<string-array name="label_vis_mode" >
<item>自动</item>
<item>选中时显示</item>
<item>常驻</item>
<item>不显示</item>
</string-array>
</resources> </resources>
+7
View File
@@ -81,4 +81,11 @@
<item>accent</item> <item>accent</item>
</string-array> </string-array>
<string-array name="label_vis_mode_value">
<item>auto</item>
<item>selected</item>
<item>labeled</item>
<item>unlabeled</item>
</string-array>
</resources> </resources>
+7
View File
@@ -222,4 +222,11 @@
<item>@string/bookshelf_px_5</item> <item>@string/bookshelf_px_5</item>
</string-array> </string-array>
<string-array name="label_vis_mode" >
<item>Auto</item>
<item>Selected</item>
<item>Labeled</item>
<item>Unlabeled</item>
</string-array>
</resources> </resources>
-3
View File
@@ -4,7 +4,6 @@
<dimen name="activity_vertical_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="nav_header_vertical_spacing">8dp</dimen> <dimen name="nav_header_vertical_spacing">8dp</dimen>
<dimen name="nav_header_height">176dp</dimen> <dimen name="nav_header_height">176dp</dimen>
<dimen name="fab_margin">16dp</dimen>
<dimen name="font_size_normal">14sp</dimen> <dimen name="font_size_normal">14sp</dimen>
<dimen name="font_size_middle">16sp</dimen> <dimen name="font_size_middle">16sp</dimen>
@@ -17,8 +16,6 @@
<dimen name="desc_icon_size">18sp</dimen> <dimen name="desc_icon_size">18sp</dimen>
<dimen name="toolbar_elevation">4dp</dimen>
<dimen name="fastscroll_bubble_radius">44dp</dimen> <dimen name="fastscroll_bubble_radius">44dp</dimen>
<dimen name="fastscroll_bubble_size">88dp</dimen> <dimen name="fastscroll_bubble_size">88dp</dimen>
<dimen name="fastscroll_bubble_textsize">48sp</dimen> <dimen name="fastscroll_bubble_textsize">48sp</dimen>
+2
View File
@@ -9,6 +9,8 @@
<item name="chipStyle">@style/Widget.MyApp.Chip.Assist</item> <item name="chipStyle">@style/Widget.MyApp.Chip.Assist</item>
<item name="popupMenuBackground">@drawable/popup_background</item> <item name="popupMenuBackground">@drawable/popup_background</item>
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item> <item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
<item name="navigationRailStyle">@style/Widget.Material3Expressive.NavigationRailView</item>
<item name="bottomNavigationStyle">@style/Widget.Material3Expressive.BottomNavigationView</item>
</style> </style>
<style name="ThemeOverlay.WhiteBackground" parent=""> <style name="ThemeOverlay.WhiteBackground" parent="">
+70 -78
View File
@@ -28,40 +28,15 @@
android:key="defaultToRead" android:key="defaultToRead"
android:summary="@string/ps_default_read" android:summary="@string/ps_default_read"
android:title="@string/pt_default_read" android:title="@string/pt_default_read"
app:iconSpaceReserved="false" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="showDiscovery"
android:title="@string/show_discovery"
app:iconSpaceReserved="false" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="showRss"
android:title="@string/show_rss"
app:iconSpaceReserved="false" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="showBottomView"
android:summary="仍可滑动切换页面"
android:title="显示底部导航栏"
app:iconSpaceReserved="false" />
<io.legato.kazusa.lib.prefs.NameListPreference
android:defaultValue="bookshelf"
android:key="defaultHomePage"
android:title="@string/default_home_page"
app:allowDividerAbove="false" app:allowDividerAbove="false"
app:allowDividerBelow="false" app:allowDividerBelow="false"
app:entries="@array/default_home_page" app:iconSpaceReserved="false" />
app:entryValues="@array/default_home_page_value" />
</io.legato.kazusa.lib.prefs.PreferenceCategory> </io.legato.kazusa.lib.prefs.PreferenceCategory>
<io.legato.kazusa.lib.prefs.PreferenceCategory <io.legato.kazusa.lib.prefs.PreferenceCategory
android:title="@string/other_setting" android:title="隐私"
app:allowDividerAbove="false"
app:allowDividerBelow="false" app:allowDividerBelow="false"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:layout="@layout/view_preference_category"> app:layout="@layout/view_preference_category">
@@ -78,73 +53,30 @@
android:summary="@string/ignore_battery_permission_rationale" android:summary="@string/ignore_battery_permission_rationale"
android:title="后台权限" /> android:title="后台权限" />
<io.legato.kazusa.lib.prefs.NameListPreference
android:defaultValue="official_version"
android:key="updateToVariant"
android:summary="@string/update_to_variant_summary"
android:title="@string/update_to_variant_title"
app:allowDividerAbove="false"
app:allowDividerBelow="false"
app:entries="@array/default_app_variant"
app:entryValues="@array/default_app_variant_value" />
<io.legato.kazusa.lib.prefs.SwitchPreference <io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true" android:defaultValue="true"
android:key="firebaseEnable" android:key="firebaseEnable"
android:summary="@string/firebase_enable_summary" android:summary="@string/firebase_enable_summary"
android:title="@string/firebase_enable_title" /> android:title="@string/firebase_enable_title" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="sharedElementEnterTransitionEnable"
android:summary="从书架进入阅读界面时,优化动画效果。"
android:title="使用共享元素动画" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="delayBookLoadEnable"
android:summary="减少进入阅读界面时的卡顿,但加载书籍时间会延长。"
android:title="延缓书籍加载" />
<io.legato.kazusa.lib.prefs.Preference <io.legato.kazusa.lib.prefs.Preference
android:key="localPassword" android:key="localPassword"
android:summary="@string/set_local_password_summary" android:summary="@string/set_local_password_summary"
android:title="@string/set_local_password" /> android:title="@string/set_local_password" />
<io.legato.kazusa.lib.prefs.Preference </io.legato.kazusa.lib.prefs.PreferenceCategory>
android:key="userAgent"
android:title="@string/user_agent" />
<io.legato.kazusa.lib.prefs.SwitchPreference <io.legato.kazusa.lib.prefs.PreferenceCategory
android:defaultValue="false" android:title="阅读"
android:key="webServiceWakeLock" app:allowDividerBelow="false"
android:summary="@string/web_service_wake_lock_summary" app:iconSpaceReserved="false"
android:title="@string/web_service_wake_lock" /> app:layout="@layout/view_preference_category">
<io.legato.kazusa.lib.prefs.Preference <io.legato.kazusa.lib.prefs.Preference
android:key="defaultBookTreeUri" android:key="defaultBookTreeUri"
android:summary="@string/book_tree_uri_s" android:summary="@string/book_tree_uri_s"
android:title="@string/book_tree_uri_t" /> android:title="@string/book_tree_uri_t" />
<io.legato.kazusa.lib.prefs.Preference
android:key="sourceEditMaxLine"
android:title="@string/source_edit_text_max_line" />
<io.legato.kazusa.lib.prefs.Preference
android:key="checkSource"
android:title="@string/check_source_config" />
<io.legato.kazusa.lib.prefs.Preference
android:key="uploadRule"
android:summary="@string/direct_link_upload_rule_summary"
android:title="@string/direct_link_upload_rule" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="false"
android:key="Cronet"
android:summary="@string/pref_cronet_summary"
android:title="Cronet" />
<io.legato.kazusa.lib.prefs.SwitchPreference <io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="false" android:defaultValue="false"
android:key="antiAlias" android:key="antiAlias"
@@ -211,6 +143,67 @@
android:title="@string/show_manga_ui" android:title="@string/show_manga_ui"
app:iconSpaceReserved="false" /> app:iconSpaceReserved="false" />
</io.legato.kazusa.lib.prefs.PreferenceCategory>
<io.legato.kazusa.lib.prefs.PreferenceCategory
android:title="@string/other_setting"
app:allowDividerBelow="false"
app:iconSpaceReserved="false"
app:layout="@layout/view_preference_category">
<io.legato.kazusa.lib.prefs.NameListPreference
android:defaultValue="official_version"
android:key="updateToVariant"
android:summary="@string/update_to_variant_summary"
android:title="@string/update_to_variant_title"
app:allowDividerAbove="false"
app:allowDividerBelow="false"
app:entries="@array/default_app_variant"
app:entryValues="@array/default_app_variant_value" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="sharedElementEnterTransitionEnable"
android:summary="从书架进入阅读界面时,优化动画效果。"
android:title="使用共享元素动画" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="delayBookLoadEnable"
android:summary="减少进入阅读界面时的卡顿,但加载书籍时间会延长。"
android:title="延缓书籍加载" />
<io.legato.kazusa.lib.prefs.Preference
android:key="userAgent"
android:title="@string/user_agent" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="false"
android:key="webServiceWakeLock"
android:summary="@string/web_service_wake_lock_summary"
android:title="@string/web_service_wake_lock" />
<io.legato.kazusa.lib.prefs.Preference
android:key="sourceEditMaxLine"
android:title="@string/source_edit_text_max_line" />
<io.legato.kazusa.lib.prefs.Preference
android:key="checkSource"
android:title="@string/check_source_config" />
<io.legato.kazusa.lib.prefs.Preference
android:key="uploadRule"
android:summary="@string/direct_link_upload_rule_summary"
android:title="@string/direct_link_upload_rule" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="false"
android:key="Cronet"
android:summary="@string/pref_cronet_summary"
android:title="Cronet" />
<io.legato.kazusa.lib.prefs.Preference <io.legato.kazusa.lib.prefs.Preference
android:key="webPort" android:key="webPort"
android:title="@string/web_port_title" android:title="@string/web_port_title"
@@ -262,5 +255,4 @@
</io.legato.kazusa.lib.prefs.PreferenceCategory> </io.legato.kazusa.lib.prefs.PreferenceCategory>
</androidx.preference.PreferenceScreen> </androidx.preference.PreferenceScreen>
+53 -7
View File
@@ -60,13 +60,6 @@
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:icons="@array/icons" /> app:icons="@array/icons" />
<io.legato.kazusa.lib.prefs.NameListPreference
android:defaultValue="auto"
android:key="tabletInterface"
android:title="@string/tabletInterface"
app:entries="@array/tabletInterface"
app:entryValues="@array/tabletInterface_value" />
<io.legato.kazusa.lib.prefs.Preference <io.legato.kazusa.lib.prefs.Preference
android:key="fontScale" android:key="fontScale"
android:summary="@string/font_scale_summary" android:summary="@string/font_scale_summary"
@@ -83,6 +76,59 @@
</io.legato.kazusa.lib.prefs.PreferenceCategory> </io.legato.kazusa.lib.prefs.PreferenceCategory>
<io.legato.kazusa.lib.prefs.PreferenceCategory
android:title="@string/main_activity"
app:allowDividerAbove="false"
app:allowDividerBelow="false"
app:iconSpaceReserved="false"
app:layout="@layout/view_preference_category">
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="showDiscovery"
android:title="@string/show_discovery"
app:iconSpaceReserved="false" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="showRss"
android:title="@string/show_rss"
app:iconSpaceReserved="false" />
<io.legato.kazusa.lib.prefs.SwitchPreference
android:defaultValue="true"
android:key="showBottomView"
android:summary="仍可滑动切换页面"
android:title="显示底部导航栏"
app:iconSpaceReserved="false" />
<io.legato.kazusa.lib.prefs.NameListPreference
android:defaultValue="auto"
android:key="tabletInterface"
android:title="@string/tabletInterface"
app:entries="@array/tabletInterface"
app:entryValues="@array/tabletInterface_value" />
<io.legato.kazusa.lib.prefs.NameListPreference
android:defaultValue="auto"
android:key="labelVisibilityMode"
android:title="导航栏标签显示方式"
app:allowDividerAbove="false"
app:allowDividerBelow="false"
app:entries="@array/label_vis_mode"
app:entryValues="@array/label_vis_mode_value" />
<io.legato.kazusa.lib.prefs.NameListPreference
android:defaultValue="bookshelf"
android:key="defaultHomePage"
android:title="@string/default_home_page"
app:allowDividerAbove="false"
app:allowDividerBelow="false"
app:entries="@array/default_home_page"
app:entryValues="@array/default_home_page_value" />
</io.legato.kazusa.lib.prefs.PreferenceCategory>
<io.legato.kazusa.lib.prefs.PreferenceCategory <io.legato.kazusa.lib.prefs.PreferenceCategory
android:key="backgroundIma" android:key="backgroundIma"
android:title="@string/background_image" android:title="@string/background_image"