1
1
package tech.easily.easybridge
2
2
3
+ import android.annotation.SuppressLint
4
+ import android.graphics.Bitmap
3
5
import android.net.Uri
4
6
import android.os.Build
5
7
import android.os.Bundle
6
8
import android.support.v7.app.AppCompatActivity
9
+ import android.view.View
7
10
import android.webkit.*
8
11
import android.widget.Toast
12
+ import com.google.gson.Gson
9
13
import tech.easily.easybridge.lib.EBHandlerManager
10
14
import tech.easily.easybridge.lib.EasyBridgeWebChromeClient
11
15
import kotlinx.android.synthetic.main.activity_main.*
16
+ import kotlinx.android.synthetic.main.layout_performance.*
12
17
import tech.easily.easybridge.lib.ResultCallBack
18
+ import tech.easily.easybridge.model.PerformanceTiming
19
+ import java.lang.Exception
13
20
14
21
class MainActivity : AppCompatActivity () {
15
22
23
+ private val injectPerformanceHandler = " window.easyBridge.registerHandler('getPerformance', function (parameters, callback) {\n " +
24
+ " if (typeof callback == 'function') {\n " +
25
+ " callback(window.performance.timing);\n " +
26
+ " }\n " +
27
+ " });"
28
+
16
29
override fun onCreate (savedInstanceState : Bundle ? ) {
17
30
super .onCreate(savedInstanceState)
18
31
if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .KITKAT ) {
@@ -35,9 +48,21 @@ class MainActivity : AppCompatActivity() {
35
48
EBHandlerManager .register(webView)
36
49
webView.setDebuggable(BuildConfig .DEBUG )
37
50
webView.webViewClient = object : WebViewClient () {
51
+
52
+ override fun onPageStarted (view : WebView ? , url : String? , favicon : Bitmap ? ) {
53
+ llPerformance.visibility = View .GONE
54
+ }
55
+
38
56
override fun shouldOverrideUrlLoading (view : WebView ? , url : String? ): Boolean {
39
57
return false
40
58
}
59
+
60
+ override fun onPageFinished (view : WebView ? , url : String? ) {
61
+ super .onPageFinished(view, url)
62
+ webView.postDelayed({
63
+ getPerformanceData()
64
+ },500 )
65
+ }
41
66
}
42
67
// set a global security checker,all the url with scheme https/http is not allowed to using the bridge
43
68
webView.setPolicyChecker(({ url, parameters ->
@@ -46,12 +71,40 @@ class MainActivity : AppCompatActivity() {
46
71
// control the bridge inject action
47
72
EasyBridgeWebChromeClient .SECURITY_CHECK_PARAMETERS -> when (page.scheme) {
48
73
" http" -> false
49
- " https" -> false
74
+ " https" -> true
50
75
else -> true
51
76
}
52
77
else -> true
53
78
}
54
79
}))
80
+ // inject a performance js interface
81
+ webView.setBridgeInjectedListener {
82
+ webView.loadUrl(" javascript:$injectPerformanceHandler " )
83
+ }
84
+ }
85
+
86
+ private fun getPerformanceData () {
87
+ webView.callHandler(" getPerformance" , null , object : ResultCallBack () {
88
+ override fun onResult (result : Any? ) {
89
+ try {
90
+ val performanceTimingJson = result as String
91
+ val performanceTiming = Gson ().fromJson<PerformanceTiming >(performanceTimingJson, PerformanceTiming ::class .java)
92
+ renderPerformance(performanceTiming)
93
+ } catch (e: Exception ) {
94
+ e.printStackTrace()
95
+ }
96
+ }
97
+ })
98
+ }
99
+
100
+ @SuppressLint(" SetTextI18n" )
101
+ private fun renderPerformance (performanceTiming : PerformanceTiming ) {
102
+ llPerformance.visibility = View .VISIBLE
103
+ with (performanceTiming) {
104
+ tvNet.text = (responseEnd - fetchStart).toString() + " ms"
105
+ tvRender.text = (loadEventEnd - responseEnd).toString() + " ms"
106
+ tvTotal.text = (loadEventEnd - fetchStart).toString() + " ms"
107
+ }
55
108
}
56
109
57
110
override fun onBackPressed () {
0 commit comments