自动隐藏键盘
This commit is contained in:
@@ -44,6 +44,7 @@ import io.legado.app.ui.book.toc.TocActivityResult
|
||||
import io.legado.app.ui.document.HandleFileContract
|
||||
import io.legado.app.ui.login.SourceLoginActivity
|
||||
import io.legado.app.ui.widget.dialog.PhotoDialog
|
||||
import io.legado.app.ui.widget.dialog.VariableDialog
|
||||
import io.legado.app.ui.widget.dialog.WaitDialog
|
||||
import io.legado.app.utils.*
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
@@ -419,22 +420,8 @@ class BookInfoActivity :
|
||||
toastOnUi("书源不存在")
|
||||
return@launch
|
||||
}
|
||||
val variable = withContext(IO) { source.getVariable() }
|
||||
alert(R.string.set_source_variable) {
|
||||
setMessage(source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取"))
|
||||
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
|
||||
editView.hint = "source variable"
|
||||
editView.setText(variable)
|
||||
}
|
||||
customView { alertBinding.root }
|
||||
okButton {
|
||||
viewModel.bookSource?.setVariable(alertBinding.editView.text?.toString())
|
||||
}
|
||||
cancelButton()
|
||||
neutralButton(R.string.delete) {
|
||||
viewModel.bookSource?.setVariable(null)
|
||||
}
|
||||
}
|
||||
val comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")
|
||||
showDialogFragment(VariableDialog(source.getKey(), comment))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.data.entities.rule.*
|
||||
import io.legado.app.databinding.ActivityBookSourceEditBinding
|
||||
import io.legado.app.databinding.DialogEditTextBinding
|
||||
import io.legado.app.help.config.LocalConfig
|
||||
import io.legado.app.lib.dialogs.SelectItem
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
@@ -31,6 +30,7 @@ import io.legado.app.ui.login.SourceLoginActivity
|
||||
import io.legado.app.ui.qrcode.QrCodeResult
|
||||
import io.legado.app.ui.widget.dialog.TextDialog
|
||||
import io.legado.app.ui.widget.dialog.UrlOptionDialog
|
||||
import io.legado.app.ui.widget.dialog.VariableDialog
|
||||
import io.legado.app.ui.widget.keyboard.KeyboardToolPop
|
||||
import io.legado.app.ui.widget.text.EditEntity
|
||||
import io.legado.app.utils.*
|
||||
@@ -593,29 +593,13 @@ class BookSourceEditActivity :
|
||||
}
|
||||
|
||||
private fun setSourceVariable() {
|
||||
launch {
|
||||
val source = viewModel.bookSource
|
||||
if (source == null) {
|
||||
toastOnUi("先保存书源")
|
||||
return@launch
|
||||
}
|
||||
val variable = withContext(IO) { source.getVariable() }
|
||||
alert(R.string.set_source_variable) {
|
||||
setMessage(source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取"))
|
||||
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
|
||||
editView.hint = "source variable"
|
||||
editView.setText(variable)
|
||||
}
|
||||
customView { alertBinding.root }
|
||||
okButton {
|
||||
viewModel.bookSource?.setVariable(alertBinding.editView.text?.toString())
|
||||
}
|
||||
cancelButton()
|
||||
neutralButton(R.string.delete) {
|
||||
viewModel.bookSource?.setVariable(null)
|
||||
}
|
||||
}
|
||||
val source = viewModel.bookSource
|
||||
if (source == null) {
|
||||
toastOnUi("先保存书源")
|
||||
return
|
||||
}
|
||||
val comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")
|
||||
showDialogFragment(VariableDialog(source.getKey(), comment))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,17 +12,14 @@ import androidx.fragment.app.FragmentStatePagerAdapter
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.VMBaseActivity
|
||||
import io.legado.app.databinding.ActivityRssArtivlesBinding
|
||||
import io.legado.app.databinding.DialogEditTextBinding
|
||||
import io.legado.app.help.source.sortUrls
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.theme.accentColor
|
||||
import io.legado.app.ui.login.SourceLoginActivity
|
||||
import io.legado.app.ui.rss.source.edit.RssSourceEditActivity
|
||||
import io.legado.app.ui.widget.dialog.VariableDialog
|
||||
import io.legado.app.utils.*
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class RssSortActivity : VMBaseActivity<ActivityRssArtivlesBinding, RssSortViewModel>() {
|
||||
|
||||
@@ -106,29 +103,13 @@ class RssSortActivity : VMBaseActivity<ActivityRssArtivlesBinding, RssSortViewMo
|
||||
}
|
||||
|
||||
private fun setSourceVariable() {
|
||||
launch {
|
||||
val source = viewModel.rssSource
|
||||
if (source == null) {
|
||||
toastOnUi("源不存在")
|
||||
return@launch
|
||||
}
|
||||
val variable = withContext(Dispatchers.IO) { source.getVariable() }
|
||||
alert(R.string.set_source_variable) {
|
||||
setMessage(source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取"))
|
||||
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
|
||||
editView.hint = "source variable"
|
||||
editView.setText(variable)
|
||||
}
|
||||
customView { alertBinding.root }
|
||||
okButton {
|
||||
viewModel.rssSource?.setVariable(alertBinding.editView.text?.toString())
|
||||
}
|
||||
cancelButton()
|
||||
neutralButton(R.string.delete) {
|
||||
viewModel.rssSource?.setVariable(null)
|
||||
}
|
||||
}
|
||||
val source = viewModel.rssSource
|
||||
if (source == null) {
|
||||
toastOnUi("源不存在")
|
||||
return
|
||||
}
|
||||
val comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")
|
||||
showDialogFragment(VariableDialog(source.getKey(), comment))
|
||||
}
|
||||
|
||||
private inner class TabFragmentPageAdapter :
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
package io.legado.app.ui.widget.dialog
|
||||
|
||||
import android.app.Application
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.fragment.app.viewModels
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.BaseDialogFragment
|
||||
import io.legado.app.base.BaseViewModel
|
||||
import io.legado.app.databinding.DialogVariableBinding
|
||||
import io.legado.app.help.CacheManager
|
||||
import io.legado.app.lib.theme.primaryColor
|
||||
import io.legado.app.utils.applyTint
|
||||
import io.legado.app.utils.setLayout
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
|
||||
class VariableDialog() : BaseDialogFragment(R.layout.dialog_variable, true),
|
||||
Toolbar.OnMenuItemClickListener {
|
||||
|
||||
private val binding by viewBinding(DialogVariableBinding::bind)
|
||||
private val viewModel by viewModels<ViewModel>()
|
||||
|
||||
constructor(key: String, comment: String) : this() {
|
||||
arguments = Bundle().apply {
|
||||
putString("key", key)
|
||||
putString("comment", comment)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
|
||||
}
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
binding.toolBar.setBackgroundColor(primaryColor)
|
||||
arguments?.let {
|
||||
viewModel.init(it) {
|
||||
binding.tvComment.text = viewModel.comment
|
||||
binding.tvVariable.setText(viewModel.mVariable)
|
||||
}
|
||||
}
|
||||
binding.toolBar.inflateMenu(R.menu.save)
|
||||
binding.toolBar.menu.applyTint(requireContext())
|
||||
binding.toolBar.setOnMenuItemClickListener(this)
|
||||
}
|
||||
|
||||
override fun onMenuItemClick(item: MenuItem?): Boolean {
|
||||
when (item?.itemId) {
|
||||
R.id.menu_save -> viewModel.save(binding.tvVariable.text?.toString()) {
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
class ViewModel(application: Application) : BaseViewModel(application) {
|
||||
|
||||
var key: String? = null
|
||||
var comment: String? = null
|
||||
var mVariable: String? = null
|
||||
|
||||
fun init(arguments: Bundle, onFinally: () -> Unit) {
|
||||
if (key != null) return
|
||||
execute {
|
||||
key = arguments.getString("key")
|
||||
comment = arguments.getString("comment")
|
||||
mVariable = CacheManager.get("sourceVariable_${key}")
|
||||
}.onFinally {
|
||||
onFinally.invoke()
|
||||
}
|
||||
}
|
||||
|
||||
fun save(variable: String?, onFinally: () -> Unit) {
|
||||
execute {
|
||||
if (variable == null) {
|
||||
CacheManager.delete("sourceVariable_${key}")
|
||||
} else {
|
||||
CacheManager.put("sourceVariable_${key}", variable)
|
||||
}
|
||||
}.onFinally {
|
||||
onFinally.invoke()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout 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:padding="16dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:background="@drawable/shape_card_view"
|
||||
android:orientation="vertical"
|
||||
tools:ignore="UselessParent">
|
||||
|
||||
<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:popupTheme="@style/AppTheme.PopupOverlay"
|
||||
app:title="@string/set_source_variable"
|
||||
app:titleTextAppearance="@style/ToolbarTitle" />
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="6dp"
|
||||
android:overScrollMode="ifContentScrolls">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<io.legado.app.ui.widget.text.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="source variable"
|
||||
tools:ignore="HardcodedText">
|
||||
|
||||
<io.legado.app.lib.theme.view.ThemeEditText
|
||||
android:id="@+id/tv_variable"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
|
||||
|
||||
</io.legado.app.ui.widget.text.TextInputLayout>
|
||||
|
||||
<io.legado.app.ui.widget.text.AccentTextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="3dp"
|
||||
android:text="@string/variable_comment" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_comment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="3dp"
|
||||
android:textIsSelectable="true"
|
||||
android:textColor="@color/secondaryText"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
tools:ignore="AlwaysShowAction">
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_save"
|
||||
android:icon="@drawable/ic_save"
|
||||
android:title="@string/action_save"
|
||||
app:showAsAction="always" />
|
||||
|
||||
</menu>
|
||||
Reference in New Issue
Block a user