优化
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
package io.legado.app.ui.book.read
|
||||
|
||||
import android.app.Application
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.BaseDialogFragment
|
||||
import io.legado.app.base.BaseViewModel
|
||||
@@ -15,6 +17,7 @@ import io.legado.app.databinding.DialogEditTextBinding
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.book.isLocal
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.theme.primaryColor
|
||||
import io.legado.app.model.ReadBook
|
||||
@@ -53,6 +56,13 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
|
||||
editTitle(chapter)
|
||||
}
|
||||
}
|
||||
viewModel.loadStateLiveData.observe(viewLifecycleOwner) {
|
||||
if (it) {
|
||||
binding.rlLoading.show()
|
||||
} else {
|
||||
binding.rlLoading.hide()
|
||||
}
|
||||
}
|
||||
viewModel.initContent {
|
||||
binding.contentView.setText(it)
|
||||
binding.contentView.post {
|
||||
@@ -70,17 +80,8 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
|
||||
binding.toolBar.menu.applyTint(requireContext())
|
||||
binding.toolBar.setOnMenuItemClickListener {
|
||||
when (it.itemId) {
|
||||
R.id.menu_save -> launch {
|
||||
binding.contentView.text?.toString()?.let { content ->
|
||||
withContext(IO) {
|
||||
val book = ReadBook.book ?: return@withContext
|
||||
val chapter = appDb.bookChapterDao
|
||||
.getChapter(book.bookUrl, ReadBook.durChapterIndex)
|
||||
?: return@withContext
|
||||
BookHelp.saveText(book, chapter, content)
|
||||
}
|
||||
}
|
||||
ReadBook.loadContent(ReadBook.durChapterIndex, resetPageOffset = false)
|
||||
R.id.menu_save -> {
|
||||
save()
|
||||
dismiss()
|
||||
}
|
||||
R.id.menu_reset -> viewModel.initContent(true) { content ->
|
||||
@@ -113,8 +114,25 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
|
||||
}
|
||||
}
|
||||
|
||||
class ContentEditViewModel(application: Application) : BaseViewModel(application) {
|
||||
override fun onCancel(dialog: DialogInterface) {
|
||||
super.onCancel(dialog)
|
||||
save()
|
||||
}
|
||||
|
||||
private fun save() {
|
||||
val content = binding.contentView.text?.toString() ?: return
|
||||
Coroutine.async {
|
||||
val book = ReadBook.book ?: return@async
|
||||
val chapter = appDb.bookChapterDao
|
||||
.getChapter(book.bookUrl, ReadBook.durChapterIndex)
|
||||
?: return@async
|
||||
BookHelp.saveText(book, chapter, content)
|
||||
ReadBook.loadContent(ReadBook.durChapterIndex, resetPageOffset = false)
|
||||
}
|
||||
}
|
||||
|
||||
class ContentEditViewModel(application: Application) : BaseViewModel(application) {
|
||||
val loadStateLiveData = MutableLiveData<Boolean>()
|
||||
var content: String? = null
|
||||
|
||||
fun initContent(reset: Boolean = false, success: (String) -> Unit) {
|
||||
@@ -136,9 +154,13 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
|
||||
contentProcessor.getContent(book, chapter, content, includeTitle = false)
|
||||
.joinToString("\n")
|
||||
}
|
||||
}.onStart {
|
||||
loadStateLiveData.postValue(true)
|
||||
}.onSuccess {
|
||||
content = it
|
||||
success.invoke(it ?: "")
|
||||
}.onFinally {
|
||||
loadStateLiveData.postValue(false)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,19 +2,43 @@ package io.legado.app.ui.book.search
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.BaseDialogFragment
|
||||
import io.legado.app.databinding.DialogSearchScopeBinding
|
||||
import io.legado.app.lib.theme.primaryColor
|
||||
import io.legado.app.utils.setLayout
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
|
||||
class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope, true) {
|
||||
class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
|
||||
|
||||
private val binding by viewBinding(DialogSearchScopeBinding::bind)
|
||||
val callback: Callback
|
||||
get() {
|
||||
return parentFragment as? Callback ?: activity as Callback
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
}
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
binding.toolBar.setBackgroundColor(primaryColor)
|
||||
initOtherView()
|
||||
}
|
||||
|
||||
|
||||
private fun initOtherView() {
|
||||
binding.tvCancel.setOnClickListener {
|
||||
dismiss()
|
||||
}
|
||||
binding.tvAllSource.setOnClickListener {
|
||||
callback.onSearchScopeOk(SearchScope(""))
|
||||
}
|
||||
binding.tvOk.setOnClickListener {
|
||||
callback.onSearchScopeOk(SearchScope(""))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout 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"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:background="@color/background"
|
||||
android:orientation="vertical">
|
||||
|
||||
@@ -11,14 +11,27 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="?attr/actionBarStyle"
|
||||
app:title="edit"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay"
|
||||
app:titleTextAppearance="@style/ToolbarTitle" />
|
||||
app:title="edit"
|
||||
app:titleTextAppearance="@style/ToolbarTitle"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<io.legado.app.lib.theme.view.ThemeEditText
|
||||
android:id="@+id/content_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="12dp" />
|
||||
android:layout_height="0dp"
|
||||
android:padding="12dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tool_bar"
|
||||
app:layout_constraintBottom_toBottomOf="parent" />
|
||||
|
||||
</LinearLayout>
|
||||
<io.legado.app.ui.widget.anima.RotateLoading
|
||||
android:id="@+id/rl_loading"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:visibility="invisible"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tool_bar"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,7 +1,115 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/background">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/tool_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/background_menu"
|
||||
android:elevation="5dp"
|
||||
android:theme="?attr/actionBarStyle"
|
||||
app:displayHomeAsUp="false"
|
||||
app:fitStatusBar="false"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay"
|
||||
app:title="@string/search_scope"
|
||||
app:titleTextAppearance="@style/ToolbarTitle" />
|
||||
|
||||
<RadioGroup
|
||||
android:id="@+id/rg_scope"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="11dp"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tool_bar">
|
||||
|
||||
<io.legado.app.lib.theme.view.ThemeRadioNoButton
|
||||
android:id="@+id/rb_group"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="4dp"
|
||||
android:layout_weight="1"
|
||||
android:button="@null"
|
||||
android:gravity="center"
|
||||
android:padding="5dp"
|
||||
android:singleLine="true"
|
||||
android:checked="true"
|
||||
android:text="@string/group"
|
||||
app:isBottomBackground="true" />
|
||||
|
||||
<io.legado.app.lib.theme.view.ThemeRadioNoButton
|
||||
android:id="@+id/rb_source"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="4dp"
|
||||
android:layout_weight="1"
|
||||
android:button="@null"
|
||||
android:gravity="center"
|
||||
android:padding="5dp"
|
||||
android:singleLine="true"
|
||||
android:text="@string/book_source"
|
||||
app:isBottomBackground="true" />
|
||||
|
||||
</RadioGroup>
|
||||
|
||||
<io.legado.app.ui.widget.recycler.scroller.FastScrollRecyclerView
|
||||
android:id="@+id/recycler_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
app:layout_constraintBottom_toTopOf="@+id/ll_bottom_bar"
|
||||
app:layout_constraintTop_toBottomOf="@+id/rg_scope" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ll_bottom_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/background"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_all_source"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="16dp"
|
||||
android:padding="12dp"
|
||||
android:text="@string/all_source"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<Space
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_cancel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="16dp"
|
||||
android:padding="12dp"
|
||||
android:text="@string/cancel"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<io.legado.app.ui.widget.text.AccentTextView
|
||||
android:id="@+id/tv_ok"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="16dp"
|
||||
android:padding="12dp"
|
||||
android:text="@string/ok"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -39,7 +39,7 @@
|
||||
android:text="@string/cancel"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView
|
||||
<io.legado.app.ui.widget.text.AccentTextView
|
||||
android:id="@+id/tv_ok"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
Reference in New Issue
Block a user