Skip to content

Commit 1b9c5f2

Browse files
authored
Merge pull request #14 from sp0x/webviewFix
Webview fix
2 parents b2befc8 + 629a368 commit 1b9c5f2

5 files changed

Lines changed: 182 additions & 206 deletions

File tree

demoapp/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<uses-permission android:name="android.permission.INTERNET"/>
77

88
<application
9+
android:testOnly="false"
910
android:allowBackup="true"
1011
android:icon="@mipmap/ic_launcher"
1112
android:label="@string/app_name"

library/build.gradle

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
apply plugin: 'com.android.library'
2-
2+
def org = "queueit"
33
android {
44
compileSdkVersion 23
55
buildToolsVersion "28.0.3"
@@ -8,7 +8,7 @@ android {
88
minSdkVersion 15
99
targetSdkVersion 23
1010
versionCode 1
11-
versionName "2.0.20"
11+
versionName "2.0.22"
1212
}
1313
buildTypes {
1414
release {
@@ -18,6 +18,7 @@ android {
1818
}
1919
}
2020

21+
2122
dependencies {
2223
compile fileTree(dir: 'libs', include: ['*.jar'])
2324
testCompile 'junit:junit:4.12'
@@ -35,8 +36,8 @@ ext {
3536

3637
libraryDescription = 'Android SDK to integrate with Queue-it'
3738

38-
siteUrl = 'https://github.com/queueit/android-webui-sdk'
39-
gitUrl = 'https://github.com/queueit/android-webui-sdk.git'
39+
siteUrl = "https://github.com/${org}/android-webui-sdk"
40+
gitUrl = "https://github.com/${org}/android-webui-sdk.git"
4041

4142
libraryVersion = android.defaultConfig.versionName
4243

@@ -113,7 +114,7 @@ bintray {
113114
pkg {
114115
repo = bintrayRepo
115116
name = bintrayName
116-
userOrg = 'queueit'
117+
userOrg = "${org}"
117118
desc = libraryDescription
118119
websiteUrl = siteUrl
119120
vcsUrl = gitUrl

library/src/main/java/com/queue_it/androidsdk/QueueActivity.java

Lines changed: 122 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
import android.os.Bundle;
1010
import android.util.Log;
1111
import android.view.View;
12+
import android.webkit.CookieSyncManager;
1213
import android.webkit.SslErrorHandler;
1314
import android.webkit.WebChromeClient;
1415
import android.webkit.WebResourceError;
1516
import android.webkit.WebResourceRequest;
1617
import android.webkit.WebResourceResponse;
1718
import android.webkit.WebView;
1819
import android.webkit.WebViewClient;
20+
import android.widget.FrameLayout;
1921
import android.widget.ProgressBar;
2022

2123
import java.net.MalformedURLException;
@@ -26,6 +28,125 @@ public class QueueActivity extends AppCompatActivity {
2628
private String queueUrl;
2729
private String targetUrl;
2830
private String userId;
31+
private WebView webview;
32+
private URL target;
33+
private URL queue;
34+
private static WebView previousWebView;
35+
36+
WebViewClient webviewClient = new WebViewClient() {
37+
38+
@Override
39+
public void onPageFinished(WebView view, String url) {
40+
super.onPageFinished(view, url);
41+
CookieSyncManager.getInstance().sync();
42+
}
43+
44+
@Override
45+
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
46+
String errorMessage;
47+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
48+
errorMessage = String.format("%s %s: %s %s", request.getMethod(), request.getUrl(), errorResponse.getStatusCode(), errorResponse.getReasonPhrase());
49+
} else {
50+
errorMessage = errorResponse.toString();
51+
}
52+
Log.v("QueueActivity", String.format("%s: %s", "onReceivedHttpError", errorMessage));
53+
super.onReceivedHttpError(view, request, errorResponse);
54+
}
55+
56+
@Override
57+
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
58+
String errorMessage;
59+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
60+
errorMessage = String.format("%s %s: %s %s", request.getMethod(), request.getUrl(), error.getErrorCode(), error.getDescription());
61+
} else {
62+
errorMessage = error.toString();
63+
}
64+
Log.v("QueueActivity", String.format("%s: %s", "onReceivedError", errorMessage));
65+
super.onReceivedError(view, request, error);
66+
}
67+
68+
@Override
69+
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
70+
handler.cancel();
71+
broadcastQueueError("SslError, code: " + error.getPrimaryError());
72+
disposeWebview(webview);
73+
}
74+
75+
public boolean shouldOverrideUrlLoading(WebView view, String urlString) {
76+
Log.v("QueueITEngine", "URL loading: " + urlString);
77+
URL url;
78+
try {
79+
url = new URL(urlString);
80+
} catch (MalformedURLException e) {
81+
throw new RuntimeException(e);
82+
}
83+
84+
boolean isQueueItUrl = queue.getHost().contains(url.getHost());
85+
if (isQueueItUrl) {
86+
boolean needsRewrite = QueueUrlHelper.urlUpdateNeeded(urlString, userId);
87+
if (needsRewrite) {
88+
urlString = QueueUrlHelper.updateUrl(urlString, userId);
89+
Log.v("QueueITEngine", "URL intercepting: " + urlString);
90+
}
91+
broadcastChangedQueueUrl(urlString);
92+
if(needsRewrite){
93+
webview.loadUrl(urlString);
94+
return true;
95+
}
96+
}
97+
boolean isTarget = target.getHost().contains(url.getHost());
98+
if (isTarget) {
99+
Uri uri = Uri.parse(urlString);
100+
String queueItToken = uri.getQueryParameter("queueittoken");
101+
broadcastQueuePassed(queueItToken);
102+
disposeWebview(webview);
103+
return true;
104+
}
105+
if (!isQueueItUrl) {
106+
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString));
107+
startActivity(browserIntent);
108+
return true;
109+
}
110+
return false;
111+
}
112+
};
113+
114+
private static void cleanupWebView(){
115+
if(previousWebView==null) return;
116+
previousWebView.destroy();
117+
previousWebView = null;
118+
}
119+
120+
@Override
121+
protected void onCreate(Bundle savedInstanceState) {
122+
super.onCreate(savedInstanceState);
123+
setContentView(R.layout.activity_queue);
124+
readActivityUrls(savedInstanceState);
125+
cleanupWebView();
126+
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
127+
128+
FrameLayout layout = (FrameLayout) findViewById(R.id.relativeLayout);
129+
webview = new WebView(this);
130+
layout.addView(webview);
131+
previousWebView = webview;
132+
webview.getSettings().setJavaScriptEnabled(true);
133+
webview.setWebChromeClient(new WebChromeClient() {
134+
@Override
135+
public void onProgressChanged(WebView view, int newProgress) {
136+
Log.v("Progress", Integer.toString(newProgress));
137+
if (newProgress < 100) {
138+
progressBar.setVisibility(View.VISIBLE);
139+
} else {
140+
progressBar.setVisibility(View.GONE);
141+
}
142+
progressBar.setProgress(newProgress);
143+
super.onProgressChanged(view, newProgress);
144+
}
145+
});
146+
webview.setWebViewClient(webviewClient);
147+
Log.v("QueueITEngine", "Loading initial URL: " + queueUrl);
148+
webview.loadUrl(queueUrl);
149+
}
29150

