HapeLee 1 год назад
Родитель
Сommit
66fefe1253

+ 32 - 17
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.book.toc.TocActivityResult
 import io.legato.kazusa.ui.login.SourceLoginActivity
 import io.legato.kazusa.ui.login.SourceLoginActivity
 import io.legato.kazusa.utils.StartActivityContract
 import io.legato.kazusa.utils.StartActivityContract
+import io.legato.kazusa.utils.ToolbarUtils.setAllIconsColor
 import io.legato.kazusa.utils.applyNavigationBarPadding
 import io.legato.kazusa.utils.applyNavigationBarPadding
 import io.legato.kazusa.utils.gone
 import io.legato.kazusa.utils.gone
 import io.legato.kazusa.utils.observeEvent
 import io.legato.kazusa.utils.observeEvent
@@ -437,16 +438,24 @@ class AudioPlayActivity :
             MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorOnSurface, -1)
             MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorOnSurface, -1)
         val colorSurface =
         val colorSurface =
             MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorSurface, -1)
             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 {
         val primaryTransition = ValueAnimator.ofArgb(primaryFinalColor, colorPrimary).apply {
             duration = 400L
             duration = 400L
@@ -456,6 +465,8 @@ class AudioPlayActivity :
                 binding.settingSlider.trackActiveTintList = ColorStateList.valueOf(color)
                 binding.settingSlider.trackActiveTintList = ColorStateList.valueOf(color)
                 binding.playerProgress.thumbTintList = ColorStateList.valueOf(color)
                 binding.playerProgress.thumbTintList = ColorStateList.valueOf(color)
                 binding.playerProgress.trackActiveTintList = 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 ->
                 addUpdateListener { animation ->
                     val color = animation.animatedValue as Int
                     val color = animation.animatedValue as Int
                     binding.vwBg2.setBackgroundColor(color)
                     binding.vwBg2.setBackgroundColor(color)
-                    binding.cdTimer.setBackgroundColor(color)
-                    binding.cdSpeed.setBackgroundColor(color)
                 }
                 }
             }
             }
 
 
@@ -486,12 +495,7 @@ class AudioPlayActivity :
             duration = 400L
             duration = 400L
             addUpdateListener { animation ->
             addUpdateListener { animation ->
                 val color = animation.animatedValue as Int
                 val color = animation.animatedValue as Int
-                binding.tvSpeed.setTextColor(color)
-                binding.tvTimer.setTextColor(color)
                 binding.tvTitle.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
         primaryFinalColor = colorPrimary
         secondaryContainerFinalColor = colorSecondaryContainer
         secondaryContainerFinalColor = colorSecondaryContainer
 
 
+        binding.titleBar.toolbar.setAllIconsColor(colorOnSurface)
         binding.progressLoading.setIndicatorColor(colorPrimary)
         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(
         val states = arrayOf(
             intArrayOf(android.R.attr.state_enabled, android.R.attr.state_checked),
             intArrayOf(android.R.attr.state_enabled, android.R.attr.state_checked),

+ 8 - 1
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.FileDoc
 import io.legato.kazusa.utils.GSON
 import io.legato.kazusa.utils.GSON
 import io.legato.kazusa.utils.StartActivityContract
 import io.legato.kazusa.utils.StartActivityContract
+import io.legato.kazusa.utils.ToolbarUtils.setAllIconsColor
 import io.legato.kazusa.utils.applyNavigationBarMargin
 import io.legato.kazusa.utils.applyNavigationBarMargin
 import io.legato.kazusa.utils.dpToPx
 import io.legato.kazusa.utils.dpToPx
 import io.legato.kazusa.utils.gone
 import io.legato.kazusa.utils.gone
@@ -224,7 +225,7 @@ class BookInfoActivity :
             else if (scrollY < oldScrollY) binding.btnRead.extend()
             else if (scrollY < oldScrollY) binding.btnRead.extend()
         }
         }
 
 
-        binding.btnRead.applyNavigationBarMargin()
+        binding.btnRead.applyNavigationBarMargin(true)
         binding.btnShelf.text = getString(R.string.remove_from_bookshelf)
         binding.btnShelf.text = getString(R.string.remove_from_bookshelf)
         binding.tvToc.text = getString(R.string.toc_s, getString(R.string.loading))
         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,
                 com.google.android.material.R.attr.colorSecondaryContainer,
                 -1
                 -1
             )
             )
