Pu Zhibing
2025-12-11 ab0c19e49fabdb8cc6eea454ea455bce2efbb718
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.google.recaptcha.sample
 
import android.annotation.SuppressLint
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebView
import androidx.fragment.app.DialogFragment
import com.igo.user.R
 
class RecaptchaVisualFragment : DialogFragment(), RecaptchaListener {
  private lateinit var recaptchaWebView: RecaptchaWebView
  private lateinit var listener: RecaptchaListener
 
  companion object {
    fun newInstance(siteKey: String, baseUrl: String, lang: String?): RecaptchaVisualFragment {
      val f = RecaptchaVisualFragment()
      val args = Bundle()
      args.putString(RecaptchaWebView.SITE_KEY, siteKey)
      args.putString(RecaptchaWebView.BASE_URL, baseUrl)
      args.putString(RecaptchaWebView.LANG, lang)
      f.arguments = args
      return f
    }
  }
 
  @SuppressLint("MissingInflatedId")
  override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
  ): View? {
    val view = inflater.inflate(R.layout.recaptcha, container, false)
    val webView = view.findViewById<WebView>(R.id.recaptchaWebview)
    recaptchaWebView = RecaptchaWebView(webView, requireArguments())
    recaptchaWebView.start(this, requireContext())
 
    view.findViewById<View>(R.id.cancelButton).setOnClickListener {
      onError(RecaptchaVisualException("User pressed cancel"))
    }
    return view
  }
 
  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    dialog
      ?.window
      ?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
  }
 
  override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return object : Dialog(requireActivity(), theme) {
      override fun onBackPressed() {
        dialog?.dismiss()
        listener.onError(RecaptchaVisualException("User pressed back"))
      }
    }
  }
 
  override fun onLoad() {
    println("测试onLoad")
    listener.onLoad()
  }
 
  override fun onVerify(token: String) {
    println("测试token"+token)
    dialog?.dismiss()
    listener.onVerify(token)
  }
 
  override fun onError(error: RecaptchaVisualException) {
    dialog?.dismiss()
    println("测试onError")
    listener.onError(error)
  }
 
  override fun onExpire() {
    println("测试onExpire")
    dialog?.dismiss()
    listener.onExpire()
  }
 
  fun configure(listener: RecaptchaListener) {
    this.listener = listener
  }
}