return;
}
+static void _cameraResultCb(service_h request, service_h reply, service_result_e result, void* data)
+{
+ OpenPanel* openPanel = static_cast<OpenPanel*>(data);
+
+ if (result == SERVICE_RESULT_SUCCEEDED) {
+ char* resultFilename = 0;
+ int ret = service_get_extra_data(reply, SERVICE_DATA_SELECTED, &resultFilename);
+ if (ret != SERVICE_ERROR_NONE)
+ return;
+
+ if (resultFilename) {
+ Eina_List* list = 0;
+ int len = strlen(resultFilename) + 1;
+ char* fileName = static_cast<char*>(malloc(sizeof(char) * len));
+ memset(fileName, 0, sizeof(char) * len);
+ strcpy(fileName, resultFilename);
+ list = eina_list_append(list, fileName);
+ ewk_view_open_panel_reply(openPanel->ewkView(), list, true);
+ }
+ }
+}
+
+bool OpenPanel::_capturePicture()
+{
+ service_h svcHandle = 0;
+ if (service_create(&svcHandle) < 0 || !svcHandle)
+ return false;
+
+ service_set_operation(svcHandle, SERVICE_OPERATION_CREATE_CONTENT);
+ service_set_mime(svcHandle, "image/jpg");
+ service_add_extra_data(svcHandle, "CALLER", "webkit");
+
+ int ret = service_send_launch_request(svcHandle, _cameraResultCb, this);
+ if (ret != SERVICE_ERROR_NONE) {
+ service_destroy(svcHandle);
+ return false;
+ }
+
+ service_destroy(svcHandle);
+
+ return true;
+}
+
+bool OpenPanel::_recordVideo()
+{
+ service_h svcHandle = 0;
+ if (service_create(&svcHandle) < 0 || !svcHandle)
+ return false;
+
+ service_set_operation(svcHandle, SERVICE_OPERATION_CREATE_CONTENT);
+ service_set_mime(svcHandle, "video/3gp");
+ service_add_extra_data(svcHandle, "CALLER", "webkit");
+
+ int ret = service_send_launch_request(svcHandle, _cameraResultCb, this);
+ if (ret != SERVICE_ERROR_NONE) {
+ service_destroy(svcHandle);
+ return false;
+ }
+
+ service_destroy(svcHandle);
+
+ return true;
+}
+
+bool OpenPanel::_recordVoice()
+{
+ service_h svcHandle = 0;
+ if (service_create(&svcHandle) < 0 || !svcHandle)
+ return false;
+
+ service_set_operation(svcHandle, SERVICE_OPERATION_CREATE_CONTENT);
+ service_set_mime(svcHandle, "audio/amr");
+
+ int ret = service_send_launch_request(svcHandle, _cameraResultCb, this);
+ if (ret != SERVICE_ERROR_NONE) {
+ service_destroy(svcHandle);
+ return false;
+ }
+
+ service_destroy(svcHandle);
+
+ return true;
+}
+
bool OpenPanel::openPanel(Evas_Object* ewkView, Eina_Bool allow_multiple_files, Eina_List* accepted_mime_types, const char* capture, void* userData)
{
+ if (capture) {
+ if (!strcmp(capture, "camera"))
+ return _capturePicture();
+ else if (!strcmp(capture, "camcorder"))
+ return _recordVideo();
+ else if (!strcmp(capture, "microphone"))
+ return _recordVoice();
+ }
+
unsigned int i, n;
Eina_Bool is_audio_extension_type = EINA_FALSE;