package com.flurgle.camerakit; import android.annotation.TargetApi; import android.content.Context; import android.graphics.SurfaceTexture; import android.view.Surface; import android.view.TextureView; import android.view.View; import android.view.ViewGroup; @TargetApi(14) class TextureViewPreview extends PreviewImpl { private final TextureView mTextureView; private int mDisplayOrientation; TextureViewPreview(Context context, ViewGroup parent) { final View view = View.inflate(context, R.layout.texture_view, parent); mTextureView = (TextureView) view.findViewById(R.id.texture_view); mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { setSize(width, height); dispatchSurfaceChanged(); } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { setSize(width, height); dispatchSurfaceChanged(); setTruePreviewSize(mTrueWidth, mTrueHeight); } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { setSize(0, 0); return true; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { } }); } @Override void setCallback(Callback callback) { super.setCallback(callback); } @Override Surface getSurface() { return new Surface(mTextureView.getSurfaceTexture()); } @Override View getView() { return mTextureView; } @Override Class getOutputClass() { return SurfaceTexture.class; } @Override void setDisplayOrientation(int displayOrientation) { mDisplayOrientation = displayOrientation; } @Override boolean isReady() { return mTextureView.getSurfaceTexture() != null; } @Override protected void dispatchSurfaceChanged() { super.dispatchSurfaceChanged(); } @Override SurfaceTexture getSurfaceTexture() { return mTextureView.getSurfaceTexture(); } @TargetApi(15) @Override void setTruePreviewSize(int width, int height) { super.setTruePreviewSize(width, height); if (mTextureView.getSurfaceTexture() != null) { mTextureView.getSurfaceTexture().setDefaultBufferSize(width, height); } } }