/** Finalize view from inflation. */
  @Override
  protected void onFinishInflate() {
    super.onFinishInflate();

    if (DBG) log("onFinishInflate(this = " + this + ")...");

    // Check the Media loopback property
    int property = SystemProperties.getInt("net.lte.VT_LOOPBACK_ENABLE", 0);
    mIsMediaLoopback = (property == 1) ? true : false;
    if (DBG) log("Is Media running in loopback mode: " + mIsMediaLoopback);

    // Get UI widgets
    mVideoCallPanel = (ViewGroup) findViewById(R.id.videoCallPanel);
    mZoomControl = (ZoomControlBar) findViewById(R.id.zoom_control);
    mFarEndView = (TextureView) findViewById(R.id.video_view);
    mCameraPreview = (TextureView) findViewById(R.id.camera_view);
    mCameraPicker = (ImageView) findViewById(R.id.camera_picker);

    // Set listeners
    mCameraPreview.setSurfaceTextureListener(this);
    mFarEndView.setSurfaceTextureListener(this);
    mCameraPicker.setOnClickListener(this);

    // Get the camera IDs for front and back cameras
    mVideoCallManager = VideoCallManager.getInstance(mContext);
    mBackCameraId = mVideoCallManager.getBackCameraId();
    mFrontCameraId = mVideoCallManager.getFrontCameraId();
    chooseCamera(true);

    // Check if camera supports dual cameras
    mNumberOfCameras = mVideoCallManager.getNumberOfCameras();
    if (mNumberOfCameras > 1) {
      mCameraPicker.setVisibility(View.VISIBLE);
    } else {
      mCameraPicker.setVisibility(View.GONE);
    }

    // Set media event listener
    mVideoCallManager.setOnParamReadyListener(new ParamReadyListener());
    mVideoCallManager.setCvoEventListener(new CvoListener());
  }