更新与修复界面

修复一些设备的导航栏着色
增加删除单个书籍缓存功能
增加阅读记录封面显示
恢复一些默认动效
This commit is contained in:
HapeLee committed 2025-08-09 18:26:28 +08:00
1 parent ccaf8973fe
commit 1607984faa
63 files changed
+592 -454

No files matched your search

@@ -13,6 +13,7 @@ import android.view.View
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.graphics.drawable.toDrawable import androidx.core.graphics.drawable.toDrawable
import androidx.core.view.WindowCompat
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.color.DynamicColors import com.google.android.material.color.DynamicColors
@@ -27,6 +28,8 @@ import io.legato.kazusa.utils.disableAutoFill
import io.legato.kazusa.utils.getPrefString import io.legato.kazusa.utils.getPrefString
import io.legato.kazusa.utils.hideSoftInput import io.legato.kazusa.utils.hideSoftInput
import io.legato.kazusa.utils.observeEvent import io.legato.kazusa.utils.observeEvent
import io.legato.kazusa.utils.setNavigationBarColorAuto
import io.legato.kazusa.utils.themeColor
import io.legato.kazusa.utils.toastOnUi import io.legato.kazusa.utils.toastOnUi
import io.legato.kazusa.utils.windowSize import io.legato.kazusa.utils.windowSize
@@ -69,7 +72,9 @@ abstract class BaseActivity<VB : ViewBinding>(
window.decorView.disableAutoFill() window.decorView.disableAutoFill()
AppContextWrapper.applyLocaleAndFont(this) AppContextWrapper.applyLocaleAndFont(this)
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
enableEdgeToEdge() enableEdgeToEdge()
window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurface))
//setupSystemBar() //setupSystemBar()
setContentView(binding.root) setContentView(binding.root)
upBackgroundImage() upBackgroundImage()
@@ -152,15 +157,6 @@ abstract class BaseActivity<VB : ViewBinding>(
} }
} }
open fun upNavigationBarColor() {
// if (AppConfig.immNavigationBar) {
// setNavigationBarColorAuto(ThemeStore.navigationBarColor(this))
// } else {
// val nbColor = ColorUtils.darkenColor(ThemeStore.navigationBarColor(this))
// setNavigationBarColorAuto(nbColor)
// }
}
open fun observeLiveBus() { open fun observeLiveBus() {
observeEvent<String>(EventBus.RECREATE) { observeEvent<String>(EventBus.RECREATE) {
recreate() recreate()
@@ -12,6 +12,8 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.legato.kazusa.constant.AppLog import io.legato.kazusa.constant.AppLog
import io.legato.kazusa.help.coroutine.Coroutine import io.legato.kazusa.help.coroutine.Coroutine
import io.legato.kazusa.utils.setNavigationBarColorAuto
import io.legato.kazusa.utils.themeColor
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
@@ -28,6 +30,7 @@ abstract class BaseBottomSheetDialogFragment(
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
dialog?.window?.setNavigationBarColorAuto(requireContext().themeColor(com.google.android.material.R.attr.colorSurfaceContainer))
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
val screenHeight = resources.displayMetrics.heightPixels val screenHeight = resources.displayMetrics.heightPixels
(dialog as? BottomSheetDialog)?.behavior?.apply { (dialog as? BottomSheetDialog)?.behavior?.apply {
@@ -38,7 +41,6 @@ abstract class BaseBottomSheetDialogFragment(
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
onFragmentCreated(view, savedInstanceState) onFragmentCreated(view, savedInstanceState)
observeLiveBus() observeLiveBus()
} }
@@ -1,6 +1,11 @@
package io.legato.kazusa.data.dao package io.legato.kazusa.data.dao
import androidx.room.* import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import io.legato.kazusa.data.entities.ReadRecord import io.legato.kazusa.data.entities.ReadRecord
import io.legato.kazusa.data.entities.ReadRecordShow import io.legato.kazusa.data.entities.ReadRecordShow
@@ -38,6 +43,7 @@ interface ReadRecordDao {
@Query("select readTime from readRecord where deviceId = :androidId and bookName = :bookName") @Query("select readTime from readRecord where deviceId = :androidId and bookName = :bookName")
fun getReadTime(androidId: String, bookName: String): Long? fun getReadTime(androidId: String, bookName: String): Long?
@Insert(onConflict = OnConflictStrategy.REPLACE) @Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(vararg readRecord: ReadRecord) fun insert(vararg readRecord: ReadRecord)
@@ -18,6 +18,7 @@ import io.legato.kazusa.databinding.ItemReadRecordBinding
import io.legato.kazusa.help.config.AppConfig import io.legato.kazusa.help.config.AppConfig
import io.legato.kazusa.help.config.LocalConfig import io.legato.kazusa.help.config.LocalConfig
import io.legato.kazusa.lib.dialogs.alert import io.legato.kazusa.lib.dialogs.alert
import io.legato.kazusa.model.BookCover
//import io.legado.app.lib.theme.primaryTextColor //import io.legado.app.lib.theme.primaryTextColor
import io.legato.kazusa.ui.book.search.SearchActivity import io.legato.kazusa.ui.book.search.SearchActivity
import io.legato.kazusa.utils.applyNavigationBarPadding import io.legato.kazusa.utils.applyNavigationBarPadding
@@ -157,7 +158,7 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
inner class RecordAdapter(context: Context) : inner class RecordAdapter(context: Context) :
RecyclerAdapter<ReadRecordShow, ItemReadRecordBinding>(context) { RecyclerAdapter<ReadRecordShow, ItemReadRecordBinding>(context) {
private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) private val dateFormat = SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault())
override fun getViewBinding(parent: ViewGroup): ItemReadRecordBinding { override fun getViewBinding(parent: ViewGroup): ItemReadRecordBinding {
return ItemReadRecordBinding.inflate(inflater, parent, false) return ItemReadRecordBinding.inflate(inflater, parent, false)
@@ -175,7 +176,17 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
if (item.lastRead > 0) { if (item.lastRead > 0) {
tvLastReadTime.text = dateFormat.format(item.lastRead) tvLastReadTime.text = dateFormat.format(item.lastRead)
} else { } else {
tvLastReadTime.text = "" tvLastReadTime.text = "时间未知"
}
lifecycleScope.launch {
val book = withContext(IO) {
appDb.bookDao.findByName(item.bookName).firstOrNull()
}
if (book != null) {
BookCover.load(root.context, book.getDisplayCover(), false, book.origin)
.into(ivCover)
}
} }
} }
} }
@@ -38,7 +38,6 @@ import io.legato.kazusa.ui.about.AppLogDialog
import io.legato.kazusa.ui.file.HandleFileContract import io.legato.kazusa.ui.file.HandleFileContract
import io.legato.kazusa.utils.ACache import io.legato.kazusa.utils.ACache
import io.legato.kazusa.utils.FileDoc import io.legato.kazusa.utils.FileDoc
import io.legato.kazusa.utils.applyNavigationBarPadding
import io.legato.kazusa.utils.applyOpenTint import io.legato.kazusa.utils.applyOpenTint
import io.legato.kazusa.utils.applyTint import io.legato.kazusa.utils.applyTint
import io.legato.kazusa.utils.checkWrite import io.legato.kazusa.utils.checkWrite
@@ -233,7 +232,6 @@ class CacheActivity : VMBaseActivity<ActivityCacheBookBinding, CacheViewModel>()
private fun initRecyclerView() { private fun initRecyclerView() {
binding.recyclerView.layoutManager = layoutManager binding.recyclerView.layoutManager = layoutManager
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.recyclerView.applyNavigationBarPadding()
} }
private fun initBookData() { private fun initBookData() {
@@ -345,6 +343,11 @@ class CacheActivity : VMBaseActivity<ActivityCacheBookBinding, CacheViewModel>()
} }
} }
override fun deleteDownload(book: Book) {
viewModel.clearCacheForBook(book)
notifyItemChanged(book.bookUrl)
}
/** /**
* 配置自定义导出对话框 * 配置自定义导出对话框
* *
@@ -1,6 +1,8 @@
package io.legato.kazusa.ui.book.cache package io.legato.kazusa.ui.book.cache
import android.content.Context import android.content.Context
import android.os.Handler
import android.os.Looper
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
@@ -47,8 +49,10 @@ class CacheAdapter(context: Context, private val callBack: CallBack) :
if (payloads.isEmpty()) { if (payloads.isEmpty()) {
tvName.text = item.name tvName.text = item.name
tvAuthor.text = context.getString(R.string.author_show, item.getRealAuthor()) tvAuthor.text = context.getString(R.string.author_show, item.getRealAuthor())
if (item.isLocal) { if (item.isLocal) {
tvDownload.setText(R.string.local_book) tvDownload.setText(R.string.local_book)
progressDownload.gone()
} else { } else {
val cs = callBack.cacheChapters[item.bookUrl] val cs = callBack.cacheChapters[item.bookUrl]
if (cs == null) { if (cs == null) {
@@ -67,8 +71,22 @@ class CacheAdapter(context: Context, private val callBack: CallBack) :
tvDownload.setText(R.string.local_book) tvDownload.setText(R.string.local_book)
} else { } else {
val cacheSize = callBack.cacheChapters[item.bookUrl]?.size ?: 0 val cacheSize = callBack.cacheChapters[item.bookUrl]?.size ?: 0
val cacheTask = CacheBook.cacheBookMap[item.bookUrl]
tvDownload.text = tvDownload.text =
context.getString(R.string.download_count, cacheSize, item.totalChapterNum) context.getString(R.string.download_count, cacheSize, item.totalChapterNum)
if (cacheTask != null && !cacheTask.isStop()) {
val progress = if (item.totalChapterNum > 0) {
(cacheSize * 100 / item.totalChapterNum)
} else {
0
}
tvMsg.gone()
progressDownload.progress = progress
progressDownload.visible()
} else {
progressDownload.gone()
}
} }
} }
upDownloadIv(ivDownload, item) upDownloadIv(ivDownload, item)
@@ -94,6 +112,23 @@ class CacheAdapter(context: Context, private val callBack: CallBack) :
tvExport.setOnClickListener { tvExport.setOnClickListener {
callBack.export(holder.layoutPosition) callBack.export(holder.layoutPosition)
} }
ivDelete.setOnClickListener {
getItem(holder.layoutPosition)?.let { book ->
CacheBook.cacheBookMap[book.bookUrl]?.let {
if (!it.isStop()) {
CacheBook.remove(context, book.bookUrl)
Handler(Looper.getMainLooper()).postDelayed({
callBack.deleteDownload(book)
}, 500)
} else {
callBack.deleteDownload(book)
}
} ?: run {
callBack.deleteDownload(book)
}
}
}
} }
} }
@@ -138,5 +173,7 @@ class CacheAdapter(context: Context, private val callBack: CallBack) :
fun export(position: Int) fun export(position: Int)
fun exportProgress(bookUrl: String): Int? fun exportProgress(bookUrl: String): Int?
fun exportMsg(bookUrl: String): String? fun exportMsg(bookUrl: String): String?
fun deleteDownload(book: Book)
} }
} }
@@ -10,7 +10,6 @@ import io.legato.kazusa.help.book.isLocal
import io.legato.kazusa.help.coroutine.Coroutine import io.legato.kazusa.help.coroutine.Coroutine
import io.legato.kazusa.utils.sendValue import io.legato.kazusa.utils.sendValue
import kotlinx.coroutines.ensureActive import kotlinx.coroutines.ensureActive
import kotlin.collections.set
class CacheViewModel(application: Application) : BaseViewModel(application) { class CacheViewModel(application: Application) : BaseViewModel(application) {
@@ -43,4 +42,10 @@ class CacheViewModel(application: Application) : BaseViewModel(application) {
} }
} }
fun clearCacheForBook(book: Book) {
BookHelp.clearCache(book)
cacheChapters[book.bookUrl] = hashSetOf()
upAdapterLiveData.sendValue(book.bookUrl)
}
} }
@@ -64,26 +64,33 @@ class GroupEditDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_book_gro
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
//binding.toolBar.setBackgroundColor(primaryColor)
sortOptions = resources.getStringArray(R.array.book_sort).toList() sortOptions = resources.getStringArray(R.array.book_sort).toList()
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
bookGroup = arguments?.getParcelable("group") bookGroup = arguments?.getParcelable("group")
bookGroup?.let {
binding.btnDelete.isEnabled = (it.groupId > 0 || it.groupId == Long.MIN_VALUE) bookGroup?.let { group ->
binding.tieGroupName.setText(it.groupName) binding.btnDelete.isEnabled = (group.groupId > 0 || group.groupId == Long.MIN_VALUE)
if (bookGroup?.cover != null) binding.tieGroupName.setText(group.groupName)
binding.ivCover.load(it.cover) if (group.cover != null) {
binding.cbEnableRefresh.isChecked = it.enableRefresh binding.ivCover.load(group.cover)
if (it.bookSort in sortOptions.indices) {
selectedSortIndex = it.bookSort
binding.chipSortMenu.text = sortOptions[selectedSortIndex]
} }
} ?: let { binding.cbEnableRefresh.isChecked = group.enableRefresh
selectedSortIndex = if (group.bookSort in sortOptions.indices) {
group.bookSort
} else {
0
}
binding.chipSortMenu.text = sortOptions[selectedSortIndex]
} ?: run {
binding.btnDelete.gone() binding.btnDelete.gone()
binding.ivCover.load() binding.ivCover.load()
selectedSortIndex = 0
binding.chipSortMenu.text = sortOptions[selectedSortIndex]
} }
binding.run { binding.run {
chipSortMenu.setOnClickListener { chip -> chipSortMenu.setOnClickListener { chip ->
PopupMenu(requireContext(), chip).apply { PopupMenu(requireContext(), chip).apply {
@@ -2,11 +2,8 @@ package io.legato.kazusa.ui.book.info
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.graphics.Color
import android.graphics.RenderEffect import android.graphics.RenderEffect
import android.graphics.Shader import android.graphics.Shader
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
@@ -18,7 +15,6 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.palette.graphics.Palette
import io.legato.kazusa.R import io.legato.kazusa.R
import io.legato.kazusa.base.VMBaseActivity import io.legato.kazusa.base.VMBaseActivity
import io.legato.kazusa.constant.BookType import io.legato.kazusa.constant.BookType
@@ -64,6 +60,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.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
import io.legato.kazusa.utils.longToastOnUi import io.legato.kazusa.utils.longToastOnUi
@@ -75,7 +72,6 @@ import io.legato.kazusa.utils.startActivity
import io.legato.kazusa.utils.toastOnUi import io.legato.kazusa.utils.toastOnUi
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
import io.legato.kazusa.utils.visible import io.legato.kazusa.utils.visible
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@@ -158,7 +154,7 @@ class BookInfoActivity :
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setSupportActionBar(binding.topBar) setSupportActionBar(binding.topBar)
binding.llRead?.applyNavigationBarMargin()
// binding.refreshLayout?.setColorSchemeColors(accentColor) // binding.refreshLayout?.setColorSchemeColors(accentColor)
// binding.llInfo.setBackgroundColor(backgroundColor) // binding.llInfo.setBackgroundColor(backgroundColor)
// binding.flAction.setBackgroundColor(bottomBackground) // binding.flAction.setBackgroundColor(bottomBackground)
@@ -786,16 +782,4 @@ class BookInfoActivity :
} }
} }
// 扩展函数:从Drawable中提取主色调
suspend fun Drawable.extractDominantColor(): Int = withContext(Dispatchers.Default) {
// 将Drawable转换为Bitmap
val bitmap = (this@extractDominantColor as? BitmapDrawable)?.bitmap ?: return@withContext Color.TRANSPARENT
// 生成Palette
val palette = Palette.from(bitmap).generate()
// 返回主色调,若未找到则使用默认值
palette.getDominantColor(Color.WHITE)
}
} }
@@ -44,6 +44,7 @@ import io.legato.kazusa.utils.setLightStatusBar
import io.legato.kazusa.utils.setNavigationBarColorAuto import io.legato.kazusa.utils.setNavigationBarColorAuto
import io.legato.kazusa.utils.setOnApplyWindowInsetsListenerCompat import io.legato.kazusa.utils.setOnApplyWindowInsetsListenerCompat
import io.legato.kazusa.utils.showDialogFragment import io.legato.kazusa.utils.showDialogFragment
import io.legato.kazusa.utils.themeColor
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
import java.time.LocalDate import java.time.LocalDate
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
@@ -211,14 +212,14 @@ abstract class BaseReadBookActivity :
window.decorView.systemUiVisibility = flag window.decorView.systemUiVisibility = flag
} }
override fun upNavigationBarColor() { fun upNavigationBarColor() {
upNavigationBar() upNavigationBar()
when { when {
binding.readMenu.isVisible -> super.upNavigationBarColor() binding.readMenu.isVisible -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurfaceContainer))
binding.searchMenu.bottomMenuVisible -> super.upNavigationBarColor() binding.searchMenu.bottomMenuVisible -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurface))
bottomDialog > 0 -> super.upNavigationBarColor() bottomDialog > 0 -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurface))
//!AppConfig.immNavigationBar -> super.upNavigationBarColor() //!AppConfig.immNavigationBar -> super.upNavigationBarColor()
else -> setNavigationBarColorAuto(ReadBookConfig.bgMeanColor) else -> window.setNavigationBarColorAuto(ReadBookConfig.bgMeanColor)
} }
} }
@@ -1,25 +1,21 @@
package io.legato.kazusa.ui.book.read.config package io.legato.kazusa.ui.book.read.config
//import io.legado.app.lib.theme.bottomBackground
//import io.legado.app.lib.theme.primaryColor
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.DialogInterface import android.content.DialogInterface
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewConfiguration import android.view.ViewConfiguration
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import io.legato.kazusa.R import io.legato.kazusa.R
import io.legato.kazusa.base.BasePrefDialogFragment import io.legato.kazusa.base.BaseBottomSheetDialogFragment
import io.legato.kazusa.constant.EventBus import io.legato.kazusa.constant.EventBus
import io.legato.kazusa.constant.PreferKey import io.legato.kazusa.constant.PreferKey
import io.legato.kazusa.help.config.AppConfig import io.legato.kazusa.help.config.AppConfig
import io.legato.kazusa.help.config.ReadBookConfig import io.legato.kazusa.help.config.ReadBookConfig
import io.legato.kazusa.lib.prefs.fragment.PreferenceFragment
//import io.legado.app.lib.theme.bottomBackground
//import io.legado.app.lib.theme.primaryColor
import io.legato.kazusa.model.ReadBook import io.legato.kazusa.model.ReadBook
import io.legato.kazusa.ui.book.read.ReadBookActivity import io.legato.kazusa.ui.book.read.ReadBookActivity
import io.legato.kazusa.ui.book.read.page.provider.ChapterProvider import io.legato.kazusa.ui.book.read.page.provider.ChapterProvider
@@ -29,31 +25,23 @@ import io.legato.kazusa.utils.getPrefBoolean
import io.legato.kazusa.utils.postEvent import io.legato.kazusa.utils.postEvent
import io.legato.kazusa.utils.removePref import io.legato.kazusa.utils.removePref
class MoreConfigDialog : BasePrefDialogFragment() { class MoreConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_more_config) {
private val readPreferTag = "readPreferenceFragment" private val readPreferTag = "readPreferenceFragment"
override fun onCreateView( override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
inflater: LayoutInflater, (activity as? ReadBookActivity)?.bottomDialog++
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
(activity as ReadBookActivity).bottomDialog++
val view = LinearLayout(context)
//view.setBackgroundColor(requireContext().bottomBackground)
view.id = R.id.tag1
container?.addView(view)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
var preferenceFragment = childFragmentManager.findFragmentByTag(readPreferTag) var preferenceFragment = childFragmentManager.findFragmentByTag(readPreferTag)
if (preferenceFragment == null) preferenceFragment = ReadPreferenceFragment() if (preferenceFragment == null) preferenceFragment = ReadPreferenceFragment()
childFragmentManager.beginTransaction() childFragmentManager.beginTransaction()
.replace(view.id, preferenceFragment, readPreferTag) .replace(R.id.containerPreferences, preferenceFragment, readPreferTag)
.commit() .commit()
} }
override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog)
(activity as ReadBookActivity).bottomDialog--
}
class ReadPreferenceFragment : PreferenceFragmentCompat(), class ReadPreferenceFragment : PreferenceFragmentCompat(),
SharedPreferences.OnSharedPreferenceChangeListener { SharedPreferences.OnSharedPreferenceChangeListener {
@@ -69,11 +57,6 @@ class MoreConfigDialog : BasePrefDialogFragment() {
} }
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//listView.setEdgeEffectColor(primaryColor)
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
preferenceManager preferenceManager
@@ -15,17 +15,6 @@ class PaddingConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_p
private val binding by viewBinding(DialogReadPaddingBinding::bind) private val binding by viewBinding(DialogReadPaddingBinding::bind)
override fun onStart() {
super.onStart()
// dialog?.window?.let {
// it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
// val attr = it.attributes
// attr.dimAmount = 0.0f
// it.attributes = attr
// }
// setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT)
}
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
initData() initData()
initView() initView()
@@ -22,9 +22,9 @@ import io.legato.kazusa.model.ReadBook
import io.legato.kazusa.ui.book.read.ReadBookActivity import io.legato.kazusa.ui.book.read.ReadBookActivity
import io.legato.kazusa.ui.font.FontSelectDialog import io.legato.kazusa.ui.font.FontSelectDialog
import io.legato.kazusa.utils.ChineseUtils import io.legato.kazusa.utils.ChineseUtils
import io.legato.kazusa.utils.dpToPx
import io.legato.kazusa.utils.postEvent import io.legato.kazusa.utils.postEvent
import io.legato.kazusa.utils.showDialogFragment import io.legato.kazusa.utils.showDialogFragment
import io.legato.kazusa.utils.themeColor
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_style), class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_style),
@@ -48,13 +48,6 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
} }
private fun initView() = binding.run { private fun initView() = binding.run {
//val bg = requireContext().bottomBackground
//val isLight = ColorUtils.isColorLight(bg)
//val textColor = requireContext().getPrimaryTextColor(isLight)
// rootView.setBackgroundColor(bg)
// tvPageAnim.setTextColor(textColor)
// tvBgTs.setTextColor(textColor)
// tvShareLayout.setTextColor(textColor)
if (AppConfig.isNightTheme) { if (AppConfig.isNightTheme) {
tvDayNight.setIconResource(R.drawable.ic_daytime) tvDayNight.setIconResource(R.drawable.ic_daytime)
} else { } else {
@@ -72,10 +65,6 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
rvStyle.adapter = styleAdapter rvStyle.adapter = styleAdapter
styleAdapter.addFooterView { styleAdapter.addFooterView {
ItemReadStyleBinding.inflate(layoutInflater, it, false).apply { ItemReadStyleBinding.inflate(layoutInflater, it, false).apply {
// ivStyle.setPadding(6.dpToPx(), 6.dpToPx(), 6.dpToPx(), 6.dpToPx())
// ivStyle.setText(null)
// ivStyle.setColorFilter(textColor)
// ivStyle.borderColor = textColor
ivStyle.setImageResource(R.drawable.ic_add) ivStyle.setImageResource(R.drawable.ic_add)
root.setOnClickListener { root.setOnClickListener {
ReadBookConfig.configList.add(ReadBookConfig.Config()) ReadBookConfig.configList.add(ReadBookConfig.Config())
@@ -235,11 +224,15 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
ivStyle.setImageDrawable(item.curBgDrawable(100, 150)) ivStyle.setImageDrawable(item.curBgDrawable(100, 150))
if (ReadBookConfig.styleSelect == holder.layoutPosition) { if (ReadBookConfig.styleSelect == holder.layoutPosition) {
llStyle.gravity = Gravity.TOP llStyle.gravity = Gravity.TOP
cdStyle.strokeColor = cdStyle.cardElevation = 1f.dpToPx()
context.themeColor(com.google.android.material.R.attr.colorTertiary) cdStyle.radius = 16f.dpToPx()
rvStyle.setCardBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorTertiary)) cdStyle.strokeWidth = 2
cdStyle.strokeColor = item.curTextColor()
//tvStyle.setTextBold(true) //tvStyle.setTextBold(true)
} else { } else {
cdStyle.cardElevation = 2f.dpToPx()
cdStyle.radius = 32f.dpToPx()
cdStyle.strokeWidth = 0
cdStyle.strokeColor = item.curTextColor() cdStyle.strokeColor = item.curTextColor()
//tvStyle.setTextBold(false) //tvStyle.setTextBold(false)
} }
@@ -13,8 +13,13 @@ class HistoryKeyAdapter(activity: SearchActivity, val callBack: CallBack) :
private val explosionField = ExplosionField.attach2Window(activity) private val explosionField = ExplosionField.attach2Window(activity)
init {
setHasStableIds(true)
}
override fun getItemId(position: Int): Long { override fun getItemId(position: Int): Long {
return position.toLong() return getItem(position)!!.lastUseTime
} }
override fun getViewBinding(parent: ViewGroup): ItemSearchHistoryBinding { override fun getViewBinding(parent: ViewGroup): ItemSearchHistoryBinding {
@@ -33,6 +38,7 @@ class HistoryKeyAdapter(activity: SearchActivity, val callBack: CallBack) :
} }
override fun registerListener(holder: ItemViewHolder, binding: ItemSearchHistoryBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemSearchHistoryBinding) {
holder.itemView.apply { holder.itemView.apply {
setOnClickListener { setOnClickListener {
getItemByLayoutPosition(holder.layoutPosition)?.let { getItemByLayoutPosition(holder.layoutPosition)?.let {
@@ -12,9 +12,11 @@ import androidx.core.os.bundleOf
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.flexbox.FlexboxLayoutManager import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.search.SearchBar import com.google.android.material.search.SearchBar
import com.google.android.material.search.SearchView import com.google.android.material.search.SearchView
import io.legato.kazusa.R import io.legato.kazusa.R
@@ -30,7 +32,6 @@ import io.legato.kazusa.ui.about.AppLogDialog
import io.legato.kazusa.ui.book.info.BookInfoActivity import io.legato.kazusa.ui.book.info.BookInfoActivity
import io.legato.kazusa.ui.book.source.manage.BookSourceActivity import io.legato.kazusa.ui.book.source.manage.BookSourceActivity
import io.legato.kazusa.utils.applyNavigationBarMargin import io.legato.kazusa.utils.applyNavigationBarMargin
import io.legato.kazusa.utils.applyNavigationBarPadding
import io.legato.kazusa.utils.applyStatusBarPadding import io.legato.kazusa.utils.applyStatusBarPadding
import io.legato.kazusa.utils.getPrefBoolean import io.legato.kazusa.utils.getPrefBoolean
import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.gone
@@ -84,6 +85,8 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setSupportActionBar(binding.searchBar) setSupportActionBar(binding.searchBar)
initRecyclerView() initRecyclerView()
initMaterialSearch() initMaterialSearch()
@@ -177,6 +180,26 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
binding.appBar.applyStatusBarPadding() binding.appBar.applyStatusBarPadding()
binding.appBar.post {
val maxPaddingTop = binding.appBar.paddingTop
binding.appBar.addOnOffsetChangedListener(
AppBarLayout.OnOffsetChangedListener { appBarLayout, verticalOffset ->
val totalScrollRange = appBarLayout.totalScrollRange
val scrollRatio =
(1f - (abs(verticalOffset).toFloat() / totalScrollRange)).coerceIn(0f, 1f)
appBarLayout.alpha = scrollRatio
appBarLayout.setPadding(
appBarLayout.paddingLeft,
(maxPaddingTop * scrollRatio).toInt(),
appBarLayout.paddingRight,
appBarLayout.paddingBottom
)
}
)
}
searchBar.setOnMenuItemClickListener { item -> searchBar.setOnMenuItemClickListener { item ->
onCompatOptionsItemSelected(item) onCompatOptionsItemSelected(item)
} }
@@ -215,7 +238,6 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
searchView.addTransitionListener { _, _, newState -> searchView.addTransitionListener { _, _, newState ->
if (newState == SearchView.TransitionState.HIDDEN) { if (newState == SearchView.TransitionState.HIDDEN) {
// 当 SearchView 关闭时,将搜索文本设置回 SearchBar
searchBar.setText(searchView.text) searchBar.setText(searchView.text)
} }
} }
@@ -232,14 +254,16 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
private fun initRecyclerView() { private fun initRecyclerView() {
binding.rvBookshelfSearch.layoutManager = FlexboxLayoutManager(this) binding.rvBookshelfSearch.layoutManager = FlexboxLayoutManager(this)
binding.rvBookshelfSearch.adapter = bookAdapter binding.rvBookshelfSearch.adapter = bookAdapter
binding.rvBookshelfSearch.applyNavigationBarMargin() binding.rvBookshelfSearch.itemAnimator = DefaultItemAnimator()
binding.rvHistoryKey.layoutManager = FlexboxLayoutManager(this) binding.rvHistoryKey.layoutManager = FlexboxLayoutManager(this)
binding.rvHistoryKey.adapter = historyKeyAdapter binding.rvHistoryKey.adapter = historyKeyAdapter
binding.rvHistoryKey.applyNavigationBarMargin() binding.rvHistoryKey.itemAnimator = DefaultItemAnimator()
binding.recyclerView.layoutManager = LinearLayoutManager(this) binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.recyclerView.itemAnimator = null binding.recyclerView.itemAnimator = DefaultItemAnimator()
binding.recyclerView.applyNavigationBarPadding()
adapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { adapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
super.onItemRangeInserted(positionStart, itemCount) super.onItemRangeInserted(positionStart, itemCount)
@@ -279,6 +303,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
} }
private fun initOtherView() { private fun initOtherView() {
binding.llStop.applyNavigationBarMargin()
binding.fbStartStop.setOnClickListener { binding.fbStartStop.setOnClickListener {
if (viewModel.isSearchLiveData.value == true) { if (viewModel.isSearchLiveData.value == true) {
isManualStopSearch = true isManualStopSearch = true
@@ -1,5 +1,6 @@
package io.legato.kazusa.ui.book.search package io.legato.kazusa.ui.book.search
//import io.legado.app.lib.theme.primaryColor
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
@@ -8,7 +9,7 @@ import androidx.appcompat.widget.SearchView
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import io.legato.kazusa.R import io.legato.kazusa.R
import io.legato.kazusa.base.BaseDialogFragment import io.legato.kazusa.base.BaseBottomSheetDialogFragment
import io.legato.kazusa.base.adapter.ItemViewHolder import io.legato.kazusa.base.adapter.ItemViewHolder
import io.legato.kazusa.constant.AppLog import io.legato.kazusa.constant.AppLog
import io.legato.kazusa.data.AppDatabase import io.legato.kazusa.data.AppDatabase
@@ -17,10 +18,7 @@ import io.legato.kazusa.data.entities.BookSourcePart
import io.legato.kazusa.databinding.DialogSearchScopeBinding import io.legato.kazusa.databinding.DialogSearchScopeBinding
import io.legato.kazusa.databinding.ItemCheckBoxBinding import io.legato.kazusa.databinding.ItemCheckBoxBinding
import io.legato.kazusa.databinding.ItemRadioButtonBinding import io.legato.kazusa.databinding.ItemRadioButtonBinding
//import io.legado.app.lib.theme.primaryColor
import io.legato.kazusa.utils.applyTint
import io.legato.kazusa.utils.flowWithLifecycleAndDatabaseChange import io.legato.kazusa.utils.flowWithLifecycleAndDatabaseChange
import io.legato.kazusa.utils.setLayout
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@@ -31,7 +29,7 @@ import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) { class SearchScopeDialog : BaseBottomSheetDialogFragment(R.layout.dialog_search_scope) {
private val binding by viewBinding(DialogSearchScopeBinding::bind) private val binding by viewBinding(DialogSearchScopeBinding::bind)
private var sourceFlowJob: Job? = null private var sourceFlowJob: Job? = null
@@ -44,13 +42,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
RecyclerAdapter() RecyclerAdapter()
} }
override fun onStart() {
super.onStart()
setLayout(0.9f, 0.8f)
}
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
//binding.toolBar.setBackgroundColor(primaryColor)
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
initMenu() initMenu()
initSearchView() initSearchView()
@@ -60,7 +52,6 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
private fun initMenu() { private fun initMenu() {
binding.toolBar.inflateMenu(R.menu.book_search_scope) binding.toolBar.inflateMenu(R.menu.book_search_scope)
//binding.toolBar.menu.applyTint(requireContext())
} }
private fun initSearchView() { private fun initSearchView() {
@@ -80,17 +71,24 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
} }
private fun initOtherView() { private fun initOtherView() {
binding.rgScope.setOnCheckedChangeListener { _, checkedId ->
binding.toolBar.menu.findItem(R.id.menu_screen)?.isVisible = checkedId == R.id.rb_source binding.rgScope.addOnButtonCheckedListener { group, checkedId, isChecked ->
upData() if (isChecked) {
binding.toolBar.menu.findItem(R.id.menu_screen)?.isVisible =
checkedId == R.id.rb_source
upData()
}
} }
binding.tvCancel.setOnClickListener { binding.tvCancel.setOnClickListener {
dismiss() dismiss()
} }
binding.tvAllSource.setOnClickListener { binding.tvAllSource.setOnClickListener {
callback.onSearchScopeOk(SearchScope("")) callback.onSearchScopeOk(SearchScope(""))
dismiss() dismiss()
} }
binding.tvOk.setOnClickListener { binding.tvOk.setOnClickListener {
if (binding.rbGroup.isChecked) { if (binding.rbGroup.isChecked) {
callback.onSearchScopeOk(SearchScope(adapter.selectGroups)) callback.onSearchScopeOk(SearchScope(adapter.selectGroups))
@@ -104,6 +102,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
} }
dismiss() dismiss()
} }
} }
private fun initData() { private fun initData() {
@@ -1,16 +1,15 @@
package io.legato.kazusa.ui.login package io.legato.kazusa.ui.login
//import io.legado.app.lib.theme.primaryColor
import android.content.DialogInterface import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
import android.text.InputType import android.text.InputType
import android.view.View import android.view.View
import android.view.ViewGroup
import androidx.core.view.setPadding
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.script.rhino.runScriptWithContext import com.script.rhino.runScriptWithContext
import io.legato.kazusa.R import io.legato.kazusa.R
import io.legato.kazusa.base.BaseDialogFragment import io.legato.kazusa.base.BaseBottomSheetDialogFragment
import io.legato.kazusa.constant.AppLog import io.legato.kazusa.constant.AppLog
import io.legato.kazusa.data.entities.BaseSource import io.legato.kazusa.data.entities.BaseSource
import io.legato.kazusa.data.entities.rule.RowUi import io.legato.kazusa.data.entities.rule.RowUi
@@ -18,16 +17,13 @@ import io.legato.kazusa.databinding.DialogLoginBinding
import io.legato.kazusa.databinding.ItemFilletTextBinding import io.legato.kazusa.databinding.ItemFilletTextBinding
import io.legato.kazusa.databinding.ItemSourceEditBinding import io.legato.kazusa.databinding.ItemSourceEditBinding
import io.legato.kazusa.lib.dialogs.alert import io.legato.kazusa.lib.dialogs.alert
//import io.legado.app.lib.theme.primaryColor
import io.legato.kazusa.ui.about.AppLogDialog import io.legato.kazusa.ui.about.AppLogDialog
import io.legato.kazusa.utils.GSON import io.legato.kazusa.utils.GSON
import io.legato.kazusa.utils.applyTint import io.legato.kazusa.utils.applyTint
import io.legato.kazusa.utils.dpToPx
import io.legato.kazusa.utils.isAbsUrl import io.legato.kazusa.utils.isAbsUrl
import io.legato.kazusa.utils.openUrl import io.legato.kazusa.utils.openUrl
import io.legato.kazusa.utils.printOnDebug import io.legato.kazusa.utils.printOnDebug
import io.legato.kazusa.utils.sendToClip import io.legato.kazusa.utils.sendToClip
import io.legato.kazusa.utils.setLayout
import io.legato.kazusa.utils.showDialogFragment import io.legato.kazusa.utils.showDialogFragment
import io.legato.kazusa.utils.toastOnUi import io.legato.kazusa.utils.toastOnUi
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
@@ -40,16 +36,11 @@ import splitties.init.appCtx
import splitties.views.onClick import splitties.views.onClick
class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { class SourceLoginDialog : BaseBottomSheetDialogFragment(R.layout.dialog_login) {
private val binding by viewBinding(DialogLoginBinding::bind) private val binding by viewBinding(DialogLoginBinding::bind)
private val viewModel by activityViewModels<SourceLoginViewModel>() private val viewModel by activityViewModels<SourceLoginViewModel>()
override fun onStart() {
super.onStart()
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
}
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
val source = viewModel.source ?: return val source = viewModel.source ?: return
//binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
@@ -91,7 +82,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
rowUi.style().apply(it.root) rowUi.style().apply(it.root)
it.root.id = index + 1000 it.root.id = index + 1000
it.textView.text = rowUi.name it.textView.text = rowUi.name
it.textView.setPadding(16.dpToPx())
it.root.onClick { it.root.onClick {
handleButtonClick(source, rowUi, loginUi) handleButtonClick(source, rowUi, loginUi)
} }
@@ -48,8 +48,10 @@ import io.legato.kazusa.utils.gone
import io.legato.kazusa.utils.hideSoftInput import io.legato.kazusa.utils.hideSoftInput
import io.legato.kazusa.utils.isCreated import io.legato.kazusa.utils.isCreated
import io.legato.kazusa.utils.observeEvent import io.legato.kazusa.utils.observeEvent
import io.legato.kazusa.utils.setNavigationBarColorAuto
import io.legato.kazusa.utils.shouldHideSoftInput import io.legato.kazusa.utils.shouldHideSoftInput
import io.legato.kazusa.utils.showDialogFragment import io.legato.kazusa.utils.showDialogFragment
import io.legato.kazusa.utils.themeColor
import io.legato.kazusa.utils.toastOnUi import io.legato.kazusa.utils.toastOnUi
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
import io.legato.kazusa.utils.visible import io.legato.kazusa.utils.visible
@@ -203,23 +205,16 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
} }
private fun initView() = binding.run { private fun initView() = binding.run {
//viewPagerMain.setEdgeEffectColor(primaryColor)
viewPagerMain.offscreenPageLimit = 3 viewPagerMain.offscreenPageLimit = 3
viewPagerMain.adapter = adapter viewPagerMain.adapter = adapter
viewPagerMain.addOnPageChangeListener(PageChangeCallback()) viewPagerMain.addOnPageChangeListener(PageChangeCallback())
//bottomNavigationView.elevation = elevation
getNavigationBarView().apply { getNavigationBarView().apply {
setOnItemSelectedListener { onNavigationItemSelected(it) } setOnItemSelectedListener { onNavigationItemSelected(it) }
setOnItemReselectedListener { onNavigationItemReselected(it) } setOnItemReselectedListener { onNavigationItemReselected(it) }
} }
//getNavigationBarView().applyNavigationBarPadding()
// bottomNavigationView.setOnApplyWindowInsetsListenerCompat { view, windowInsets -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurfaceContainer))
// val height = windowInsets.navigationBarHeight
// view.bottomPadding = height
// windowInsets.inset(0, 0, 0, height)
// }
} }
/** /**
@@ -1,5 +1,6 @@
package io.legato.kazusa.ui.widget.text package io.legato.kazusa.ui.widget.text
//import io.legado.app.lib.theme.accentColor
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.os.Build import android.os.Build
@@ -9,11 +10,10 @@ import android.view.MotionEvent
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.google.android.material.button.MaterialButton
import com.google.android.material.textfield.MaterialAutoCompleteTextView import com.google.android.material.textfield.MaterialAutoCompleteTextView
import io.legato.kazusa.R import io.legato.kazusa.R
//import io.legado.app.lib.theme.accentColor
import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.gone
import io.legato.kazusa.utils.visible import io.legato.kazusa.utils.visible
@@ -63,7 +63,7 @@ class AutoCompleteTextView @JvmOverloads constructor(
.inflate(R.layout.item_1line_text_and_del, parent, false) .inflate(R.layout.item_1line_text_and_del, parent, false)
val textView = view.findViewById<TextView>(R.id.text_view) val textView = view.findViewById<TextView>(R.id.text_view)
textView.text = getItem(position) textView.text = getItem(position)
val ivDelete = view.findViewById<ImageView>(R.id.iv_delete) val ivDelete = view.findViewById<MaterialButton>(R.id.iv_delete)
if (delCallBack != null) ivDelete.visible() else ivDelete.gone() if (delCallBack != null) ivDelete.visible() else ivDelete.gone()
ivDelete.setOnClickListener { ivDelete.setOnClickListener {
getItem(position)?.let { getItem(position)?.let {
@@ -9,6 +9,7 @@ import android.util.DisplayMetrics
import android.view.Gravity import android.view.Gravity
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.Window
import android.view.WindowInsets import android.view.WindowInsets
import android.view.WindowInsetsController import android.view.WindowInsetsController
import android.view.WindowManager import android.view.WindowManager
@@ -144,11 +145,12 @@ fun Activity.setLightStatusBar(isLightBar: Boolean) {
* 设置导航栏颜色 * 设置导航栏颜色
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) { fun Window.setNavigationBarColorAuto(@ColorInt color: Int) {
val isLightBor = ColorUtils.isColorLight(color) val isLightBor = ColorUtils.isColorLight(color)
window.navigationBarColor = color navigationBarColor = color
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.insetsController?.let { insetsController?.let {
if (isLightBor) { if (isLightBor) {
it.setSystemBarsAppearance( it.setSystemBarsAppearance(
WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS, WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS,
@@ -162,9 +164,9 @@ fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) {
} }
} }
} }
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT in Build.VERSION_CODES.O..Build.VERSION_CODES.Q) {
val decorView = window.decorView
var systemUiVisibility = decorView.systemUiVisibility var systemUiVisibility = decorView.systemUiVisibility
systemUiVisibility = if (isLightBor) { systemUiVisibility = if (isLightBor) {
systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
@@ -175,6 +177,7 @@ fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) {
} }
} }
fun Activity.keepScreenOn(on: Boolean) { fun Activity.keepScreenOn(on: Boolean) {
val isScreenOn = val isScreenOn =
(window.attributes.flags and WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0 (window.attributes.flags and WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0
@@ -302,7 +302,7 @@ fun View.canScroll(direction: Int): Boolean {
return canScrollVertically(direction) || canScrollHorizontally(direction) return canScrollVertically(direction) || canScrollHorizontally(direction)
} }
private val requestLayoutBroken = Build.VERSION.SDK_INT <= Build.VERSION_CODES.M private val requestLayoutBroken = false
|| Build.VERSION.SDK_INT in Build.VERSION_CODES.O..Build.VERSION_CODES.Q || 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) {
@@ -363,7 +363,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|end" android:layout_gravity="bottom|end"
android:layout_marginEnd="16dp" android:layout_marginEnd="40dp"
android:minWidth="0dp"
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
android:text="@string/reading" android:text="@string/reading"
android:textColor="?attr/colorOnPrimary" android:textColor="?attr/colorOnPrimary"
@@ -150,7 +150,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/tv_pre" android:id="@+id/tv_pre"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clickable="true" android:clickable="true"
@@ -178,7 +178,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/tv_next" android:id="@+id/tv_next"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clickable="true" android:clickable="true"
@@ -204,7 +204,7 @@
android:id="@+id/fabSearch" android:id="@+id/fabSearch"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:contentDescription="@string/search_content" android:contentDescription="@string/search_content"
android:tooltipText="@string/search_content" android:tooltipText="@string/search_content"
app:icon="@drawable/ic_search" app:icon="@drawable/ic_search"
@@ -214,7 +214,7 @@
android:id="@+id/iv_read_aloud" android:id="@+id/iv_read_aloud"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:contentDescription="@string/read_aloud" android:contentDescription="@string/read_aloud"
android:maxHeight="24dp" android:maxHeight="24dp"
app:icon="@drawable/ic_read_aloud" app:icon="@drawable/ic_read_aloud"
@@ -225,7 +225,7 @@
android:id="@+id/iv_catalog" android:id="@+id/iv_catalog"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:contentDescription="@string/chapter_list" android:contentDescription="@string/chapter_list"
android:tooltipText="@string/chapter_list" android:tooltipText="@string/chapter_list"
android:maxHeight="24dp" android:maxHeight="24dp"
@@ -237,7 +237,7 @@
android:id="@+id/fabAutoPage" android:id="@+id/fabAutoPage"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:contentDescription="@string/auto_next_page" android:contentDescription="@string/auto_next_page"
android:tooltipText="@string/auto_next_page" android:tooltipText="@string/auto_next_page"
app:icon="@drawable/ic_auto_page" app:icon="@drawable/ic_auto_page"
@@ -248,7 +248,7 @@
android:id="@+id/iv_setting" android:id="@+id/iv_setting"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:contentDescription="@string/setting" android:contentDescription="@string/setting"
android:tooltipText="@string/setting" android:tooltipText="@string/setting"
android:maxHeight="24dp" android:maxHeight="24dp"
+21 -13
View File
@@ -338,19 +338,27 @@
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton <LinearLayout
android:id="@+id/btn_read" android:id="@+id/ll_read"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minWidth="56dp" android:layout_gravity="bottom"
android:layout_gravity="bottom|end" android:gravity="end"
android:layout_marginEnd="16dp" android:orientation="horizontal">
android:layout_marginBottom="24dp"
android:text="@string/reading" <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
android:textColor="?attr/colorOnPrimary" android:id="@+id/btn_read"
android:contentDescription="@string/reading" android:layout_width="wrap_content"
app:icon="@drawable/ic_bottom_books" android:layout_height="wrap_content"
app:backgroundTint="?attr/colorTertiary" android:layout_margin="16dp"
app:iconTint="?attr/colorOnPrimary" /> android:contentDescription="@string/reading"
android:minWidth="56dp"
android:text="@string/reading"
android:textColor="?attr/colorOnPrimary"
app:backgroundTint="?attr/colorTertiary"
app:icon="@drawable/ic_bottom_books"
app:iconTint="?attr/colorOnPrimary" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -1,80 +1,110 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.book.search.SearchActivity"> tools:context=".ui.book.search.SearchActivity">
<com.google.android.material.appbar.AppBarLayout <androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/app_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent">
android:backgroundTint="?attr/colorSurface"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.search.SearchBar <com.google.android.material.appbar.AppBarLayout
android:id="@+id/search_bar" android:id="@+id/app_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/search_book_key" android:backgroundTint="?attr/colorSurface"
app:menu="@menu/book_search" app:layout_constraintEnd_toEndOf="parent"
app:navigationIconTint="?attr/colorOnSurface" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.progressindicator.LinearProgressIndicator <com.google.android.material.search.SearchBar
android:id="@+id/refresh_progress_bar" android:id="@+id/search_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:indeterminate="true" android:hint="@string/search_book_key"
android:visibility="gone" app:layout_scrollFlags="scroll|enterAlways"
app:layout_constraintTop_toBottomOf="@id/app_bar"> app:menu="@menu/book_search"
app:navigationIcon="@drawable/ic_arrow_back"
app:navigationIconTint="?attr/colorOnSurface" />
</com.google.android.material.progressindicator.LinearProgressIndicator> <com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/refresh_progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="gone">
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.progressindicator.LinearProgressIndicator>
<LinearLayout </com.google.android.material.appbar.AppBarLayout>
android:id="@+id/tv_empty_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="16dp"
android:gravity="center"
android:orientation="vertical"
android:visibility="visible">
<TextView <LinearLayout
android:id="@+id/tv_empty_msg"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="(๑`^´๑)" android:layout_gravity="center"
android:textSize="30sp" /> android:gravity="center"
android:orientation="vertical"
android:visibility="visible">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="8dp" android:text="(๑`^´๑)"
android:text="@string/search_empty" /> android:textSize="32sp" />
</LinearLayout>
<io.legato.kazusa.ui.widget.dynamiclayout.DynamicFrameLayout <TextView
android:id="@+id/content_view" android:layout_width="wrap_content"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_height="match_parent" android:layout_margin="8dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"> android:text="@string/search_empty" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView <io.legato.kazusa.ui.widget.dynamiclayout.DynamicFrameLayout
android:id="@+id/recycler_view" android:id="@+id/content_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:clipToPadding="false" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
tools:listitem="@layout/item_search" />
</io.legato.kazusa.ui.widget.dynamiclayout.DynamicFrameLayout> <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
tools:listitem="@layout/item_search" />
</io.legato.kazusa.ui.widget.dynamiclayout.DynamicFrameLayout>
<LinearLayout
android:id="@+id/ll_stop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="end"
android:orientation="horizontal">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fb_start_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:contentDescription="@string/stop"
android:src="@drawable/ic_stop_black_24dp"
android:visibility="invisible" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<com.google.android.material.search.SearchView <com.google.android.material.search.SearchView
android:id="@+id/search_view" android:id="@+id/search_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout <LinearLayout
android:id="@+id/ll_input_help" android:id="@+id/ll_input_help"
@@ -107,7 +137,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingHorizontal="16dp" android:paddingHorizontal="16dp"
android:paddingVertical="4dp"> android:paddingTop="4dp">
<TextView <TextView
android:id="@+id/tv_history" android:id="@+id/tv_history"
@@ -125,10 +155,14 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/tv_clear_history" android:id="@+id/tv_clear_history"
style="@style/Widget.Material3Expressive.Button.IconButton.Outlined" style="@style/Widget.Material3Expressive.Button"
android:text="@string/delete_all"
app:backgroundTint="?attr/colorTertiary"
app:iconTint="?attr/colorSurface"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:icon="@drawable/ic_clear_all" app:icon="@drawable/ic_clear_all"
app:strokeColor="?attr/colorTertiary"
app:iconGravity="textStart" /> app:iconGravity="textStart" />
</LinearLayout> </LinearLayout>
@@ -141,15 +175,5 @@
</LinearLayout> </LinearLayout>
</com.google.android.material.search.SearchView> </com.google.android.material.search.SearchView>
<com.google.android.material.floatingactionbutton.FloatingActionButton </androidx.constraintlayout.widget.ConstraintLayout>
android:id="@+id/fb_start_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:contentDescription="@string/stop"
android:src="@drawable/ic_stop_black_24dp"
android:visibility="invisible"
android:layout_gravity="bottom|end" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -84,6 +84,7 @@
android:id="@+id/recycler_view" android:id="@+id/recycler_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:paddingHorizontal="16dp"
android:clipToPadding="false" android:clipToPadding="false"
tools:listitem="@layout/item_source_edit" /> tools:listitem="@layout/item_source_edit" />
+1 -1
View File
@@ -90,7 +90,7 @@
android:id="@+id/tv_retry" android:id="@+id/tv_retry"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
app:icon="@drawable/ic_refresh" app:icon="@drawable/ic_refresh"
android:layout_margin="16dp" android:layout_margin="16dp"
app:iconPadding="4dp" app:iconPadding="4dp"
@@ -16,7 +16,7 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingVertical="8dp" android:paddingTop="8dp"
android:paddingHorizontal="16dp"> android:paddingHorizontal="16dp">
<TextView <TextView
@@ -35,10 +35,12 @@
android:id="@+id/tv_reading_time" android:id="@+id/tv_reading_time"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/ChapterNameText" android:textColor="?attr/colorSecondary"
android:textSize="22sp"
android:textStyle="bold"
android:singleLine="true" android:singleLine="true"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/tv_remove" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_book_name" app:layout_constraintTop_toBottomOf="@id/tv_book_name"
tools:text="readingTime" /> tools:text="readingTime" />
@@ -46,12 +48,12 @@
android:id="@+id/tv_remove" android:id="@+id/tv_remove"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.TonalButton"
app:icon="@drawable/ic_clear_all" app:icon="@drawable/ic_clear_all"
android:text="清除所有" android:text="清除所有"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toBottomOf="@id/tv_reading_time" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
@@ -56,7 +56,7 @@
android:id="@+id/iv_search_content_top" android:id="@+id/iv_search_content_top"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:contentDescription="@string/go_to_top" android:contentDescription="@string/go_to_top"
app:icon="@drawable/ic_arrow_drop_up" app:icon="@drawable/ic_arrow_drop_up"
app:iconGravity="textStart" app:iconGravity="textStart"
@@ -67,7 +67,7 @@
android:id="@+id/iv_search_content_bottom" android:id="@+id/iv_search_content_bottom"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:contentDescription="@string/go_to_bottom" android:contentDescription="@string/go_to_bottom"
app:icon="@drawable/ic_arrow_drop_down" app:icon="@drawable/ic_arrow_drop_down"
app:iconGravity="textStart" app:iconGravity="textStart"
+4 -4
View File
@@ -62,7 +62,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_catalog" android:id="@+id/btn_catalog"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="48dp" android:layout_height="48dp"
app:icon="@drawable/ic_toc" app:icon="@drawable/ic_toc"
@@ -86,7 +86,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_main_menu" android:id="@+id/btn_main_menu"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="48dp" android:layout_height="48dp"
app:icon="@drawable/ic_menu" app:icon="@drawable/ic_menu"
@@ -112,7 +112,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_auto_page_stop" android:id="@+id/btn_auto_page_stop"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="48dp" android:layout_height="48dp"
app:icon="@drawable/ic_auto_page_stop" app:icon="@drawable/ic_auto_page_stop"
@@ -137,7 +137,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_setting" android:id="@+id/btn_setting"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="48dp" android:layout_height="48dp"
app:icon="@drawable/ic_settings" app:icon="@drawable/ic_settings"
@@ -62,7 +62,7 @@
android:id="@+id/iv_top" android:id="@+id/iv_top"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="match_parent" android:layout_height="match_parent"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:contentDescription="@string/go_to_top" android:contentDescription="@string/go_to_top"
app:icon="@drawable/ic_arrow_drop_up" app:icon="@drawable/ic_arrow_drop_up"
app:iconGravity="textStart" app:iconGravity="textStart"
@@ -73,7 +73,7 @@
android:id="@+id/iv_bottom" android:id="@+id/iv_bottom"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="match_parent" android:layout_height="match_parent"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:contentDescription="@string/go_to_bottom" android:contentDescription="@string/go_to_bottom"
app:icon="@drawable/ic_arrow_drop_down" app:icon="@drawable/ic_arrow_drop_down"
app:iconGravity="textStart" app:iconGravity="textStart"
@@ -69,18 +69,24 @@
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"> android:layout_marginBottom="8dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/sort" />
<com.google.android.material.chip.Chip <com.google.android.material.chip.Chip
android:id="@+id/chip_sort_menu" android:id="@+id/chip_sort_menu"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clickable="true" android:clickable="true"
android:text="排序方式" android:text="@string/sort_default"
app:chipIcon="@drawable/ic_arrow_drop_down" app:chipIcon="@drawable/ic_arrow_drop_down"
app:chipIconVisible="true" /> app:chipIconVisible="true" />
+4 -8
View File
@@ -4,14 +4,14 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:padding="16dp"> android:paddingHorizontal="16dp"
android:paddingVertical="8dp">
<LinearLayout <LinearLayout
android:id="@+id/vw_bg" android:id="@+id/vw_bg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:background="@drawable/shape_card_view"
android:orientation="vertical" android:orientation="vertical"
tools:ignore="UselessParent"> tools:ignore="UselessParent">
@@ -19,8 +19,6 @@
android:id="@+id/tool_bar" android:id="@+id/tool_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:elevation="5dp"
android:theme="?attr/actionBarStyle"
app:title="@string/login" app:title="@string/login"
app:displayHomeAsUp="false" app:displayHomeAsUp="false"
app:fitStatusBar="false" app:fitStatusBar="false"
@@ -35,13 +33,11 @@
android:id="@+id/flexbox" android:id="@+id/flexbox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:clipToPadding="false" android:clipToPadding="false"
android:padding="3dp"
app:dividerDrawable="@drawable/shape_space_divider"
app:flexDirection="row" app:flexDirection="row"
app:flexWrap="wrap" app:flexWrap="wrap" />
app:showDivider="middle" />
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingBottom="8dp">
<com.google.android.material.bottomsheet.BottomSheetDragHandleView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
<TextView
android:id="@+id/bottom_sheet_title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/more_setting"
android:textSize="18sp"
android:textStyle="bold" />
</LinearLayout>
<FrameLayout
android:id="@+id/containerPreferences"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
@@ -215,7 +215,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/iv_tts_speech_reduce" android:id="@+id/iv_tts_speech_reduce"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:contentDescription="@string/tts_speech_reduce" android:contentDescription="@string/tts_speech_reduce"
@@ -235,7 +235,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/iv_tts_speech_add" android:id="@+id/iv_tts_speech_add"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:contentDescription="@string/tts_speech_add" android:contentDescription="@string/tts_speech_add"
+29 -32
View File
@@ -3,55 +3,52 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:minHeight="560dp">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/tool_bar" android:id="@+id/tool_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:elevation="5dp"
android:theme="?attr/actionBarStyle"
app:displayHomeAsUp="false" app:displayHomeAsUp="false"
app:fitStatusBar="false" app:fitStatusBar="false"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:title="@string/search_scope" app:title="@string/search_scope"
app:titleTextAppearance="@style/ToolbarTitle" /> app:titleTextAppearance="@style/ToolbarTitle" />
<RadioGroup <com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/rg_scope" android:id="@+id/rg_scope"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="11dp" android:layout_marginHorizontal="16dp"
android:clickable="true"
android:focusable="true"
app:checkedButton="@id/rb_group"
app:selectionRequired="true"
app:singleSelection="true"
android:gravity="center" android:gravity="center"
android:orientation="horizontal" android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@+id/tool_bar"> app:layout_constraintTop_toBottomOf="@+id/tool_bar">
<io.legato.kazusa.lib.theme.view.ThemeRadioNoButton <com.google.android.material.button.MaterialButton
android:id="@+id/rb_group" android:id="@+id/rb_group"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="4dp" style="@style/Widget.Material3Expressive.Button"
android:layout_weight="1" android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:padding="5dp"
android:singleLine="true"
android:checked="true" android:checked="true"
android:text="@string/group" /> android:text="@string/group" />
<io.legato.kazusa.lib.theme.view.ThemeRadioNoButton <com.google.android.material.button.MaterialButton
android:id="@+id/rb_source" android:id="@+id/rb_source"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="4dp" style="@style/Widget.Material3Expressive.Button"
android:layout_weight="1" android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:padding="5dp"
android:singleLine="true" android:singleLine="true"
android:text="@string/book_source" /> android:text="@string/book_source" />
</RadioGroup> </com.google.android.material.button.MaterialButtonToggleGroup>
<io.legato.kazusa.ui.widget.recycler.scroller.FastScrollRecyclerView <io.legato.kazusa.ui.widget.recycler.scroller.FastScrollRecyclerView
android:id="@+id/recycler_view" android:id="@+id/recycler_view"
@@ -67,16 +64,17 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingLeft="10dp" android:paddingHorizontal="16dp"
android:paddingRight="10dp" android:paddingVertical="8dp"
app:layout_constraintBottom_toBottomOf="parent"> app:layout_constraintBottom_toBottomOf="parent">
<io.legato.kazusa.ui.widget.text.AccentTextView <com.google.android.material.button.MaterialButton
android:id="@+id/tv_all_source" android:id="@+id/tv_all_source"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3Expressive.Button.OutlinedButton"
android:layout_marginRight="16dp" android:layout_marginRight="16dp"
android:padding="12dp" android:minWidth="0dp"
android:text="@string/all_source" android:text="@string/all_source"
tools:ignore="RtlHardcoded" /> tools:ignore="RtlHardcoded" />
@@ -85,24 +83,23 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" /> android:layout_weight="1" />
<TextView <com.google.android.material.button.MaterialButton
android:id="@+id/tv_cancel" android:id="@+id/tv_cancel"
style="@style/Widget.Material3Expressive.Button.TonalButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="16dp" android:layout_marginEnd="8dp"
android:padding="12dp" android:minWidth="0dp"
android:text="@string/cancel" android:text="@string/cancel" />
android:textColor="@color/secondaryText"
tools:ignore="RtlHardcoded" />
<io.legato.kazusa.ui.widget.text.AccentTextView <com.google.android.material.button.MaterialButton
android:id="@+id/tv_ok" android:id="@+id/tv_ok"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="16dp" style="@style/Widget.Material3Expressive.Button"
android:padding="12dp" android:layout_marginEnd="8dp"
android:text="@string/ok" android:minWidth="0dp"
tools:ignore="RtlHardcoded" /> android:text="@string/ok" />
</LinearLayout> </LinearLayout>
+2 -8
View File
@@ -26,18 +26,12 @@
android:gravity="center" android:gravity="center"
android:orientation="horizontal"> android:orientation="horizontal">
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"/>
<TextView <TextView
android:id="@+id/bottom_sheet_title" android:id="@+id/bottom_sheet_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="32dp"
android:text="检测到更新!" android:text="检测到更新!"
android:textSize="18sp" android:textSize="20sp"
android:textStyle="bold" /> android:textStyle="bold" />
<View <View
@@ -50,7 +44,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:icon="@drawable/ic_download" app:icon="@drawable/ic_download"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"/> style="@style/Widget.Material3Expressive.Button.IconButton.Tonal" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"> android:descendantFocusability="blocksDescendants">
@@ -36,7 +35,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_chapter_top" android:id="@+id/btn_chapter_top"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
app:icon="@drawable/ic_arrow_drop_up" app:icon="@drawable/ic_arrow_drop_up"
@@ -46,7 +45,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_chapter_bottom" android:id="@+id/btn_chapter_bottom"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
app:icon="@drawable/ic_arrow_drop_down" app:icon="@drawable/ic_arrow_drop_down"
+1 -1
View File
@@ -70,7 +70,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="(っ˘ω˘ς )" android:text="(っ˘ω˘ς )"
android:textSize="30sp"/> android:textSize="32sp" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@@ -2,11 +2,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:background="?attr/selectableItemBackground"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="6dp" android:paddingHorizontal="16dp"
android:paddingVertical="8dp"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<TextView <TextView
@@ -14,16 +16,19 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:singleLine="true" android:maxLines="2" />
/>
<ImageView <com.google.android.material.button.MaterialButton
android:id="@+id/iv_delete" android:id="@+id/iv_delete"
android:layout_width="24dp" style="@style/Widget.Material3Expressive.Button.IconButton"
android:layout_height="24dp" android:layout_width="32dp"
android:layout_height="32dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:visibility="visible"
app:icon="@drawable/ic_clear_all"
app:iconGravity="textStart"
app:iconSize="20dp"
android:contentDescription="@string/delete" android:contentDescription="@string/delete"
android:src="@drawable/ic_clear_all" app:iconTint="?attr/colorOnSurface" />
android:visibility="gone"
/>
</LinearLayout> </LinearLayout>
+10 -6
View File
@@ -3,9 +3,11 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingStart="8dp" android:background="?attr/selectableItemBackground"
android:paddingStart="4dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:paddingVertical="8dp"> android:paddingTop="2dp"
android:paddingBottom="8dp">
<com.google.android.material.checkbox.MaterialCheckBox <com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/checkbox" android:id="@+id/checkbox"
@@ -22,7 +24,7 @@
android:paddingBottom="2dp" android:paddingBottom="2dp"
android:singleLine="true" android:singleLine="true"
android:text="@string/book_name" android:text="@string/book_name"
android:textSize="20sp" style="@style/ChapterNameText"
app:layout_constraintStart_toEndOf="@id/checkbox" app:layout_constraintStart_toEndOf="@id/checkbox"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/checkbox" app:layout_constraintTop_toTopOf="@id/checkbox"
@@ -38,7 +40,7 @@
android:textSize="12sp" android:textSize="12sp"
tools:ignore="RtlHardcoded" tools:ignore="RtlHardcoded"
app:layout_constraintStart_toStartOf="@id/tv_name" app:layout_constraintStart_toStartOf="@id/tv_name"
app:layout_constraintEnd_toEndOf="@id/tv_name" app:layout_constraintEnd_toStartOf="@id/tv_group"
app:layout_constraintTop_toBottomOf="@id/tv_name" /> app:layout_constraintTop_toBottomOf="@id/tv_name" />
<TextView <TextView
@@ -53,22 +55,24 @@
<TextView <TextView
android:id="@+id/tv_group_s" android:id="@+id/tv_group_s"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/ungroup" android:text="@string/ungroup"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:singleLine="true" android:singleLine="true"
android:textSize="12sp" android:textSize="12sp"
app:layout_constraintStart_toEndOf="@id/tv_origin" app:layout_constraintStart_toEndOf="@id/tv_origin"
app:layout_constraintEnd_toStartOf="@id/tv_group"
app:layout_constraintBaseline_toBaselineOf="@id/tv_origin" /> app:layout_constraintBaseline_toBaselineOf="@id/tv_origin" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/tv_group" android:id="@+id/tv_group"
android:layout_width="48dp" android:layout_width="wrap_content"
android:layout_height="40dp" android:layout_height="40dp"
style="@style/Widget.Material3Expressive.Button.TonalButton" style="@style/Widget.Material3Expressive.Button.TonalButton"
android:textSize="12sp" android:textSize="12sp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:minWidth="0dp"
android:padding="0dp" android:padding="0dp"
android:text="@string/group" android:text="@string/group"
app:layout_constraintTop_toTopOf="@id/tv_group_s" app:layout_constraintTop_toTopOf="@id/tv_group_s"
+1 -3
View File
@@ -14,8 +14,6 @@
android:id="@+id/tv_host_text" android:id="@+id/tv_host_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="-12dp"
android:layout_marginBottom="16dp"
android:scrollbars="none" android:scrollbars="none"
android:singleLine="true" android:singleLine="true"
android:textSize="16sp" android:textSize="16sp"
@@ -37,7 +35,7 @@
android:id="@+id/cb_book_source" android:id="@+id/cb_book_source"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_marginStart="4dp"
android:scrollbars="none" android:scrollbars="none"
android:singleLine="true" android:singleLine="true"
app:layout_constraintBottom_toTopOf="@id/iv_debug_text" app:layout_constraintBottom_toTopOf="@id/iv_debug_text"
@@ -15,6 +15,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_marginStart="4dp"
tools:ignore="RtlSymmetry" /> tools:ignore="RtlSymmetry" />
<io.legato.kazusa.lib.theme.view.ThemeSwitch <io.legato.kazusa.lib.theme.view.ThemeSwitch
+62 -23
View File
@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:padding="16dp"> android:padding="16dp">
<TextView <TextView
@@ -11,9 +12,11 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true" android:singleLine="true"
android:textSize="18sp" style="@style/ChapterNameText"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toStartOf="@id/cd_download"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/iv_download"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:text="@string/name" /> tools:text="@string/name" />
@@ -21,59 +24,95 @@
android:id="@+id/tv_author" android:id="@+id/tv_author"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:singleLine="true" android:singleLine="true"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/iv_download" app:layout_constraintRight_toLeftOf="@+id/iv_download"
app:layout_constraintTop_toBottomOf="@+id/tv_name" app:layout_constraintTop_toBottomOf="@+id/tv_name"
tools:text="@string/author" /> tools:text="@string/author" />
<TextView <com.google.android.material.card.MaterialCardView
android:id="@+id/tv_download" android:id="@+id/cd_download"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true" android:layout_marginEnd="2dp"
app:layout_constraintLeft_toLeftOf="parent" app:cardBackgroundColor="?attr/colorSecondaryContainer"
app:layout_constraintRight_toLeftOf="@+id/iv_download" app:layout_constraintBottom_toBottomOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/tv_author" app:layout_constraintEnd_toEndOf="parent"
tools:text="@string/action_download" /> app:layout_constraintTop_toTopOf="@id/tv_name"
app:strokeWidth="0dp">
<TextView
android:id="@+id/tv_download"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="6dp"
android:layout_marginVertical="2dp"
android:singleLine="true"
android:textColor="?attr/colorPrimaryVariant"
android:textSize="10sp"
android:textStyle="bold"
tools:ignore="SmallSp"
tools:text="@string/action_download" />
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/iv_download" android:id="@+id/iv_delete"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:contentDescription="@string/start" android:contentDescription="@string/start"
app:icon="@drawable/ic_clear_all"
app:iconGravity="textStart"
app:iconSize="20dp"
app:layout_constraintRight_toLeftOf="@+id/iv_download"
app:layout_constraintTop_toTopOf="@id/tv_author" />
<com.google.android.material.button.MaterialButton
android:id="@+id/iv_download"
style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="40dp"
android:layout_height="40dp"
android:contentDescription="@string/start"
android:layout_marginEnd="4dp"
app:icon="@drawable/ic_play_24dp" app:icon="@drawable/ic_play_24dp"
app:iconGravity="textStart" app:iconGravity="textStart"
app:layout_constraintBottom_toBottomOf="@+id/tv_download"
app:layout_constraintRight_toLeftOf="@+id/tv_export" app:layout_constraintRight_toLeftOf="@+id/tv_export"
app:layout_constraintTop_toTopOf="@id/tv_name" /> app:layout_constraintTop_toTopOf="@id/tv_author" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/tv_export" android:id="@+id/tv_export"
android:layout_width="48dp" style="@style/Widget.Material3Expressive.Button.OutlinedButton"
android:layout_height="40dp" android:layout_height="40dp"
style="@style/Widget.Material3Expressive.Button.TonalButton" android:layout_width="wrap_content"
android:minWidth="0dp"
android:textSize="12sp" android:textSize="12sp"
android:padding="0dp" android:padding="0dp"
android:text="@string/export" android:text="@string/export"
app:layout_constraintBottom_toBottomOf="@+id/tv_download" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="@id/tv_author" />
app:layout_constraintTop_toTopOf="@id/tv_name" />
<TextView <TextView
android:id="@+id/tv_msg" android:id="@+id/tv_msg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone" android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/tv_download" /> app:layout_constraintTop_toBottomOf="@id/tv_author" />
<io.legato.kazusa.lib.theme.view.ThemeProgressBar <com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/progress_download"
style="@style/Widget.Material3.LinearProgressIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/iv_download" />
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/progress_export" android:id="@+id/progress_export"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone" android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/tv_download" /> app:layout_constraintTop_toBottomOf="@id/iv_download" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
+6 -3
View File
@@ -1,8 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_margin="2dp"
app:cardBackgroundColor="?attr/colorSecondary"
app:strokeColor="?attr/colorSecondary"
android:clickable="true" android:clickable="true"
android:focusable="true"> android:focusable="true">
<TextView <TextView
@@ -18,7 +21,7 @@
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:maxLines="1" android:maxLines="1"
android:textSize="14sp" android:textSize="14sp"
android:textColor="?attr/colorPrimary" android:textColor="?attr/colorSurface"
tools:ignore="UnusedAttribute" /> tools:ignore="UnusedAttribute" />
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
+1 -1
View File
@@ -32,7 +32,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/iv_status" android:id="@+id/iv_status"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
app:icon="@drawable/ic_arrow_right"/> app:icon="@drawable/ic_arrow_right"/>
@@ -27,7 +27,7 @@
android:id="@+id/tv_edit" android:id="@+id/tv_edit"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
app:icon="@drawable/ic_edit" /> app:icon="@drawable/ic_edit" />
</LinearLayout> </LinearLayout>
@@ -21,7 +21,7 @@
android:id="@+id/tv_edit" android:id="@+id/tv_edit"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
app:icon="@drawable/ic_edit" /> app:icon="@drawable/ic_edit" />
</LinearLayout> </LinearLayout>
+2 -2
View File
@@ -38,7 +38,7 @@
android:id="@+id/iv_edit" android:id="@+id/iv_edit"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_gravity="center" android:layout_gravity="center"
android:contentDescription="@string/edit" android:contentDescription="@string/edit"
app:icon="@drawable/ic_edit" app:icon="@drawable/ic_edit"
@@ -51,7 +51,7 @@
android:id="@+id/iv_menu_delete" android:id="@+id/iv_menu_delete"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
app:icon="@drawable/ic_clear_all" app:icon="@drawable/ic_clear_all"
app:iconGravity="textStart" app:iconGravity="textStart"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
+35 -26
View File
@@ -5,19 +5,37 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingHorizontal="16dp" android:paddingStart="16dp"
android:paddingEnd="10dp"
android:paddingVertical="8dp"> android:paddingVertical="8dp">
<com.google.android.material.card.MaterialCardView
android:id="@+id/cd_cover"
android:layout_width="0dp"
android:layout_height="match_parent"
app:cardBackgroundColor="?attr/colorSurfaceContainer"
app:cardCornerRadius="6dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:strokeWidth="0dp">
<ImageView
android:id="@+id/iv_cover"
android:layout_width="60dp"
android:layout_height="80dp" />
</com.google.android.material.card.MaterialCardView>
<TextView <TextView
android:id="@+id/tv_book_name" android:id="@+id/tv_book_name"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingVertical="4dp" style="@style/ChapterNameText"
style="@style/TextAppearance.Material3.BodyLarge" android:layout_marginStart="8dp"
android:singleLine="true" android:singleLine="true"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintEnd_toEndOf="@+id/tv_remove"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toLeftOf="@+id/tv_remove" app:layout_constraintStart_toEndOf="@id/cd_cover"
tools:text="name" tools:text="name"
tools:ignore="RtlHardcoded" /> tools:ignore="RtlHardcoded" />
@@ -25,40 +43,32 @@
android:id="@+id/tv_reading_time_tag" android:id="@+id/tv_reading_time_tag"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingVertical="4dp" android:layout_marginStart="8dp"
android:layout_marginTop="2dp"
android:singleLine="true" android:singleLine="true"
android:text="@string/reading_time_tag" android:text="@string/reading_time_tag"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintStart_toEndOf="@id/cd_cover"
app:layout_constraintTop_toBottomOf="@id/tv_book_name" /> app:layout_constraintTop_toBottomOf="@id/tv_book_name" />
<TextView <TextView
android:id="@+id/tv_reading_time" android:id="@+id/tv_reading_time"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingVertical="4dp"
android:singleLine="true" android:singleLine="true"
app:layout_constraintLeft_toRightOf="@+id/tv_reading_time_tag" app:layout_constraintBottom_toTopOf="@id/tv_reading_time_tag"
app:layout_constraintTop_toBottomOf="@id/tv_book_name" app:layout_constraintEnd_toStartOf="@+id/tv_remove"
app:layout_constraintRight_toLeftOf="@+id/tv_remove" app:layout_constraintStart_toEndOf="@+id/tv_reading_time_tag"
app:layout_constraintTop_toBottomOf="@id/tv_reading_time_tag"
tools:text="readingTime" /> tools:text="readingTime" />
<TextView
android:id="@+id/tv_last_read_time_tag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingVertical="4dp"
android:singleLine="true"
android:text="@string/last_read_time_tag"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_reading_time_tag" />
<TextView <TextView
android:id="@+id/tv_last_read_time" android:id="@+id/tv_last_read_time"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingVertical="4dp" android:layout_marginStart="8dp"
android:layout_marginTop="2dp"
android:singleLine="true" android:singleLine="true"
app:layout_constraintLeft_toRightOf="@+id/tv_last_read_time_tag" app:layout_constraintLeft_toRightOf="@+id/cd_cover"
app:layout_constraintTop_toBottomOf="@id/tv_reading_time_tag" app:layout_constraintTop_toBottomOf="@id/tv_reading_time_tag"
app:layout_constraintRight_toLeftOf="@+id/tv_remove" app:layout_constraintRight_toLeftOf="@+id/tv_remove"
tools:text="readingTime" /> tools:text="readingTime" />
@@ -67,10 +77,9 @@
android:id="@+id/tv_remove" android:id="@+id/tv_remove"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
app:icon="@drawable/ic_clear_all" app:icon="@drawable/ic_clear_all"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_book_name" />
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
+28 -39
View File
@@ -1,43 +1,32 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView 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" android:id="@+id/ll_style"
android:id="@+id/rv_style" android:layout_width="wrap_content"
android:layout_width="48dp" android:layout_height="wrap_content"
android:layout_height="54dp" android:gravity="center">
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
app:cardBackgroundColor="@android:color/transparent"
app:strokeWidth="0dp">
<LinearLayout <com.google.android.material.card.MaterialCardView
android:id="@+id/ll_style" android:id="@+id/cd_style"
android:layout_width="match_parent" android:layout_width="48dp"
android:layout_height="match_parent" android:layout_height="48dp"
android:gravity="center"> android:layout_margin="4dp"
android:foreground="?android:attr/selectableItemBackground">
<com.google.android.material.card.MaterialCardView <ImageView
android:id="@+id/cd_style" android:id="@+id/iv_style"
android:layout_width="48dp" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="match_parent" />
android:foreground="?android:attr/selectableItemBackground">
<ImageView <TextView
android:id="@+id/iv_style" android:id="@+id/tv_style"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent"
android:autoSizeMaxTextSize="12sp"
<TextView android:autoSizeMinTextSize="6sp"
android:id="@+id/tv_style" android:autoSizeStepGranularity="1sp"
android:layout_width="match_parent" android:autoSizeTextType="uniform"
android:layout_height="match_parent" android:gravity="center"
android:autoSizeMaxTextSize="12sp" android:singleLine="true"
android:autoSizeMinTextSize="6sp" android:text="@string/text" />
android:autoSizeStepGranularity="1sp" </com.google.android.material.card.MaterialCardView>
android:autoSizeTextType="uniform" </LinearLayout>
android:gravity="center"
android:singleLine="true"
android:text="@string/text" />
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
@@ -14,6 +14,7 @@
android:id="@+id/cb_name" android:id="@+id/cb_name"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:scrollbars="none" android:scrollbars="none"
android:maxLines="2" android:maxLines="2"
@@ -5,7 +5,6 @@
android:id="@+id/textInputLayout" android:id="@+id/textInputLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp"> android:paddingVertical="8dp">
<io.legato.kazusa.ui.widget.code.CodeView <io.legato.kazusa.ui.widget.code.CodeView
@@ -14,7 +14,7 @@
android:id="@+id/cb_source" android:id="@+id/cb_source"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start" android:layout_marginStart="4dp"
android:singleLine="true" android:singleLine="true"
app:layout_constraintBottom_toTopOf="@id/title_example" app:layout_constraintBottom_toTopOf="@id/title_example"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
@@ -65,7 +65,7 @@
android:id="@+id/title_example" android:id="@+id/title_example"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="6dp" android:layout_marginStart="10dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:textSize="12sp" android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
@@ -6,5 +6,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="5dp" android:paddingHorizontal="12dp"
android:paddingVertical="8dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
+5 -5
View File
@@ -81,7 +81,7 @@
android:id="@+id/iv_search_content_up" android:id="@+id/iv_search_content_up"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="match_parent" android:layout_height="match_parent"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
app:iconGravity="textStart" app:iconGravity="textStart"
android:contentDescription="@string/go_to_top" android:contentDescription="@string/go_to_top"
app:icon="@drawable/ic_arrow_drop_up" app:icon="@drawable/ic_arrow_drop_up"
@@ -93,7 +93,7 @@
android:id="@+id/iv_search_content_down" android:id="@+id/iv_search_content_down"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="match_parent" android:layout_height="match_parent"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
app:iconGravity="textStart" app:iconGravity="textStart"
android:contentDescription="@string/go_to_bottom" android:contentDescription="@string/go_to_bottom"
app:icon="@drawable/ic_arrow_drop_down" app:icon="@drawable/ic_arrow_drop_down"
@@ -201,7 +201,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true" android:clickable="true"
android:contentDescription="退出" android:contentDescription="@string/exit"
android:focusable="true" android:focusable="true"
android:orientation="vertical" android:orientation="vertical"
android:paddingBottom="7dp"> android:paddingBottom="7dp">
@@ -212,7 +212,7 @@
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:contentDescription="退出" android:contentDescription="@string/exit"
android:maxHeight="20dp" android:maxHeight="20dp"
android:src="@drawable/ic_auto_page_stop" android:src="@drawable/ic_auto_page_stop"
tools:ignore="NestedWeights" /> tools:ignore="NestedWeights" />
@@ -224,7 +224,7 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginTop="3dp" android:layout_marginTop="3dp"
android:maxLines="1" android:maxLines="1"
android:text="退出" android:text="@string/exit"
android:textSize="12sp" /> android:textSize="12sp" />
</LinearLayout> </LinearLayout>
@@ -14,6 +14,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginStart="4dp"
android:text="@string/select_all" /> android:text="@string/select_all" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
@@ -38,7 +38,7 @@
android:id="@+id/iv_seek_reduce" android:id="@+id/iv_seek_reduce"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:elevation="2dp" android:elevation="2dp"
app:backgroundTint="?attr/colorSurfaceContainer" app:backgroundTint="?attr/colorSurfaceContainer"
android:contentDescription="@string/reduce" android:contentDescription="@string/reduce"
@@ -58,7 +58,7 @@
android:id="@+id/iv_seek_plus" android:id="@+id/iv_seek_plus"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:elevation="2dp" android:elevation="2dp"
app:backgroundTint="?attr/colorSurfaceContainer" app:backgroundTint="?attr/colorSurfaceContainer"
android:contentDescription="@string/plus" android:contentDescription="@string/plus"
@@ -11,20 +11,6 @@
app:singleSelection="true" app:singleSelection="true"
app:selectionRequired="true"> app:selectionRequired="true">
<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题"
android:visibility="gone" />
<TextView
android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="摘要"
android:visibility="gone" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_system" android:id="@+id/btn_system"
style="@style/Widget.Material3Expressive.Button" style="@style/Widget.Material3Expressive.Button"
+1 -1
View File
@@ -979,7 +979,7 @@
<string name="custom_welcome_summary">是否使用自定义欢迎页</string> <string name="custom_welcome_summary">是否使用自定义欢迎页</string>
<string name="show_icon">显示图标</string> <string name="show_icon">显示图标</string>
<string name="show_default_book_icon">显示默认书籍图标</string> <string name="show_default_book_icon">显示默认书籍图标</string>
<string name="cache_export">缓存/导出</string> <string name="cache_export">已缓存书籍</string>
<string name="assists_key_config">辅助按键配置</string> <string name="assists_key_config">辅助按键配置</string>
<string name="url_option">Url参数</string> <string name="url_option">Url参数</string>
<string name="only_wifi">仅WIFI</string> <string name="only_wifi">仅WIFI</string>
-1
View File
@@ -7,7 +7,6 @@
<item name="tabStyle">@style/Widget.App.TabLayout</item> <item name="tabStyle">@style/Widget.App.TabLayout</item>
<item name="popupMenuBackground">@drawable/popup_background</item> <item name="popupMenuBackground">@drawable/popup_background</item>
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item> <item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Filter</item>
</style> </style>
</resources> </resources>
+2 -2
View File
@@ -225,7 +225,7 @@
<string name="download_start">开始下载</string> <string name="download_start">开始下载</string>
<string name="download_cancel">取消下载</string> <string name="download_cancel">取消下载</string>
<string name="no_download">暂无任务</string> <string name="no_download">暂无任务</string>
<string name="download_count">已下载 %1$d/%2$d</string> <string name="download_count">%1$d/%2$d</string>
<string name="import_select_book">导入选择书籍</string> <string name="import_select_book">导入选择书籍</string>
<string name="threads_num_title">更新和搜索线程数(太多会卡顿)</string> <string name="threads_num_title">更新和搜索线程数(太多会卡顿)</string>
<string name="change_icon">切换图标</string> <string name="change_icon">切换图标</string>
@@ -979,7 +979,7 @@
<string name="custom_welcome_summary">是否使用自定义欢迎页</string> <string name="custom_welcome_summary">是否使用自定义欢迎页</string>
<string name="show_icon">显示图标</string> <string name="show_icon">显示图标</string>
<string name="show_default_book_icon">显示默认书籍图标</string> <string name="show_default_book_icon">显示默认书籍图标</string>
<string name="cache_export">缓存/导出</string> <string name="cache_export">书籍缓存</string>
<string name="assists_key_config">辅助按键配置</string> <string name="assists_key_config">辅助按键配置</string>
<string name="url_option">URL 参数</string> <string name="url_option">URL 参数</string>
<string name="only_wifi">仅 WiFi</string> <string name="only_wifi">仅 WiFi</string>
+5 -1
View File
@@ -40,12 +40,16 @@
<style name="ChapterNameText"> <style name="ChapterNameText">
<item name="android:textSize">16sp</item> <item name="android:textSize">16sp</item>
<item name="android:textStyle">bold</item> <item name="android:textStyle">bold</item>
<item name="android:paddingBottom">4dp</item>
<item name="android:maxLines">2</item> <item name="android:maxLines">2</item>
</style> </style>
//**********System Style******************// //**********System Style******************//
<style name="ShapeAppearanceOverlay.Circle" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">50%</item>
</style>
<style name="Style.NavigationView" parent="android:Widget"> <style name="Style.NavigationView" parent="android:Widget">
</style> </style>