+        val colorOnTertiary =
+            MaterialColors.getColor(ctx, com.google.android.material.R.attr.colorOnTertiary, -1)
 
 
         val surfaceTransition = ValueAnimator.ofArgb(surfaceFinalColor, colorSurface).apply {
         val surfaceTransition = ValueAnimator.ofArgb(surfaceFinalColor, colorSurface).apply {
             duration = 400L
             duration = 400L
@@ -626,6 +629,10 @@ class BookInfoActivity :
         primaryFinalColor = colorPrimary
         primaryFinalColor = colorPrimary
         tertiaryFinalColor = colorTertiary
         tertiaryFinalColor = colorTertiary
         secondaryContainerFinalColor = colorSecondaryContainer
         secondaryContainerFinalColor = colorSecondaryContainer
+
+        binding.topBar.setAllIconsColor(colorOnSurface)
+        binding.btnRead.setTextColor(colorOnTertiary)
+        binding.btnRead.iconTint = ColorStateList.valueOf(colorOnTertiary)
     }
     }
 
 
     private fun upLoading(isLoading: Boolean, chapterList: List<BookChapter>? = null) {
     private fun upLoading(isLoading: Boolean, chapterList: List<BookChapter>? = null) {

+ 5 - 5
app/src/main/java/io/legato/kazusa/ui/widget/LabelsBar.kt

@@ -52,14 +52,14 @@ class LabelsBar @JvmOverloads constructor(
         addView(chip)
         addView(chip)
     }
     }
 
 
-    fun applyColorScheme(colorPrimaryContainer: Int, colorOnPrimaryContainer: Int) {
+    fun applyColorScheme(backgroundColor: Int, textColor: Int) {
         usedChips.forEach { chip ->
         usedChips.forEach { chip ->
-            chip.chipBackgroundColor = ColorStateList.valueOf(colorPrimaryContainer)
-            chip.setTextColor(colorOnPrimaryContainer)
+            chip.chipBackgroundColor = ColorStateList.valueOf(backgroundColor)
+            chip.setTextColor(textColor)
         }
         }
         unUsedChips.forEach { chip ->
         unUsedChips.forEach { chip ->
-            chip.chipBackgroundColor = ColorStateList.valueOf(colorPrimaryContainer)
-            chip.setTextColor(colorOnPrimaryContainer)
+            chip.chipBackgroundColor = ColorStateList.valueOf(backgroundColor)
+            chip.setTextColor(textColor)
         }
         }
     }
     }
 
 

+ 2 - 4
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.util.AttributeSet
 import android.view.Menu
 import android.view.Menu
 import android.view.View
 import android.view.View
-import androidx.appcompat.widget.Toolbar
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.WindowInsetsCompat
 import com.google.android.material.appbar.AppBarLayout
 import com.google.android.material.appbar.AppBarLayout
+import com.google.android.material.appbar.MaterialToolbar
 import io.legato.kazusa.R
 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.activity
 import io.legato.kazusa.utils.setOnApplyWindowInsetsListenerCompat
 import io.legato.kazusa.utils.setOnApplyWindowInsetsListenerCompat
 import splitties.views.bottomPadding
 import splitties.views.bottomPadding
@@ -22,7 +20,7 @@ class TitleBar @JvmOverloads constructor(
     attrs: AttributeSet? = null
     attrs: AttributeSet? = null
 ) : AppBarLayout(context, attrs) {
 ) : AppBarLayout(context, attrs) {
 
 
-    val toolbar: Toolbar
+    val toolbar: MaterialToolbar
     val menu: Menu
     val menu: Menu
         get() = toolbar.menu
         get() = toolbar.menu
 
 

+ 0 - 23
app/src/main/java/io/legato/kazusa/utils/ToolBarExtensions.kt

@@ -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
-    }
-}

+ 37 - 0
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
+        }
+    }
+}

