Fix ART surface sleep issue

Summary: Fixes https://github.com/facebook/react-native/issues/17565.

Reviewed By: achen1

Differential Revision: D8194925

fbshipit-source-id: 5448d49d959078eaded697f791e1b382471fabdb
This commit is contained in:
Himabindu Gadupudi 2018-05-30 14:18:34 -07:00 committed by Facebook Github Bot
parent 5863b564f8
commit 5fc42f308a
5 changed files with 21 additions and 25 deletions

View File

@ -7,6 +7,7 @@
package com.facebook.react.flat;
import android.view.SurfaceHolder;
import com.facebook.react.uimanager.BaseViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.views.art.ARTSurfaceView;
@ -14,6 +15,7 @@ import com.facebook.yoga.YogaMeasureFunction;
import com.facebook.yoga.YogaMeasureMode;
import com.facebook.yoga.YogaNode;
public class FlatARTSurfaceViewManager extends
BaseViewManager<ARTSurfaceView, FlatARTSurfaceViewShadowNode> {
@ -55,6 +57,6 @@ public class FlatARTSurfaceViewManager extends
@Override
public void updateExtraData(ARTSurfaceView root, Object extraData) {
root.setSurfaceTextureListener((FlatARTSurfaceViewShadowNode) extraData);
root.getHolder().addCallback((FlatARTSurfaceViewShadowNode) extraData);
}
}

View File

@ -16,7 +16,7 @@ import android.graphics.PorterDuff;
import android.graphics.SurfaceTexture;
import android.util.Log;
import android.view.Surface;
import android.view.TextureView;
import android.view.SurfaceHolder;
import com.facebook.react.common.ReactConstants;
import com.facebook.react.uimanager.ReactShadowNode;
@ -25,8 +25,9 @@ import com.facebook.react.views.art.ARTVirtualNode;
import com.facebook.yoga.YogaValue;
import com.facebook.yoga.YogaUnit;
/* package */ class FlatARTSurfaceViewShadowNode extends FlatShadowNode
implements AndroidView, TextureView.SurfaceTextureListener {
implements AndroidView, SurfaceHolder.Callback {
private boolean mPaddingChanged = false;
private @Nullable Surface mSurface;
@ -123,21 +124,16 @@ import com.facebook.yoga.YogaUnit;
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mSurface = new Surface(surface);
public void surfaceCreated(SurfaceHolder holder) {
mSurface = holder.getSurface();
drawOutput();
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
surface.release();
public void surfaceDestroyed(SurfaceHolder holder) {
mSurface = null;
return true;
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
}

View File

@ -8,14 +8,13 @@
package com.facebook.react.views.art;
import android.content.Context;
import android.view.TextureView;
import android.view.SurfaceView;
/**
* Custom {@link View} implementation that draws an ARTSurface React view and its children.
*/
public class ARTSurfaceView extends TextureView {
public class ARTSurfaceView extends SurfaceView {
public ARTSurfaceView(Context context) {
super(context);
setOpaque(false);
}
}

View File

@ -7,6 +7,7 @@
package com.facebook.react.views.art;
import android.view.SurfaceHolder;
import com.facebook.yoga.YogaMeasureMode;
import com.facebook.yoga.YogaMeasureFunction;
import com.facebook.yoga.YogaNode;
@ -60,7 +61,7 @@ public class ARTSurfaceViewManager extends
@Override
public void updateExtraData(ARTSurfaceView root, Object extraData) {
root.setSurfaceTextureListener((ARTSurfaceViewShadowNode) extraData);
root.getHolder().addCallback((ARTSurfaceViewShadowNode) extraData);
}
@Override

View File

@ -15,8 +15,10 @@ import android.graphics.Color;
import android.view.Surface;
import android.graphics.PorterDuff;
import android.graphics.SurfaceTexture;
import android.view.SurfaceHolder;
import android.view.TextureView;
import com.facebook.common.logging.FLog;
import com.facebook.react.common.ReactConstants;
import com.facebook.react.uimanager.LayoutShadowNode;
@ -29,7 +31,7 @@ import com.facebook.react.uimanager.annotations.ReactProp;
* Shadow node for ART virtual tree root - ARTSurfaceView
*/
public class ARTSurfaceViewShadowNode extends LayoutShadowNode
implements TextureView.SurfaceTextureListener {
implements SurfaceHolder.Callback {
private @Nullable Surface mSurface;
@ -97,21 +99,17 @@ public class ARTSurfaceViewShadowNode extends LayoutShadowNode
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mSurface = new Surface(surface);
public void surfaceCreated(SurfaceHolder holder) {
mSurface = holder.getSurface();
drawOutput();
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
surface.release();
public void surfaceDestroyed(SurfaceHolder holder) {
mSurface = null;
return true;
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {}
}