11package com.web3auth.core
22
33import android.annotation.SuppressLint
4+ import android.content.Context
5+ import android.content.Intent
46import android.net.Uri
57import android.os.Bundle
8+ import android.os.Message
69import android.view.ViewTreeObserver.OnScrollChangedListener
7- import android.webkit.WebSettings
8- import android.webkit.WebView
9- import android.webkit.WebViewClient
10+ import android.webkit.*
1011import androidx.appcompat.app.AppCompatActivity
1112import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
12- import com.google.gson.GsonBuilder
13- import com.web3auth.core.types.*
13+ import com.web3auth.core.types.WALLET_URL
1414
1515class WebViewActivity : AppCompatActivity () {
1616
1717 private lateinit var webView: WebView
1818 private var swipeRefreshLayout: SwipeRefreshLayout ? = null
1919 private var mOnScrollChangedListener: OnScrollChangedListener ? = null
20- private val gson = GsonBuilder ().disableHtmlEscaping().create()
2120
2221 @SuppressLint(" SetJavaScriptEnabled" )
2322 override fun onCreate (savedInstanceState : Bundle ? ) {
@@ -28,26 +27,12 @@ class WebViewActivity : AppCompatActivity() {
2827
2928 val extras = intent.extras
3029 if (extras != null ) {
31- val webViewUrl = extras.getString(WEBVIEW_URL )
32- val redirectUrl = extras.getString(REDIRECT_URL )
30+ val walletUrl = extras.getString(WALLET_URL )
3331
3432 webView.webViewClient = object : WebViewClient () {
3533 override fun shouldOverrideUrlLoading (view : WebView ? , url : String? ): Boolean {
36- if (redirectUrl?.isNotEmpty() == true ) {
37- if (url?.contains(redirectUrl) == true ) {
38- val uri = Uri .parse(url)
39- val hashUri = Uri .parse(uri.host + " ?" + uri.fragment)
40- val b64Params = hashUri.getQueryParameter(" b64Params" )
41- val b64ParamString =
42- decodeBase64URLString(b64Params!! ).toString(Charsets .UTF_8 )
43- val signResponse =
44- gson.fromJson(b64ParamString, SignResponse ::class .java)
45- Web3Auth .setSignResponse(signResponse)
46- finish()
47- }
48- }
49- if (webViewUrl != null ) {
50- view?.loadUrl(webViewUrl)
34+ if (walletUrl != null ) {
35+ view?.loadUrl(walletUrl)
5136 }
5237 return false
5338 }
@@ -61,15 +46,34 @@ class WebViewActivity : AppCompatActivity() {
6146 webSettings.javaScriptEnabled = true
6247 webSettings.domStorageEnabled = true
6348 webSettings.userAgentString = null
49+ webSettings.setSupportMultipleWindows(true )
6450
65- if (webViewUrl != null ) {
66- webView.loadUrl(webViewUrl )
51+ if (walletUrl != null ) {
52+ webView.loadUrl(walletUrl )
6753 }
6854 }
6955
7056 swipeRefreshLayout?.setOnRefreshListener {
7157 webView.reload()
7258 }
59+
60+ webView.webChromeClient = object : WebChromeClient () {
61+ override fun onCreateWindow (
62+ view : WebView ,
63+ dialog : Boolean ,
64+ userGesture : Boolean ,
65+ resultMsg : Message
66+ ): Boolean {
67+ val result = view.hitTestResult
68+ val data = result.extra
69+ val context: Context = view.context
70+ val browserIntent = Intent (Intent .ACTION_VIEW , Uri .parse(data))
71+ context.startActivity(browserIntent)
72+ return false
73+ }
74+ }
75+
76+ webView.addJavascriptInterface(this , " AndroidBridge" );
7377 }
7478
7579 override fun onStart () {
@@ -91,4 +95,14 @@ class WebViewActivity : AppCompatActivity() {
9195 else -> super .onBackPressed()
9296 }
9397 }
98+
99+ @JavascriptInterface
100+ fun enablePullToRefresh () {
101+ swipeRefreshLayout?.isEnabled = true
102+ }
103+
104+ @JavascriptInterface
105+ fun disablePullToRefresh () {
106+ swipeRefreshLayout?.isEnabled = false
107+ }
94108}
0 commit comments