diff options
author | Christian Strømme <christian.stromme@theqtcompany.com> | 2015-06-19 19:05:56 +0200 |
---|---|---|
committer | Christian Stromme <christian.stromme@theqtcompany.com> | 2015-06-22 11:23:21 +0000 |
commit | a16d10dbc2cd4eabdd9cdc837dfaea51212e0eb2 (patch) | |
tree | 8c0d0770d41fdb2d1abbe0f224c74fd3869aaf3f /src/jar | |
parent | 4a317ec9de74d4e6f4afff404f97617b6a353e7c (diff) |
Android: Fix load request state tracking.
Fixes problems were isLoading() would return the wrong value.
Change-Id: I0e0876551f9dcbd41523731dd51dce806680c10e
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Diffstat (limited to 'src/jar')
-rw-r--r-- | src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java b/src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java index 5afaf18..0f04ecb 100644 --- a/src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java +++ b/src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java @@ -58,7 +58,12 @@ public class QtAndroidWebViewController private final long m_id; private WebView m_webView = null; private static final String TAG = "QtAndroidWebViewController"; - private volatile boolean m_onPageFinishedCalled = false; + private final int INIT_STATE = 0; + private final int STARTED_STATE = 1; + private final int LOADING_STATE = 2; + private final int FINISHED_STATE = 3; + + private volatile int m_loadingState = INIT_STATE; private volatile int m_progress = 0; private volatile int m_frameCount = 0; @@ -85,10 +90,11 @@ public class QtAndroidWebViewController // then 200ms somethings off...). private final long BLOCKING_TIMEOUT = 250; - private void resetLoadingState() + private void resetLoadingState(final int state) { m_progress = 0; - m_onPageFinishedCalled = false; + m_frameCount = 0; + m_loadingState = state; } private class QtAndroidWebViewClient extends WebViewClient @@ -105,11 +111,12 @@ public class QtAndroidWebViewController public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); - m_onPageFinishedCalled = true; - if (m_progress == 100) { // onProgressChanged() will notify Qt if we didn't finish here. - m_frameCount = 0; - c_onPageFinished(m_id, url); - } + m_loadingState = FINISHED_STATE; + if (m_progress != 100) // onProgressChanged() will notify Qt if we didn't finish here. + return; + + m_frameCount = 0; + c_onPageFinished(m_id, url); } @Override @@ -117,7 +124,7 @@ public class QtAndroidWebViewController { super.onPageStarted(view, url, favicon); if (++m_frameCount == 1) { // Only call onPageStarted for the first frame. - m_onPageFinishedCalled = false; + m_loadingState = LOADING_STATE; c_onPageStarted(m_id, url, favicon); } } @@ -129,7 +136,7 @@ public class QtAndroidWebViewController String url) { super.onReceivedError(view, errorCode, description, url); - resetLoadingState(); + resetLoadingState(INIT_STATE); c_onReceivedError(m_id, errorCode, description, url); } } @@ -143,7 +150,7 @@ public class QtAndroidWebViewController super.onProgressChanged(view, newProgress); m_progress = newProgress; c_onProgressChanged(m_id, newProgress); - if (m_onPageFinishedCalled && m_progress == 100) { // Did we finish? + if (m_loadingState == FINISHED_STATE && m_progress == 100) { // Did we finish? m_frameCount = 0; c_onPageFinished(m_id, view.getUrl()); } @@ -213,7 +220,7 @@ public class QtAndroidWebViewController return; } - resetLoadingState(); + resetLoadingState(STARTED_STATE); m_activity.runOnUiThread(new Runnable() { @Override public void run() { m_webView.loadUrl(url); } @@ -225,7 +232,7 @@ public class QtAndroidWebViewController if (data == null) return; - resetLoadingState(); + resetLoadingState(STARTED_STATE); m_activity.runOnUiThread(new Runnable() { @Override public void run() { m_webView.loadData(data, mimeType, encoding); } @@ -241,7 +248,7 @@ public class QtAndroidWebViewController if (data == null) return; - resetLoadingState(); + resetLoadingState(STARTED_STATE); m_activity.runOnUiThread(new Runnable() { @Override public void run() { m_webView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl); } @@ -341,7 +348,7 @@ public class QtAndroidWebViewController public boolean isLoading() { - return (m_progress != 100 && !m_onPageFinishedCalled); + return m_loadingState == LOADING_STATE || m_loadingState == STARTED_STATE || (m_progress > 0 && m_progress < 100); } public void runJavaScript(final String script, final long callbackId) |