HapeLee 1 سال پیش
والد
کامیت
96d2d65511
43فایلهای تغییر یافته به همراه302 افزوده شده و 281 حذف شده
  1. 17 17
      app/src/main/java/io/legado/app/base/BaseActivity.kt
  2. 21 21
      app/src/main/java/io/legado/app/lib/prefs/PreferenceCategory.kt
  3. 13 13
      app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt
  4. 2 1
      app/src/main/java/io/legado/app/ui/config/ThemeListDialog.kt
  5. 2 3
      app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt
  6. 3 10
      app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt
  7. 1 1
      app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt
  8. 2 4
      app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt
  9. 5 5
      app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt
  10. 2 2
      app/src/main/java/io/legado/app/ui/widget/SearchView.kt
  11. 17 14
      app/src/main/java/io/legado/app/ui/widget/recycler/scroller/FastScroller.kt
  12. 2 6
      app/src/main/res/drawable/bg_searchview.xml
  13. 1 1
      app/src/main/res/drawable/fastscroll_handle.xml
  14. 1 1
      app/src/main/res/drawable/fastscroll_track.xml
  15. 1 1
      app/src/main/res/drawable/ic_groups.xml
  16. 3 9
      app/src/main/res/drawable/ic_star_border.xml
  17. 1 1
      app/src/main/res/drawable/selector_fillet_btn_bg.xml
  18. 1 1
      app/src/main/res/drawable/shape_fillet_btn.xml
  19. 2 2
      app/src/main/res/layout/activity_book_info.xml
  20. 3 1
      app/src/main/res/layout/activity_book_search.xml
  21. 1 0
      app/src/main/res/layout/activity_book_source_edit.xml
  22. 8 16
      app/src/main/res/layout/activity_import_book.xml
  23. 14 15
      app/src/main/res/layout/dialog_bookshelf_config.xml
  24. 3 5
      app/src/main/res/layout/dialog_recycler_view.xml
  25. 4 5
      app/src/main/res/layout/dialog_toc_regex_edit.xml
  26. 2 5
      app/src/main/res/layout/fragment_bookshelf1.xml
  27. 47 20
      app/src/main/res/layout/fragment_explore.xml
  28. 25 7
      app/src/main/res/layout/fragment_my_config.xml
  29. 50 22
      app/src/main/res/layout/fragment_rss.xml
  30. 2 5
      app/src/main/res/layout/item_book_source.xml
  31. 4 5
      app/src/main/res/layout/item_dict_rule.xml
  32. 4 6
      app/src/main/res/layout/item_fillet_text.xml
  33. 2 6
      app/src/main/res/layout/item_find_book.xml
  34. 1 4
      app/src/main/res/layout/item_txt_toc_rule.xml
  35. 3 3
      app/src/main/res/layout/view_fastscroller.xml
  36. 1 4
      app/src/main/res/layout/view_preference.xml
  37. 1 12
      app/src/main/res/layout/view_preference_category.xml
  38. 16 17
      app/src/main/res/layout/view_search.xml
  39. 2 2
      app/src/main/res/menu/main_explore.xml
  40. 0 2
      app/src/main/res/menu/main_rss.xml
  41. 6 0
      app/src/main/res/values-night/styles.xml
  42. 4 4
      app/src/main/res/values/dimens.xml
  43. 2 2
      app/src/main/res/values/styles.xml

+ 17 - 17
app/src/main/java/io/legado/app/base/BaseActivity.kt

@@ -80,9 +80,9 @@ abstract class BaseActivity<VB : ViewBinding>(
     @SuppressLint("ObsoleteSdkInt")
     override fun onCreate(savedInstanceState: Bundle?) {
         window.decorView.disableAutoFill()
-        initTheme()
+        //initTheme()
         super.onCreate(savedInstanceState)
-        setupSystemBar()
+        //setupSystemBar()
         setContentView(binding.root)
         upBackgroundImage()
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
@@ -101,14 +101,14 @@ abstract class BaseActivity<VB : ViewBinding>(
         super.onMultiWindowModeChanged(isInMultiWindowMode, newConfig)
 //        findViewById<TitleBar>(R.id.title_bar)
 //            ?.onMultiWindowModeChanged(isInMultiWindowMode, fullScreen)
-        setupSystemBar()
+        //setupSystemBar()
     }
 
     override fun onConfigurationChanged(newConfig: Configuration) {
         super.onConfigurationChanged(newConfig)
         //findViewById<TitleBar>(R.id.title_bar)
             //?.onMultiWindowModeChanged(isInMultiWindow, fullScreen)
-        setupSystemBar()
+        //setupSystemBar()
     }
 
     abstract fun onActivityCreated(savedInstanceState: Bundle?)
@@ -174,20 +174,20 @@ abstract class BaseActivity<VB : ViewBinding>(
         }
     }
 
-    open fun setupSystemBar() {
-        if (fullScreen && !isInMultiWindow) {
-            fullScreen()
-        }
-        //val isTransparentStatusBar = AppConfig.isTransparentStatusBar
-        //val statusBarColor = ThemeStore.statusBarColor(this, isTransparentStatusBar)
-        //setStatusBarColorAuto(statusBarColor, isTransparentStatusBar, fullScreen)
-//        if (toolBarTheme == Theme.Dark) {
-//            setLightStatusBar(false)
-//        } else if (toolBarTheme == Theme.Light) {
-//            setLightStatusBar(true)
+//    open fun setupSystemBar() {
+//        if (fullScreen && !isInMultiWindow) {
+//            fullScreen()
 //        }
-        upNavigationBarColor()
-    }
+//        //val isTransparentStatusBar = AppConfig.isTransparentStatusBar
+//        //val statusBarColor = ThemeStore.statusBarColor(this, isTransparentStatusBar)
+//        //setStatusBarColorAuto(statusBarColor, isTransparentStatusBar, fullScreen)
+////        if (toolBarTheme == Theme.Dark) {
+////            setLightStatusBar(false)
+////        } else if (toolBarTheme == Theme.Light) {
+////            setLightStatusBar(true)
+////        }
+//        upNavigationBarColor()
+//    }
 
     open fun upNavigationBarColor() {
 //        if (AppConfig.immNavigationBar) {

+ 21 - 21
app/src/main/java/io/legado/app/lib/prefs/PreferenceCategory.kt

@@ -31,27 +31,27 @@ class PreferenceCategory(context: Context, attrs: AttributeSet) :
             //view.setTextColor(context.accentColor)
             view.isVisible = !title.isNullOrEmpty()
 
-            val da = holder.findViewById(R.id.preference_divider_above)
-            val dividerColor = if (AppConfig.isNightTheme) {
-//                ColorUtils.withAlpha(
-//                    ColorUtils.shiftColor(context.backgroundColor, 1.05f),
-//                    0.5f
-//                )
-            } else {
-//                ColorUtils.withAlpha(
-//                    ColorUtils.shiftColor(context.backgroundColor, 0.95f),
-//                    0.5f
-//                )
-            }
-            if (da is View) {
-                //da.setBackgroundColor(dividerColor)
-                da.isVisible = holder.isDividerAllowedAbove
-            }
-            val db = holder.findViewById(R.id.preference_divider_below)
-            if (db is View) {
-                //db.setBackgroundColor(dividerColor)
-                db.isVisible = holder.isDividerAllowedBelow
-            }
+//            val da = holder.findViewById(R.id.preference_divider_above)
+//            val dividerColor = if (AppConfig.isNightTheme) {
+////                ColorUtils.withAlpha(
+////                    ColorUtils.shiftColor(context.backgroundColor, 1.05f),
+////                    0.5f
+////                )
+//            } else {
+////                ColorUtils.withAlpha(
+////                    ColorUtils.shiftColor(context.backgroundColor, 0.95f),
+////                    0.5f
+////                )
+//            }
+//            if (da is View) {
+//                //da.setBackgroundColor(dividerColor)
+//                da.isVisible = holder.isDividerAllowedAbove
+//            }
+//            val db = holder.findViewById(R.id.preference_divider_below)
+//            if (db is View) {
+//                //db.setBackgroundColor(dividerColor)
+//                db.isVisible = holder.isDividerAllowedBelow
+//            }
         }
     }
 

