package com.erlei.videorecorder.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;

import com.erlei.videorecorder.R;
import com.erlei.videorecorder.camera.Camera;
import com.erlei.videorecorder.camera.Size;
import com.erlei.videorecorder.util.LogUtil;

/**
 * Created by lll on 2018/1/20.
 * 打开一个相机预览
 */
public class SurfaceViewFragment extends Fragment implements SurfaceHolder.Callback, Camera.CameraCallback {

    private SurfaceView mSurfaceView;
    private Camera mCamera;

    public static SurfaceViewFragment newInstance() {
        return new SurfaceViewFragment();
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_camera_surface, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mSurfaceView = view.findViewById(R.id.SurfaceView);
        mSurfaceView.getHolder().addCallback(this);
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = new Camera.CameraBuilder(getContext()).useDefaultConfig().setSurfaceHolder(holder).addPreviewCallback(this).build().open();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        if (mCamera != null) mCamera.close();
    }

    /**
     * 打开相机预览成功 , 可以在这个回调里根据camera.getPreviewSize() 重新调整SurfaceView的大小比例 , 避免预览变形
     */
    @Override
    public void onSuccess(Camera camera) {
        adjustSurfaceViewSize(camera.getPreviewSize());
    }

    @Override
    public void onFailure(int code, String msg) {
        LogUtil.loge(msg);
    }

    /**
     * 调整SurfaceView的大小比例 , 以避免预览变形
     *
     * @param previewSize 预览大小
     */
    private void adjustSurfaceViewSize(Size previewSize) {
        int width = getResources().getDisplayMetrics().widthPixels;
        int height = (int) (width * ((previewSize.getWidth() * 1.0f) / previewSize.getHeight()));
        ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) mSurfaceView.getLayoutParams();
        lp.width = width;
        lp.height = height;
        mSurfaceView.setLayoutParams(lp);
    }


}