自动隐藏键盘

This commit is contained in:
kunfei
2023-03-17 22:49:25 +08:00
parent f21a96ef7f
commit 22b56b542c
6 changed files with 196 additions and 65 deletions
@@ -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>
+13
View File
@@ -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>