@@ -43,6 +43,9 @@ public interface WebViewUrlChangeListener {
4343 public final int webViewHeight ;
4444 public final int outputWidth ;
4545 public final int outputHeight ;
46+ public final long intervalMSec ;
47+
48+ private final WebViewBitmapListener bitmapListener ;
4649
4750 private ImageReader imageReader ;
4851 private VirtualDisplay virtualDisplay ;
@@ -56,45 +59,25 @@ public interface WebViewUrlChangeListener {
5659 private boolean isRunning = true ;
5760 private long downTime = 0 ;
5861
59- public WebViewManager (Activity activity , int _webViewWidth , int _webViewHeight , int _outputWidth , int _outputHeight , long intervalMSec ,
62+ public WebViewManager (Activity activity , int webViewWidth , int webViewHeight , int outputWidth , int outputHeight , long intervalMSec ,
6063 WebViewBitmapListener bitmapListener ,
6164 WebViewUrlChangeListener urlListener ,
6265 WebAppInterface .WebViewDataListener webViewDataListener ,
6366 ViewGroup rootView , View defaultFocusView )
6467 {
65- webViewWidth = _webViewWidth ;
66- webViewHeight = _webViewHeight ;
67- outputWidth = _outputWidth ;
68- outputHeight = _outputHeight ;
68+ this .webViewWidth = webViewWidth ;
69+ this .webViewHeight = webViewHeight ;
70+ this .outputWidth = outputWidth ;
71+ this .outputHeight = outputHeight ;
72+ this .intervalMSec = intervalMSec ;
73+ this .bitmapListener = bitmapListener ;
6974
7075 mainHandler = new Handler (activity .getMainLooper ());
7176
7277 activity .runOnUiThread ( () -> {
7378 WebView .enableSlowWholeDocumentDraw ();
7479
7580 imageReader = ImageReader .newInstance (outputWidth , outputHeight , PixelFormat .RGBA_8888 , 2 );
76- imageReader .setOnImageAvailableListener (imageReader -> {
77- synchronized (this )
78- {
79- if (!isRunning )
80- {
81- return ;
82- }
83- }
84-
85- Image image = imageReader .acquireNextImage ();
86-
87- Bitmap bitmap = convertToBitmap (image );
88-
89- image .close ();
90-
91- ByteArrayOutputStream stream = new ByteArrayOutputStream ();
92- if (bitmap .compress (Bitmap .CompressFormat .JPEG , 100 , stream ))
93- {
94- byte [] bitmapArray = stream .toByteArray ();
95- bitmapListener .onWebViewUpdated (bitmapArray );
96- }
97- }, mainHandler );
9881
9982 DisplayManager displayManager = (DisplayManager )activity .getSystemService (Context .DISPLAY_SERVICE );
10083
@@ -166,33 +149,25 @@ public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
166149 });
167150
168151 presentation .show ();
152+ mainHandler .post (() -> sendWebViewBitmapIfNeeded ());
169153 });
170154 }
171155
172156 public void onDestroy () {
157+ isRunning = false ;
173158 virtualDisplay .release ();
174159 presentation .dismiss ();
175160 imageReader .close ();
176161 webAppInterface .onDestroy ();
177162 }
178163
179- public void onResume () {
180- // Ensure ImageReader resumes receiving new images after the activity resumes from sleep mode.
181- mainHandler .post ( () -> {
182- Image image = imageReader .acquireNextImage ();
183- if (image != null ) {
184- image .close ();
185- }
186- });
187- startUpdate ();
188- }
189-
190164 public void startUpdate () {
191165 synchronized (this ) {
192166 if (!isRunning ) {
193167 isRunning = true ;
194168 }
195169 }
170+ mainHandler .post (() -> sendWebViewBitmapIfNeeded ());
196171 }
197172
198173 public void stopUpdate () {
@@ -296,6 +271,33 @@ public WebBackForwardList restoreState (Bundle inState) {
296271 return webBackForwardList ;
297272 }
298273
274+ private void sendWebViewBitmapIfNeeded () {
275+ synchronized (this )
276+ {
277+ if (!isRunning )
278+ {
279+ return ;
280+ }
281+ }
282+
283+ Image image = imageReader .acquireNextImage ();
284+
285+ if (image != null ) {
286+ Bitmap bitmap = convertToBitmap (image );
287+
288+ image .close ();
289+
290+ ByteArrayOutputStream stream = new ByteArrayOutputStream ();
291+ if (bitmap .compress (Bitmap .CompressFormat .JPEG , 100 , stream ))
292+ {
293+ byte [] bitmapArray = stream .toByteArray ();
294+ bitmapListener .onWebViewUpdated (bitmapArray );
295+ }
296+ }
297+
298+ mainHandler .postDelayed (() -> sendWebViewBitmapIfNeeded (), intervalMSec );
299+ }
300+
299301 private static Bitmap convertToBitmap (Image image ) {
300302 Image .Plane [] planes = image .getPlanes ();
301303
0 commit comments