+ 6 - 4
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.app.AppCompatActivity
 import androidx.appcompat.view.menu.MenuPopupHelper
 import androidx.appcompat.view.menu.MenuPopupHelper
 import androidx.appcompat.widget.PopupMenu
 import androidx.appcompat.widget.PopupMenu
+import androidx.core.graphics.createBitmap
 import androidx.core.graphics.record
 import androidx.core.graphics.record
 import androidx.core.graphics.withTranslation
 import androidx.core.graphics.withTranslation
 import androidx.core.view.ViewCompat
 import androidx.core.view.ViewCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.get
 import androidx.core.view.get
+import androidx.core.view.isVisible
 import androidx.core.view.marginBottom
 import androidx.core.view.marginBottom
 import androidx.core.view.updateLayoutParams
 import androidx.core.view.updateLayoutParams
 import androidx.recyclerview.widget.RecyclerView
 import androidx.recyclerview.widget.RecyclerView
@@ -146,7 +148,7 @@ fun View.visible() {
 fun View.visible(visible: Boolean) {
 fun View.visible(visible: Boolean) {
     if (visible && visibility != VISIBLE) {
     if (visible && visibility != VISIBLE) {
         visibility = VISIBLE
         visibility = VISIBLE
-    } else if (!visible && visibility == VISIBLE) {
+    } else if (!visible && isVisible) {
         visibility = INVISIBLE
         visibility = INVISIBLE
     }
     }
 }
 }
@@ -158,7 +160,7 @@ fun View.screenshot(bitmap: Bitmap? = null, canvas: Canvas? = null): Bitmap? {
             bitmap
             bitmap
         } else {
         } else {
             bitmap?.recycle()
             bitmap?.recycle()
-            Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
+            createBitmap(width, height)
         }
         }
         val c = canvas ?: Canvas()
         val c = canvas ?: Canvas()
         c.setBitmap(screenshot)
         c.setBitmap(screenshot)
