From 480dfdeb62e1da154640d7fd7722eea29b7bf00f Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Mon, 29 Sep 2025 01:55:32 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=95=B4=E7=90=86=E8=AE=BE=E7=BD=AE=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=EF=BC=8C=E5=B0=86=E6=9C=89=E5=85=B3=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=A4=96=E8=A7=82=E7=9A=84=E8=AE=BE=E7=BD=AE=E7=A7=BB?= =?UTF-8?q?=E8=87=B3[=E5=A4=96=E8=A7=82]=E8=AE=BE=E7=BD=AE=E4=B8=AD=202.?= =?UTF-8?q?=E5=B0=86=E9=83=A8=E5=88=86=E6=8E=A7=E4=BB=B6=E6=9B=B4=E6=8D=A2?= =?UTF-8?q?=E4=B8=BAM3E=E6=A0=B7=E5=BC=8F=203.=E5=A2=9E=E5=8A=A0=E5=AF=BC?= =?UTF-8?q?=E8=88=AA=E6=A0=8F=E6=A0=87=E7=AD=BE=E6=98=BE=E7=A4=BA=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E8=AE=BE=E7=BD=AE=204.=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E8=BD=A8=E9=81=93=E5=AF=BC=E8=88=AA=E5=8F=AF=E4=BB=A5=E8=AE=B0?= =?UTF-8?q?=E4=BD=8F=E4=B8=8A=E6=AC=A1=E7=9A=84=E6=89=A9=E5=B1=95=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=205.=E4=BC=98=E5=8C=96=E5=85=B1=E4=BA=AB=E5=8A=A8?= =?UTF-8?q?=E7=94=BB=206.=E6=9B=B4=E6=96=B0=E4=B8=80=E4=BA=9B=E9=A2=9C?= =?UTF-8?q?=E6=96=87=E5=AD=97=207.=E6=B8=85=E7=90=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 4 +- .../io/legato/kazusa/constant/PreferKey.kt | 2 +- .../io/legato/kazusa/help/config/AppConfig.kt | 6 + .../legato/kazusa/help/config/LocalConfig.kt | 6 + .../kazusa/ui/config/OtherConfigFragment.kt | 2 - .../kazusa/ui/config/ThemeConfigFragment.kt | 6 +- .../io/legato/kazusa/ui/main/MainActivity.kt | 84 ++++++---- .../books/styleDefalut/BooksAdapterList.kt | 6 +- .../books/styleFold/BooksAdapterList.kt | 4 +- .../kazusa/ui/widget/EmptyMessageView.kt | 7 +- app/src/main/res/drawable/ic_menu_open.xml | 14 ++ .../main/res/layout/activity_book_search.xml | 3 +- app/src/main/res/layout/activity_main.xml | 6 +- .../main/res/layout/item_bookshelf_grid.xml | 95 ++++++----- .../main/res/layout/item_bookshelf_list.xml | 116 +++++++------- app/src/main/res/layout/item_fillet_text.xml | 6 +- .../main/res/layout/navigation_rail_fab.xml | 8 +- app/src/main/res/values-night/themes.xml | 2 + app/src/main/res/values-zh/arrays.xml | 7 + app/src/main/res/values/array_values.xml | 7 + app/src/main/res/values/arrays.xml | 7 + app/src/main/res/values/dimens.xml | 3 - app/src/main/res/values/themes.xml | 2 + app/src/main/res/xml/pref_config_other.xml | 148 +++++++++--------- app/src/main/res/xml/pref_config_theme.xml | 60 ++++++- 25 files changed, 358 insertions(+), 253 deletions(-) create mode 100644 app/src/main/res/drawable/ic_menu_open.xml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index aca4c05b3..c1d2bde23 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -114,8 +114,8 @@ jobs: - name: Check Build production run: | echo "查看 APK 输出目录" - ls -R $GITHUB_WORKSPACE/app/app/build/outputs/apk/ - if ! ls $GITHUB_WORKSPACE/app/app/build/outputs/apk/release/*/*.apk 1> /dev/null 2>&1; then + ls -R $GITHUB_WORKSPACE/app/build/outputs/apk/ + if ! ls $GITHUB_WORKSPACE/app/build/outputs/apk/*/*/*.apk 1> /dev/null 2>&1; then echo "Build production not found! Check gradle logs." exit 1 fi diff --git a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt index 84c8f6f40..b8bb55c22 100644 --- a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt +++ b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt @@ -103,7 +103,6 @@ object PreferKey { const val mangaColorFilter = "mangaColorFilter" const val enableMangaEInk = "enableMangaEInk" const val mangaEInkThreshold = "mangaEInkThreshold" - const val disableHorizontalAnimator = "disableHorizontalAnimator" const val enableMangaGray = "enableMangaGray" const val autoRefresh = "auto_refresh" @@ -204,4 +203,5 @@ object PreferKey { const val bookshelfLayoutGridPortrait = "bookshelfLayoutGridPortrait" const val tabletInterface = "tabletInterface" const val pureBlack = "pure_black" + const val labelVisibilityMode = "labelVisibilityMode" } diff --git a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt index bfbcbff3f..01c5574ea 100644 --- a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt +++ b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt @@ -814,5 +814,11 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { set(value) { appCtx.getPrefBoolean(PreferKey.pureBlack, value) } + + var labelVisibilityMode + get() = appCtx.getPrefString(PreferKey.labelVisibilityMode, "auto") + set(value) { + appCtx.putPrefString(PreferKey.labelVisibilityMode, value) + } } diff --git a/app/src/main/java/io/legato/kazusa/help/config/LocalConfig.kt b/app/src/main/java/io/legato/kazusa/help/config/LocalConfig.kt index 74d59d9e0..cb88cb128 100644 --- a/app/src/main/java/io/legato/kazusa/help/config/LocalConfig.kt +++ b/app/src/main/java/io/legato/kazusa/help/config/LocalConfig.kt @@ -41,6 +41,12 @@ by appCtx.getSharedPreferences("local", Context.MODE_PRIVATE) { putBoolean("privacyPolicyOk", value) } + var navExtended: Boolean + get() = getBoolean("navExtended") + set(value) { + putBoolean("navExtended", value) + } + val readHelpVersionIsLast: Boolean get() = isLastVersion(1, "readHelpVersion", "firstRead") diff --git a/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt b/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt index cb5e855ea..b6afd6b90 100644 --- a/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt +++ b/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt @@ -17,7 +17,6 @@ import androidx.preference.ListPreference import androidx.preference.Preference import com.jeremyliao.liveeventbus.LiveEventBus import io.legato.kazusa.R -import io.legato.kazusa.constant.EventBus import io.legato.kazusa.constant.PreferKey import io.legato.kazusa.databinding.DialogEditTextBinding import io.legato.kazusa.help.AppFreezeMonitor @@ -205,7 +204,6 @@ class OtherConfigFragment : PreferenceFragment(), setProcessTextEnable(it.getBoolean(key, true)) } - PreferKey.showDiscovery, PreferKey.showRss, PreferKey.showBottomView -> postEvent(EventBus.NOTIFY_MAIN, true) PreferKey.language -> listView.postDelayed(1000) { appCtx.restart() } diff --git a/app/src/main/java/io/legato/kazusa/ui/config/ThemeConfigFragment.kt b/app/src/main/java/io/legato/kazusa/ui/config/ThemeConfigFragment.kt index 4432c0bf1..6c558864e 100644 --- a/app/src/main/java/io/legato/kazusa/ui/config/ThemeConfigFragment.kt +++ b/app/src/main/java/io/legato/kazusa/ui/config/ThemeConfigFragment.kt @@ -205,9 +205,9 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), upPreferenceSummary(key, getPrefString(key)) } - PreferKey.tabletInterface -> { - recreateActivities() - } + PreferKey.showDiscovery, PreferKey.showRss, + PreferKey.showBottomView, PreferKey.tabletInterface, + PreferKey.labelVisibilityMode -> postEvent(EventBus.NOTIFY_MAIN, true) } } diff --git a/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt b/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt index 86a515d16..a6dbfbcfa 100644 --- a/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt @@ -20,6 +20,7 @@ import androidx.lifecycle.lifecycleScope import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 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.navigation.NavigationBarView 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.rss.RssFragment 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.hideSoftInput import io.legato.kazusa.utils.observeEvent @@ -371,42 +371,67 @@ class MainActivity : VMBaseActivity(), } else { 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 { binding.bottomNavigationView.gone() binding.navigationRailView.gone() } - val efab = - binding.navigationRailView.headerView?.findViewById(R.id.nav_fab) - efab?.let { it.isExtended = false } - val lp = - binding.navigationRailView.headerView?.let { it.layoutParams as FrameLayout.LayoutParams } - lp!!.gravity = Gravity.START + binding.navigationRailView.headerView!!.layoutParams as FrameLayout.LayoutParams + lp.gravity = Gravity.START - binding.navigationRailView.headerView?.setPadding( - 12.dpToPx(), - 12.dpToPx(), - 12.dpToPx(), - 12.dpToPx() - ) + binding.navigationRailView.headerView!! + .setPadding( + binding.navigationRailView.itemActiveIndicatorExpandedMarginHorizontal, + 0, + binding.navigationRailView.itemActiveIndicatorExpandedMarginHorizontal, + 0) - binding.navigationRailView.headerView?.findViewById(R.id.nav_fab) - ?.setOnClickListener { + val efab = + binding.navigationRailView.headerView!!.findViewById(R.id.nav_fab) + val button = + binding.navigationRailView.headerView!!.findViewById(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() } - binding.navigationRailView.headerView?.findViewById(R.id.nav_botton) - ?.setOnClickListener { - efab?.let { it1 -> - if (it1.isExtended) { - efab.isExtended = false - binding.navigationRailView.collapse() - } else { - efab.isExtended = true - binding.navigationRailView.expand() - } + + button.setOnClickListener { + efab.let { it1 -> + if (it1.isExtended) { + efab.isExtended = false + binding.navigationRailView.collapse() + button.setImageResource(R.drawable.ic_menu) + } else { + efab.isExtended = true + binding.navigationRailView.expand() + button.setImageResource(R.drawable.ic_menu_open) } + LocalConfig.navExtended = it1.isExtended } + } + } private fun bindNavigationListener() { @@ -419,14 +444,6 @@ class MainActivity : VMBaseActivity(), } } - 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() { when (AppConfig.defaultHomePage) { "bookshelf" -> {} @@ -467,7 +484,6 @@ class MainActivity : VMBaseActivity(), idMy -> R.id.menu_my_config else -> R.id.menu_bookshelf } - updateNavigationRailFab(position) } } diff --git a/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/books/styleDefalut/BooksAdapterList.kt b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/books/styleDefalut/BooksAdapterList.kt index 552d679be..d13bb173d 100644 --- a/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/books/styleDefalut/BooksAdapterList.kt +++ b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/books/styleDefalut/BooksAdapterList.kt @@ -31,7 +31,7 @@ class BooksAdapterList( item: Book, payloads: MutableList ) = binding.run { - binding.ivCover.transitionName = "book_${item.bookUrl}" + binding.cdCover.transitionName = "book_${item.bookUrl}" if (payloads.isEmpty()) { tvName.text = item.name tvAuthor.text = item.author @@ -98,13 +98,13 @@ class BooksAdapterList( holder.itemView.apply { binding.cvContent.setOnClickListener { getItem(holder.layoutPosition)?.let { - callBack.open(it, binding.ivCover) + callBack.open(it, binding.cdCover) } } binding.cvContent.onLongClick { getItem(holder.layoutPosition)?.let { - callBack.openBookInfo(it, binding.ivCover) + callBack.openBookInfo(it, binding.cdCover) } } } diff --git a/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/books/styleFold/BooksAdapterList.kt b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/books/styleFold/BooksAdapterList.kt index 14fb24623..2c2dd0570 100644 --- a/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/books/styleFold/BooksAdapterList.kt +++ b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/books/styleFold/BooksAdapterList.kt @@ -113,10 +113,10 @@ class BooksAdapterList(context: Context, callBack: CallBack) : fun registerListener(item: Any) { binding.cvContent.setOnClickListener { - callBack.onItemClick(item, binding.ivCover) + callBack.onItemClick(item, binding.cdCover) } binding.cvContent.onLongClick { - callBack.onItemLongClick(item, binding.ivCover) + callBack.onItemLongClick(item, binding.cdCover) } } diff --git a/app/src/main/java/io/legato/kazusa/ui/widget/EmptyMessageView.kt b/app/src/main/java/io/legato/kazusa/ui/widget/EmptyMessageView.kt index 06f76460c..fbc924ebe 100644 --- a/app/src/main/java/io/legato/kazusa/ui/widget/EmptyMessageView.kt +++ b/app/src/main/java/io/legato/kazusa/ui/widget/EmptyMessageView.kt @@ -18,7 +18,7 @@ class EmptyMessageView @JvmOverloads constructor( private val messageTextView: TextView private val faces = listOf( - "(๑`^´๑)", "(´・ᴗ・`)", "(•̀ᴗ•́)و", "(ᵔᴥᵔ)", "(¬‿¬)", "(ಥ﹏ಥ)", "(。•́︿•̀。)" + "(;′⌒`)", "(つ﹏⊂)", "(•̀ᴗ•́)و", "(๑•́ ₃ •̀๑)", "(눈‸눈)", "(ಥ﹏ಥ)", "(。•́︿•̀。)" ) init { @@ -70,9 +70,4 @@ class EmptyMessageView @JvmOverloads constructor( messageTextView.text = msg } - - /** 可选:手动刷新随机颜文字 */ - fun refreshFace() { - faceTextView.text = faces.random() - } } diff --git a/app/src/main/res/drawable/ic_menu_open.xml b/app/src/main/res/drawable/ic_menu_open.xml new file mode 100644 index 000000000..a1dc06070 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_open.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_book_search.xml b/app/src/main/res/layout/activity_book_search.xml index 0ae0bd0a4..a0f61ca5f 100644 --- a/app/src/main/res/layout/activity_book_search.xml +++ b/app/src/main/res/layout/activity_book_search.xml @@ -175,7 +175,8 @@ style="@style/Widget.Material3Expressive.Button" android:text="@string/delete_all" app:backgroundTint="?attr/colorTertiary" - app:iconTint="?attr/colorSurface" + app:iconTint="?attr/colorOnTertiary" + android:textColor="?attr/colorOnTertiary" android:layout_width="wrap_content" android:layout_height="wrap_content" app:icon="@drawable/ic_clear_all" diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 124c094ec..bb18a0ffc 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -20,10 +20,9 @@ android:id="@+id/bottom_navigation_view" android:layout_width="match_parent" android:layout_height="wrap_content" + android:minHeight="56dp" android:visibility="visible" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" app:menu="@menu/main_bnv" /> diff --git a/app/src/main/res/layout/item_bookshelf_grid.xml b/app/src/main/res/layout/item_bookshelf_grid.xml index 3cb5ff78c..168bfc9a1 100644 --- a/app/src/main/res/layout/item_bookshelf_grid.xml +++ b/app/src/main/res/layout/item_bookshelf_grid.xml @@ -21,21 +21,18 @@ android:layout_height="wrap_content" android:orientation="vertical"> - + android:layout_height="match_parent" + app:cardCornerRadius="8dp" + android:layout_margin="8dp" + android:transitionName="img_cover" + app:strokeWidth="0dp"> - + 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="parent" + app:layout_constraintTop_toTopOf="parent"> - + - + + + + + - - - + - + - + - + android:layout_margin="4dp" + android:visibility="visible" + 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_constraintTop_toTopOf="@id/cd_cover" /> diff --git a/app/src/main/res/layout/navigation_rail_fab.xml b/app/src/main/res/layout/navigation_rail_fab.xml index 82c9d8332..6f15148d8 100644 --- a/app/src/main/res/layout/navigation_rail_fab.xml +++ b/app/src/main/res/layout/navigation_rail_fab.xml @@ -2,7 +2,7 @@ @@ -20,6 +21,11 @@ android:id="@+id/nav_fab" android:layout_width="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" app:icon="@drawable/ic_search" /> diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 95806fddd..a6257c448 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -10,6 +10,8 @@ @style/Widget.MyApp.Chip.Assist @drawable/popup_background @style/AppTheme.AlertDialog + @style/Widget.Material3Expressive.NavigationRailView + @style/Widget.Material3Expressive.BottomNavigationView