|
@@ -11,6 +11,7 @@ import io.legado.app.R
|
|
|
import io.legado.app.base.BaseDialogFragment
|
|
import io.legado.app.base.BaseDialogFragment
|
|
|
import io.legado.app.constant.AppLog
|
|
import io.legado.app.constant.AppLog
|
|
|
import io.legado.app.data.entities.BaseSource
|
|
import io.legado.app.data.entities.BaseSource
|
|
|
|
|
+import io.legado.app.data.entities.rule.RowUi
|
|
|
import io.legado.app.databinding.DialogLoginBinding
|
|
import io.legado.app.databinding.DialogLoginBinding
|
|
|
import io.legado.app.databinding.ItemFilletTextBinding
|
|
import io.legado.app.databinding.ItemFilletTextBinding
|
|
|
import io.legado.app.databinding.ItemSourceEditBinding
|
|
import io.legado.app.databinding.ItemSourceEditBinding
|
|
@@ -71,6 +72,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
|
|
|
// JavaScript
|
|
// JavaScript
|
|
|
rowUi.action?.let {
|
|
rowUi.action?.let {
|
|
|
kotlin.runCatching {
|
|
kotlin.runCatching {
|
|
|
|
|
+ saveLoginData(source, loginUi)
|
|
|
source.evalJS(it)
|
|
source.evalJS(it)
|
|
|
}.onFailure {
|
|
}.onFailure {
|
|
|
AppLog.put("LoginUI Button ${rowUi.name} JavaScript error", it)
|
|
AppLog.put("LoginUI Button ${rowUi.name} JavaScript error", it)
|
|
@@ -86,17 +88,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
|
|
|
binding.toolBar.setOnMenuItemClickListener { item ->
|
|
binding.toolBar.setOnMenuItemClickListener { item ->
|
|
|
when (item.itemId) {
|
|
when (item.itemId) {
|
|
|
R.id.menu_ok -> {
|
|
R.id.menu_ok -> {
|
|
|
- val loginData = hashMapOf<String, String>()
|
|
|
|
|
- loginUi?.forEachIndexed { index, rowUi ->
|
|
|
|
|
- when (rowUi.type) {
|
|
|
|
|
- "text", "password" -> {
|
|
|
|
|
- val rowView = binding.root.findViewById<View>(index)
|
|
|
|
|
- ItemSourceEditBinding.bind(rowView).editText.text?.let {
|
|
|
|
|
- loginData[rowUi.name] = it.toString()
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ val loginData = getLoginData(loginUi)
|
|
|
login(source, loginData)
|
|
login(source, loginData)
|
|
|
}
|
|
}
|
|
|
R.id.menu_show_login_header -> alert {
|
|
R.id.menu_show_login_header -> alert {
|
|
@@ -112,6 +104,30 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private fun getLoginData(loginUi: List<RowUi>): HashMap<String, String>) {
|
|
|
|
|
+ val loginData = hashMapOf<String, String>()
|
|
|
|
|
+ loginUi.forEachIndexed { index, rowUi ->
|
|
|
|
|
+ when (rowUi.type) {
|
|
|
|
|
+ "text", "password" -> {
|
|
|
|
|
+ val rowView = binding.root.findViewById<View>(index)
|
|
|
|
|
+ ItemSourceEditBinding.bind(rowView).editText.text?.let {
|
|
|
|
|
+ loginData[rowUi.name] = it.toString()
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return loginData
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun saveLoginData(source: BaseSource, loginUi: List<RowUi>) {
|
|
|
|
|
+ val loginData = getLoginData(loginUi)
|
|
|
|
|
+ if (loginData.isEmpty()) {
|
|
|
|
|
+ source.removeLoginInfo()
|
|
|
|
|
+ } else {
|
|
|
|
|
+ source.putLoginInfo(GSON.toJson(loginData))
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private fun login(source: BaseSource, loginData: HashMap<String, String>) {
|
|
private fun login(source: BaseSource, loginData: HashMap<String, String>) {
|
|
|
launch(IO) {
|
|
launch(IO) {
|
|
|
if (loginData.isEmpty()) {
|
|
if (loginData.isEmpty()) {
|