diff --git a/app/src/main/java/io/legato/kazusa/ui/book/changecover/ChangeCoverDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/changecover/ChangeCoverDialog.kt index 1e7530c8b..1ce3142f5 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/changecover/ChangeCoverDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/changecover/ChangeCoverDialog.kt @@ -1,21 +1,19 @@ package io.legato.kazusa.ui.book.changecover +//import io.legado.app.lib.theme.primaryColor import android.os.Bundle import android.view.MenuItem import android.view.View -import android.view.ViewGroup import androidx.appcompat.widget.Toolbar +import androidx.core.view.isVisible import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle.State.STARTED import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.recyclerview.widget.GridLayoutManager import io.legato.kazusa.R -import io.legato.kazusa.base.BaseDialogFragment +import io.legato.kazusa.base.BaseBottomSheetDialogFragment import io.legato.kazusa.databinding.DialogChangeCoverBinding -//import io.legado.app.lib.theme.primaryColor -import io.legato.kazusa.utils.applyTint -import io.legato.kazusa.utils.setLayout import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.delay import kotlinx.coroutines.flow.conflate @@ -24,7 +22,7 @@ import kotlinx.coroutines.launch /** * 换封面 */ -class ChangeCoverDialog() : BaseDialogFragment(R.layout.dialog_change_cover), +class ChangeCoverDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_change_cover), Toolbar.OnMenuItemClickListener, CoverAdapter.CallBack { @@ -43,11 +41,6 @@ class ChangeCoverDialog() : BaseDialogFragment(R.layout.dialog_change_cover), private val startStopMenuItem: MenuItem? get() = binding.toolBar.menu.findItem(R.id.menu_start_stop) - override fun onStart() { - super.onStart() - setLayout(1f, ViewGroup.LayoutParams.MATCH_PARENT) - } - override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { //binding.toolBar.setBackgroundColor(primaryColor) binding.toolBar.setTitle(R.string.change_cover_source) @@ -82,7 +75,7 @@ class ChangeCoverDialog() : BaseDialogFragment(R.layout.dialog_change_cover), override fun observeLiveBus() { super.observeLiveBus() viewModel.searchStateData.observe(viewLifecycleOwner) { - binding.refreshProgressBar.isAutoLoading = it + binding.refreshProgressBar.isVisible = it if (it) { startStopMenuItem?.let { item -> item.setIcon(R.drawable.ic_stop_black_24dp) diff --git a/app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeBookSourceAdapter.kt b/app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeBookSourceAdapter.kt index 0a8e33867..22c337a19 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeBookSourceAdapter.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeBookSourceAdapter.kt @@ -5,8 +5,6 @@ import android.os.Bundle import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.PopupMenu -import androidx.core.graphics.drawable.DrawableCompat -import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil import io.legato.kazusa.R import io.legato.kazusa.base.adapter.DiffRecyclerAdapter @@ -15,12 +13,10 @@ import io.legato.kazusa.data.entities.SearchBook import io.legato.kazusa.databinding.ItemChangeSourceBinding import io.legato.kazusa.help.config.AppConfig import io.legato.kazusa.lib.dialogs.alert -import io.legato.kazusa.utils.getCompatColor import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.invisible import io.legato.kazusa.utils.themeColor import io.legato.kazusa.utils.visible -import splitties.init.appCtx import splitties.views.onLongClick @@ -88,38 +84,11 @@ class ChangeBookSourceAdapter( } val score = callBack.getBookScore(item) if (score > 0) { - binding.ivBad.gone() - binding.ivGood.visible() - DrawableCompat.setTint( - binding.ivGood.drawable, - appCtx.getCompatColor(R.color.md_red_A200) - ) - DrawableCompat.setTint( - binding.ivBad.drawable, - appCtx.getCompatColor(R.color.md_blue_100) - ) - } else if (score < 0) { - binding.ivGood.gone() - binding.ivBad.visible() - DrawableCompat.setTint( - binding.ivGood.drawable, - appCtx.getCompatColor(R.color.md_red_100) - ) - DrawableCompat.setTint( - binding.ivBad.drawable, - appCtx.getCompatColor(R.color.md_blue_A200) - ) + // 已置顶 + binding.ivGood.setImageResource(R.drawable.ic_praise_filled) } else { - binding.ivGood.visible() - binding.ivBad.visible() - DrawableCompat.setTint( - binding.ivGood.drawable, - appCtx.getCompatColor(R.color.md_red_100) - ) - DrawableCompat.setTint( - binding.ivBad.drawable, - appCtx.getCompatColor(R.color.md_blue_100) - ) + // 未置顶 + binding.ivGood.setImageResource(R.drawable.ic_praise) } if (AppConfig.changeSourceLoadWordCount && !item.chapterWordCountText.isNullOrBlank()) { @@ -138,45 +107,16 @@ class ChangeBookSourceAdapter( override fun registerListener(holder: ItemViewHolder, binding: ItemChangeSourceBinding) { binding.ivGood.setOnClickListener { - if (binding.ivBad.isVisible) { - DrawableCompat.setTint( - binding.ivGood.drawable, - appCtx.getCompatColor(R.color.md_red_A200) - ) - binding.ivBad.gone() - getItem(holder.layoutPosition)?.let { - callBack.setBookScore(it, 1) - } + val item = getItem(holder.layoutPosition) ?: return@setOnClickListener + val score = callBack.getBookScore(item) + if (score > 0) { + // 已置顶 -> 取消置顶 + binding.ivGood.setImageResource(R.drawable.ic_praise) + callBack.setBookScore(item, 0) } else { - DrawableCompat.setTint( - binding.ivGood.drawable, - appCtx.getCompatColor(R.color.md_red_100) - ) - binding.ivBad.visible() - getItem(holder.layoutPosition)?.let { - callBack.setBookScore(it, 0) - } - } - } - binding.ivBad.setOnClickListener { - if (binding.ivGood.isVisible) { - DrawableCompat.setTint( - binding.ivBad.drawable, - appCtx.getCompatColor(R.color.md_blue_A200) - ) - binding.ivGood.gone() - getItem(holder.layoutPosition)?.let { - callBack.setBookScore(it, -1) - } - } else { - DrawableCompat.setTint( - binding.ivBad.drawable, - appCtx.getCompatColor(R.color.md_blue_100) - ) - binding.ivGood.visible() - getItem(holder.layoutPosition)?.let { - callBack.setBookScore(it, 0) - } + // 未置顶 -> 设置置顶 + binding.ivGood.setImageResource(R.drawable.ic_praise_filled) + callBack.setBookScore(item, 1) } } holder.itemView.setOnClickListener { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeChapterSourceAdapter.kt b/app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeChapterSourceAdapter.kt index 6743c8b75..128f88ce4 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeChapterSourceAdapter.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeChapterSourceAdapter.kt @@ -5,8 +5,6 @@ import android.os.Bundle import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.PopupMenu -import androidx.core.graphics.drawable.DrawableCompat -import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil import io.legato.kazusa.R import io.legato.kazusa.base.adapter.DiffRecyclerAdapter @@ -14,11 +12,9 @@ import io.legato.kazusa.base.adapter.ItemViewHolder import io.legato.kazusa.data.entities.SearchBook import io.legato.kazusa.databinding.ItemChangeSourceBinding import io.legato.kazusa.help.config.AppConfig -import io.legato.kazusa.utils.getCompatColor import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.invisible import io.legato.kazusa.utils.visible -import splitties.init.appCtx import splitties.views.onLongClick @@ -80,34 +76,14 @@ class ChangeChapterSourceAdapter( } val score = callBack.getBookScore(item) if (score > 0) { - binding.ivBad.gone() - binding.ivGood.visible() - DrawableCompat.setTint(binding.ivGood.drawable, appCtx.getCompatColor(R.color.md_red_A200)) - DrawableCompat.setTint(binding.ivBad.drawable, appCtx.getCompatColor(R.color.md_blue_100)) - } else if (score < 0) { - binding.ivGood.gone() - binding.ivBad.visible() - DrawableCompat.setTint( - binding.ivGood.drawable, - appCtx.getCompatColor(R.color.md_red_100) - ) - DrawableCompat.setTint( - binding.ivBad.drawable, - appCtx.getCompatColor(R.color.md_blue_A200) - ) + // 已置顶 + binding.ivGood.setImageResource(R.drawable.ic_praise_filled) } else { - binding.ivGood.visible() - binding.ivBad.visible() - DrawableCompat.setTint( - binding.ivGood.drawable, - appCtx.getCompatColor(R.color.md_red_100) - ) - DrawableCompat.setTint( - binding.ivBad.drawable, - appCtx.getCompatColor(R.color.md_blue_100) - ) + // 未置顶 + binding.ivGood.setImageResource(R.drawable.ic_praise) } + if (AppConfig.changeSourceLoadWordCount && !item.chapterWordCountText.isNullOrBlank()) { tvCurrentChapterWordCount.visible() } else { @@ -124,33 +100,16 @@ class ChangeChapterSourceAdapter( override fun registerListener(holder: ItemViewHolder, binding: ItemChangeSourceBinding) { binding.ivGood.setOnClickListener { - if (binding.ivBad.isVisible) { - DrawableCompat.setTint(binding.ivGood.drawable, appCtx.getCompatColor(R.color.md_red_A200)) - binding.ivBad.gone() - getItem(holder.layoutPosition)?.let { - callBack.setBookScore(it, 1) - } + val item = getItem(holder.layoutPosition) ?: return@setOnClickListener + val score = callBack.getBookScore(item) + if (score > 0) { + // 已置顶 -> 取消置顶 + binding.ivGood.setImageResource(R.drawable.ic_praise) + callBack.setBookScore(item, 0) } else { - DrawableCompat.setTint(binding.ivGood.drawable, appCtx.getCompatColor(R.color.md_red_100)) - binding.ivBad.visible() - getItem(holder.layoutPosition)?.let { - callBack.setBookScore(it, 0) - } - } - } - binding.ivBad.setOnClickListener { - if (binding.ivGood.isVisible) { - DrawableCompat.setTint(binding.ivBad.drawable, appCtx.getCompatColor(R.color.md_blue_A200)) - binding.ivGood.gone() - getItem(holder.layoutPosition)?.let { - callBack.setBookScore(it, -1) - } - } else { - DrawableCompat.setTint(binding.ivBad.drawable, appCtx.getCompatColor(R.color.md_blue_100)) - binding.ivGood.visible() - getItem(holder.layoutPosition)?.let { - callBack.setBookScore(it, 0) - } + // 未置顶 -> 设置置顶 + binding.ivGood.setImageResource(R.drawable.ic_praise_filled) + callBack.setBookScore(item, 1) } } holder.itemView.setOnClickListener { 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 13ffcca0d..0aff0c9d0 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 @@ -1,9 +1,8 @@ package io.legato.kazusa.ui.book.group -//import io.legado.app.lib.theme.primaryColor import android.os.Bundle import android.view.View -import androidx.appcompat.widget.PopupMenu +import android.widget.ArrayAdapter import androidx.fragment.app.viewModels import io.legato.kazusa.R import io.legato.kazusa.base.BaseBottomSheetDialogFragment @@ -69,6 +68,13 @@ class GroupEditDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_book_gro @Suppress("DEPRECATION") bookGroup = arguments?.getParcelable("group") + val sortAdapter = ArrayAdapter( + requireContext(), + android.R.layout.simple_list_item_1, + sortOptions + ) + binding.actvSortMenu.setAdapter(sortAdapter) + bookGroup?.let { group -> binding.btnDelete.isEnabled = (group.groupId > 0 || group.groupId == Long.MIN_VALUE) binding.tieGroupName.setText(group.groupName) @@ -82,30 +88,20 @@ class GroupEditDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_book_gro } else { 0 } - binding.chipSortMenu.text = sortOptions[selectedSortIndex] + binding.actvSortMenu.setText(sortOptions[selectedSortIndex], false) + } ?: run { binding.btnDelete.gone() binding.ivCover.load() selectedSortIndex = 0 - binding.chipSortMenu.text = sortOptions[selectedSortIndex] + binding.actvSortMenu.setText(sortOptions[selectedSortIndex], false) } + binding.actvSortMenu.setOnItemClickListener { _, _, position, _ -> + selectedSortIndex = position + } binding.run { - chipSortMenu.setOnClickListener { chip -> - PopupMenu(requireContext(), chip).apply { - sortOptions.forEachIndexed { index, title -> - menu.add(0, index, index, title) - } - setOnMenuItemClickListener { item -> - selectedSortIndex = item.itemId - chipSortMenu.text = sortOptions[selectedSortIndex] - true - } - show() - } - } - ivCover.onClick { selectImage.launch() } @@ -149,8 +145,8 @@ class GroupEditDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_book_gro } } } - } + btnDelete.onClick { deleteGroup { bookGroup?.let { @@ -163,6 +159,7 @@ class GroupEditDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_book_gro } } + private fun deleteGroup(ok: () -> Unit) { alert(R.string.delete, R.string.sure_del) { yesButton { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt index 82aba7449..f6901a0cf 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt @@ -584,23 +584,23 @@ class ReadMangaActivity : VMBaseActivity - namePaint.textSize = viewWidth / 6 - namePaint.strokeWidth = namePaint.textSize / 5 - name.forEachIndexed { index, char -> - namePaint.color = Color.WHITE - namePaint.style = Paint.Style.STROKE - canvas.drawText(char, startX, startY, namePaint) - //namePaint.color = context.accentColor - namePaint.style = Paint.Style.FILL - canvas.drawText(char, startX, startY, namePaint) - startY += namePaint.textHeight - if (startY > viewHeight * 0.8) { - startX += namePaint.textSize - namePaint.textSize = viewWidth / 10 - startY = (viewHeight - (name.size - index - 1) * namePaint.textHeight) / 2 + if (BookCover.drawBookName) { + var startX = width * 0.2f + var startY = viewHeight * 0.2f + + name?.toStringArray()?.let { nameChars -> + val textSize = viewWidth / 8 + namePaint.textSize = textSize + namePaint.strokeWidth = textSize / 8 + + nameChars.forEach { char -> + namePaint.color = Color.WHITE + namePaint.style = Paint.Style.STROKE + canvas.drawText(char, startX, startY, namePaint) + + namePaint.color = context.themeColor(androidx.appcompat.R.attr.colorPrimary) + namePaint.style = Paint.Style.FILL + canvas.drawText(char, startX, startY, namePaint) + + startY += namePaint.textHeight + + if (startY > viewHeight * 0.8f) { + startX += textSize + 4.spToPx() + startY = viewHeight * 0.2f + } } } } - if (!BookCover.drawBookAuthor) return - author?.toStringArray()?.let { author -> - authorPaint.textSize = viewWidth / 10 - authorPaint.strokeWidth = authorPaint.textSize / 5 - startX = width * 0.8f - startY = viewHeight * 0.95f - author.size * authorPaint.textHeight - startY = maxOf(startY, viewHeight * 0.3f) - author.forEach { - authorPaint.color = Color.WHITE - authorPaint.style = Paint.Style.STROKE - canvas.drawText(it, startX, startY, authorPaint) - //authorPaint.color = context.accentColor - authorPaint.style = Paint.Style.FILL - canvas.drawText(it, startX, startY, authorPaint) - startY += authorPaint.textHeight - if (startY > viewHeight * 0.95) { - return@let + + if (BookCover.drawBookAuthor) { + author?.toStringArray()?.let { authorChars -> + val textSize = viewWidth / 10 + authorPaint.textSize = textSize + authorPaint.strokeWidth = textSize / 5 + + var startX = width * 0.8f + var startY = viewHeight * 0.8f + + authorChars.forEach { char -> + + authorPaint.color = Color.WHITE + authorPaint.style = Paint.Style.STROKE + canvas.drawText(char, startX, startY, authorPaint) + + authorPaint.color = + context.themeColor(com.google.android.material.R.attr.colorSecondary) + authorPaint.style = Paint.Style.FILL + canvas.drawText(char, startX, startY, authorPaint) + + startY += authorPaint.textHeight + + if (startY > viewHeight * 0.95f) return@let } } } } + fun setHeight(height: Int) { val width = height * 5 / 7 minimumWidth = width diff --git a/app/src/main/res/drawable/ic_praise.xml b/app/src/main/res/drawable/ic_praise.xml index 24d4ef67c..b5bfbfde1 100644 --- a/app/src/main/res/drawable/ic_praise.xml +++ b/app/src/main/res/drawable/ic_praise.xml @@ -1,3 +1,5 @@ - + diff --git a/app/src/main/res/drawable/ic_praise_filled.xml b/app/src/main/res/drawable/ic_praise_filled.xml new file mode 100644 index 000000000..965aabd87 --- /dev/null +++ b/app/src/main/res/drawable/ic_praise_filled.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/image_cover_default.jpg b/app/src/main/res/drawable/image_cover_default.jpg deleted file mode 100644 index b64c1b3aa..000000000 Binary files a/app/src/main/res/drawable/image_cover_default.jpg and /dev/null differ diff --git a/app/src/main/res/drawable/image_cover_default.png b/app/src/main/res/drawable/image_cover_default.png new file mode 100644 index 000000000..b9dc008b1 Binary files /dev/null and b/app/src/main/res/drawable/image_cover_default.png differ diff --git a/app/src/main/res/layout/dialog_book_change_source.xml b/app/src/main/res/layout/dialog_book_change_source.xml index b3da5648f..689b90cd8 100644 --- a/app/src/main/res/layout/dialog_book_change_source.xml +++ b/app/src/main/res/layout/dialog_book_change_source.xml @@ -103,6 +103,12 @@ android:text="还没有源!" /> + + + + + android:paddingHorizontal="16dp" + android:paddingVertical="8dp"> - + + + + + + - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_book_group_edit.xml b/app/src/main/res/layout/dialog_book_group_edit.xml index 299e286a9..5e9528dd6 100644 --- a/app/src/main/res/layout/dialog_book_group_edit.xml +++ b/app/src/main/res/layout/dialog_book_group_edit.xml @@ -31,7 +31,7 @@ - - - + android:layout_marginStart="8dp" + android:hint="@string/group_name" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@id/iv_cover" + app:layout_constraintTop_toTopOf="@id/iv_cover"> + android:ellipsize="end" + android:maxLines="1" /> - + + - - - - - - + android:cursorVisible="false" + android:ellipsize="end" + android:focusable="false" + android:inputType="none" + android:singleLine="true" /> + + android:checked="true" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/iv_cover" /> - - + - + android:layout_height="wrap_content"> - + + + + - + android:layout_height="wrap_content"> - + + + + diff --git a/app/src/main/res/layout/dialog_change_cover.xml b/app/src/main/res/layout/dialog_change_cover.xml index 8bce12bb7..e73d76072 100644 --- a/app/src/main/res/layout/dialog_change_cover.xml +++ b/app/src/main/res/layout/dialog_change_cover.xml @@ -15,10 +15,12 @@ app:displayHomeAsUp="false" app:fitStatusBar="false" /> - + android:layout_height="wrap_content" + android:indeterminate="true" + android:visibility="gone" /> + android:paddingVertical="12dp"> - - - + app:layout_constraintBottom_toBottomOf="parent" + app:tint="?attr/colorPrimary" /> @@ -84,7 +71,7 @@ android:id="@+id/tv_current_chapter_word_count" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="16dp" + android:layout_marginStart="12dp" android:layout_marginTop="8dp" android:textSize="12sp" app:layout_constraintEnd_toStartOf="@id/tv_respond_time" @@ -98,7 +85,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" + android:layout_marginEnd="12dp" android:textSize="12sp" app:layout_constraintBaseline_toBaselineOf="@id/tv_current_chapter_word_count" app:layout_constraintEnd_toStartOf="@id/iv_checked" @@ -109,9 +96,9 @@ - + android:layout_height="wrap_content"> - + + + + +