From 66fefe1253dedfe4836ab1827f85ab1b73d60e1b Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Sun, 7 Sep 2025 02:40:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=95=8C=E9=9D=A2=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kazusa/ui/book/audio/AudioPlayActivity.kt | 49 ++++++++++++------- .../kazusa/ui/book/info/BookInfoActivity.kt | 9 +++- .../io/legato/kazusa/ui/widget/LabelsBar.kt | 10 ++-- .../io/legato/kazusa/ui/widget/TitleBar.kt | 6 +-- .../legato/kazusa/utils/ToolBarExtensions.kt | 23 --------- .../io/legato/kazusa/utils/ToolbarUtils.kt | 37 ++++++++++++++ .../io/legato/kazusa/utils/ViewExtensions.kt | 10 ++-- .../main/res/layout/activity_audio_play.xml | 24 +++++---- .../main/res/layout/activity_book_info.xml | 4 +- 9 files changed, 107 insertions(+), 65 deletions(-) delete mode 100644 app/src/main/java/io/legato/kazusa/utils/ToolBarExtensions.kt create mode 100644 app/src/main/java/io/legato/kazusa/utils/ToolbarUtils.kt diff --git a/app/src/main/java/io/legato/kazusa/ui/book/audio/AudioPlayActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/audio/AudioPlayActivity.kt index e5f95a1df..4fba15bb3 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/audio/AudioPlayActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/audio/AudioPlayActivity.kt @@ -51,6 +51,7 @@ import io.legato.kazusa.ui.book.source.edit.BookSourceEditActivity import io.legato.kazusa.ui.book.toc.TocActivityResult import io.legato.kazusa.ui.login.SourceLoginActivity import io.legato.kazusa.utils.StartActivityContract +import io.legato.kazusa.utils.ToolbarUtils.setAllIconsColor import io.legato.kazusa.utils.applyNavigationBarPadding import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.observeEvent @@ -437,16 +438,24 @@ class AudioPlayActivity : MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorOnSurface, -1) val colorSurface = MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorSurface, -1) - val colorSurfaceContainer = MaterialColors.getColor( - ctx, - com.google.android.material.R.attr.colorSurfaceContainer, - -1 - ) - val colorSecondaryContainer = MaterialColors.getColor( - ctx, - com.google.android.material.R.attr.colorSecondaryContainer, - -1 - ) + val colorSurfaceContainer = + MaterialColors.getColor( + ctx, + com.google.android.material.R.attr.colorSurfaceContainer, + -1 + ) + val colorSecondaryContainer = + MaterialColors.getColor( + ctx, + com.google.android.material.R.attr.colorSecondaryContainer, + -1 + ) + val colorOnSurfaceVariant = + MaterialColors.getColor( + ctx, + com.google.android.material.R.attr.colorOnSurfaceVariant, + -1 + ) val primaryTransition = ValueAnimator.ofArgb(primaryFinalColor, colorPrimary).apply { duration = 400L @@ -456,6 +465,8 @@ class AudioPlayActivity : binding.settingSlider.trackActiveTintList = ColorStateList.valueOf(color) binding.playerProgress.thumbTintList = ColorStateList.valueOf(color) binding.playerProgress.trackActiveTintList = ColorStateList.valueOf(color) + binding.tvDurTime.setTextColor(color) + binding.tvAllTime.setTextColor(color) } } @@ -477,8 +488,6 @@ class AudioPlayActivity : addUpdateListener { animation -> val color = animation.animatedValue as Int binding.vwBg2.setBackgroundColor(color) - binding.cdTimer.setBackgroundColor(color) - binding.cdSpeed.setBackgroundColor(color) } } @@ -486,12 +495,7 @@ class AudioPlayActivity : duration = 400L addUpdateListener { animation -> val color = animation.animatedValue as Int - binding.tvSpeed.setTextColor(color) - binding.tvTimer.setTextColor(color) binding.tvTitle.setTextColor(color) - binding.tvDurTime.setTextColor(color) - binding.tvAllTime.setTextColor(color) - binding.tvSubTitle.setTextColor(color) } } @@ -508,7 +512,18 @@ class AudioPlayActivity : primaryFinalColor = colorPrimary secondaryContainerFinalColor = colorSecondaryContainer + binding.titleBar.toolbar.setAllIconsColor(colorOnSurface) binding.progressLoading.setIndicatorColor(colorPrimary) + binding.settingSlider.tickActiveTintList = ColorStateList.valueOf(colorSurface) + binding.settingSlider.tickInactiveTintList = ColorStateList.valueOf(colorPrimary) + + binding.tvSubTitle.setTextColor(colorOnSurfaceVariant) + binding.btnTimer.imageTintList = ColorStateList.valueOf(colorOnSurface) + binding.tvSpeed.setTextColor(colorOnSurface) + binding.tvTimer.setTextColor(colorOnSurface) + + binding.cdTimer.setCardBackgroundColor(colorSurfaceContainer) + binding.cdSpeed.setCardBackgroundColor(colorSurfaceContainer) val states = arrayOf( intArrayOf(android.R.attr.state_enabled, android.R.attr.state_checked), diff --git a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt index 298d2ad79..dfb435a75 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt @@ -74,6 +74,7 @@ import io.legato.kazusa.utils.ConvertUtils import io.legato.kazusa.utils.FileDoc import io.legato.kazusa.utils.GSON import io.legato.kazusa.utils.StartActivityContract +import io.legato.kazusa.utils.ToolbarUtils.setAllIconsColor import io.legato.kazusa.utils.applyNavigationBarMargin import io.legato.kazusa.utils.dpToPx import io.legato.kazusa.utils.gone @@ -224,7 +225,7 @@ class BookInfoActivity : else if (scrollY < oldScrollY) binding.btnRead.extend() } - binding.btnRead.applyNavigationBarMargin() + binding.btnRead.applyNavigationBarMargin(true) binding.btnShelf.text = getString(R.string.remove_from_bookshelf) binding.tvToc.text = getString(R.string.toc_s, getString(R.string.loading)) @@ -526,6 +527,8 @@ class BookInfoActivity : com.google.android.material.R.attr.colorSecondaryContainer, -1 ) + val colorOnTertiary = + MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorOnTertiary, -1) val surfaceTransition = ValueAnimator.ofArgb(surfaceFinalColor, colorSurface).apply { duration = 400L @@ -626,6 +629,10 @@ class BookInfoActivity : primaryFinalColor = colorPrimary tertiaryFinalColor = colorTertiary secondaryContainerFinalColor = colorSecondaryContainer + + binding.topBar.setAllIconsColor(colorOnSurface) + binding.btnRead.setTextColor(colorOnTertiary) + binding.btnRead.iconTint = ColorStateList.valueOf(colorOnTertiary) } private fun upLoading(isLoading: Boolean, chapterList: List? = null) { diff --git a/app/src/main/java/io/legato/kazusa/ui/widget/LabelsBar.kt b/app/src/main/java/io/legato/kazusa/ui/widget/LabelsBar.kt index 954caeb52..4bd63b040 100644 --- a/app/src/main/java/io/legato/kazusa/ui/widget/LabelsBar.kt +++ b/app/src/main/java/io/legato/kazusa/ui/widget/LabelsBar.kt @@ -52,14 +52,14 @@ class LabelsBar @JvmOverloads constructor( addView(chip) } - fun applyColorScheme(colorPrimaryContainer: Int, colorOnPrimaryContainer: Int) { + fun applyColorScheme(backgroundColor: Int, textColor: Int) { usedChips.forEach { chip -> - chip.chipBackgroundColor = ColorStateList.valueOf(colorPrimaryContainer) - chip.setTextColor(colorOnPrimaryContainer) + chip.chipBackgroundColor = ColorStateList.valueOf(backgroundColor) + chip.setTextColor(textColor) } unUsedChips.forEach { chip -> - chip.chipBackgroundColor = ColorStateList.valueOf(colorPrimaryContainer) - chip.setTextColor(colorOnPrimaryContainer) + chip.chipBackgroundColor = ColorStateList.valueOf(backgroundColor) + chip.setTextColor(textColor) } } diff --git a/app/src/main/java/io/legato/kazusa/ui/widget/TitleBar.kt b/app/src/main/java/io/legato/kazusa/ui/widget/TitleBar.kt index da7909598..ffcba240a 100644 --- a/app/src/main/java/io/legato/kazusa/ui/widget/TitleBar.kt +++ b/app/src/main/java/io/legato/kazusa/ui/widget/TitleBar.kt @@ -5,12 +5,10 @@ import android.content.res.ColorStateList import android.util.AttributeSet import android.view.Menu import android.view.View -import androidx.appcompat.widget.Toolbar import androidx.core.view.WindowInsetsCompat import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.appbar.MaterialToolbar import io.legato.kazusa.R -import io.legato.kazusa.help.config.AppConfig -//import io.legado.app.lib.theme.primaryColor import io.legato.kazusa.utils.activity import io.legato.kazusa.utils.setOnApplyWindowInsetsListenerCompat import splitties.views.bottomPadding @@ -22,7 +20,7 @@ class TitleBar @JvmOverloads constructor( attrs: AttributeSet? = null ) : AppBarLayout(context, attrs) { - val toolbar: Toolbar + val toolbar: MaterialToolbar val menu: Menu get() = toolbar.menu diff --git a/app/src/main/java/io/legato/kazusa/utils/ToolBarExtensions.kt b/app/src/main/java/io/legato/kazusa/utils/ToolBarExtensions.kt deleted file mode 100644 index 67cb0fd46..000000000 --- a/app/src/main/java/io/legato/kazusa/utils/ToolBarExtensions.kt +++ /dev/null @@ -1,23 +0,0 @@ -@file:Suppress("unused") - -package io.legato.kazusa.utils - -import android.annotation.SuppressLint -import android.graphics.PorterDuff -import android.graphics.PorterDuffColorFilter -import android.os.Build -import android.widget.Toolbar -import androidx.core.content.ContextCompat -import io.legato.kazusa.R - -/** - * 设置toolBar更多图标颜色 - */ -@SuppressLint("ObsoleteSdkInt") -fun Toolbar.setMoreIconColor(color: Int) { - val moreIcon = ContextCompat.getDrawable(context, R.drawable.ic_more) - if (moreIcon != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - moreIcon.colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP) - overflowIcon = moreIcon - } -} \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/utils/ToolbarUtils.kt b/app/src/main/java/io/legato/kazusa/utils/ToolbarUtils.kt new file mode 100644 index 000000000..e21f85bf1 --- /dev/null +++ b/app/src/main/java/io/legato/kazusa/utils/ToolbarUtils.kt @@ -0,0 +1,37 @@ +package io.legato.kazusa.utils + +import android.annotation.SuppressLint +import android.graphics.PorterDuff +import android.graphics.PorterDuffColorFilter +import android.os.Build +import androidx.annotation.ColorInt +import androidx.core.content.ContextCompat +import androidx.core.view.get +import androidx.core.view.size +import com.google.android.material.appbar.MaterialToolbar +import io.legato.kazusa.R + +object ToolbarUtils { + @JvmStatic + fun MaterialToolbar.setAllIconsColor(@ColorInt color: Int) { + // 导航图标 + navigationIcon?.setTint(color) + + // 溢出图标 + overflowIcon = overflowIcon?.apply { setTint(color) } + + // 菜单项图标 + for (i in 0 until menu.size) { + menu[i].icon?.setTint(color) + } + } + + @SuppressLint("ObsoleteSdkInt") + fun MaterialToolbar.setMoreIconColor(color: Int) { + val moreIcon = ContextCompat.getDrawable(context, R.drawable.ic_more) + if (moreIcon != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + moreIcon.colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP) + overflowIcon = moreIcon + } + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/utils/ViewExtensions.kt b/app/src/main/java/io/legato/kazusa/utils/ViewExtensions.kt index caa982edd..51393bf71 100644 --- a/app/src/main/java/io/legato/kazusa/utils/ViewExtensions.kt +++ b/app/src/main/java/io/legato/kazusa/utils/ViewExtensions.kt @@ -28,11 +28,13 @@ import androidx.annotation.DrawableRes import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.menu.MenuPopupHelper import androidx.appcompat.widget.PopupMenu +import androidx.core.graphics.createBitmap import androidx.core.graphics.record import androidx.core.graphics.withTranslation import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.get +import androidx.core.view.isVisible import androidx.core.view.marginBottom import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.RecyclerView @@ -146,7 +148,7 @@ fun View.visible() { fun View.visible(visible: Boolean) { if (visible && visibility != VISIBLE) { visibility = VISIBLE - } else if (!visible && visibility == VISIBLE) { + } else if (!visible && isVisible) { visibility = INVISIBLE } } @@ -158,7 +160,7 @@ fun View.screenshot(bitmap: Bitmap? = null, canvas: Canvas? = null): Bitmap? { bitmap } else { bitmap?.recycle() - Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + createBitmap(width, height) } val c = canvas ?: Canvas() c.setBitmap(screenshot) @@ -302,8 +304,8 @@ fun View.canScroll(direction: Int): Boolean { return canScrollVertically(direction) || canScrollHorizontally(direction) } -private val requestLayoutBroken = false - || Build.VERSION.SDK_INT in Build.VERSION_CODES.O..Build.VERSION_CODES.Q +private val requestLayoutBroken = + Build.VERSION.SDK_INT in Build.VERSION_CODES.O..Build.VERSION_CODES.Q fun View.setOnApplyWindowInsetsListenerCompat(listener: (View, WindowInsetsCompat) -> WindowInsetsCompat) { ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets -> diff --git a/app/src/main/res/layout/activity_audio_play.xml b/app/src/main/res/layout/activity_audio_play.xml index 2501a39ac..ccf2a8d76 100644 --- a/app/src/main/res/layout/activity_audio_play.xml +++ b/app/src/main/res/layout/activity_audio_play.xml @@ -18,21 +18,22 @@ android:id="@+id/vw_bg2" android:layout_width="match_parent" android:layout_height="match_parent" - android:alpha="0.70" + android:alpha="0.80" android:background="?attr/colorSurfaceContainer" /> + app:layout_constraintTop_toTopOf="parent" /> @@ -69,6 +70,7 @@ tools:ignore="UseCompoundDrawables"> @@ -148,6 +150,7 @@ android:layout_marginBottom="8dp" android:text="@string/text" android:textStyle="bold" + android:textColor="?attr/colorPrimary" app:layout_constraintBottom_toTopOf="@id/ll_play_menu" app:layout_constraintStart_toStartOf="parent" tools:ignore="HardcodedText,RtlSymmetry,TextContrastCheck" /> @@ -161,6 +164,7 @@ android:value="0" android:valueFrom="0" android:valueTo="1" + app:tickColorInactive="@android:color/transparent" app:layout_constraintBottom_toTopOf="@id/tv_all_time" app:thumbElevation="0dp" app:thumbHeight="20dp" @@ -175,6 +179,7 @@ android:layout_marginBottom="8dp" android:text="@string/text" android:textStyle="bold" + android:textColor="?attr/colorPrimary" app:layout_constraintBottom_toTopOf="@id/ll_play_menu" app:layout_constraintEnd_toEndOf="parent" tools:ignore="HardcodedText,TextContrastCheck" /> @@ -378,6 +383,7 @@ android:id="@+id/setting_slider" android:layout_width="match_parent" android:layout_height="wrap_content" + app:tickColorInactive="@android:color/transparent" android:layout_gravity="center_vertical" android:value="0" android:valueFrom="0" diff --git a/app/src/main/res/layout/activity_book_info.xml b/app/src/main/res/layout/activity_book_info.xml index 2ce966ba3..bec0bc4da 100644 --- a/app/src/main/res/layout/activity_book_info.xml +++ b/app/src/main/res/layout/activity_book_info.xml @@ -380,10 +380,10 @@ android:contentDescription="@string/reading" android:minWidth="56dp" android:text="@string/reading" - android:textColor="?attr/colorOnPrimary" + android:textColor="?attr/colorOnTertiary" app:backgroundTint="?attr/colorTertiary" app:icon="@drawable/ic_bottom_books" - app:iconTint="?attr/colorOnPrimary" + app:iconTint="?attr/colorOnTertiary" app:layout_anchor="@id/refresh_layout" app:layout_anchorGravity="bottom|end" />