From 67501170cce0ddaa26a31668e23c1d81e01017bf Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Wed, 4 May 2022 14:31:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81=E5=AF=B9=E8=AF=9D=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 7 ++ app/src/main/assets/help/jsHelp.md | 4 + app/src/main/assets/updateLog.md | 4 + .../java/io/legado/app/help/JsExtensions.kt | 30 +++++++ .../association/VerificationCodeActivity.kt | 26 ++++++ .../ui/association/VerificationCodeDialog.kt | 83 +++++++++++++++++++ .../layout/dialog_verification_code_view.xml | 70 ++++++++++++++++ app/src/main/res/values-es-rES/strings.xml | 2 + app/src/main/res/values-ja-rJP/strings.xml | 2 + app/src/main/res/values-pt-rBR/strings.xml | 2 + app/src/main/res/values-zh-rHK/strings.xml | 2 + app/src/main/res/values-zh-rTW/strings.xml | 2 + app/src/main/res/values-zh/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 14 files changed, 238 insertions(+) create mode 100644 app/src/main/java/io/legado/app/ui/association/VerificationCodeActivity.kt create mode 100644 app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt create mode 100644 app/src/main/res/layout/dialog_verification_code_view.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d33213e6e..da98accad 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -359,6 +359,13 @@ + + + { + putExtra("imageUrl", imageUrl) + putExtra("sourceOrigin", getSource()?.getKey()) + } + var waitUserInput: Boolean = false + while(CacheManager.get(key) == null) { + if (!waitUserInput) { + log("等待输入验证码...") + waitUserInput = true + } + } + CacheManager.get(key)!!.let { + if (it.isBlank()) { + throw NoStackTraceException("未输入验证码或者验证码为空") + } else { + it + } + } + } + } + /** * 可从网络,本地文件(阅读私有缓存目录和书籍保存位置支持相对路径)导入JavaScript脚本 */ diff --git a/app/src/main/java/io/legado/app/ui/association/VerificationCodeActivity.kt b/app/src/main/java/io/legado/app/ui/association/VerificationCodeActivity.kt new file mode 100644 index 000000000..13ade4694 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/association/VerificationCodeActivity.kt @@ -0,0 +1,26 @@ +package io.legado.app.ui.association + +import android.os.Bundle +import io.legado.app.base.BaseActivity +import io.legado.app.databinding.ActivityTranslucenceBinding +import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.viewbindingdelegate.viewBinding + +/** + * 验证码 + */ +class VerificationCodeActivity : + BaseActivity() { + + override val binding by viewBinding(ActivityTranslucenceBinding::inflate) + + override fun onActivityCreated(savedInstanceState: Bundle?) { + intent.getStringExtra("imageUrl")?.let { + val sourceOrigin = intent.getStringExtra("sourceOrigin") + showDialogFragment( + VerificationCodeDialog(it, sourceOrigin) + ) + } ?: finish() + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt new file mode 100644 index 000000000..568800b29 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt @@ -0,0 +1,83 @@ +package io.legado.app.ui.association + +import android.os.Bundle +import android.view.View +import android.view.ViewGroup +import android.net.Uri +import com.bumptech.glide.request.RequestOptions +import io.legado.app.R +import io.legado.app.base.BaseDialogFragment +import io.legado.app.databinding.DialogVerificationCodeViewBinding +import io.legado.app.help.CacheManager +import io.legado.app.help.glide.ImageLoader +import io.legado.app.help.glide.OkHttpModelLoader +import io.legado.app.lib.theme.primaryColor +import io.legado.app.ui.widget.dialog.PhotoDialog +import io.legado.app.utils.setLayout +import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.viewbindingdelegate.viewBinding + +//图片验证码输入对话框 +class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification_code_view) { + + constructor(imageUrl: String, sourceOrigin: String? = null) : this() { + arguments = Bundle().apply { + putString("sourceOrigin", sourceOrigin) + putString("imageUrl", imageUrl) + } + } + + val binding by viewBinding(DialogVerificationCodeViewBinding::bind) + + override fun onStart() { + super.onStart() + setLayout(1f, ViewGroup.LayoutParams.WRAP_CONTENT) + } + + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { + binding.run { + toolBar.setBackgroundColor(primaryColor) + val sourceOrigin = arguments?.getString("sourceOrigin") + val key = "${sourceOrigin ?: ""}_verificationCode" + arguments?.getString("imageUrl")?.let { imageUrl -> + ImageLoader.load(requireContext(), imageUrl).apply { + sourceOrigin?.let { + apply( + RequestOptions().set( + OkHttpModelLoader.sourceOriginOption, + it + ) + ) + } + }.error(R.drawable.image_loading_error) + .into(ivImage) + ivImage.setOnClickListener { + showDialogFragment(PhotoDialog(imageUrl, sourceOrigin)) + } + ivImage.setOnLongClickListener { + showDialogFragment(PhotoDialog(imageUrl, sourceOrigin)) + true + } + } + tvOk.setOnClickListener { + val verificationCode = binding.verificationCode.text.toString() + verificationCode?.let { + CacheManager.put(key, it) + dismiss() + } + } + tvCancel.setOnClickListener { + dismiss() + } + } + } + + override fun onDestroy() { + val sourceOrigin = arguments?.getString("sourceOrigin") + val key = "${sourceOrigin ?: ""}_verificationCode" + CacheManager.get(key) ?: CacheManager.put(key, "") + super.onDestroy() + activity?.finish() + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_verification_code_view.xml b/app/src/main/res/layout/dialog_verification_code_view.xml new file mode 100644 index 000000000..c218ba54d --- /dev/null +++ b/app/src/main/res/layout/dialog_verification_code_view.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 4806bfc88..f62a1d248 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -969,5 +969,7 @@ 批量换源 书籍类型不一样 是否确认换源 + 输入验证码 + 验证码 diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 3385b091b..11a2729de 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -972,5 +972,7 @@ 批量换源 书籍类型不一样 是否确认换源 + 输入验证码 + 验证码 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 863b931ad..f0e4b8cf3 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -972,5 +972,7 @@ 批量换源 书籍类型不一样 是否确认换源 + 输入验证码 + 验证码 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 416e92a93..7b938e9f3 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -969,5 +969,7 @@ 批量换源 书籍类型不一样 是否确认换源 + 输入验证码 + 验证码 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 874d66764..6ba87de41 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -971,5 +971,7 @@ 批量换源 书籍类型不一样 是否确认换源 + 输入验证码 + 验证码 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 6b9b415d0..7b0f3ef18 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -971,5 +971,7 @@ 批量换源 书籍类型不一样 是否确认换源 + 输入验证码 + 验证码 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bc5f63327..05df4e53b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -972,5 +972,7 @@ 批量换源 书籍类型不一样 是否确认换源 + 输入验证码 + 验证码