30151
@Override
31152
protected void onSaveInstanceState(Bundle outState) {
@@ -40,19 +161,10 @@ protected void onDestroy() {
40161
if (isFinishing()) {
41162
broadcastQueueActivityClosed();
42163
}
43-
44164
super.onDestroy();
45165
}
46166

47-
@Override
48-
protected void onCreate(Bundle savedInstanceState) {
49-
super.onCreate(savedInstanceState);
50-
setContentView(R.layout.activity_queue);
51-
52-
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
53-
54-
final WebView webView = (WebView) findViewById(R.id.webView);
55-
167+
private void readActivityUrls(Bundle savedInstanceState) {
56168
if (savedInstanceState == null) {
57169
Bundle extras = getIntent().getExtras();
58170
if (extras == null) {
@@ -69,104 +181,12 @@ protected void onCreate(Bundle savedInstanceState) {
69181
userId = (String) savedInstanceState.getSerializable("userId");
70182
}
71183

72-
final URL target;
73-
final URL queue;
74184
try {
75185
target = new URL(targetUrl);
76186
queue = new URL(queueUrl);
77187
} catch (MalformedURLException e) {
78188
throw new RuntimeException(e);
79189
}
80-
81-
Log.v("QueueITEngine", "Loading initial URL: " + queueUrl);
82-
83-
webView.getSettings().setJavaScriptEnabled(true);
84-
webView.setWebChromeClient(new WebChromeClient() {
85-
@Override
86-
public void onProgressChanged(WebView view, int newProgress) {
87-
Log.v("Progress", Integer.toString(newProgress));
88-
if (newProgress < 100) {
89-
progressBar.setVisibility(View.VISIBLE);
90-
} else {
91-
progressBar.setVisibility(View.GONE);
92-
}
93-
progressBar.setProgress(newProgress);
94-
super.onProgressChanged(view, newProgress);
95-
}
96-
});
97-
98-
webView.setWebViewClient(new WebViewClient() {
99-
100-
@Override
101-
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
102-
String errorMessage;
103-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
104-
errorMessage = String.format("%s %s: %s %s", request.getMethod(), request.getUrl(), errorResponse.getStatusCode(), errorResponse.getReasonPhrase());
105-
} else {
106-
errorMessage = errorResponse.toString();
107-
}
108-
Log.v("QueueActivity", String.format("%s: %s", "onReceivedHttpError", errorMessage));
109-
super.onReceivedHttpError(view, request, errorResponse);
110-
}
111-
112-
@Override
113-
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
114-
String errorMessage;
115-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
116-
errorMessage = String.format("%s %s: %s %s", request.getMethod(), request.getUrl(), error.getErrorCode(), error.getDescription());
117-
} else {
118-
errorMessage = error.toString();
119-
}
120-
Log.v("QueueActivity", String.format("%s: %s", "onReceivedError", errorMessage));
121-
super.onReceivedError(view, request, error);
122-
}
123-
124-
@Override
125-
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
126-
handler.cancel();
127-
broadcastQueueError("SslError, code: " + error.getPrimaryError());
128-
disposeWebview(webView);
129-
}
130-
131-
public boolean shouldOverrideUrlLoading(WebView view, String urlString) {
132-
Log.v("QueueITEngine", "URL loading: " + urlString);
133-
134-
URL url;
135-
try {
136-
url = new URL(urlString);
137-
} catch (MalformedURLException e) {
138-
throw new RuntimeException(e);
139-
}
140-
141-
boolean isQueueUrl = queue.getHost().contains(url.getHost());
142-
if (isQueueUrl) {
143-
if (QueueUrlHelper.urlUpdateNeeded(urlString, userId)) {
144-
urlString = QueueUrlHelper.updateUrl(urlString, userId);
145-
Log.v("QueueITEngine", "URL intercepting: " + urlString);
146-
webView.loadUrl(urlString);
147-
return true;
148-
}
149-
broadcastChangedQueueUrl(urlString);
150-
}
151-
boolean isTarget = target.getHost().contains(url.getHost());
152-
if (isTarget) {
153-
Uri uri = Uri.parse(urlString);
154-
String queueItToken = uri.getQueryParameter("queueittoken");
155-
156-
broadcastQueuePassed(queueItToken);
157-
disposeWebview(webView);
158-
return true;
159-
}
160-
if (!isQueueUrl) {
161-
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString));
162-
startActivity(browserIntent);
163-
return true;
164-
}
165-
166-
return false;
167-
}
168-
});
169-
webView.loadUrl(queueUrl);
170190
}
171191

172192
private void broadcastChangedQueueUrl(String urlString) {

0 commit comments

Comments
 (0)