修复编辑内容失效的问题
This commit is contained in:
@@ -1,16 +1,17 @@
|
|||||||
package io.legato.kazusa.ui.book.read
|
package io.legato.kazusa.ui.book.read
|
||||||
|
|
||||||
//import io.legado.app.lib.theme.primaryColor
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.DialogInterface
|
import android.content.DialogInterface
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.text.Spannable
|
||||||
|
import android.text.Spanned
|
||||||
|
import android.text.style.BackgroundColorSpan
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
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.BaseViewModel
|
import io.legato.kazusa.base.BaseViewModel
|
||||||
import io.legato.kazusa.data.appDb
|
import io.legato.kazusa.data.appDb
|
||||||
import io.legato.kazusa.data.entities.BookChapter
|
import io.legato.kazusa.data.entities.BookChapter
|
||||||
@@ -25,7 +26,7 @@ import io.legato.kazusa.model.ReadBook
|
|||||||
import io.legato.kazusa.model.webBook.WebBook
|
import io.legato.kazusa.model.webBook.WebBook
|
||||||
import io.legato.kazusa.utils.gone
|
import io.legato.kazusa.utils.gone
|
||||||
import io.legato.kazusa.utils.sendToClip
|
import io.legato.kazusa.utils.sendToClip
|
||||||
import io.legato.kazusa.utils.setLayout
|
import io.legato.kazusa.utils.themeColor
|
||||||
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.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
@@ -35,16 +36,11 @@ import kotlinx.coroutines.withContext
|
|||||||
/**
|
/**
|
||||||
* 内容编辑
|
* 内容编辑
|
||||||
*/
|
*/
|
||||||
class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
|
class ContentEditDialog : BaseBottomSheetDialogFragment(R.layout.dialog_content_edit) {
|
||||||
|
|
||||||
val binding by viewBinding(DialogContentEditBinding::bind)
|
val binding by viewBinding(DialogContentEditBinding::bind)
|
||||||
val viewModel by viewModels<ContentEditViewModel>()
|
val viewModel by viewModels<ContentEditViewModel>()
|
||||||
|
|
||||||
override fun onStart() {
|
|
||||||
super.onStart()
|
|
||||||
setLayout(1f, ViewGroup.LayoutParams.MATCH_PARENT)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
//binding.toolBar.setBackgroundColor(primaryColor)
|
//binding.toolBar.setBackgroundColor(primaryColor)
|
||||||
binding.toolBar.title = ReadBook.curTextChapter?.title
|
binding.toolBar.title = ReadBook.curTextChapter?.title
|
||||||
@@ -68,13 +64,18 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
|
|||||||
viewModel.initContent {
|
viewModel.initContent {
|
||||||
binding.contentView.setText(it)
|
binding.contentView.setText(it)
|
||||||
binding.contentView.post {
|
binding.contentView.post {
|
||||||
binding.contentView.apply {
|
val layout = binding.contentView.layout ?: return@post
|
||||||
val lineIndex = layout.getLineForOffset(ReadBook.durChapterPos)
|
val targetY = binding.contentView.top +
|
||||||
val lineHeight = layout.getLineTop(lineIndex)
|
layout.getLineTop(
|
||||||
scrollTo(0, lineHeight)
|
layout.getLineForOffset(ReadBook.durChapterPos)
|
||||||
}
|
)
|
||||||
|
|
||||||
|
binding.scrollView.smoothScrollTo(0, targetY)
|
||||||
|
|
||||||
|
highlightCurrentLineTwice()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initMenu() {
|
private fun initMenu() {
|
||||||
@@ -116,6 +117,35 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun highlightCurrentLineTwice() {
|
||||||
|
val editText = binding.contentView
|
||||||
|
val layout = editText.layout ?: return
|
||||||
|
val offset = ReadBook.durChapterPos
|
||||||
|
val lineIndex = layout.getLineForOffset(offset)
|
||||||
|
|
||||||
|
val start = layout.getLineStart(lineIndex)
|
||||||
|
val end = layout.getLineEnd(lineIndex)
|
||||||
|
|
||||||
|
val spannable = editText.text as Spannable
|
||||||
|
val span =
|
||||||
|
BackgroundColorSpan(requireContext().themeColor(com.google.android.material.R.attr.colorSecondaryContainer))
|
||||||
|
|
||||||
|
|
||||||
|
fun flash(times: Int) {
|
||||||
|
if (times <= 0) return
|
||||||
|
spannable.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||||
|
editText.postDelayed({
|
||||||
|
spannable.removeSpan(span)
|
||||||
|
editText.postDelayed({
|
||||||
|
flash(times - 1)
|
||||||
|
}, 200)
|
||||||
|
}, 300)
|
||||||
|
}
|
||||||
|
|
||||||
|
flash(3)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onCancel(dialog: DialogInterface) {
|
override fun onCancel(dialog: DialogInterface) {
|
||||||
super.onCancel(dialog)
|
super.onCancel(dialog)
|
||||||
save()
|
save()
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<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"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<androidx.appcompat.widget.Toolbar
|
<androidx.appcompat.widget.Toolbar
|
||||||
@@ -11,17 +11,28 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:theme="?attr/actionBarStyle"
|
android:theme="?attr/actionBarStyle"
|
||||||
app:title="edit"
|
app:title="edit"
|
||||||
|
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<io.legato.kazusa.lib.theme.view.ThemeEditText
|
<androidx.core.widget.NestedScrollView
|
||||||
android:id="@+id/content_view"
|
android:id="@+id/scrollView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="wrap_content"
|
||||||
android:padding="12dp"
|
app:layout_constraintTop_toBottomOf="@id/tool_bar">
|
||||||
android:importantForAutofill="no"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/tool_bar"
|
<io.legato.kazusa.ui.widget.text.TextInputLayout
|
||||||
app:layout_constraintBottom_toBottomOf="parent" />
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="16dp"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/tool_bar">
|
||||||
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/content_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:importantForAutofill="no"
|
||||||
|
/>
|
||||||
|
</io.legato.kazusa.ui.widget.text.TextInputLayout>
|
||||||
|
|
||||||
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
|
||||||
<com.google.android.material.loadingindicator.LoadingIndicator
|
<com.google.android.material.loadingindicator.LoadingIndicator
|
||||||
android:id="@+id/rl_loading"
|
android:id="@+id/rl_loading"
|
||||||
|
|||||||
Reference in New Issue
Block a user