+ 13 - 13
app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt

@@ -201,13 +201,13 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
                 return false
             }
         })
-        searchView.setOnQueryTextFocusChangeListener { _, hasFocus ->
-            if (binding.refreshProgressBar.isAutoLoading || (!hasFocus && adapter.isNotEmpty() && searchView.query.isNotBlank())) {
-                visibleInputHelp(false)
-            } else {
-                visibleInputHelp(true)
-            }
-        }
+//        searchView.setOnQueryTextFocusChangeListener { _, hasFocus ->
+//            if (binding.refreshProgressBar.isAutoLoading || (!hasFocus && adapter.isNotEmpty() && searchView.query.isNotBlank())) {
+//                visibleInputHelp(false)
+//            } else {
+//                visibleInputHelp(true)
+//            }
+//        }
         visibleInputHelp(true)
     }
 
@@ -264,16 +264,16 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
     }
 
     private fun initOtherView() {
-        binding.fbStartStop.backgroundTintList =
-            Selector.colorBuild()
+//        binding.fbStartStop.backgroundTintList =
+//            Selector.colorBuild()
 //                .setDefaultColor(accentColor)
 //                .setPressedColor(ColorUtils.darkenColor(accentColor))
-                .create()
+//                .create()
         binding.fbStartStop.setOnClickListener {
             if (viewModel.isSearchLiveData.value == true) {
                 isManualStopSearch = true
                 viewModel.stop()
-                binding.refreshProgressBar.isAutoLoading = false
+                //binding.refreshProgressBar.visibility = GONE
             } else {
                 viewModel.search("")
             }
@@ -395,7 +395,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
      */
     private fun startSearch() {
         binding.refreshProgressBar.visible()
-        binding.refreshProgressBar.isAutoLoading = true
+        //binding.refreshProgressBar.isAutoLoading = true
         binding.fbStartStop.setImageResource(R.drawable.ic_stop_black_24dp)
         binding.fbStartStop.visible()
     }
@@ -404,7 +404,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
      * 搜索结束
      */
     private fun searchFinally() {
-        binding.refreshProgressBar.isAutoLoading = false
+        //binding.refreshProgressBar.isAutoLoading = false
         binding.refreshProgressBar.gone()
         if (!isManualStopSearch && viewModel.hasMore) {
             binding.fbStartStop.setImageResource(R.drawable.ic_play_24dp)

+ 2 - 1
app/src/main/java/io/legado/app/ui/config/ThemeListDialog.kt

@@ -8,6 +8,7 @@ import android.view.ViewGroup
 import androidx.appcompat.widget.Toolbar
 import androidx.recyclerview.widget.LinearLayoutManager
 import io.legado.app.R
+import io.legado.app.base.BaseBottomSheetDialogFragment
 import io.legado.app.base.BaseDialogFragment
 import io.legado.app.base.adapter.ItemViewHolder
 import io.legado.app.base.adapter.RecyclerAdapter
@@ -20,7 +21,7 @@ import io.legado.app.ui.widget.recycler.VerticalDivider
 import io.legado.app.utils.*
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 
-class ThemeListDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
+class ThemeListDialog : BaseBottomSheetDialogFragment(R.layout.dialog_recycler_view),
     Toolbar.OnMenuItemClickListener {
 
     private val binding by viewBinding(DialogRecyclerViewBinding::bind)

+ 2 - 3
app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt

@@ -56,9 +56,8 @@ class ExploreAdapter(context: Context, val callBack: CallBack) :
             }
 
             if (exIndex == holder.layoutPosition) {
-                // 使用 MaterialButton 的 icon 属性和旋转动画
                 ivStatus.icon = ContextCompat.getDrawable(context, R.drawable.ic_arrow_right)
-                ivStatus.rotation = 90f // 直接设置90度旋转(向下箭头效果)
+                ivStatus.rotation = 90f
 
                 if (scrollTo >= 0) {
                     callBack.scrollTo(scrollTo)
@@ -77,7 +76,7 @@ class ExploreAdapter(context: Context, val callBack: CallBack) :
                 }
             } else {
                 ivStatus.icon = ContextCompat.getDrawable(context, R.drawable.ic_arrow_right)
-                ivStatus.rotation = 0f // 重置为0度(向右箭头)
+                ivStatus.rotation = 0f
                 recyclerFlexbox(flexbox)
                 flexbox.gone()
             }

+ 3 - 10
app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt

@@ -63,28 +63,21 @@ class ExploreFragment() : VMBaseFragment<ExploreViewModel>(R.layout.fragment_exp
     private val binding by viewBinding(FragmentExploreBinding::bind)
     private val adapter by lazy { ExploreAdapter(requireContext(), this) }
     private val linearLayoutManager by lazy { LinearLayoutManager(context) }
-    private val searchView: SearchView by lazy {
-        binding.titleBar.findViewById(R.id.search_view)
-    }
+    private val searchView: SearchView by lazy { binding.searchLayout.searchView }
     private val diffItemCallBack = ExploreDiffItemCallBack()
     private val groups = linkedSetOf<String>()
     private var exploreFlowJob: Job? = null
     private var groupsMenu: SubMenu? = null
 
     override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
-        setSupportToolbar(binding.titleBar.toolbar)
+        setSupportToolbar(binding.topBar)
         initSearchView()
         initRecyclerView()
         initGroupData()
         upExploreData()
     }
 
-    override fun onCompatCreateOptionsMenu(menu: Menu) {
-        super.onCompatCreateOptionsMenu(menu)
-        menuInflater.inflate(R.menu.main_explore, menu)
-        groupsMenu = menu.findItem(R.id.menu_group)?.subMenu
-        upGroupsMenu()
-    }
+
 
     override fun onPause() {
         super.onPause()

+ 1 - 1
app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt

@@ -53,7 +53,7 @@ class MyFragment() : BaseFragment(R.layout.fragment_my_config), MainFragmentInte
     private val binding by viewBinding(FragmentMyConfigBinding::bind)
 
     override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
-        setSupportToolbar(binding.titleBar.toolbar)
+        setSupportToolbar(binding.topBar)
         val fragmentTag = "prefFragment"
         var preferenceFragment = childFragmentManager.findFragmentByTag(fragmentTag)
         if (preferenceFragment == null) preferenceFragment = MyPreferenceFragment()

+ 2 - 4
app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt

@@ -62,16 +62,14 @@ class RssFragment() : VMBaseFragment<RssViewModel>(R.layout.fragment_rss),
     private val adapter by lazy {
         RssAdapter(requireContext(), this, this, viewLifecycleOwner.lifecycle)
     }
-    private val searchView: SearchView by lazy {
-        binding.titleBar.findViewById(R.id.search_view)
-    }
+    private val searchView: SearchView by lazy { binding.searchLayout.searchView }
     private var groupsFlowJob: Job? = null
     private var rssFlowJob: Job? = null
     private val groups = linkedSetOf<String>()
     private var groupsMenu: SubMenu? = null
 
     override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
-        setSupportToolbar(binding.titleBar.toolbar)
+        setSupportToolbar(binding.topBar)
         initSearchView()
         initRecyclerView()
         initGroupData()

+ 5 - 5
app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt

@@ -31,11 +31,11 @@ open class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
         }
     }
 
-    override fun setupSystemBar() {
-        fullScreen()
-        //setStatusBarColorAuto(backgroundColor, true, fullScreen)
-        upNavigationBarColor()
-    }
+//    override fun setupSystemBar() {
+//        fullScreen()
+//        //setStatusBarColorAuto(backgroundColor, true, fullScreen)
+//        upNavigationBarColor()
+//    }
 
     override fun upBackgroundImage() {
         if (getPrefBoolean(PreferKey.customWelcome)) {

+ 2 - 2
app/src/main/java/io/legado/app/ui/widget/SearchView.kt

@@ -38,10 +38,10 @@ class SearchView @JvmOverloads constructor(
         try {
             if (textView == null) {
                 textView = findViewById(androidx.appcompat.R.id.search_src_text)
-                mSearchHintIcon = this.context.getDrawable(R.drawable.ic_search_hint)
+                //mSearchHintIcon = this.context.getDrawable(R.drawable.ic_search_hint)
             }
             // 改变字体
-            textView!!.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)
+            //textView!!.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)
             textView!!.gravity = Gravity.CENTER_VERTICAL
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
                 textView!!.isLocalePreferredLineHeightForMinimumUsed = false

+ 17 - 14
app/src/main/java/io/legado/app/ui/widget/recycler/scroller/FastScroller.kt

@@ -7,6 +7,7 @@ import android.content.Context
 import android.graphics.Color
 import android.graphics.drawable.Drawable
 import android.util.AttributeSet
+import android.util.TypedValue
 import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
@@ -288,7 +289,6 @@ class FastScroller : LinearLayout {
         visibility = if (enabled) View.VISIBLE else View.INVISIBLE
     }
 
-    @Suppress("DEPRECATION")
     @SuppressLint("ClickableViewAccessibility")
     override fun onTouchEvent(event: MotionEvent): Boolean {
         when (event.action) {
@@ -413,7 +413,7 @@ class FastScroller : LinearLayout {
     }
 
     private fun isViewVisible(view: View?): Boolean {
-        return view != null && view.visibility == View.VISIBLE
+        return view != null && view.isVisible
     }
 
     private fun cancelAnimation(animator: ViewPropertyAnimator?) {
@@ -492,7 +492,7 @@ class FastScroller : LinearLayout {
 
     private fun setHandleSelected(selected: Boolean) {
         mHandleView.isSelected = selected
-        DrawableCompat.setTint(mHandleImage!!, if (selected) mBubbleColor else mHandleColor)
+        DrawableCompat.setTint(mHandleImage!!, if (selected) mHandleColor else mHandleColor)
     }
 
     private fun layout(context: Context, attrs: AttributeSet?) {
@@ -503,21 +503,24 @@ class FastScroller : LinearLayout {
         mHandleView = findViewById(R.id.fastscroll_handle)
         mTrackView = findViewById(R.id.fastscroll_track)
         mScrollbar = findViewById(R.id.fastscroll_scrollbar)
-//        @ColorInt var bubbleColor = ColorUtils.adjustAlpha(context.accentColor, 0.8f)
-//        @ColorInt var handleColor = context.accentColor
-        @ColorInt var trackColor = context.getCompatColor(R.color.transparent30)
-//        @ColorInt var textColor =
-//            if (ColorUtils.isColorLight(bubbleColor)) Color.BLACK else Color.WHITE
+        mHandleImage = mHandleView.drawable?.mutate()
+        val typedValue = TypedValue()
+        context.theme.resolveAttribute(com.google.android.material.R.attr.colorPrimary, typedValue, true)
+        val defaultColor = typedValue.data
+        var bubbleColor = defaultColor
+        var handleColor = defaultColor
+        var trackColor = defaultColor
+        var textColor = defaultColor
         var fadeScrollbar = true
         var showBubble = false
         var showTrack = true
         if (attrs != null) {
             val typedArray = context.obtainStyledAttributes(attrs, R.styleable.FastScroller, 0, 0)
             try {
-//                bubbleColor = typedArray.getColor(R.styleable.FastScroller_bubbleColor, bubbleColor)
-//                handleColor = typedArray.getColor(R.styleable.FastScroller_handleColor, handleColor)
+                bubbleColor = typedArray.getColor(R.styleable.FastScroller_bubbleColor, bubbleColor)
+                handleColor = typedArray.getColor(R.styleable.FastScroller_handleColor, handleColor)
                 trackColor = typedArray.getColor(R.styleable.FastScroller_trackColor, trackColor)
-//                textColor = typedArray.getColor(R.styleable.FastScroller_bubbleTextColor, textColor)
+                textColor = typedArray.getColor(R.styleable.FastScroller_bubbleTextColor, textColor)
                 fadeScrollbar =
                     typedArray.getBoolean(R.styleable.FastScroller_fadeScrollbar, fadeScrollbar)
                 showBubble = typedArray.getBoolean(R.styleable.FastScroller_showBubble, showBubble)
@@ -527,9 +530,9 @@ class FastScroller : LinearLayout {
             }
         }
         setTrackColor(trackColor)
-//        setHandleColor(handleColor)
-//        setBubbleColor(bubbleColor)
-//        setBubbleTextColor(textColor)
+        setHandleColor(handleColor)
+        setBubbleColor(bubbleColor)
+        setBubbleTextColor(textColor)
         setFadeScrollbar(fadeScrollbar)
         setBubbleVisible(showBubble)
         setTrackVisible(showTrack)

+ 2 - 6
app/src/main/res/drawable/bg_searchview.xml

@@ -1,11 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android" >
     <!-- 角度 -->
-    <corners android:radius="35dp"/>
+    <corners android:radius="36dp"/>
     <!-- 填充色 -->
-    <solid android:color="@color/transparent10" />
-    <!-- 描边 设置线宽及颜色 -->
-    <stroke
-        android:color="@color/transparent10"
-        android:width="0.5dp" />
+    <solid android:color="?attr/colorSurfaceContainer" />
 </shape>

+ 1 - 1
app/src/main/res/drawable/fastscroll_handle.xml

@@ -18,7 +18,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:shape="rectangle">
 
-    <tools:solid android:color="#555555" />
+    <solid android:color="?attr/colorPrimary" />
 
     <corners android:radius="@dimen/fastscroll_handle_radius" />
 

+ 1 - 1
app/src/main/res/drawable/fastscroll_track.xml

@@ -18,7 +18,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:shape="rectangle">
 
-    <tools:solid android:color="#CCCCCC" />
+    <tools:solid android:color="@color/transparent" />
 
     <size android:width="@dimen/fastscroll_track_width" />
 

+ 1 - 1
app/src/main/res/drawable/ic_groups.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="?attr/colorControlNormal">
-    <path android:fillColor="@android:color/white" android:pathData="M260,440L480,80L700,440L260,440ZM700,880Q625,880 572.5,827.5Q520,775 520,700Q520,625 572.5,572.5Q625,520 700,520Q775,520 827.5,572.5Q880,625 880,700Q880,775 827.5,827.5Q775,880 700,880ZM120,860L120,540L440,540L440,860L120,860ZM700,800Q742,800 771,771Q800,742 800,700Q800,658 771,629Q742,600 700,600Q658,600 629,629Q600,658 600,700Q600,742 629,771Q658,800 700,800ZM200,780L360,780L360,620L200,620L200,780ZM402,360L558,360L480,234L402,360ZM480,360L480,360L480,360ZM360,620L360,620L360,620L360,620ZM700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Z"/>
+    <path android:fillColor="@android:color/white" android:pathData="M856,570L570,856Q558,868 543,874Q528,880 513,880Q498,880 483,874Q468,868 456,856L103,503Q92,492 86,477.5Q80,463 80,447L80,160Q80,127 103.5,103.5Q127,80 160,80L447,80Q463,80 478,86.5Q493,93 504,104L856,457Q868,469 873.5,484Q879,499 879,514Q879,529 873.5,543.5Q868,558 856,570ZM513,800L799,514Q799,514 799,514Q799,514 799,514L446,160L160,160Q160,160 160,160Q160,160 160,160L160,446Q160,446 160,446Q160,446 160,446L513,800Q513,800 513,800Q513,800 513,800ZM260,320Q285,320 302.5,302.5Q320,285 320,260Q320,235 302.5,217.5Q285,200 260,200Q235,200 217.5,217.5Q200,235 200,260Q200,285 217.5,302.5Q235,320 260,320ZM480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Z"/>
 </vector>

+ 3 - 9
app/src/main/res/drawable/ic_star_border.xml

@@ -1,9 +1,3 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportWidth="24.0"
-    android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z" />
-</vector>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="?attr/colorControlNormal">
+    <path android:fillColor="@android:color/white" android:pathData="M480,840L422,788Q321,697 255,631Q189,565 150,512.5Q111,460 95.5,416Q80,372 80,326Q80,232 143,169Q206,106 300,106Q352,106 399,128Q446,150 480,190Q514,150 561,128Q608,106 660,106Q754,106 817,169Q880,232 880,326Q880,372 864.5,416Q849,460 810,512.5Q771,565 705,631Q639,697 538,788L480,840ZM480,732Q576,646 638,584.5Q700,523 736,477.5Q772,432 786,396.5Q800,361 800,326Q800,266 760,226Q720,186 660,186Q613,186 573,212.5Q533,239 518,280L518,280L442,280L442,280Q427,239 387,212.5Q347,186 300,186Q240,186 200,226Q160,266 160,326Q160,361 174,396.5Q188,432 224,477.5Q260,523 322,584.5Q384,646 480,732ZM480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459L480,459L480,459L480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Z"/>
+</vector>

+ 1 - 1
app/src/main/res/drawable/selector_fillet_btn_bg.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- res/drawable/ripple_btn.xml -->
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="?android:attr/colorControlHighlight">
+    android:color="?attr/colorControlHighlight">
     <item android:drawable="@drawable/shape_fillet_btn" />
     <item android:id="@android:id/mask"
         android:drawable="@drawable/shape_fillet_btn" />

+ 1 - 1
app/src/main/res/drawable/shape_fillet_btn.xml

@@ -2,5 +2,5 @@
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
     <corners android:radius="16dp" />
-    <solid android:color="@color/btn_bg_press" />
+    <solid android:color="?attr/colorSurfaceContainer" />
 </shape>

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

@@ -23,7 +23,7 @@
         <com.google.android.material.appbar.CollapsingToolbarLayout
             android:layout_width="match_parent"
             android:layout_height="120dp"
-            app:layout_scrollFlags="scroll|exitUntilCollapsed"
+            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
             app:collapsedTitleTextAppearance="@style/TextAppearance.Material3.TitleLarge"
             app:expandedTitleTextAppearance="@style/TextAppearance.Material3.HeadlineMedium">
 
@@ -33,7 +33,7 @@
                 android:layout_height="?attr/actionBarSize"
                 app:navigationIcon="@drawable/ic_arrow_back"
                 app:title=" "
-                app:layout_collapseMode="parallax" />
+                app:layout_collapseMode="pin" />
 
         </com.google.android.material.appbar.CollapsingToolbarLayout>
     </com.google.android.material.appbar.AppBarLayout>

+ 3 - 1
app/src/main/res/layout/activity_book_search.xml

@@ -15,10 +15,12 @@
         app:layout_constraintTop_toTopOf="parent"
         app:title="搜索" />
 
-    <io.legado.app.ui.widget.anima.RefreshProgressBar
+    <com.google.android.material.progressindicator.LinearProgressIndicator
         android:id="@+id/refresh_progress_bar"
         android:layout_width="match_parent"
         android:layout_height="2dp"
+        android:visibility="gone"
+        android:indeterminate="true"
         app:layout_constraintTop_toBottomOf="@id/title_bar" />
 
     <io.legado.app.ui.widget.dynamiclayout.DynamicFrameLayout

+ 1 - 0
app/src/main/res/layout/activity_book_source_edit.xml

@@ -77,6 +77,7 @@
         android:id="@+id/tab_layout"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        app:tabMode="fixed"
         tools:ignore="SpeakableTextPresentCheck" />
 
     <androidx.recyclerview.widget.RecyclerView

+ 8 - 16
app/src/main/res/layout/activity_import_book.xml

@@ -18,11 +18,10 @@
         android:id="@+id/lay_top"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:elevation="1dp"
         android:gravity="center_vertical"
         android:minHeight="36dp"
         android:orientation="horizontal"
-        android:padding="8dp"
+        android:paddingHorizontal="16dp"
         app:layout_constraintTop_toBottomOf="@id/titleBar">
 
         <TextView
@@ -33,23 +32,16 @@
             android:focusable="true"
             android:gravity="center_vertical"
             android:singleLine="true"
-            android:textColor="@color/secondaryText"
-            android:textSize="13sp"
+            android:textSize="14sp"
             tools:text="/" />
 
-        <io.legado.app.ui.widget.text.StrokeTextView
+        <com.google.android.material.button.MaterialButton
             android:id="@+id/tv_go_back"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            android:layout_margin="4dp"
-            android:gravity="center"
-            android:paddingLeft="16dp"
-            android:paddingRight="16dp"
-            android:text="@string/go_back"
-            android:textFontWeight="800"
-            android:textSize="14sp"
-            app:cornerRadius="5dp"
+            android:layout_width="36dp"
+            android:layout_height="36dp"
+            style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
+            app:icon="@drawable/ic_return"
+            app:iconGravity="textStart"
             tools:ignore="UnusedAttribute" />
     </LinearLayout>
 

+ 14 - 15
app/src/main/res/layout/dialog_bookshelf_config.xml

@@ -18,8 +18,7 @@
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:padding="6dp"
-            android:text="@string/group_style"
-            android:textColor="@color/primaryText" />
+            android:text="@string/group_style" />
 
         <androidx.appcompat.widget.AppCompatSpinner
             android:id="@+id/sp_group_style"
@@ -75,7 +74,7 @@
         app:layout_constraintTop_toBottomOf="@+id/sw_show_bookshelf_fast_scroller"
         app:layout_constraintLeft_toLeftOf="parent">
 
-        <io.legado.app.ui.widget.text.AccentTextView
+        <TextView
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:padding="6dp"
@@ -88,31 +87,31 @@
             android:layout_height="wrap_content"
             android:orientation="vertical">
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/layout_list"
                 tools:ignore="TouchTargetSizeCheck" />
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/layout_grid3"
                 tools:ignore="TouchTargetSizeCheck" />
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/layout_grid4"
                 tools:ignore="TouchTargetSizeCheck" />
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/layout_grid5"
                 tools:ignore="TouchTargetSizeCheck" />
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/layout_grid6"
@@ -130,7 +129,7 @@
         app:layout_constraintTop_toBottomOf="@id/sw_show_bookshelf_fast_scroller"
         app:layout_constraintRight_toRightOf="parent">
 
-        <io.legado.app.ui.widget.text.AccentTextView
+        <TextView
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:padding="6dp"
@@ -143,37 +142,37 @@
             android:layout_height="wrap_content"
             android:orientation="vertical">
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/bookshelf_px_0"
                 tools:ignore="TouchTargetSizeCheck" />
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/bookshelf_px_1"
                 tools:ignore="TouchTargetSizeCheck" />
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/bookshelf_px_2"
                 tools:ignore="TouchTargetSizeCheck" />
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/bookshelf_px_3"
                 tools:ignore="TouchTargetSizeCheck" />
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/bookshelf_px_4"
                 tools:ignore="TouchTargetSizeCheck" />
 
-            <RadioButton
+            <com.google.android.material.radiobutton.MaterialRadioButton
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/bookshelf_px_5"

+ 3 - 5
app/src/main/res/layout/dialog_recycler_view.xml

@@ -10,16 +10,14 @@
         android:id="@+id/tool_bar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:theme="?attr/actionBarStyle"
-        android:layout_margin="4dp"/>
+        android:theme="?attr/actionBarStyle" />
 
     <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="1"
-        android:padding="16dp">
+        android:layout_weight="1">
 
-        <io.legado.app.ui.widget.recycler.scroller.FastScrollRecyclerView
+        <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/recycler_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"

+ 4 - 5
app/src/main/res/layout/dialog_toc_regex_edit.xml

@@ -1,16 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout 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:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
     android:padding="16dp">
 
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:background="@drawable/shape_card_view"
         android:orientation="vertical"
         tools:ignore="UselessParent">
 
@@ -82,4 +81,4 @@
 
     </LinearLayout>
 
-</FrameLayout>
+</LinearLayout>

+ 2 - 5
app/src/main/res/layout/fragment_bookshelf1.xml

@@ -12,16 +12,12 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         app:attachToActivity="false"
-        android:fitsSystemWindows="true"
-        app:title="@string/bookshelf">
+        android:fitsSystemWindows="true">
 
         <com.google.android.material.appbar.CollapsingToolbarLayout
             android:layout_width="match_parent"
             android:layout_height="120dp"
             app:layout_scrollFlags="scroll|exitUntilCollapsed"
-            app:expandedTitleMarginStart="24dp"
-            app:title="@string/bookshelf"
-            app:titleEnabled="true"
             app:collapsedTitleTextAppearance="@style/TextAppearance.Material3.TitleLarge"
             app:expandedTitleTextAppearance="@style/TextAppearance.Material3.HeadlineMedium">
 
@@ -29,6 +25,7 @@
                 android:id="@+id/top_bar"
                 android:layout_width="match_parent"
                 android:layout_height="?attr/actionBarSize"
+                app:title="@string/bookshelf"
                 app:layout_collapseMode="pin" />
 
         </com.google.android.material.appbar.CollapsingToolbarLayout>

+ 47 - 20
app/src/main/res/layout/fragment_explore.xml

@@ -1,27 +1,55 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:layout_height="match_parent">
 
-    <io.legado.app.ui.widget.TitleBar
-        android:id="@+id/title_bar"
+    <com.google.android.material.appbar.AppBarLayout
+        android:id="@+id/app_bar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        app:attachToActivity="false"
-        app:contentLayout="@layout/view_search"
-        app:layout_constraintTop_toTopOf="parent"
-        app:title="@string/discovery" />
+        android:fitsSystemWindows="true">
 
-    <io.legado.app.ui.widget.recycler.RecyclerViewAtPager2
-        android:id="@+id/rv_find"
+        <com.google.android.material.appbar.CollapsingToolbarLayout
+            android:layout_width="match_parent"
+            android:layout_height="120dp"
+            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
+            app:collapsedTitleTextAppearance="@style/TextAppearance.Material3.TitleLarge"
+            app:expandedTitleTextAppearance="@style/TextAppearance.Material3.HeadlineMedium">
+
+            <com.google.android.material.appbar.MaterialToolbar
+                android:id="@+id/top_bar"
+                android:layout_width="match_parent"
+                android:layout_height="?attr/actionBarSize"
+                app:title="@string/discovery"
+                app:layout_collapseMode="pin" />
+
+        </com.google.android.material.appbar.CollapsingToolbarLayout>
+
+
+        <include
+            android:id="@+id/search_layout"
+            layout="@layout/view_search"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="16dp" />
+
+    </com.google.android.material.appbar.AppBarLayout>
+
+    <androidx.core.widget.NestedScrollView
         android:layout_width="match_parent"
-        android:layout_height="0dp"
-        app:layout_constraintTop_toBottomOf="@+id/title_bar"
-        app:layout_constraintBottom_toBottomOf="parent"
-        tools:listitem="@layout/item_find_book" />
+        android:layout_height="match_parent"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+        <io.legado.app.ui.widget.recycler.RecyclerViewAtPager2
+            android:id="@+id/rv_find"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            tools:listitem="@layout/item_find_book" />
+
+    </androidx.core.widget.NestedScrollView>
 
     <TextView
         android:id="@+id/tv_empty_msg"
@@ -31,10 +59,9 @@
         android:gravity="center"
         android:visibility="gone"
         android:text="@string/explore_empty"
-        app:layout_constraintTop_toBottomOf="@+id/title_bar"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"
+        app:layout_anchor="@id/app_bar"
+        app:layout_anchorGravity="bottom|center"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior"
         tools:text="TextView" />
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 25 - 7
app/src/main/res/layout/fragment_my_config.xml

@@ -1,21 +1,39 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:layout_height="match_parent">
 
-    <io.legado.app.ui.widget.TitleBar
+    <com.google.android.material.appbar.AppBarLayout
         android:id="@+id/title_bar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         app:attachToActivity="false"
-        app:title="@string/my" />
+        android:fitsSystemWindows="true">
+
+        <com.google.android.material.appbar.CollapsingToolbarLayout
+            android:layout_width="match_parent"
+            android:layout_height="120dp"
+            app:layout_scrollFlags="scroll|exitUntilCollapsed"
+            app:title="@string/my"
+            app:titleEnabled="true"
+            app:collapsedTitleTextAppearance="@style/TextAppearance.Material3.TitleLarge"
+            app:expandedTitleTextAppearance="@style/TextAppearance.Material3.HeadlineMedium">
+
+            <com.google.android.material.appbar.MaterialToolbar
+                android:id="@+id/top_bar"
+                android:layout_width="match_parent"
+                android:layout_height="?attr/actionBarSize"
+                app:layout_collapseMode="pin" />
+
+        </com.google.android.material.appbar.CollapsingToolbarLayout>
+    </com.google.android.material.appbar.AppBarLayout>
 
     <LinearLayout
         android:id="@+id/pre_fragment"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:orientation="vertical" />
+        android:orientation="vertical"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
 
-</LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 50 - 22
app/src/main/res/layout/fragment_rss.xml

@@ -1,29 +1,58 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:layout_height="match_parent">
 
-    <io.legado.app.ui.widget.TitleBar
-        android:id="@+id/title_bar"
+    <com.google.android.material.appbar.AppBarLayout
+        android:id="@+id/app_bar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        app:attachToActivity="false"
-        app:contentLayout="@layout/view_search"
-        app:layout_constraintTop_toTopOf="parent"
-        app:title="@string/rss" />
+        android:fitsSystemWindows="true">
 
-    <io.legado.app.ui.widget.recycler.RecyclerViewAtPager2
-        android:id="@+id/recycler_view"
+        <com.google.android.material.appbar.CollapsingToolbarLayout
+            android:layout_width="match_parent"
+            android:layout_height="120dp"
+            android:fitsSystemWindows="true"
+            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
+            app:collapsedTitleTextAppearance="@style/TextAppearance.Material3.TitleLarge"
+            app:expandedTitleTextAppearance="@style/TextAppearance.Material3.HeadlineMedium">
+
+            <com.google.android.material.appbar.MaterialToolbar
+                android:id="@+id/top_bar"
+                android:layout_width="match_parent"
+                android:layout_height="?attr/actionBarSize"
+                app:title="@string/discovery"
+                app:layout_collapseMode="pin" />
+
+        </com.google.android.material.appbar.CollapsingToolbarLayout>
+
+        <include
+            android:id="@+id/search_layout"
+            layout="@layout/view_search"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:visibility="gone"
+            android:layout_marginHorizontal="16dp" />
+
+    </com.google.android.material.appbar.AppBarLayout>
+
+    <androidx.core.widget.NestedScrollView
         android:layout_width="match_parent"
-        android:layout_height="0dp"
-        app:layout_constraintTop_toBottomOf="@id/title_bar"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
-        app:spanCount="4"
-        tools:listitem="@layout/item_rss" />
+        android:layout_height="match_parent"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+        <io.legado.app.ui.widget.recycler.RecyclerViewAtPager2
+            android:id="@+id/recycler_view"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
+            app:spanCount="4"
+            tools:listitem="@layout/item_rss" />
+
+    </androidx.core.widget.NestedScrollView>
 
     <TextView
         android:id="@+id/tv_empty_msg"
@@ -33,10 +62,9 @@
         android:gravity="center"
         android:visibility="gone"
         android:text="@string/rss_source_empty"
-        app:layout_constraintTop_toBottomOf="@+id/title_bar"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"
+        app:layout_anchor="@id/app_bar"
+        app:layout_anchorGravity="bottom|center"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior"
         tools:text="TextView" />
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 2 - 5
app/src/main/res/layout/item_book_source.xml

@@ -9,7 +9,7 @@
     android:padding="16dp"
     android:scrollbars="none">
 
-    <io.legado.app.ui.widget.text.AccentTextView
+    <TextView
         android:id="@+id/tv_host_text"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
@@ -39,7 +39,6 @@
         android:layout_gravity="center"
         android:scrollbars="none"
         android:singleLine="true"
-        android:textColor="@color/primaryText"
         app:layout_constraintBottom_toTopOf="@id/iv_debug_text"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toLeftOf="@id/swt_enabled"
@@ -69,7 +68,6 @@
         android:padding="6dp"
         android:scrollbars="none"
         android:src="@drawable/ic_edit"
-        android:tint="@color/primaryText"
         app:layout_constraintBottom_toTopOf="@id/iv_debug_text"
         app:layout_constraintRight_toLeftOf="@id/iv_menu_more"
         app:layout_constraintTop_toBottomOf="@id/barrier" />
@@ -83,7 +81,6 @@
         android:padding="6dp"
         android:scrollbars="none"
         android:src="@drawable/ic_more_vert"
-        android:tint="@color/primaryText"
         app:layout_constraintBottom_toTopOf="@id/iv_debug_text"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toBottomOf="@id/barrier"
@@ -114,7 +111,7 @@
         tools:text="@string/debug_hint"
         tools:visibility="visible" />
 
-    <io.legado.app.lib.theme.view.ThemeProgressBar
+    <ProgressBar
         android:id="@+id/iv_progressBar"
         android:layout_width="25dp"
         android:layout_height="25dp"

+ 4 - 5
app/src/main/res/layout/item_dict_rule.xml

@@ -5,7 +5,8 @@
     android:layout_height="wrap_content"
     android:gravity="center"
     android:orientation="horizontal"
-    android:padding="8dp">
+    android:background="?attr/selectableItemBackground"
+    android:padding="16dp">
 
     <io.legado.app.lib.theme.view.ThemeCheckBox
         android:id="@+id/cb_name"
@@ -31,8 +32,7 @@
         android:background="?android:attr/selectableItemBackgroundBorderless"
         android:contentDescription="@string/edit"
         android:padding="6dp"
-        android:src="@drawable/ic_edit"
-        android:tint="@color/primaryText" />
+        android:src="@drawable/ic_edit" />
 
     <androidx.appcompat.widget.AppCompatImageView
         android:id="@+id/iv_delete"
@@ -40,8 +40,7 @@
         android:layout_height="36dp"
         android:padding="6dp"
         android:background="?attr/selectableItemBackgroundBorderless"
-        android:src="@drawable/ic_outline_delete"
-        android:tint="@color/primaryText"
+        android:src="@drawable/ic_clear_all"
         android:contentDescription="@string/delete"
         tools:ignore="RtlHardcoded" />
 

+ 4 - 6
app/src/main/res/layout/item_fillet_text.xml

@@ -4,15 +4,13 @@
     android:id="@+id/text_view"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:layout_margin="6dp"
     android:background="@drawable/selector_fillet_btn_bg"
     android:ellipsize="end"
     android:gravity="center"
-    android:paddingTop="6dp"
-    android:paddingBottom="6dp"
-    android:paddingLeft="12dp"
-    android:paddingRight="12dp"
+    android:paddingTop="8dp"
+    android:paddingBottom="8dp"
+    android:paddingStart="16dp"
+    android:paddingEnd="16dp"
     android:maxLines="1"
-    android:textColor="@color/primaryText"
     android:textSize="14sp"
     tools:ignore="UnusedAttribute" />

+ 2 - 6
app/src/main/res/layout/item_find_book.xml

@@ -39,10 +39,7 @@
 
     </LinearLayout>
 
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="start">
+
 
         <com.google.android.flexbox.FlexboxLayout
             android:id="@+id/flexbox"
@@ -50,13 +47,12 @@
             android:layout_height="wrap_content"
             android:clipToPadding="false"
             android:overScrollMode="never"
-            android:layout_marginTop="6dp"
+            android:layout_marginTop="8dp"
             android:visibility="gone"
             app:dividerDrawable="@drawable/shape_space_divider"
             app:flexDirection="row"
             app:flexWrap="wrap"
             app:showDivider="middle" />
 
-    </FrameLayout>
 
 </LinearLayout>

+ 1 - 4
app/src/main/res/layout/item_txt_toc_rule.xml

@@ -7,7 +7,7 @@
     android:background="?attr/selectableItemBackground"
     android:clickable="true"
     android:focusable="true"
-    android:padding="12dp">
+    android:padding="16dp">
 
     <io.legado.app.lib.theme.view.ThemeCheckBox
         android:id="@+id/cb_source"
@@ -15,7 +15,6 @@
         android:layout_height="wrap_content"
         android:layout_gravity="start"
         android:singleLine="true"
-        android:textColor="@color/primaryText"
         app:layout_constraintBottom_toTopOf="@id/title_example"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toLeftOf="@id/swt_enabled"
@@ -43,7 +42,6 @@
         android:contentDescription="@string/edit"
         android:padding="6dp"
         android:src="@drawable/ic_edit"
-        android:tint="@color/primaryText"
         app:layout_constraintBottom_toTopOf="@id/title_example"
         app:layout_constraintRight_toLeftOf="@id/iv_menu_more"
         app:layout_constraintTop_toTopOf="parent" />
@@ -56,7 +54,6 @@
         android:contentDescription="@string/more_menu"
         android:padding="6dp"
         android:src="@drawable/ic_more_vert"
-        android:tint="@color/primaryText"
         app:layout_constraintBottom_toTopOf="@id/title_example"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="parent"

+ 3 - 3
app/src/main/res/layout/view_fastscroller.xml

@@ -14,7 +14,7 @@
         android:visibility="gone"
         tools:background="@drawable/fastscroll_bubble"
         tools:text="A"
-        tools:textColor="#ffffff"
+        tools:textColor="?attr/colorPrimary"
         tools:visibility="visible" />
 
     <FrameLayout
@@ -30,7 +30,7 @@
             android:layout_height="match_parent"
             android:layout_gravity="center_horizontal"
             tools:ignore="ContentDescription"
-            tools:src="@drawable/fastscroll_track" />
+            android:src="@drawable/fastscroll_track" />
 
         <ImageView
             android:id="@+id/fastscroll_handle"
@@ -40,7 +40,7 @@
             android:paddingEnd="@dimen/fastscroll_scrollbar_padding_end"
             android:paddingStart="@dimen/fastscroll_scrollbar_padding_start"
             tools:ignore="ContentDescription"
-            tools:src="@drawable/fastscroll_handle" />
+            android:src="@drawable/fastscroll_handle" />
 
     </FrameLayout>
 

+ 1 - 4
app/src/main/res/layout/view_preference.xml

@@ -26,8 +26,7 @@
 
     <LinearLayout
         android:orientation="vertical"
-        android:paddingStart="2dp"
-        android:layout_weight="1.0"
+        android:layout_weight="1"
         android:layout_width="0dp"
         android:layout_height="wrap_content">
 
@@ -36,14 +35,12 @@
             android:singleLine="true"
             android:textSize="16sp"
             android:text="@string/title"
-            android:textColor="@color/primaryText"
             android:layout_width="match_parent"
             android:layout_height="wrap_content" />
 
         <TextView
             android:id="@+id/preference_desc"
             android:textSize="12sp"
-            android:textColor="@color/tv_text_summary"
             android:text="@string/default1"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"

+ 1 - 12
app/src/main/res/layout/view_preference_category.xml

@@ -6,27 +6,16 @@
     android:layout_height="wrap_content"
     android:orientation="vertical" >
 
-    <View
-        android:id="@+id/preference_divider_above"
-        android:layout_width="match_parent"
-        android:layout_height="8dp" />
 
     <TextView
         android:id="@+id/preference_title"
         android:paddingTop="16dp"
         android:paddingBottom="8dp"
-        android:background="@drawable/bg_prefs_color"
         android:paddingLeft="16dp"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:text="123"
-        android:textColor="@color/md_light_primary_text"
+        android:textColor="?attr/colorPrimary"
         tools:ignore="RtlHardcoded,RtlSymmetry" />
 
-    <View
-        android:id="@+id/preference_divider_below"
-        android:layout_width="match_parent"
-        android:visibility="gone"
-        android:layout_height="8dp" />
 
 </LinearLayout>

+ 16 - 17
app/src/main/res/layout/view_search.xml

@@ -1,19 +1,18 @@
 <?xml version="1.0" encoding="utf-8"?>
 <io.legado.app.ui.widget.SearchView
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:id="@+id/search_view"
-        android:theme="?attr/actionBarStyle"
-        android:background="@drawable/bg_searchview"
-        android:layout_width="match_parent"
-        android:layout_height="36dp"
-        android:layout_marginTop="10dp"
-        android:layout_marginBottom="10dp"
-        android:imeOptions="actionSearch"
-        android:focusable="false"
-        app:searchIcon="@null"
-        app:queryBackground="@null"
-        app:submitBackground="@null"
-        app:searchHintIcon="@drawable/ic_search_hint"
-        app:iconifiedByDefault="false"
-        app:defaultQueryHint="搜索"/>
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/search_view"
+    android:theme="?attr/actionBarStyle"
+    android:background="@drawable/bg_searchview"
+    android:layout_width="match_parent"
+    android:layout_height="40dp"
+    android:layout_marginTop="8dp"
+    android:layout_marginBottom="8dp"
+    android:imeOptions="actionSearch"
+    android:focusable="false"
+    app:searchIcon="@null"
+    app:queryBackground="@null"
+    app:submitBackground="@null"
+    app:iconifiedByDefault="false"
+    app:defaultQueryHint="搜索"/>

+ 2 - 2
app/src/main/res/menu/main_explore.xml

@@ -4,9 +4,9 @@
 
     <item
         android:id="@+id/menu_group"
-        android:showAsAction="always"
         android:title="@string/group"
-        android:icon="@drawable/ic_groups">
+        android:icon="@drawable/ic_groups"
+        app:showAsAction="always">
 
         <menu />
 

+ 0 - 2
app/src/main/res/menu/main_rss.xml

@@ -14,9 +14,7 @@
         android:title="@string/group"
         android:icon="@drawable/ic_groups"
         app:showAsAction="always">
-
         <menu />
-
     </item>
 
     <item

+ 6 - 0
app/src/main/res/values-night/styles.xml

@@ -1,5 +1,11 @@
 <resources>
 
+    <style name="Base.AppTheme" parent="Theme.Material3.DayNight.NoActionBar">
+        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
+        <item name="android:windowLightStatusBar">false</item>
+        <item name="tabStyle">@style/Widget.App.TabLayout</item>
+    </style>
+
     <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark">
 
     </style>

+ 4 - 4
app/src/main/res/values/dimens.xml

@@ -24,11 +24,11 @@
     <dimen name="fastscroll_bubble_textsize">48sp</dimen>
     <dimen name="fastscroll_bubble_padding">16dp</dimen>
 
-    <dimen name="fastscroll_handle_height">40dp</dimen>
-    <dimen name="fastscroll_handle_width">8dp</dimen>
-    <dimen name="fastscroll_handle_radius">4dp</dimen>
+    <dimen name="fastscroll_handle_height">48dp</dimen>
+    <dimen name="fastscroll_handle_width">16dp</dimen>
+    <dimen name="fastscroll_handle_radius">8dp</dimen>
 
-    <dimen name="fastscroll_track_width">2dp</dimen>
+    <dimen name="fastscroll_track_width">8dp</dimen>
 
     <dimen name="fastscroll_scrollbar_margin_top">8dp</dimen>
     <dimen name="fastscroll_scrollbar_margin_bottom">8dp</dimen>

+ 2 - 2
app/src/main/res/values/styles.xml

@@ -106,11 +106,11 @@
     </style>
 
     <style name="AppTheme.AppBarOverlay.Light" parent="ThemeOverlay.Material3.Light">
-
+        <item name="android:windowLightStatusBar">true</item>
     </style>
 
     <style name="AppTheme.AppBarOverlay.Dark" parent="ThemeOverlay.Material3.Dark">
-
+        <item name="android:windowLightStatusBar">false</item>
     </style>
 
 <!--    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.Material3">-->