自动隐藏键盘
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.document.HandleFileContract
|
||||||
import io.legado.app.ui.login.SourceLoginActivity
|
import io.legado.app.ui.login.SourceLoginActivity
|
||||||
import io.legado.app.ui.widget.dialog.PhotoDialog
|
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.ui.widget.dialog.WaitDialog
|
||||||
import io.legado.app.utils.*
|
import io.legado.app.utils.*
|
||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
@@ -419,22 +420,8 @@ class BookInfoActivity :
|
|||||||
toastOnUi("书源不存在")
|
toastOnUi("书源不存在")
|
||||||
return@launch
|
return@launch
|
||||||
}
|
}
|
||||||
val variable = withContext(IO) { source.getVariable() }
|
val comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")
|
||||||
alert(R.string.set_source_variable) {
|
showDialogFragment(VariableDialog(source.getKey(), comment))
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import io.legado.app.data.appDb
|
|||||||
import io.legado.app.data.entities.BookSource
|
import io.legado.app.data.entities.BookSource
|
||||||
import io.legado.app.data.entities.rule.*
|
import io.legado.app.data.entities.rule.*
|
||||||
import io.legado.app.databinding.ActivityBookSourceEditBinding
|
import io.legado.app.databinding.ActivityBookSourceEditBinding
|
||||||
import io.legado.app.databinding.DialogEditTextBinding
|
|
||||||
import io.legado.app.help.config.LocalConfig
|
import io.legado.app.help.config.LocalConfig
|
||||||
import io.legado.app.lib.dialogs.SelectItem
|
import io.legado.app.lib.dialogs.SelectItem
|
||||||
import io.legado.app.lib.dialogs.alert
|
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.qrcode.QrCodeResult
|
||||||
import io.legado.app.ui.widget.dialog.TextDialog
|
import io.legado.app.ui.widget.dialog.TextDialog
|
||||||
import io.legado.app.ui.widget.dialog.UrlOptionDialog
|
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.keyboard.KeyboardToolPop
|
||||||
import io.legado.app.ui.widget.text.EditEntity
|
import io.legado.app.ui.widget.text.EditEntity
|
||||||
import io.legado.app.utils.*
|
import io.legado.app.utils.*
|
||||||
@@ -593,29 +593,13 @@ class BookSourceEditActivity :
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setSourceVariable() {
|
private fun setSourceVariable() {
|
||||||
launch {
|
val source = viewModel.bookSource
|
||||||
val source = viewModel.bookSource
|
if (source == null) {
|
||||||
if (source == null) {
|
toastOnUi("先保存书源")
|
||||||
toastOnUi("先保存书源")
|
return
|
||||||
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))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,17 +12,14 @@ import androidx.fragment.app.FragmentStatePagerAdapter
|
|||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.base.VMBaseActivity
|
import io.legado.app.base.VMBaseActivity
|
||||||
import io.legado.app.databinding.ActivityRssArtivlesBinding
|
import io.legado.app.databinding.ActivityRssArtivlesBinding
|
||||||
import io.legado.app.databinding.DialogEditTextBinding
|
|
||||||
import io.legado.app.help.source.sortUrls
|
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.lib.theme.accentColor
|
||||||
import io.legado.app.ui.login.SourceLoginActivity
|
import io.legado.app.ui.login.SourceLoginActivity
|
||||||
import io.legado.app.ui.rss.source.edit.RssSourceEditActivity
|
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.*
|
||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
|
||||||
|
|
||||||
class RssSortActivity : VMBaseActivity<ActivityRssArtivlesBinding, RssSortViewModel>() {
|
class RssSortActivity : VMBaseActivity<ActivityRssArtivlesBinding, RssSortViewModel>() {
|
||||||
|
|
||||||
@@ -106,29 +103,13 @@ class RssSortActivity : VMBaseActivity<ActivityRssArtivlesBinding, RssSortViewMo
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setSourceVariable() {
|
private fun setSourceVariable() {
|
||||||
launch {
|
val source = viewModel.rssSource
|
||||||
val source = viewModel.rssSource
|
if (source == null) {
|
||||||
if (source == null) {
|
toastOnUi("源不存在")
|
||||||
toastOnUi("源不存在")
|
return
|
||||||
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 comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")
|
||||||
|
showDialogFragment(VariableDialog(source.getKey(), comment))
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class TabFragmentPageAdapter :
|
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