diff options
| author | 2016-04-01 10:29:05 -0700 | |
|---|---|---|
| committer | 2016-04-01 11:10:00 -0700 | |
| commit | ee34ef1633592e31d4ea99c3a41492a82a970c11 (patch) | |
| tree | d46ac32763f12616cac620569e09cbe698c06dfd | |
| parent | 6c4af8c9150293eb2eb73dae39451f7624f81c19 (diff) | |
Expose setDrawGLFunctionDetachedCallback to webview
Add WebViewDelegate.setDrawGLFunctionDetachedCallback system API that's
used for webview to receive the functor detach callback.
BUG: 27709981
Change-Id: Ie6b5e445c0090a181f94fcd2ec1ea77095c9cb03
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 15 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewDelegate.java | 20 |
3 files changed, 36 insertions, 0 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 771705fb7c26..5ae1bf6d1041 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -48655,6 +48655,7 @@ package android.webkit { method public int getPackageId(android.content.res.Resources, java.lang.String); method public void invokeDrawGlFunctor(android.view.View, long, boolean); method public boolean isTraceTagEnabled(); + method public java.lang.Runnable setDrawGlFunctionDetachedCallback(android.view.View, java.lang.Runnable); method public void setOnTraceEnabledChangeListener(android.webkit.WebViewDelegate.OnTraceEnabledChangeListener); } diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 784164d243f1..117faf0b61ed 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -3890,6 +3890,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * cleanup. */ final RenderNode mRenderNode; + private Runnable mRenderNodeDetachedCallback; /** * Set to true when the view is sending hover accessibility events because it @@ -16013,6 +16014,20 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @hide */ public void onRenderNodeDetached(RenderNode renderNode) { + if (renderNode == mRenderNode && mRenderNodeDetachedCallback != null) { + mRenderNodeDetachedCallback.run(); + } + } + + /** + * Set callback for functor detach. Exposed to WebView through WebViewDelegate. + * Should not be used otherwise. + * @hide + */ + public final Runnable setRenderNodeDetachedCallback(@Nullable Runnable callback) { + Runnable oldCallback = mRenderNodeDetachedCallback; + mRenderNodeDetachedCallback = callback; + return oldCallback; } /** diff --git a/core/java/android/webkit/WebViewDelegate.java b/core/java/android/webkit/WebViewDelegate.java index 8104f7d6f50c..b6516c85d094 100644 --- a/core/java/android/webkit/WebViewDelegate.java +++ b/core/java/android/webkit/WebViewDelegate.java @@ -16,6 +16,8 @@ package android.webkit; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SystemApi; import android.app.ActivityThread; import android.app.Application; @@ -109,6 +111,24 @@ public final class WebViewDelegate { } /** + * Set the Runnable callback the DrawGlFunction functor is detached and free to be destroyed. + * This will replace the previous callback, if any. + * + * @param view The view to set the callback. Should be the view where onDraw inserted + * DrawGLFunctor. + * @param callback The new callback to set on the view. + * @throws IllegalArgumentException if view is null. + * @return The previous callback on this view. + */ + public Runnable setDrawGlFunctionDetachedCallback( + @NonNull View view, @Nullable Runnable callback) { + if (view == null) { + throw new IllegalArgumentException("View cannot be null"); + } + return view.setRenderNodeDetachedCallback(callback); + } + + /** * Detaches the draw GL functor. * * @param nativeDrawGLFunctor the pointer to the native functor that implements |