text: '''
  Camera
  ======
  
  The :class:`Camera` is to capture pictures and make videos.
  
  .. note::
          - On Android the `CAMERA` , `WRITE_EXTERNAL_STORAGE`,
            `READ_EXTERNAL_STORAGE` permissions are needed.
  
  Simple Examples
  ---------------
  
  Setup callback function.
  
      >>> from os.path import exists, join
      >>> from plyer import camera
      >>> def camera_callback(filepath):
      >>>     if(exists(filepath)):
      >>>         print "saved"
      >>>     else:
      >>>         print "unable to save."
      >>> filepath = 'path/to/your/file'
      >>> # e.g: filepath = join(App.get_running_app().user_data_dir, file_name)
  
  To take picture::
  
      >>> file_name = "test.jpg"
      >>> camera.take_picture(filename=file_name,
      >>>                     on_complete=camera_callback)
  
  Ta take a video::
  
      >>> file_name = "test.mp4"
      >>> camera.take_video(filename=file_name,
      >>>                   on_complete=camera_callback)
  
  '''
  
  
  class Camera(object):
      '''
      Camera facade.
      '''
  
      def take_picture(self, filename, on_complete):
          '''Ask the OS to capture a picture, and store it at filename.
  
          When the capture is done, on_complete will be called with the filename
          as an argument. If the callback returns True, the filename will be
          unlinked.
  
          :param filename: Name of the image file
          :param on_complete: Callback that will be called when the operation is
              done
  
          :type filename: str
          :type on_complete: callable
          '''
          self._take_picture(filename=filename, on_complete=on_complete)
  
      def take_video(self, filename, on_complete):
          '''Ask the OS to capture a video, and store it at filename.
  
          When the capture is done, on_complete will be called with the filename
          as an argument. If the callback returns True, the filename will be
          unlinked.
  
          :param filename: Name of the video file
          :param on_complete: Callback that will be called when the operation is
              done
  
          :type filename: str
          :type on_complete: callable
          '''
          self._take_video(filename=filename, on_complete=on_complete)
  
      # private
  
      def _take_picture(self, **kwargs):
          raise NotImplementedError()
  
      def _take_video(self, **kwargs):
          raise NotImplementedError()
  