11package tech.easily.easybridge
22
3+ import android.annotation.SuppressLint
4+ import android.graphics.Bitmap
35import android.net.Uri
46import android.os.Build
57import android.os.Bundle
68import android.support.v7.app.AppCompatActivity
9+ import android.view.View
710import android.webkit.*
811import android.widget.Toast
12+ import com.google.gson.Gson
913import tech.easily.easybridge.lib.EBHandlerManager
1014import tech.easily.easybridge.lib.EasyBridgeWebChromeClient
1115import kotlinx.android.synthetic.main.activity_main.*
16+ import kotlinx.android.synthetic.main.layout_performance.*
1217import tech.easily.easybridge.lib.ResultCallBack
18+ import tech.easily.easybridge.model.PerformanceTiming
19+ import java.lang.Exception
1320
1421class MainActivity : AppCompatActivity () {
1522
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+
1629 override fun onCreate (savedInstanceState : Bundle ? ) {
1730 super .onCreate(savedInstanceState)
1831 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .KITKAT ) {
@@ -35,9 +48,21 @@ class MainActivity : AppCompatActivity() {
3548 EBHandlerManager .register(webView)
3649 webView.setDebuggable(BuildConfig .DEBUG )
3750 webView.webViewClient = object : WebViewClient () {
51+
52+ override fun onPageStarted (view : WebView ? , url : String? , favicon : Bitmap ? ) {
53+ llPerformance.visibility = View .GONE
54+ }
55+
3856 override fun shouldOverrideUrlLoading (view : WebView ? , url : String? ): Boolean {
3957 return false
4058 }
59+
60+ override fun onPageFinished (view : WebView ? , url : String? ) {
61+ super .onPageFinished(view, url)
62+ webView.postDelayed({
63+ getPerformanceData()
64+ },500 )
65+ }
4166 }
4267 // set a global security checker,all the url with scheme https/http is not allowed to using the bridge
4368 webView.setPolicyChecker(({ url, parameters ->
@@ -46,12 +71,40 @@ class MainActivity : AppCompatActivity() {
4671 // control the bridge inject action
4772 EasyBridgeWebChromeClient .SECURITY_CHECK_PARAMETERS -> when (page.scheme) {
4873 " http" -> false
49- " https" -> false
74+ " https" -> true
5075 else -> true
5176 }
5277 else -> true
5378 }
5479 }))
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+ }
55108 }
56109
57110 override fun onBackPressed () {
0 commit comments