Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f1c5491 authored by John Reck's avatar John Reck
Browse files

Pause drawing when not visible

 Bug: 5594608
 If onPause is called or if the view or view's window is no longer
 visible, pause webview drawing. Calls to onDraw will continue to work,
 but animations and other continual drawing will stop

Change-Id: I11640f087852d1a9a33b945ff72297fab1d25b94
parent 36a7f2a9
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -3254,6 +3254,26 @@ public class WebView extends AbsoluteLayout
            if (mHTML5VideoViewProxy != null) {
                mHTML5VideoViewProxy.pauseAndDispatch();
            }
            if (mNativeClass != 0) {
                nativeSetPauseDrawing(mNativeClass, true);
            }
        }
    }

    @Override
    protected void onWindowVisibilityChanged(int visibility) {
        super.onWindowVisibilityChanged(visibility);
        updateDrawingState();
    }

    void updateDrawingState() {
        if (mNativeClass == 0 || mIsPaused) return;
        if (getWindowVisibility() != VISIBLE) {
            nativeSetPauseDrawing(mNativeClass, true);
        } else if (getVisibility() != VISIBLE) {
            nativeSetPauseDrawing(mNativeClass, true);
        } else {
            nativeSetPauseDrawing(mNativeClass, false);
        }
    }

@@ -3265,6 +3285,9 @@ public class WebView extends AbsoluteLayout
        if (mIsPaused) {
            mIsPaused = false;
            mWebViewCore.sendMessage(EventHub.ON_RESUME);
            if (mNativeClass != 0) {
                nativeSetPauseDrawing(mNativeClass, false);
            }
        }
    }

@@ -5599,6 +5622,7 @@ public class WebView extends AbsoluteLayout
        if (visibility != View.VISIBLE && mZoomManager != null) {
            mZoomManager.dismissZoomPicker();
        }
        updateDrawingState();
    }

    /**
@@ -8403,6 +8427,9 @@ public class WebView extends AbsoluteLayout
                        setNewPicture(mDelaySetPicture, true);
                        mDelaySetPicture = null;
                    }
                    if (mIsPaused) {
                        nativeSetPauseDrawing(mNativeClass, true);
                    }
                    break;
                case UPDATE_TEXTFIELD_TEXT_MSG_ID:
                    // Make sure that the textfield is currently focused
@@ -9584,4 +9611,5 @@ public class WebView extends AbsoluteLayout
     * See {@link ComponentCallbacks2} for the trim levels and descriptions
     */
    private static native void     nativeOnTrimMemory(int level);
    private static native void nativeSetPauseDrawing(int instance, boolean pause);
}