blob: 80e96c982dd8c294d3ae83019dddd7f22ba522be (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package org.robolectric.integrationtests.nativegraphics.testing.util;
import android.view.ViewTreeObserver.OnDrawListener;
import android.webkit.WebView;
import android.webkit.WebView.VisualStateCallback;
import android.webkit.WebViewClient;
import java.util.concurrent.CountDownLatch;
public final class WebViewReadyHelper {
// Hacky quick-fix similar to DrawActivity's DrawCounterListener
// TODO: De-dupe this against DrawCounterListener and fix this cruft
private static final int DEBUG_REQUIRE_EXTRA_FRAMES = 1;
private int drawCount = 0;
private final CountDownLatch latch;
private final WebView webView;
public WebViewReadyHelper(WebView webView, CountDownLatch latch) {
this.webView = webView;
this.latch = latch;
this.webView.setWebViewClient(client);
}
public void loadData(String data) {
webView.loadData(data, null, null);
}
private WebViewClient client =
new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
webView.postVisualStateCallback(0, visualStateCallback);
}
};
private VisualStateCallback visualStateCallback =
new VisualStateCallback() {
@Override
public void onComplete(long requestId) {
webView.getViewTreeObserver().addOnDrawListener(onDrawListener);
webView.invalidate();
}
};
private OnDrawListener onDrawListener =
new OnDrawListener() {
@Override
public void onDraw() {
if (++drawCount <= DEBUG_REQUIRE_EXTRA_FRAMES) {
webView.postInvalidate();
return;
}
webView.post(
() -> {
webView.getViewTreeObserver().removeOnDrawListener(onDrawListener);
latch.countDown();
});
}
};
}
|