@@ -302,8 +304,8 @@ fun View.canScroll(direction: Int): Boolean {
     return canScrollVertically(direction) || canScrollHorizontally(direction)
     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) {
 fun View.setOnApplyWindowInsetsListenerCompat(listener: (View, WindowInsetsCompat) -> WindowInsetsCompat) {
     ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
     ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->

+ 15 - 9
app/src/main/res/layout/activity_audio_play.xml

@@ -18,21 +18,22 @@
         android:id="@+id/vw_bg2"
         android:id="@+id/vw_bg2"
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_height="match_parent"
-        android:alpha="0.70"
+        android:alpha="0.80"
         android:background="?attr/colorSurfaceContainer" />
         android:background="?attr/colorSurfaceContainer" />
 
 
     <io.legato.kazusa.ui.widget.TitleBar
     <io.legato.kazusa.ui.widget.TitleBar
         android:id="@+id/title_bar"
         android:id="@+id/title_bar"
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
-        app:layout_constraintTop_toTopOf="parent"
-        app:themeMode="dark" />
+        app:layout_constraintTop_toTopOf="parent" />
 
 
     <com.google.android.material.card.MaterialCardView
     <com.google.android.material.card.MaterialCardView
         android:id="@+id/cd_cover"
         android:id="@+id/cd_cover"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
         app:cardElevation="16dp"
         app:cardElevation="16dp"
+        android:layout_marginHorizontal="44dp"
+        app:layout_constraintDimensionRatio="1:1"
         app:layout_constraintBottom_toTopOf="@+id/tv_title"
         app:layout_constraintBottom_toTopOf="@+id/tv_title"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintStart_toStartOf="parent"
@@ -41,8 +42,8 @@
 
 
         <ImageView
         <ImageView
             android:id="@+id/iv_cover"
             android:id="@+id/iv_cover"
-            android:layout_width="260dp"
-            android:layout_height="260dp"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
             android:contentDescription="@string/img_cover"
             android:contentDescription="@string/img_cover"
             android:scaleType="centerCrop" />
             android:scaleType="centerCrop" />
     </com.google.android.material.card.MaterialCardView>
     </com.google.android.material.card.MaterialCardView>
@@ -69,6 +70,7 @@
             tools:ignore="UseCompoundDrawables">
             tools:ignore="UseCompoundDrawables">
 
 
             <ImageView
             <ImageView
+                android:id="@+id/btn_timer"
                 android:layout_width="12dp"
                 android:layout_width="12dp"
                 android:layout_height="12dp"
                 android:layout_height="12dp"
                 android:layout_marginEnd="4dp"
                 android:layout_marginEnd="4dp"
@@ -119,8 +121,8 @@
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:gravity="center"
         android:gravity="center"
         android:scrollbars="none"
         android:scrollbars="none"
-        android:textColor="?attr/colorOnSurface"
-        android:textSize="22sp"
+        android:layout_marginBottom="4dp"
+        android:textSize="24sp"
         android:textStyle="bold"
         android:textStyle="bold"
         app:layout_constraintBottom_toTopOf="@+id/tv_sub_title"
         app:layout_constraintBottom_toTopOf="@+id/tv_sub_title"
         tools:text="@string/text" />
         tools:text="@string/text" />
@@ -148,6 +150,7 @@
         android:layout_marginBottom="8dp"
         android:layout_marginBottom="8dp"
         android:text="@string/text"
         android:text="@string/text"
         android:textStyle="bold"
         android:textStyle="bold"
+        android:textColor="?attr/colorPrimary"
         app:layout_constraintBottom_toTopOf="@id/ll_play_menu"
         app:layout_constraintBottom_toTopOf="@id/ll_play_menu"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         tools:ignore="HardcodedText,RtlSymmetry,TextContrastCheck" />
         tools:ignore="HardcodedText,RtlSymmetry,TextContrastCheck" />
@@ -161,6 +164,7 @@
         android:value="0"
         android:value="0"
         android:valueFrom="0"
         android:valueFrom="0"
         android:valueTo="1"
         android:valueTo="1"
+        app:tickColorInactive="@android:color/transparent"
         app:layout_constraintBottom_toTopOf="@id/tv_all_time"
         app:layout_constraintBottom_toTopOf="@id/tv_all_time"
         app:thumbElevation="0dp"
         app:thumbElevation="0dp"
         app:thumbHeight="20dp"
         app:thumbHeight="20dp"
@@ -175,6 +179,7 @@
         android:layout_marginBottom="8dp"
         android:layout_marginBottom="8dp"
         android:text="@string/text"
         android:text="@string/text"
         android:textStyle="bold"
         android:textStyle="bold"
+        android:textColor="?attr/colorPrimary"
         app:layout_constraintBottom_toTopOf="@id/ll_play_menu"
         app:layout_constraintBottom_toTopOf="@id/ll_play_menu"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         tools:ignore="HardcodedText,TextContrastCheck" />
         tools:ignore="HardcodedText,TextContrastCheck" />
@@ -378,6 +383,7 @@
                 android:id="@+id/setting_slider"
                 android:id="@+id/setting_slider"
                 android:layout_width="match_parent"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_height="wrap_content"
+                app:tickColorInactive="@android:color/transparent"
                 android:layout_gravity="center_vertical"
                 android:layout_gravity="center_vertical"
                 android:value="0"
                 android:value="0"
                 android:valueFrom="0"
                 android:valueFrom="0"

+ 2 - 2
app/src/main/res/layout/activity_book_info.xml

@@ -380,10 +380,10 @@
         android:contentDescription="@string/reading"
         android:contentDescription="@string/reading"
         android:minWidth="56dp"
         android:minWidth="56dp"
         android:text="@string/reading"
         android:text="@string/reading"
-        android:textColor="?attr/colorOnPrimary"
+        android:textColor="?attr/colorOnTertiary"
         app:backgroundTint="?attr/colorTertiary"
         app:backgroundTint="?attr/colorTertiary"
         app:icon="@drawable/ic_bottom_books"
         app:icon="@drawable/ic_bottom_books"
-        app:iconTint="?attr/colorOnPrimary"
+        app:iconTint="?attr/colorOnTertiary"
         app:layout_anchor="@id/refresh_layout"
         app:layout_anchor="@id/refresh_layout"
         app:layout_anchorGravity="bottom|end" />
         app:layout_anchorGravity="bottom|end" />