diff --git a/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt b/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt index 7ba9f279d..9be3e89a2 100644 --- a/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt +++ b/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt @@ -11,6 +11,7 @@ import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.constant.AppLog 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.ItemFilletTextBinding import io.legado.app.databinding.ItemSourceEditBinding @@ -71,6 +72,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { // JavaScript rowUi.action?.let { kotlin.runCatching { + saveLoginData(source, loginUi) source.evalJS(it) }.onFailure { 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 -> when (item.itemId) { R.id.menu_ok -> { - val loginData = hashMapOf() - loginUi?.forEachIndexed { index, rowUi -> - when (rowUi.type) { - "text", "password" -> { - val rowView = binding.root.findViewById(index) - ItemSourceEditBinding.bind(rowView).editText.text?.let { - loginData[rowUi.name] = it.toString() - } - } - } - } + val loginData = getLoginData(loginUi) login(source, loginData) } R.id.menu_show_login_header -> alert { @@ -112,6 +104,30 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { } } + private fun getLoginData(loginUi: List): HashMap) { + val loginData = hashMapOf() + loginUi.forEachIndexed { index, rowUi -> + when (rowUi.type) { + "text", "password" -> { + val rowView = binding.root.findViewById(index) + ItemSourceEditBinding.bind(rowView).editText.text?.let { + loginData[rowUi.name] = it.toString() + } + } + } + } + return loginData + } + + private fun saveLoginData(source: BaseSource, loginUi: List) { + val loginData = getLoginData(loginUi) + if (loginData.isEmpty()) { + source.removeLoginInfo() + } else { + source.putLoginInfo(GSON.toJson(loginData)) + } + } + private fun login(source: BaseSource, loginData: HashMap) { launch(IO) { if (loginData.isEmpty()) {