diff --git a/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt b/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt index b0d5f216a..b8c77ada6 100644 --- a/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt +++ b/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt @@ -13,6 +13,7 @@ import android.view.View import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.graphics.drawable.toDrawable +import androidx.core.view.WindowCompat import androidx.viewbinding.ViewBinding import com.google.android.material.appbar.AppBarLayout 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.hideSoftInput 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.windowSize @@ -69,7 +72,9 @@ abstract class BaseActivity( window.decorView.disableAutoFill() AppContextWrapper.applyLocaleAndFont(this) super.onCreate(savedInstanceState) + WindowCompat.setDecorFitsSystemWindows(window, false) enableEdgeToEdge() + window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurface)) //setupSystemBar() setContentView(binding.root) upBackgroundImage() @@ -152,15 +157,6 @@ abstract class BaseActivity( } } - open fun upNavigationBarColor() { -// if (AppConfig.immNavigationBar) { -// setNavigationBarColorAuto(ThemeStore.navigationBarColor(this)) -// } else { -// val nbColor = ColorUtils.darkenColor(ThemeStore.navigationBarColor(this)) -// setNavigationBarColorAuto(nbColor) -// } - } - open fun observeLiveBus() { observeEvent(EventBus.RECREATE) { recreate() diff --git a/app/src/main/java/io/legato/kazusa/base/BaseBottomSheetDialogFragment.kt b/app/src/main/java/io/legato/kazusa/base/BaseBottomSheetDialogFragment.kt index 1b807b307..79bd64e7e 100644 --- a/app/src/main/java/io/legato/kazusa/base/BaseBottomSheetDialogFragment.kt +++ b/app/src/main/java/io/legato/kazusa/base/BaseBottomSheetDialogFragment.kt @@ -12,6 +12,8 @@ import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import io.legato.kazusa.constant.AppLog 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.Dispatchers import kotlin.coroutines.CoroutineContext @@ -28,6 +30,7 @@ abstract class BaseBottomSheetDialogFragment( override fun onStart() { super.onStart() + dialog?.window?.setNavigationBarColorAuto(requireContext().themeColor(com.google.android.material.R.attr.colorSurfaceContainer)) if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { val screenHeight = resources.displayMetrics.heightPixels (dialog as? BottomSheetDialog)?.behavior?.apply { @@ -38,7 +41,6 @@ abstract class BaseBottomSheetDialogFragment( override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - onFragmentCreated(view, savedInstanceState) observeLiveBus() } diff --git a/app/src/main/java/io/legato/kazusa/data/dao/ReadRecordDao.kt b/app/src/main/java/io/legato/kazusa/data/dao/ReadRecordDao.kt index 7f6861c83..fd4b83239 100644 --- a/app/src/main/java/io/legato/kazusa/data/dao/ReadRecordDao.kt +++ b/app/src/main/java/io/legato/kazusa/data/dao/ReadRecordDao.kt @@ -1,6 +1,11 @@ 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.ReadRecordShow @@ -38,6 +43,7 @@ interface ReadRecordDao { @Query("select readTime from readRecord where deviceId = :androidId and bookName = :bookName") fun getReadTime(androidId: String, bookName: String): Long? + @Insert(onConflict = OnConflictStrategy.REPLACE) fun insert(vararg readRecord: ReadRecord) diff --git a/app/src/main/java/io/legato/kazusa/ui/about/ReadRecordActivity.kt b/app/src/main/java/io/legato/kazusa/ui/about/ReadRecordActivity.kt index e0ccea883..616dbed53 100644 --- a/app/src/main/java/io/legato/kazusa/ui/about/ReadRecordActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/about/ReadRecordActivity.kt @@ -18,6 +18,7 @@ import io.legato.kazusa.databinding.ItemReadRecordBinding import io.legato.kazusa.help.config.AppConfig import io.legato.kazusa.help.config.LocalConfig import io.legato.kazusa.lib.dialogs.alert +import io.legato.kazusa.model.BookCover //import io.legado.app.lib.theme.primaryTextColor import io.legato.kazusa.ui.book.search.SearchActivity import io.legato.kazusa.utils.applyNavigationBarPadding @@ -157,7 +158,7 @@ class ReadRecordActivity : BaseActivity() { inner class RecordAdapter(context: Context) : RecyclerAdapter(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 { return ItemReadRecordBinding.inflate(inflater, parent, false) @@ -175,7 +176,17 @@ class ReadRecordActivity : BaseActivity() { if (item.lastRead > 0) { tvLastReadTime.text = dateFormat.format(item.lastRead) } 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) + } } } } diff --git a/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheActivity.kt index 732417aad..0a41d9124 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheActivity.kt @@ -38,7 +38,6 @@ import io.legato.kazusa.ui.about.AppLogDialog import io.legato.kazusa.ui.file.HandleFileContract import io.legato.kazusa.utils.ACache import io.legato.kazusa.utils.FileDoc -import io.legato.kazusa.utils.applyNavigationBarPadding import io.legato.kazusa.utils.applyOpenTint import io.legato.kazusa.utils.applyTint import io.legato.kazusa.utils.checkWrite @@ -233,7 +232,6 @@ class CacheActivity : VMBaseActivity() private fun initRecyclerView() { binding.recyclerView.layoutManager = layoutManager binding.recyclerView.adapter = adapter - binding.recyclerView.applyNavigationBarPadding() } private fun initBookData() { @@ -345,6 +343,11 @@ class CacheActivity : VMBaseActivity() } } + override fun deleteDownload(book: Book) { + viewModel.clearCacheForBook(book) + notifyItemChanged(book.bookUrl) + } + /** * 配置自定义导出对话框 * diff --git a/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheAdapter.kt b/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheAdapter.kt index ce45e6326..5935d4904 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheAdapter.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheAdapter.kt @@ -1,6 +1,8 @@ package io.legato.kazusa.ui.book.cache import android.content.Context +import android.os.Handler +import android.os.Looper import android.view.ViewGroup import android.widget.ProgressBar import android.widget.TextView @@ -47,8 +49,10 @@ class CacheAdapter(context: Context, private val callBack: CallBack) : if (payloads.isEmpty()) { tvName.text = item.name tvAuthor.text = context.getString(R.string.author_show, item.getRealAuthor()) + if (item.isLocal) { tvDownload.setText(R.string.local_book) + progressDownload.gone() } else { val cs = callBack.cacheChapters[item.bookUrl] if (cs == null) { @@ -67,8 +71,22 @@ class CacheAdapter(context: Context, private val callBack: CallBack) : tvDownload.setText(R.string.local_book) } else { val cacheSize = callBack.cacheChapters[item.bookUrl]?.size ?: 0 + val cacheTask = CacheBook.cacheBookMap[item.bookUrl] tvDownload.text = 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) @@ -94,6 +112,23 @@ class CacheAdapter(context: Context, private val callBack: CallBack) : tvExport.setOnClickListener { 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 exportProgress(bookUrl: String): Int? fun exportMsg(bookUrl: String): String? + fun deleteDownload(book: Book) } + } \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheViewModel.kt b/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheViewModel.kt index a45adfe88..6538a846e 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheViewModel.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/cache/CacheViewModel.kt @@ -10,7 +10,6 @@ import io.legato.kazusa.help.book.isLocal import io.legato.kazusa.help.coroutine.Coroutine import io.legato.kazusa.utils.sendValue import kotlinx.coroutines.ensureActive -import kotlin.collections.set 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) + } + } \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/ui/book/group/GroupEditDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/group/GroupEditDialog.kt index 51a0c8074..13ffcca0d 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/group/GroupEditDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/group/GroupEditDialog.kt @@ -64,26 +64,33 @@ class GroupEditDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_book_gro } override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { - //binding.toolBar.setBackgroundColor(primaryColor) sortOptions = resources.getStringArray(R.array.book_sort).toList() @Suppress("DEPRECATION") bookGroup = arguments?.getParcelable("group") - bookGroup?.let { - binding.btnDelete.isEnabled = (it.groupId > 0 || it.groupId == Long.MIN_VALUE) - binding.tieGroupName.setText(it.groupName) - if (bookGroup?.cover != null) - binding.ivCover.load(it.cover) - binding.cbEnableRefresh.isChecked = it.enableRefresh - if (it.bookSort in sortOptions.indices) { - selectedSortIndex = it.bookSort - binding.chipSortMenu.text = sortOptions[selectedSortIndex] + + bookGroup?.let { group -> + binding.btnDelete.isEnabled = (group.groupId > 0 || group.groupId == Long.MIN_VALUE) + binding.tieGroupName.setText(group.groupName) + if (group.cover != null) { + binding.ivCover.load(group.cover) } - } ?: 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.ivCover.load() + selectedSortIndex = 0 + binding.chipSortMenu.text = sortOptions[selectedSortIndex] } + binding.run { chipSortMenu.setOnClickListener { chip -> PopupMenu(requireContext(), chip).apply { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt index 53134bcba..f7a517ced 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt @@ -2,11 +2,8 @@ package io.legato.kazusa.ui.book.info import android.annotation.SuppressLint import android.content.Intent -import android.graphics.Color import android.graphics.RenderEffect import android.graphics.Shader -import android.graphics.drawable.BitmapDrawable -import android.graphics.drawable.Drawable import android.net.Uri import android.os.Build import android.os.Bundle @@ -18,7 +15,6 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.core.content.ContextCompat import androidx.lifecycle.lifecycleScope -import androidx.palette.graphics.Palette import io.legato.kazusa.R import io.legato.kazusa.base.VMBaseActivity 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.GSON import io.legato.kazusa.utils.StartActivityContract +import io.legato.kazusa.utils.applyNavigationBarMargin import io.legato.kazusa.utils.dpToPx import io.legato.kazusa.utils.gone 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.viewbindingdelegate.viewBinding import io.legato.kazusa.utils.visible -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -158,7 +154,7 @@ class BookInfoActivity : super.onCreate(savedInstanceState) setSupportActionBar(binding.topBar) - + binding.llRead?.applyNavigationBarMargin() // binding.refreshLayout?.setColorSchemeColors(accentColor) // binding.llInfo.setBackgroundColor(backgroundColor) // 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) - } - } \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/BaseReadBookActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/BaseReadBookActivity.kt index 4d7633c6a..b6b41ae77 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/BaseReadBookActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/BaseReadBookActivity.kt @@ -44,6 +44,7 @@ import io.legato.kazusa.utils.setLightStatusBar import io.legato.kazusa.utils.setNavigationBarColorAuto import io.legato.kazusa.utils.setOnApplyWindowInsetsListenerCompat import io.legato.kazusa.utils.showDialogFragment +import io.legato.kazusa.utils.themeColor import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import java.time.LocalDate import java.time.format.DateTimeFormatter @@ -211,14 +212,14 @@ abstract class BaseReadBookActivity : window.decorView.systemUiVisibility = flag } - override fun upNavigationBarColor() { + fun upNavigationBarColor() { upNavigationBar() when { - binding.readMenu.isVisible -> super.upNavigationBarColor() - binding.searchMenu.bottomMenuVisible -> super.upNavigationBarColor() - bottomDialog > 0 -> super.upNavigationBarColor() + binding.readMenu.isVisible -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurfaceContainer)) + binding.searchMenu.bottomMenuVisible -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurface)) + bottomDialog > 0 -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurface)) //!AppConfig.immNavigationBar -> super.upNavigationBarColor() - else -> setNavigationBarColorAuto(ReadBookConfig.bgMeanColor) + else -> window.setNavigationBarColorAuto(ReadBookConfig.bgMeanColor) } } diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/config/MoreConfigDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/config/MoreConfigDialog.kt index 728734cef..5979b0dee 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/config/MoreConfigDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/config/MoreConfigDialog.kt @@ -1,25 +1,21 @@ 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.content.DialogInterface import android.content.SharedPreferences import android.os.Bundle -import android.view.LayoutInflater import android.view.View import android.view.ViewConfiguration -import android.view.ViewGroup -import android.widget.LinearLayout import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat 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.PreferKey import io.legato.kazusa.help.config.AppConfig 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.ui.book.read.ReadBookActivity 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.removePref -class MoreConfigDialog : BasePrefDialogFragment() { +class MoreConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_more_config) { private val readPreferTag = "readPreferenceFragment" - override fun onCreateView( - inflater: LayoutInflater, - 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) + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { + (activity as? ReadBookActivity)?.bottomDialog++ var preferenceFragment = childFragmentManager.findFragmentByTag(readPreferTag) if (preferenceFragment == null) preferenceFragment = ReadPreferenceFragment() childFragmentManager.beginTransaction() - .replace(view.id, preferenceFragment, readPreferTag) + .replace(R.id.containerPreferences, preferenceFragment, readPreferTag) .commit() } + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + (activity as ReadBookActivity).bottomDialog-- + } + class ReadPreferenceFragment : PreferenceFragmentCompat(), 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() { super.onResume() preferenceManager diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/config/PaddingConfigDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/config/PaddingConfigDialog.kt index 3130f79cb..fdff69c03 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/config/PaddingConfigDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/config/PaddingConfigDialog.kt @@ -15,17 +15,6 @@ class PaddingConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_p 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?) { initData() initView() diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadStyleDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadStyleDialog.kt index 90a8f7082..ef3e58229 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadStyleDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadStyleDialog.kt @@ -22,9 +22,9 @@ import io.legato.kazusa.model.ReadBook import io.legato.kazusa.ui.book.read.ReadBookActivity import io.legato.kazusa.ui.font.FontSelectDialog import io.legato.kazusa.utils.ChineseUtils +import io.legato.kazusa.utils.dpToPx import io.legato.kazusa.utils.postEvent import io.legato.kazusa.utils.showDialogFragment -import io.legato.kazusa.utils.themeColor import io.legato.kazusa.utils.viewbindingdelegate.viewBinding 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 { - //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) { tvDayNight.setIconResource(R.drawable.ic_daytime) } else { @@ -72,10 +65,6 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_ rvStyle.adapter = styleAdapter styleAdapter.addFooterView { 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) root.setOnClickListener { ReadBookConfig.configList.add(ReadBookConfig.Config()) @@ -235,11 +224,15 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_ ivStyle.setImageDrawable(item.curBgDrawable(100, 150)) if (ReadBookConfig.styleSelect == holder.layoutPosition) { llStyle.gravity = Gravity.TOP - cdStyle.strokeColor = - context.themeColor(com.google.android.material.R.attr.colorTertiary) - rvStyle.setCardBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorTertiary)) + cdStyle.cardElevation = 1f.dpToPx() + cdStyle.radius = 16f.dpToPx() + cdStyle.strokeWidth = 2 + cdStyle.strokeColor = item.curTextColor() //tvStyle.setTextBold(true) } else { + cdStyle.cardElevation = 2f.dpToPx() + cdStyle.radius = 32f.dpToPx() + cdStyle.strokeWidth = 0 cdStyle.strokeColor = item.curTextColor() //tvStyle.setTextBold(false) } diff --git a/app/src/main/java/io/legato/kazusa/ui/book/search/HistoryKeyAdapter.kt b/app/src/main/java/io/legato/kazusa/ui/book/search/HistoryKeyAdapter.kt index 864cee218..fa2d73425 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/search/HistoryKeyAdapter.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/search/HistoryKeyAdapter.kt @@ -13,8 +13,13 @@ class HistoryKeyAdapter(activity: SearchActivity, val callBack: CallBack) : private val explosionField = ExplosionField.attach2Window(activity) + init { + setHasStableIds(true) + } + + override fun getItemId(position: Int): Long { - return position.toLong() + return getItem(position)!!.lastUseTime } override fun getViewBinding(parent: ViewGroup): ItemSearchHistoryBinding { @@ -33,6 +38,7 @@ class HistoryKeyAdapter(activity: SearchActivity, val callBack: CallBack) : } override fun registerListener(holder: ItemViewHolder, binding: ItemSearchHistoryBinding) { + holder.itemView.apply { setOnClickListener { getItemByLayoutPosition(holder.layoutPosition)?.let { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt index fa280c0ec..24c8fd99f 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt @@ -12,9 +12,11 @@ import androidx.core.os.bundleOf import androidx.core.view.isVisible import androidx.core.widget.doAfterTextChanged import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView 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.SearchView 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.source.manage.BookSourceActivity import io.legato.kazusa.utils.applyNavigationBarMargin -import io.legato.kazusa.utils.applyNavigationBarPadding import io.legato.kazusa.utils.applyStatusBarPadding import io.legato.kazusa.utils.getPrefBoolean import io.legato.kazusa.utils.gone @@ -84,6 +85,8 @@ class SearchActivity : VMBaseActivity + 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 -> onCompatOptionsItemSelected(item) } @@ -215,7 +238,6 @@ class SearchActivity : VMBaseActivity if (newState == SearchView.TransitionState.HIDDEN) { - // 当 SearchView 关闭时,将搜索文本设置回 SearchBar searchBar.setText(searchView.text) } } @@ -232,14 +254,16 @@ class SearchActivity : VMBaseActivity - binding.toolBar.menu.findItem(R.id.menu_screen)?.isVisible = checkedId == R.id.rb_source - upData() + + binding.rgScope.addOnButtonCheckedListener { group, checkedId, isChecked -> + if (isChecked) { + binding.toolBar.menu.findItem(R.id.menu_screen)?.isVisible = + checkedId == R.id.rb_source + upData() + } } + binding.tvCancel.setOnClickListener { dismiss() } + binding.tvAllSource.setOnClickListener { callback.onSearchScopeOk(SearchScope("")) dismiss() } + binding.tvOk.setOnClickListener { if (binding.rbGroup.isChecked) { callback.onSearchScopeOk(SearchScope(adapter.selectGroups)) @@ -104,6 +102,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) { } dismiss() } + } private fun initData() { diff --git a/app/src/main/java/io/legato/kazusa/ui/login/SourceLoginDialog.kt b/app/src/main/java/io/legato/kazusa/ui/login/SourceLoginDialog.kt index 959be2e1f..b8fc787f1 100644 --- a/app/src/main/java/io/legato/kazusa/ui/login/SourceLoginDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/login/SourceLoginDialog.kt @@ -1,16 +1,15 @@ package io.legato.kazusa.ui.login +//import io.legado.app.lib.theme.primaryColor import android.content.DialogInterface import android.os.Bundle import android.text.InputType import android.view.View -import android.view.ViewGroup -import androidx.core.view.setPadding import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import com.script.rhino.runScriptWithContext 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.data.entities.BaseSource 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.ItemSourceEditBinding 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.utils.GSON import io.legato.kazusa.utils.applyTint -import io.legato.kazusa.utils.dpToPx import io.legato.kazusa.utils.isAbsUrl import io.legato.kazusa.utils.openUrl import io.legato.kazusa.utils.printOnDebug import io.legato.kazusa.utils.sendToClip -import io.legato.kazusa.utils.setLayout import io.legato.kazusa.utils.showDialogFragment import io.legato.kazusa.utils.toastOnUi import io.legato.kazusa.utils.viewbindingdelegate.viewBinding @@ -40,16 +36,11 @@ import splitties.init.appCtx 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 viewModel by activityViewModels() - override fun onStart() { - super.onStart() - setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) - } - override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { val source = viewModel.source ?: return //binding.toolBar.setBackgroundColor(primaryColor) @@ -91,7 +82,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { rowUi.style().apply(it.root) it.root.id = index + 1000 it.textView.text = rowUi.name - it.textView.setPadding(16.dpToPx()) + it.root.onClick { handleButtonClick(source, rowUi, loginUi) } diff --git a/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt b/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt index 3d5a134df..7f53d4b3c 100644 --- a/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt @@ -48,8 +48,10 @@ import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.hideSoftInput import io.legato.kazusa.utils.isCreated import io.legato.kazusa.utils.observeEvent +import io.legato.kazusa.utils.setNavigationBarColorAuto import io.legato.kazusa.utils.shouldHideSoftInput import io.legato.kazusa.utils.showDialogFragment +import io.legato.kazusa.utils.themeColor import io.legato.kazusa.utils.toastOnUi import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import io.legato.kazusa.utils.visible @@ -203,23 +205,16 @@ class MainActivity : VMBaseActivity(), } private fun initView() = binding.run { - //viewPagerMain.setEdgeEffectColor(primaryColor) viewPagerMain.offscreenPageLimit = 3 viewPagerMain.adapter = adapter viewPagerMain.addOnPageChangeListener(PageChangeCallback()) - //bottomNavigationView.elevation = elevation getNavigationBarView().apply { setOnItemSelectedListener { onNavigationItemSelected(it) } setOnItemReselectedListener { onNavigationItemReselected(it) } } - //getNavigationBarView().applyNavigationBarPadding() -// bottomNavigationView.setOnApplyWindowInsetsListenerCompat { view, windowInsets -> -// val height = windowInsets.navigationBarHeight -// view.bottomPadding = height -// windowInsets.inset(0, 0, 0, height) -// } + window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurfaceContainer)) } /** diff --git a/app/src/main/java/io/legato/kazusa/ui/widget/text/AutoCompleteTextView.kt b/app/src/main/java/io/legato/kazusa/ui/widget/text/AutoCompleteTextView.kt index 9792b275c..231b973bb 100644 --- a/app/src/main/java/io/legato/kazusa/ui/widget/text/AutoCompleteTextView.kt +++ b/app/src/main/java/io/legato/kazusa/ui/widget/text/AutoCompleteTextView.kt @@ -1,5 +1,6 @@ package io.legato.kazusa.ui.widget.text +//import io.legado.app.lib.theme.accentColor import android.annotation.SuppressLint import android.content.Context import android.os.Build @@ -9,11 +10,10 @@ import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter -import android.widget.ImageView import android.widget.TextView +import com.google.android.material.button.MaterialButton import com.google.android.material.textfield.MaterialAutoCompleteTextView import io.legato.kazusa.R -//import io.legado.app.lib.theme.accentColor import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.visible @@ -63,7 +63,7 @@ class AutoCompleteTextView @JvmOverloads constructor( .inflate(R.layout.item_1line_text_and_del, parent, false) val textView = view.findViewById(R.id.text_view) textView.text = getItem(position) - val ivDelete = view.findViewById(R.id.iv_delete) + val ivDelete = view.findViewById(R.id.iv_delete) if (delCallBack != null) ivDelete.visible() else ivDelete.gone() ivDelete.setOnClickListener { getItem(position)?.let { diff --git a/app/src/main/java/io/legato/kazusa/utils/ActivityExtensions.kt b/app/src/main/java/io/legato/kazusa/utils/ActivityExtensions.kt index 3b3dada4c..ad7635700 100644 --- a/app/src/main/java/io/legato/kazusa/utils/ActivityExtensions.kt +++ b/app/src/main/java/io/legato/kazusa/utils/ActivityExtensions.kt @@ -9,6 +9,7 @@ import android.util.DisplayMetrics import android.view.Gravity import android.view.View import android.view.ViewGroup +import android.view.Window import android.view.WindowInsets import android.view.WindowInsetsController import android.view.WindowManager @@ -144,11 +145,12 @@ fun Activity.setLightStatusBar(isLightBar: Boolean) { * 设置导航栏颜色 */ @Suppress("DEPRECATION") -fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) { +fun Window.setNavigationBarColorAuto(@ColorInt color: Int) { val isLightBor = ColorUtils.isColorLight(color) - window.navigationBarColor = color + navigationBarColor = color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - window.insetsController?.let { + insetsController?.let { if (isLightBor) { it.setSystemBarsAppearance( WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS, @@ -162,9 +164,9 @@ fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) { } } } + @Suppress("DEPRECATION") - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val decorView = window.decorView + if (Build.VERSION.SDK_INT in Build.VERSION_CODES.O..Build.VERSION_CODES.Q) { var systemUiVisibility = decorView.systemUiVisibility systemUiVisibility = if (isLightBor) { systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR @@ -175,6 +177,7 @@ fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) { } } + fun Activity.keepScreenOn(on: Boolean) { val isScreenOn = (window.attributes.flags and WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0 diff --git a/app/src/main/java/io/legato/kazusa/utils/ViewExtensions.kt b/app/src/main/java/io/legato/kazusa/utils/ViewExtensions.kt index f97145828..caa982edd 100644 --- a/app/src/main/java/io/legato/kazusa/utils/ViewExtensions.kt +++ b/app/src/main/java/io/legato/kazusa/utils/ViewExtensions.kt @@ -302,7 +302,7 @@ fun View.canScroll(direction: Int): Boolean { 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 fun View.setOnApplyWindowInsetsListenerCompat(listener: (View, WindowInsetsCompat) -> WindowInsetsCompat) { diff --git a/app/src/main/res/layout-land/activity_book_info.xml b/app/src/main/res/layout-land/activity_book_info.xml index 84fee84eb..16173bc64 100644 --- a/app/src/main/res/layout-land/activity_book_info.xml +++ b/app/src/main/res/layout-land/activity_book_info.xml @@ -363,7 +363,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" - android:layout_marginEnd="16dp" + android:layout_marginEnd="40dp" + android:minWidth="0dp" android:layout_marginBottom="24dp" android:text="@string/reading" android:textColor="?attr/colorOnPrimary" diff --git a/app/src/main/res/layout-land/view_read_menu.xml b/app/src/main/res/layout-land/view_read_menu.xml index b81902ca6..e9c9c233c 100644 --- a/app/src/main/res/layout-land/view_read_menu.xml +++ b/app/src/main/res/layout-land/view_read_menu.xml @@ -150,7 +150,7 @@ - + android:layout_gravity="bottom" + android:gravity="end" + android:orientation="horizontal"> + + + + diff --git a/app/src/main/res/layout/activity_book_search.xml b/app/src/main/res/layout/activity_book_search.xml index 033f5b4ca..eed0aafcc 100644 --- a/app/src/main/res/layout/activity_book_search.xml +++ b/app/src/main/res/layout/activity_book_search.xml @@ -1,80 +1,110 @@ - - + android:layout_height="match_parent"> - + android:backgroundTint="?attr/colorSurface" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + - + - + - + - + android:layout_gravity="center" + android:gravity="center" + android:orientation="vertical" + android:visibility="visible"> - - + - + + - + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> - + + + + + + + + + + + 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"> + android:paddingTop="4dp"> @@ -141,15 +175,5 @@ - - - + diff --git a/app/src/main/res/layout/activity_book_source_edit.xml b/app/src/main/res/layout/activity_book_source_edit.xml index 3c62eed4d..aaeb36fe8 100644 --- a/app/src/main/res/layout/activity_book_source_edit.xml +++ b/app/src/main/res/layout/activity_book_source_edit.xml @@ -84,6 +84,7 @@ android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" + android:paddingHorizontal="16dp" android:clipToPadding="false" tools:listitem="@layout/item_source_edit" /> diff --git a/app/src/main/res/layout/activity_manga.xml b/app/src/main/res/layout/activity_manga.xml index e786721ed..07cf86734 100644 --- a/app/src/main/res/layout/activity_manga.xml +++ b/app/src/main/res/layout/activity_manga.xml @@ -90,7 +90,7 @@ android:id="@+id/tv_retry" android:layout_width="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" android:layout_margin="16dp" app:iconPadding="4dp" diff --git a/app/src/main/res/layout/activity_read_record.xml b/app/src/main/res/layout/activity_read_record.xml index 6b6069df1..fe4515bdd 100644 --- a/app/src/main/res/layout/activity_read_record.xml +++ b/app/src/main/res/layout/activity_read_record.xml @@ -16,7 +16,7 @@ @@ -46,12 +48,12 @@ android:id="@+id/tv_remove" android:layout_width="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" android:text="清除所有" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@id/tv_reading_time" /> diff --git a/app/src/main/res/layout/activity_search_content.xml b/app/src/main/res/layout/activity_search_content.xml index 0a274e23b..d6c27707e 100644 --- a/app/src/main/res/layout/activity_search_content.xml +++ b/app/src/main/res/layout/activity_search_content.xml @@ -56,7 +56,7 @@ android:id="@+id/iv_search_content_top" android:layout_width="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" app:icon="@drawable/ic_arrow_drop_up" app:iconGravity="textStart" @@ -67,7 +67,7 @@ android:id="@+id/iv_search_content_bottom" android:layout_width="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" app:icon="@drawable/ic_arrow_drop_down" app:iconGravity="textStart" diff --git a/app/src/main/res/layout/dialog_auto_read.xml b/app/src/main/res/layout/dialog_auto_read.xml index 858560a47..1d78563f8 100644 --- a/app/src/main/res/layout/dialog_auto_read.xml +++ b/app/src/main/res/layout/dialog_auto_read.xml @@ -62,7 +62,7 @@ + + diff --git a/app/src/main/res/layout/dialog_login.xml b/app/src/main/res/layout/dialog_login.xml index ee9653eec..afad2382d 100644 --- a/app/src/main/res/layout/dialog_login.xml +++ b/app/src/main/res/layout/dialog_login.xml @@ -4,14 +4,14 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:padding="16dp"> + android:paddingHorizontal="16dp" + android:paddingVertical="8dp"> @@ -19,8 +19,6 @@ android:id="@+id/tool_bar" android:layout_width="match_parent" android:layout_height="wrap_content" - android:elevation="5dp" - android:theme="?attr/actionBarStyle" app:title="@string/login" app:displayHomeAsUp="false" app:fitStatusBar="false" @@ -35,13 +33,11 @@ android:id="@+id/flexbox" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingVertical="8dp" android:layout_marginTop="8dp" android:clipToPadding="false" - android:padding="3dp" - app:dividerDrawable="@drawable/shape_space_divider" app:flexDirection="row" - app:flexWrap="wrap" - app:showDivider="middle" /> + app:flexWrap="wrap" /> diff --git a/app/src/main/res/layout/dialog_more_config.xml b/app/src/main/res/layout/dialog_more_config.xml new file mode 100644 index 000000000..0c2471387 --- /dev/null +++ b/app/src/main/res/layout/dialog_more_config.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_read_aloud.xml b/app/src/main/res/layout/dialog_read_aloud.xml index 0a44b5c5c..018242e4b 100644 --- a/app/src/main/res/layout/dialog_read_aloud.xml +++ b/app/src/main/res/layout/dialog_read_aloud.xml @@ -215,7 +215,7 @@ + android:layout_height="match_parent" + android:minHeight="560dp"> - - - - + - @@ -85,24 +83,23 @@ android:layout_height="wrap_content" android:layout_weight="1" /> - + android:layout_marginEnd="8dp" + android:minWidth="0dp" + android:text="@string/cancel" /> - + style="@style/Widget.Material3Expressive.Button" + android:layout_marginEnd="8dp" + android:minWidth="0dp" + android:text="@string/ok" /> diff --git a/app/src/main/res/layout/dialog_update.xml b/app/src/main/res/layout/dialog_update.xml index 838fc62be..1ebd7a65e 100644 --- a/app/src/main/res/layout/dialog_update.xml +++ b/app/src/main/res/layout/dialog_update.xml @@ -26,18 +26,12 @@ android:gravity="center" android:orientation="horizontal"> - - + style="@style/Widget.Material3Expressive.Button.IconButton.Tonal" /> diff --git a/app/src/main/res/layout/fragment_chapter_list.xml b/app/src/main/res/layout/fragment_chapter_list.xml index fec27a6a8..204c8055b 100644 --- a/app/src/main/res/layout/fragment_chapter_list.xml +++ b/app/src/main/res/layout/fragment_chapter_list.xml @@ -1,7 +1,6 @@ @@ -36,7 +35,7 @@ + android:textSize="32sp" /> + android:maxLines="2" /> - + app:iconTint="?attr/colorOnSurface" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_arrange_book.xml b/app/src/main/res/layout/item_arrange_book.xml index 3fc51396e..a6f8c9cf3 100644 --- a/app/src/main/res/layout/item_arrange_book.xml +++ b/app/src/main/res/layout/item_arrange_book.xml @@ -3,9 +3,11 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingStart="8dp" + android:background="?attr/selectableItemBackground" + android:paddingStart="4dp" android:paddingEnd="16dp" - android:paddingVertical="8dp"> + android:paddingTop="2dp" + android:paddingBottom="8dp"> @@ -21,59 +24,95 @@ android:id="@+id/tv_author" android:layout_width="0dp" android:layout_height="wrap_content" + android:paddingBottom="2dp" android:singleLine="true" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/iv_download" app:layout_constraintTop_toBottomOf="@+id/tv_name" tools:text="@string/author" /> - + android:layout_marginEnd="2dp" + app:cardBackgroundColor="?attr/colorSecondaryContainer" + app:layout_constraintBottom_toBottomOf="@id/tv_name" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="@id/tv_name" + app:strokeWidth="0dp"> + + + + + + app:layout_constraintTop_toTopOf="@id/tv_author" /> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="@id/tv_author" /> + app:layout_constraintTop_toBottomOf="@id/tv_author" /> - + + + app:layout_constraintTop_toBottomOf="@id/iv_download" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_fillet_text.xml b/app/src/main/res/layout/item_fillet_text.xml index f44af0fbe..b1b4c27b7 100644 --- a/app/src/main/res/layout/item_fillet_text.xml +++ b/app/src/main/res/layout/item_fillet_text.xml @@ -1,8 +1,11 @@ - diff --git a/app/src/main/res/layout/item_find_book.xml b/app/src/main/res/layout/item_find_book.xml index 022442c9c..18fa93d4c 100644 --- a/app/src/main/res/layout/item_find_book.xml +++ b/app/src/main/res/layout/item_find_book.xml @@ -32,7 +32,7 @@ diff --git a/app/src/main/res/layout/item_group_manage.xml b/app/src/main/res/layout/item_group_manage.xml index b2089a638..f955a6c20 100644 --- a/app/src/main/res/layout/item_group_manage.xml +++ b/app/src/main/res/layout/item_group_manage.xml @@ -27,7 +27,7 @@ android:id="@+id/tv_edit" android:layout_width="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" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_group_select.xml b/app/src/main/res/layout/item_group_select.xml index 56e158339..d11fdd24f 100644 --- a/app/src/main/res/layout/item_group_select.xml +++ b/app/src/main/res/layout/item_group_select.xml @@ -21,7 +21,7 @@ android:id="@+id/tv_edit" android:layout_width="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" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_http_tts.xml b/app/src/main/res/layout/item_http_tts.xml index b3955293c..647e046b4 100644 --- a/app/src/main/res/layout/item_http_tts.xml +++ b/app/src/main/res/layout/item_http_tts.xml @@ -38,7 +38,7 @@ android:id="@+id/iv_edit" android:layout_width="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:contentDescription="@string/edit" app:icon="@drawable/ic_edit" @@ -51,7 +51,7 @@ android:id="@+id/iv_menu_delete" android:layout_width="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:iconGravity="textStart" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/item_read_record.xml b/app/src/main/res/layout/item_read_record.xml index d536f11c1..ce9489e8a 100644 --- a/app/src/main/res/layout/item_read_record.xml +++ b/app/src/main/res/layout/item_read_record.xml @@ -5,19 +5,37 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/selectableItemBackground" - android:paddingHorizontal="16dp" + android:paddingStart="16dp" + android:paddingEnd="10dp" android:paddingVertical="8dp"> + + + + + @@ -25,40 +43,32 @@ android:id="@+id/tv_reading_time_tag" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingVertical="4dp" + android:layout_marginStart="8dp" + android:layout_marginTop="2dp" android:singleLine="true" 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" /> - - @@ -67,10 +77,9 @@ android:id="@+id/tv_remove" android:layout_width="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:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toBottomOf="parent" /> + app:layout_constraintTop_toBottomOf="@id/tv_book_name" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_read_style.xml b/app/src/main/res/layout/item_read_style.xml index 98f488a4b..2f2182437 100644 --- a/app/src/main/res/layout/item_read_style.xml +++ b/app/src/main/res/layout/item_read_style.xml @@ -1,43 +1,32 @@ - + - + - + - - - - - - - + + + diff --git a/app/src/main/res/layout/item_replace_rule.xml b/app/src/main/res/layout/item_replace_rule.xml index 907099a2c..185a869be 100644 --- a/app/src/main/res/layout/item_replace_rule.xml +++ b/app/src/main/res/layout/item_replace_rule.xml @@ -14,6 +14,7 @@ android:id="@+id/cb_name" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginStart="4dp" android:layout_marginEnd="8dp" android:scrollbars="none" android:maxLines="2" diff --git a/app/src/main/res/layout/item_source_edit.xml b/app/src/main/res/layout/item_source_edit.xml index a44611ae7..d58df5028 100644 --- a/app/src/main/res/layout/item_source_edit.xml +++ b/app/src/main/res/layout/item_source_edit.xml @@ -5,7 +5,6 @@ android:id="@+id/textInputLayout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingHorizontal="16dp" android:paddingVertical="8dp"> diff --git a/app/src/main/res/layout/view_search_menu.xml b/app/src/main/res/layout/view_search_menu.xml index 4539007fc..8e533309a 100644 --- a/app/src/main/res/layout/view_search_menu.xml +++ b/app/src/main/res/layout/view_search_menu.xml @@ -81,7 +81,7 @@ android:id="@+id/iv_search_content_up" android:layout_width="36dp" android:layout_height="match_parent" - style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" + style="@style/Widget.Material3Expressive.Button.IconButton.Tonal" app:iconGravity="textStart" android:contentDescription="@string/go_to_top" app:icon="@drawable/ic_arrow_drop_up" @@ -93,7 +93,7 @@ android:id="@+id/iv_search_content_down" android:layout_width="36dp" android:layout_height="match_parent" - style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" + style="@style/Widget.Material3Expressive.Button.IconButton.Tonal" app:iconGravity="textStart" android:contentDescription="@string/go_to_bottom" app:icon="@drawable/ic_arrow_drop_down" @@ -201,7 +201,7 @@ android:layout_height="wrap_content" android:background="?attr/selectableItemBackgroundBorderless" android:clickable="true" - android:contentDescription="退出" + android:contentDescription="@string/exit" android:focusable="true" android:orientation="vertical" android:paddingBottom="7dp"> @@ -212,7 +212,7 @@ android:layout_height="0dp" android:layout_weight="1" android:adjustViewBounds="true" - android:contentDescription="退出" + android:contentDescription="@string/exit" android:maxHeight="20dp" android:src="@drawable/ic_auto_page_stop" tools:ignore="NestedWeights" /> @@ -224,7 +224,7 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" android:maxLines="1" - android:text="退出" + android:text="@string/exit" android:textSize="12sp" /> diff --git a/app/src/main/res/layout/view_select_action_bar.xml b/app/src/main/res/layout/view_select_action_bar.xml index 9c8ec67de..e50f302d5 100644 --- a/app/src/main/res/layout/view_select_action_bar.xml +++ b/app/src/main/res/layout/view_select_action_bar.xml @@ -14,6 +14,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" + android:layout_marginStart="4dp" android:text="@string/select_all" /> - - - - 是否使用自定义欢迎页 显示图标 显示默认书籍图标 - 缓存/导出 + 已缓存书籍 辅助按键配置 Url参数 仅WIFI diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index ab31dfa5e..912a45673 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -7,7 +7,6 @@ @style/Widget.App.TabLayout @drawable/popup_background @style/AppTheme.AlertDialog - @style/Widget.Material3.Chip.Filter \ No newline at end of file diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 5dd187c0c..3f71a77af 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -225,7 +225,7 @@ 开始下载 取消下载 暂无任务 - 已下载 %1$d/%2$d + %1$d/%2$d 导入选择书籍 更新和搜索线程数(太多会卡顿) 切换图标 @@ -979,7 +979,7 @@ 是否使用自定义欢迎页 显示图标 显示默认书籍图标 - 缓存/导出 + 书籍缓存 辅助按键配置 URL 参数 仅 WiFi diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 34ddda392..3495c03c3 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -40,12 +40,16 @@ //**********System Style******************// + +