Revert "Apply SERVICE_OPERATION_PICK operation for <input type=file>"
authorJiyeon Kim <jiyeon0402.kim@samsung.com>
Tue, 7 May 2013 09:30:13 +0000 (18:30 +0900)
committerGerrit Code Review <gerrit2@kim11>
Tue, 7 May 2013 09:30:13 +0000 (18:30 +0900)
This reverts commit 18ad365eef7eb8a7baa824f527e233235dd01779

Source/WebKit2/UIProcess/API/efl/tizen/OpenPanel.cpp
Source/WebKit2/UIProcess/API/efl/tizen/OpenPanel.h

index 39162bf..b4d5f8a 100755 (executable)
@@ -38,7 +38,86 @@ OpenPanel::~OpenPanel()
     close();
 }
 
-static void _serviceResultCb(service_h request, service_h reply, service_result_e result, void* data)
+static void layout_cb(ui_gadget_h ug, enum ug_mode mode, void* priv)
+{
+    Evas_Object* base, *win;
+
+    if (!ug || !priv)
+        return;
+
+    base = (Evas_Object*)ug_get_layout(ug);
+    if (!base)
+        return;
+
+    win = (Evas_Object*)ug_get_window();
+
+    switch (mode) {
+    case UG_MODE_FULLVIEW:
+        evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+        elm_win_resize_object_add(win, base);
+        evas_object_show(base);
+        break;
+    default:
+        break;
+    }
+}
+
+static void result_cb(ui_gadget_h ug, service_h service, void* priv)
+{
+    TIZEN_LOGI("ug(%d), service(%d), priv(%d)", ug, service, priv);
+    if (!ug || !priv)
+        return;
+
+    OpenPanel* openPanel = static_cast<OpenPanel*>(priv);
+    Evas_Object* ewk_view = openPanel->ewkView();
+    if (!ewk_view)
+        return;
+
+    Eina_List* selectedFiles = NULL;
+    unsigned int i = 0;
+    char* filename = NULL;
+
+    service_get_extra_data(service, "result", &filename);
+
+    if (filename && strlen(filename)) {
+        char* filelist = strdup(filename);
+        char* file = NULL;
+        file = strtok(filelist, "?");
+        int stringlength = 0;
+        do {
+            stringlength = 0;
+            if ((stringlength = strlen(file)) > 0) {
+                char* buffer = new char[stringlength+1];
+                memset(buffer, 0x00, sizeof(buffer));
+                strncpy(buffer, file, strlen(file));
+                buffer[stringlength] = 0x00;
+                selectedFiles = eina_list_append(selectedFiles, buffer);
+            }
+            i++;
+        }while((file = strtok(NULL, "?")));
+        free(filelist);
+    } else {
+        return;
+    }
+    ewk_view_open_panel_reply(ewk_view, selectedFiles, EINA_TRUE);
+    return;
+}
+
+static void destroy_cb(ui_gadget_h ug, void* priv)
+{
+    TIZEN_LOGI("ug(%d), priv(%d)", ug, priv);
+    ug_destroy(ug);
+
+    OpenPanel* openPanel = static_cast<OpenPanel*>(priv);
+    Evas_Object* ewk_view = openPanel->ewkView();
+    if (!ewk_view)
+        return;
+
+    ewk_view_open_panel_reply(ewk_view, NULL, EINA_FALSE);
+    return;
+}
+
+static void _cameraResultCb(service_h request, service_h reply, service_result_e result, void* data)
 {
     OpenPanel* openPanel = static_cast<OpenPanel*>(data);
 
@@ -59,7 +138,6 @@ static void _serviceResultCb(service_h request, service_h reply, service_result_
             list = eina_list_append(list, fileName);
             ewk_view_open_panel_reply(openPanel->ewkView(), list, true);
         } else {
-            TIZEN_LOGE("resultFilename is null");
             ewk_view_open_panel_reply(openPanel->ewkView(), 0, false);
         }
     } else {
@@ -73,11 +151,11 @@ bool OpenPanel::_capturePicture()
     if (service_create(&svcHandle) < 0 || !svcHandle)
         return false;
 
-    service_set_operation(svcHandle, SERVICE_OPERATION_PICK);
-    service_set_mime(svcHandle, "image/*");
+    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, _serviceResultCb, this);
+    int ret = service_send_launch_request(svcHandle, _cameraResultCb, this);
     if (ret != SERVICE_ERROR_NONE) {
         service_destroy(svcHandle);
         TIZEN_LOGE("ret(%d)", ret);
@@ -95,11 +173,11 @@ bool OpenPanel::_recordVideo()
     if (service_create(&svcHandle) < 0 || !svcHandle)
         return false;
 
-    service_set_operation(svcHandle, SERVICE_OPERATION_PICK);
-    service_set_mime(svcHandle, "video/*");
+    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, _serviceResultCb, this);
+    int ret = service_send_launch_request(svcHandle, _cameraResultCb, this);
     if (ret != SERVICE_ERROR_NONE) {
         service_destroy(svcHandle);
         TIZEN_LOGE("ret(%d)", ret);
@@ -117,31 +195,10 @@ bool OpenPanel::_recordVoice()
     if (service_create(&svcHandle) < 0 || !svcHandle)
         return false;
 
-    service_set_operation(svcHandle, SERVICE_OPERATION_PICK);
-    service_set_mime(svcHandle, "audio/*");
-
-    int ret = service_send_launch_request(svcHandle, _serviceResultCb, this);
-    if (ret != SERVICE_ERROR_NONE) {
-        service_destroy(svcHandle);
-        TIZEN_LOGE("ret(%d)", ret);
-        return false;
-    }
-
-    service_destroy(svcHandle);
-
-    return true;
-}
-
-bool OpenPanel::_fileManager()
-{
-    service_h svcHandle = 0;
-    if (service_create(&svcHandle) < 0 || !svcHandle)
-        return false;
-
-    service_set_operation(svcHandle, SERVICE_OPERATION_PICK);
-    service_set_mime(svcHandle, "*/*");
+    service_set_operation(svcHandle, SERVICE_OPERATION_CREATE_CONTENT);
+    service_set_mime(svcHandle, "audio/amr");
 
-    int ret = service_send_launch_request(svcHandle, _serviceResultCb, this);
+    int ret = service_send_launch_request(svcHandle, _cameraResultCb, this);
     if (ret != SERVICE_ERROR_NONE) {
         service_destroy(svcHandle);
         TIZEN_LOGE("ret(%d)", ret);
@@ -212,8 +269,53 @@ bool OpenPanel::openPanel(Evas_Object* ewkView, Eina_Bool allow_multiple_files,
             else if (strstr(accept_type, "audio"))
                 return _recordVoice();
         }
-    } else
-        return _fileManager();
+    }
+
+    service_h service = NULL;
+    if (service_create(&service) != SERVICE_ERROR_NONE)
+        return false;
+    service_add_extra_data(service, "path", "/opt/media");
+
+    if (is_audio_all_type && !is_video_all_type && !is_image_all_type && !is_video_extension_type && !is_image_extension_type) {
+        service_add_extra_data(service, "file_type", "SOUND");
+    } else if (is_video_all_type && !is_image_all_type && !is_audio_all_type && !is_image_extension_type && !is_audio_extension_type) {
+        service_add_extra_data(service, "file_type", "VIDEO");
+    } else if (is_image_all_type && !is_audio_all_type && !is_video_all_type && !is_audio_extension_type && !is_video_extension_type) {
+        service_add_extra_data(service, "file_type", "IMAGE");
+    } else if (is_audio_all_type && is_video_all_type && !is_image_all_type && !is_image_extension_type) {
+        service_add_extra_data(service, "file_type", "VS");
+    } else if (is_video_all_type && is_image_all_type && !is_audio_all_type && !is_audio_extension_type) {
+        service_add_extra_data(service, "file_type", "IV");
+    } else if (is_image_all_type && is_audio_all_type && !is_video_all_type && !is_video_extension_type) {
+        service_add_extra_data(service, "file_type", "IS");
+    } else if (!is_audio_all_type && !is_video_all_type && !is_image_all_type &&
+                (is_video_extension_type || is_image_extension_type || is_audio_extension_type)) {
+        service_add_extra_data(service, "file_type", extensions);
+    } else {
+        service_add_extra_data(service, "file_type", "ALL");
+    }
+
+    /* Set file select mode : multiple/single */
+    if (allow_multiple_files == TRUE){
+        service_add_extra_data(service, "select_type", "MULTI_FILE");
+    } else {
+        service_add_extra_data(service, "select_type", "SINGLE_FILE");
+    }
+
+    struct ug_cbs cbs = {0, 0, 0, 0};
+    cbs.layout_cb = layout_cb;
+    cbs.result_cb = result_cb;
+    cbs.destroy_cb = destroy_cb;
+    cbs.priv = (void*)this;
+
+    if(!ug_create(NULL, "myfile-efl", UG_MODE_FULLVIEW, service, &cbs)) {
+        TIZEN_LOGE("ug_create FAIL");
+        return false;
+    }
+
+    service_destroy(service);
+
+    return true;
 }
 
 
index 1c9e411..11049ff 100644 (file)
@@ -39,7 +39,6 @@ private:
     bool _capturePicture();
     bool _recordVideo();
     bool _recordVoice();
-    bool _fileManager();
 
     Evas_Object* m_ewkView;
 };