Apply SERVICE_OPERATION_PICK operation for <input type=file>
authorJiyeon Kim <jiyeon0402.kim@samsung.com>
Fri, 3 May 2013 08:03:35 +0000 (17:03 +0900)
committerGerrit Code Review <gerrit2@kim11>
Mon, 6 May 2013 02:36:05 +0000 (11:36 +0900)
[Title] Apply SERVICE_OPERATION_PICK operation for <input type=file>
[Problem] P130426-4933, P130425-4323. Facebook, twitter and other application need selecting UI for using different kinds of application when user select upload file button or video icon
[Cause] Only file manager launched when input type is file.
[Solution] If input type is file, set service operation type to SERVICE_OPERATION_PICK and launch app service controller not file manager

Change-Id: Ib00a1dce77156459ae92ed5e766c6a4daee542bc

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

index b4d5f8a..39162bf 100755 (executable)
@@ -38,86 +38,7 @@ OpenPanel::~OpenPanel()
     close();
 }
 
-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)
+static void _serviceResultCb(service_h request, service_h reply, service_result_e result, void* data)
 {
     OpenPanel* openPanel = static_cast<OpenPanel*>(data);
 
@@ -138,6 +59,7 @@ static void _cameraResultCb(service_h request, service_h reply, service_result_e
             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 {
@@ -151,11 +73,11 @@ bool OpenPanel::_capturePicture()
     if (service_create(&svcHandle) < 0 || !svcHandle)
         return false;
 
-    service_set_operation(svcHandle, SERVICE_OPERATION_CREATE_CONTENT);
-    service_set_mime(svcHandle, "image/jpg");
+    service_set_operation(svcHandle, SERVICE_OPERATION_PICK);
+    service_set_mime(svcHandle, "image/*");
     service_add_extra_data(svcHandle, "CALLER", "webkit");
 
-    int ret = service_send_launch_request(svcHandle, _cameraResultCb, this);
+    int ret = service_send_launch_request(svcHandle, _serviceResultCb, this);
     if (ret != SERVICE_ERROR_NONE) {
         service_destroy(svcHandle);
         TIZEN_LOGE("ret(%d)", ret);
@@ -173,11 +95,11 @@ bool OpenPanel::_recordVideo()
     if (service_create(&svcHandle) < 0 || !svcHandle)
         return false;
 
-    service_set_operation(svcHandle, SERVICE_OPERATION_CREATE_CONTENT);
-    service_set_mime(svcHandle, "video/3gp");
+    service_set_operation(svcHandle, SERVICE_OPERATION_PICK);
+    service_set_mime(svcHandle, "video/*");
     service_add_extra_data(svcHandle, "CALLER", "webkit");
 
-    int ret = service_send_launch_request(svcHandle, _cameraResultCb, this);
+    int ret = service_send_launch_request(svcHandle, _serviceResultCb, this);
     if (ret != SERVICE_ERROR_NONE) {
         service_destroy(svcHandle);
         TIZEN_LOGE("ret(%d)", ret);
@@ -195,10 +117,31 @@ bool OpenPanel::_recordVoice()
     if (service_create(&svcHandle) < 0 || !svcHandle)
         return false;
 
-    service_set_operation(svcHandle, SERVICE_OPERATION_CREATE_CONTENT);
-    service_set_mime(svcHandle, "audio/amr");
+    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, "*/*");
 
-    int ret = service_send_launch_request(svcHandle, _cameraResultCb, this);
+    int ret = service_send_launch_request(svcHandle, _serviceResultCb, this);
     if (ret != SERVICE_ERROR_NONE) {
         service_destroy(svcHandle);
         TIZEN_LOGE("ret(%d)", ret);
@@ -269,53 +212,8 @@ bool OpenPanel::openPanel(Evas_Object* ewkView, Eina_Bool allow_multiple_files,
             else if (strstr(accept_type, "audio"))
                 return _recordVoice();
         }
-    }
-
-    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;
+    } else
+        return _fileManager();
 }
 
 
index 11049ff..1c9e411 100644 (file)
@@ -39,6 +39,7 @@ private:
     bool _capturePicture();
     bool _recordVideo();
     bool _recordVoice();
+    bool _fileManager();
 
     Evas_Object* m_ewkView;
 };