diff --git a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java index e67a3936c1..aa97bdd2fd 100644 --- a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +++ b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java @@ -18,8 +18,11 @@ public abstract class SkiaBaseView extends ReactViewGroup implements TextureView private String tag = "SkiaView"; - public SkiaBaseView(Context context) { + private boolean manageTexture = false; + + public SkiaBaseView(Context context, boolean manageTexture) { super(context); + this.manageTexture = manageTexture; mTexture = new TextureView(context); mTexture.setSurfaceTextureListener(this); mTexture.setOpaque(false); @@ -27,19 +30,23 @@ public SkiaBaseView(Context context) { } public void destroySurface() { - Log.i(tag, "destroySurface"); - surfaceDestroyed(); - mSurface.release(); - mSurface = null; + if (mSurface != null) { + Log.i(tag, "destroySurface"); + surfaceDestroyed(); + mSurface.release(); + mSurface = null; + } } private void createSurfaceTexture() { - // This API Level is >= 26, we created our own SurfaceTexture to have a faster time to first frame - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - Log.i(tag, "Create SurfaceTexture"); - SurfaceTexture surface = new SurfaceTexture(false); - mTexture.setSurfaceTexture(surface); - this.onSurfaceTextureAvailable(surface, this.getMeasuredWidth(), this.getMeasuredHeight()); + if (manageTexture) { + // This API Level is >= 26, we created our own SurfaceTexture to have a faster time to first frame + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + Log.i(tag, "Create SurfaceTexture"); + SurfaceTexture surface = new SurfaceTexture(false); + mTexture.setSurfaceTexture(surface); + this.onSurfaceTextureAvailable(surface, this.getMeasuredWidth(), this.getMeasuredHeight()); + } } } @@ -145,7 +152,7 @@ public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int h public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { Log.i(tag, "onSurfaceTextureDestroyed"); // https://developer.android.com/reference/android/view/TextureView.SurfaceTextureListener#onSurfaceTextureDestroyed(android.graphics.SurfaceTexture) - surfaceDestroyed(); + destroySurface(); createSurfaceTexture(); return false; } diff --git a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java index 152ed1e9d1..6064e389a8 100644 --- a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +++ b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java @@ -29,7 +29,7 @@ public void setDebug(ReactViewGroup view, boolean show) { @Override public void onDropViewInstance(@NonNull ReactViewGroup view) { super.onDropViewInstance(view); - ((SkiaBaseView)view).unregisterView(); ((SkiaBaseView)view).destroySurface(); + ((SkiaBaseView)view).unregisterView(); } } \ No newline at end of file diff --git a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java index d2ec166986..490d626951 100644 --- a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +++ b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java @@ -11,7 +11,7 @@ public class SkiaDomView extends SkiaBaseView { private HybridData mHybridData; public SkiaDomView(Context context) { - super(context); + super(context, true); RNSkiaModule skiaModule = ((ReactContext) context).getNativeModule(RNSkiaModule.class); mHybridData = initHybrid(skiaModule.getSkiaManager()); } diff --git a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java index fb05a798a1..d131dae80c 100644 --- a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java +++ b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java @@ -11,7 +11,7 @@ public class SkiaDrawView extends SkiaBaseView { private HybridData mHybridData; public SkiaDrawView(Context context) { - super(context); + super(context, false); RNSkiaModule skiaModule = ((ReactContext) context).getNativeModule(RNSkiaModule.class); mHybridData = initHybrid(skiaModule.getSkiaManager()); } diff --git a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java index 56e5bb3e23..2ba2d1fd48 100644 --- a/package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java +++ b/package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java @@ -11,7 +11,7 @@ public class SkiaPictureView extends SkiaBaseView { private HybridData mHybridData; public SkiaPictureView(Context context) { - super(context); + super(context, true); RNSkiaModule skiaModule = ((ReactContext) context).getNativeModule(RNSkiaModule.class); mHybridData = initHybrid(skiaModule.getSkiaManager()); }