/*
 * Kamera.h
 *
 *  Created on: Apr 19, 2011
 *      Author: Anis Kadri <anis@adobe.com>
 *
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */


#ifndef KAMERA_H_
#define KAMERA_H_

#include "CordovaCommand.h"
#include <FApp.h>
#include <FIo.h>

using namespace Osp::App;
using namespace Osp::Base::Collection;
using namespace Osp::Io;

class Kamera: public CordovaCommand, IAppControlEventListener {
public:
	Kamera(Web* pWeb);
	virtual ~Kamera();
public:
	String callbackId;
public:
	void Run(const String& command);
	void GetPicture();
	void OnAppControlCompleted (const String &appControlId, const String &operationId, const IList *pResultList);
};

#endif /* KAMERA_H_ */
