package com.apigee.sdk.apm.android;
import android.graphics.Bitmap;
import android.webkit.WebView;
import android.webkit.WebViewClient;
/**
* @y.exclude
*/
public class ApigeeWebViewClient extends WebViewClient
{
private long startTimeMillis;
private ApigeeWebViewClientLifecycleListener lifecycleListener;
public ApigeeWebViewClient()
{
lifecycleListener = null;
}
public ApigeeWebViewClient(ApigeeWebViewClientLifecycleListener lifecycleListener)
{
this.lifecycleListener = lifecycleListener;
}
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
startTimeMillis = System.currentTimeMillis();
if( lifecycleListener != null) {
lifecycleListener.onPageStarted(view, url, favicon);
}
}
protected void updateMetrics(String url, boolean errorOccurred)
{
if( url != null && url.length() > 0 ) {
String lowerUrl = url.toLowerCase();
if( lowerUrl.startsWith("http://") || lowerUrl.startsWith("https://") ) {
long endTimeMillis = System.currentTimeMillis();
ApigeeMonitoringClient monitoringClient = ApigeeMonitoringClient.getInstance();
if( (monitoringClient != null) && monitoringClient.isInitialized() ) {
NetworkMetricsCollectorService metricsCollectorService = monitoringClient.getMetricsCollectorService();
if( metricsCollectorService != null ) {
metricsCollectorService.analyze(url,
new Long(startTimeMillis),
new Long(endTimeMillis),
errorOccurred,
null); // we don't have access to any http headers in web view
}
}
}
}
}
public void onPageFinished(WebView view, String url)
{
updateMetrics(url,false);
if( lifecycleListener != null) {
lifecycleListener.onPageFinished(view, url);
}
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
updateMetrics(failingUrl,true);
if( lifecycleListener != null) {
lifecycleListener.onReceivedError(view, errorCode, description, failingUrl);
}
}
}