Changes for supporting myfiles 36/72436/3
authorKyuho Jo <kyuho.jo@samsung.com>
Wed, 1 Jun 2016 04:53:44 +0000 (13:53 +0900)
committerKyuho Jo <kyuho.jo@samsung.com>
Wed, 1 Jun 2016 05:04:39 +0000 (14:04 +0900)
1. Accept requests for opening media files from myfiles.
2. Place base-i18n with ICU library.
3. maps-service can be removed from dependencies.

Change-Id: I444f03761f59ffca06da3129a4ebb7853c986b92
Signed-off-by: Kyuho Jo <kyuho.jo@samsung.com>
15 files changed:
CMakeLists.txt
include/data/mediadata.h
include/util/util.h
include/view.h
org.tizen.mediahub.xml.in
packaging/org.tizen.mediahub.spec
src/data/albumdata.c
src/data/mediadata.c
src/layout/gallery.c
src/main.c
src/util/util.c
src/view/action_menu.c
src/view/base.c
src/view/mplayer.c
src/view/viewer.c

index 21f77cc..396b814 100644 (file)
@@ -17,6 +17,48 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 PROJECT("mediahub" C)
 
 INCLUDE(FindPkgConfig)
+
+IF(${FEATURE_LOCATION_SERVICE} STREQUAL "ENABLED")
+pkg_check_modules(PKGS REQUIRED
+               glib-2.0
+               gio-2.0
+               elementary
+               capi-appfw-application
+               capi-media-player
+               capi-ui-efl-util
+               vconf
+               app-utils
+               icu-i18n
+               capi-maps-service)
+ADD_DEFINITIONS("-D__FEATURE_LOCATION_SERVICE__")
+SET(SRCS
+       src/main.c
+       src/view/base.c
+       src/view/detail.c
+       src/view/viewer.c
+       src/view/mplayer.c
+       src/view/action_menu.c
+       src/view/zoom.c
+       src/layout/movie.c
+       src/layout/gallery.c
+       src/layout/music.c
+       src/util/controller.c
+       src/util/listmgr.c
+       src/util/timeout_handler.c
+       src/util/usb.c
+       src/util/util.c
+       src/util/playermgr.c
+       src/util/ctxpopup.c
+       src/util/progressbar.c
+       src/data/datamgr.c
+       src/data/albumdata.c
+       src/data/folderdata.c
+       src/data/mediadata.c
+       src/grid/grid_movie.c
+       src/grid/grid_gallery.c
+       src/grid/grid_music.c
+       src/util/locmgr.c)
+ELSE (${FEATURE_LOCATION_SERVICE} STREQUAL "ENABLED")
 pkg_check_modules(PKGS REQUIRED
                glib-2.0
                gio-2.0
@@ -24,10 +66,36 @@ pkg_check_modules(PKGS REQUIRED
                capi-appfw-application
                capi-media-player
                capi-ui-efl-util
-               capi-maps-service
                vconf
-               capi-base-utils-i18n
-               app-utils)
+               app-utils
+               icu-i18n)
+SET(SRCS
+       src/main.c
+       src/view/base.c
+       src/view/detail.c
+       src/view/viewer.c
+       src/view/mplayer.c
+       src/view/action_menu.c
+       src/view/zoom.c
+       src/layout/movie.c
+       src/layout/gallery.c
+       src/layout/music.c
+       src/util/controller.c
+       src/util/listmgr.c
+       src/util/timeout_handler.c
+       src/util/usb.c
+       src/util/util.c
+       src/util/playermgr.c
+       src/util/ctxpopup.c
+       src/util/progressbar.c
+       src/data/datamgr.c
+       src/data/albumdata.c
+       src/data/folderdata.c
+       src/data/mediadata.c
+       src/grid/grid_movie.c
+       src/grid/grid_gallery.c
+       src/grid/grid_music.c)
+ENDIF (${FEATURE_LOCATION_SERVICE} STREQUAL "ENABLED")
 
 IF(NOT DEFINED PACKAGE_NAME)
        SET(PACKAGE_NAME "org.tizen.mediahub")
@@ -53,35 +121,6 @@ IF(NOT DEFINED DESKTOP_ICON)
        SET(DESKTOP_ICON ${PACKAGE_NAME}.png)
 ENDIF(NOT DEFINED DESKTOP_ICON)
 
-SET(SRCS
-src/main.c
-src/view/base.c
-src/view/detail.c
-src/view/viewer.c
-src/view/mplayer.c
-src/view/action_menu.c
-src/view/zoom.c
-src/layout/movie.c
-src/layout/gallery.c
-src/layout/music.c
-src/util/controller.c
-src/util/listmgr.c
-src/util/timeout_handler.c
-src/util/usb.c
-src/util/util.c
-src/util/playermgr.c
-src/util/ctxpopup.c
-src/util/progressbar.c
-src/util/locmgr.c
-src/data/datamgr.c
-src/data/albumdata.c
-src/data/folderdata.c
-src/data/mediadata.c
-src/grid/grid_movie.c
-src/grid/grid_gallery.c
-src/grid/grid_music.c
-)
-
 SET(TARGET_EDJ "${PROJECT_NAME}.edj")
 SET(THEME_EDJ "${PROJECT_NAME}-theme.edj")
 
@@ -100,7 +139,9 @@ ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
 FOREACH(flag ${PKGS_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror")
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror -fPIE")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
 
 TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS})
 CONFIGURE_FILE(${PACKAGE_NAME}.xml.in ${PACKAGE_NAME}.xml)
index ebd07d2..7e902c9 100644 (file)
@@ -43,4 +43,6 @@ enum media_file_type {
 
 struct data_ops *mediadata_get_ops(void);
 
+app_media* mediadata_get_app_media_by_file_path(char *file_path);
+
 #endif /* _AIR_MEDIAHUB_MEDIADATA_H__ */
index 3076e44..34072d5 100644 (file)
@@ -19,7 +19,7 @@
 
 #include <media_content.h>
 #include <app_media.h>
-#include <utils_i18n.h>
+#include <unicode/ustring.h>
 
 bool util_check_movie_type(const char *str);
 bool util_launch_request(const char *appid, const char *key, const char *value);
@@ -37,8 +37,8 @@ Evas_Object *util_add_table(Evas_Object *base, int padding_x, int padding_y);
 
 void util_time_string(char *str, int size, unsigned int ms, bool full);
 void util_up_string(char *str);
-i18n_uchar* util_convert_to_UTF16_string(const char *source_string);
-char* util_convert_to_UTF8_string(i18n_uchar *sourct_string);
+UChar* util_convert_to_UTF16_string(const char *source_string);
+char* util_convert_to_UTF8_string(UChar *sourct_string);
 
 int util_get_media_index(Eina_List *list, void *info);
 int util_get_media_index_from_id(Eina_List *list, const char *id);
index 99e86a1..d780d73 100644 (file)
@@ -57,7 +57,8 @@ enum update_type {
        UPDATE_VIEW_MODE,
        UPDATE_SOURCE_CONTENT,
        UPDATE_SOURCE_TYPE,
-       UPDATE_TOAST
+       UPDATE_TOAST,
+       UPDATE_CONTENT_WITH_MEDIA_ID
 };
 
 enum base_view_layout {
index f7a67c9..c3f9fa0 100644 (file)
@@ -6,6 +6,21 @@
        <ui-application appid="@PACKAGE_NAME@" exec="@BINDIR@/@PROJECT_NAME@" nodisplay="false" multiple="false" type="capp" taskmanage="true">
                <icon>org.tizen.mediahub.png</icon>
                <label>Media Hub </label>
+               <app-control>
+                       <operation name="http://tizen.org/appcontrol/operation/view"/>
+                               <mime name="image/jpeg"/>
+                               <mime name="image/png"/>
+                               <mime name="image/bmp"/>
+                               <mime name="image/gif"/>
+                               <mime name="image/vnd.wap.wbmp"/>
+                               <mime name="audio/mp3"/>
+                               <mime name="video/mp4"/>
+                               <mime name="video/wmv"/>
+               </app-control>
+               <app-control>
+                       <operation name="http://tizen.org/appcontrol/operation/view"/>
+                       <uri name="file"/>
+               </app-control>
        </ui-application>
        <privileges>
                <privilege>http://tizen.org/privilege/content.write</privilege>
index c2aed7c..1bbf4a9 100644 (file)
@@ -7,6 +7,8 @@ License:   Apache-2.0
 Source0:   %{name}-%{version}.tar.gz
 Source1:   %{name}.manifest
 
+%define _feature_location_service "DISABLED"
+
 BuildRequires: cmake
 BuildRequires: pkgconfig(glib-2.0)
 BuildRequires: pkgconfig(gio-2.0)
@@ -14,11 +16,13 @@ BuildRequires: pkgconfig(elementary)
 BuildRequires: pkgconfig(capi-appfw-application)
 BuildRequires: pkgconfig(capi-media-player)
 BuildRequires: pkgconfig(capi-ui-efl-util)
+%if %{_feature_location_service} == "ENABLED"
 BuildRequires: pkgconfig(capi-maps-service)
+%endif
 BuildRequires: pkgconfig(vconf)
 BuildRequires: pkgconfig(app-utils)
-BuildRequires: pkgconfig(capi-base-utils-i18n)
 BuildRequires: pkgconfig(libtzplatform-config)
+BuildRequires:  pkgconfig(icu-i18n)
 
 %define _appdir %{TZ_SYS_RO_APP}/%{name}
 %define _bindir %{_appdir}/bin
@@ -43,7 +47,8 @@ cmake \
        -DPACKAGEDIR=%{_pkgdir} \
        -DDESKTOP_ICONDIR=%{_desktop_icondir} \
        -DDESKTOP_ICON=%{name}.png \
-       -DVERSION=%{version}
+       -DVERSION=%{version}\
+       -DFEATURE_LOCATION_SERVICE=%{_feature_location_service}
 
 make %{?jobs:-j%jobs}
 
index ae9833a..9079260 100644 (file)
@@ -18,7 +18,8 @@
 #include <media_content.h>
 #include <app_debug.h>
 #include <app_media.h>
-#include <utils_i18n.h>
+#include <unicode/ustring.h>
+#include <unicode/uchar.h>
 
 #include "data/datamgr.h"
 #include "util/util.h"
@@ -81,65 +82,6 @@ static struct _group_info g_group_info[E_GROUP_ALBUM_MAX] = {
 };
 
 
-static i18n_uchar* _convert_to_UTF16_string(const char *source_string)
-{
-       int buffer_length = 0;
-       i18n_error_code_e error_from_i18n;
-       i18n_uchar *converted_string = NULL;
-
-       /* Calc buffer size for converted UTF16 string */
-       i18n_ustring_from_UTF8(NULL, 0, &buffer_length, source_string, -1, &error_from_i18n);
-
-       converted_string = malloc((buffer_length + 2) * sizeof(i18n_uchar));
-       if (converted_string == NULL) {
-               _ERR("malloc failed");
-               goto OUT;
-       }
-
-       /* Convert to i18n(UTF16) string  */
-       i18n_ustring_from_UTF8(converted_string, buffer_length + 1, &buffer_length, source_string, -1, &error_from_i18n);
-       if (error_from_i18n != I18N_ERROR_NONE) {
-               _ERR("i18n_ustring_from_UTF8 returns [%d]", error_from_i18n);
-               free(converted_string);
-               goto OUT;
-       }
-       converted_string[buffer_length] = (i18n_uchar)0;
-
-OUT:
-
-       return converted_string;
-}
-
-static char* _convert_to_UTF8_string(i18n_uchar *sourct_string)
-{
-       int buffer_length = 0;
-       i18n_error_code_e error_from_i18n;
-       char *converted_string = NULL;
-
-       i18n_ustring_to_UTF8(NULL, 0, &buffer_length, sourct_string, -1, &error_from_i18n);
-
-       converted_string = malloc((buffer_length + 2) * sizeof(char));
-       if (converted_string == NULL) {
-               _ERR("malloc failed");
-               goto OUT;
-       }
-
-       /* Convert to UTF8 */
-       i18n_ustring_to_UTF8(converted_string, buffer_length + 1, &buffer_length, sourct_string, -1, &error_from_i18n);
-       if (error_from_i18n != I18N_ERROR_NONE) {
-               _ERR("i18n_ustring_to_UTF8 returns [%d]", error_from_i18n);
-               free(converted_string);
-               converted_string = NULL;
-               goto OUT;
-       }
-       converted_string[buffer_length] = '\0';
-
-OUT:
-
-       return converted_string;
-}
-
-
 static bool _create_filter(struct albumdata *ad, filter_h *filter,
                        const char *cond, int filter_type)
 {
@@ -194,14 +136,14 @@ static int _compare_name(struct group_info *gi, struct album_info *ai)
                return -1;
 
        int32_t result = -1;
-       i18n_uchar *converted_group_name = NULL;
-       i18n_uchar *converted_album_title = NULL;
+       UChar *converted_group_name = NULL;
+       UChar *converted_album_title = NULL;
 
        converted_group_name = util_convert_to_UTF16_string(gi->data);
        converted_album_title = util_convert_to_UTF16_string(ai->name);
 
        if (converted_group_name && converted_album_title) {
-               result = i18n_ustring_case_compare_n(converted_group_name, converted_album_title, 1, I18N_USTRING_U_FOLD_CASE_DEFAULT);
+               result = u_strncasecmp(converted_group_name, converted_album_title, 1, U_FOLD_CASE_DEFAULT);
        }
 
        if (converted_group_name) {
@@ -221,15 +163,15 @@ static void *_get_data_name(struct album_info *ai)
                return NULL;
 
        char *result_str = NULL;
-       i18n_uchar *converted_string = NULL;
+       UChar *converted_string = NULL;
 
-       converted_string = _convert_to_UTF16_string(ai->name);
+       converted_string = util_convert_to_UTF16_string(ai->name);
 
        if (converted_string == NULL) {
                _ERR("_convert_to_UTF16_string failed");
                goto OUT;
        }
-       result_str = _convert_to_UTF8_string(converted_string);
+       result_str = util_convert_to_UTF8_string(converted_string);
 
 OUT:
        if (converted_string)
@@ -244,8 +186,8 @@ static char *_get_name(struct album_info *ai)
                return NULL;
 
        char *result_str = NULL;
-       i18n_uchar *converted_string = NULL;
-       i18n_uchar sub_string[10] = { 0, };
+       UChar *converted_string = NULL;
+       UChar sub_string[10] = { 0, };
 
        converted_string = util_convert_to_UTF16_string(ai->name);
 
@@ -255,7 +197,7 @@ static char *_get_name(struct album_info *ai)
        }
 
        /* Get a character (not a byte) from left */
-       i18n_ustring_copy_n(sub_string, converted_string, 1);
+       u_strncpy(sub_string, converted_string, 1);
        result_str = util_convert_to_UTF8_string(sub_string);
 
 OUT:
@@ -272,14 +214,14 @@ static int _compare_artist(struct group_info *gi, struct album_info *ai)
                return -1;
 
        int32_t result = -1;
-       i18n_uchar *converted_group_name = NULL;
-       i18n_uchar *converted_artist = NULL;
+       UChar *converted_group_name = NULL;
+       UChar *converted_artist = NULL;
 
        converted_group_name = util_convert_to_UTF16_string(gi->data);
        converted_artist = util_convert_to_UTF16_string(ai->artist);
 
        if (converted_group_name && converted_artist) {
-               result = i18n_ustring_case_compare_n(converted_group_name, converted_artist, 1, I18N_USTRING_U_FOLD_CASE_DEFAULT);
+               result = u_strncasecmp(converted_group_name, converted_artist, 1, U_FOLD_CASE_DEFAULT);
        }
 
        if (converted_group_name) {
@@ -299,15 +241,15 @@ static void *_get_data_artist(struct album_info *ai)
                return NULL;
 
        char *result_str = NULL;
-       i18n_uchar *converted_string = NULL;
+       UChar *converted_string = NULL;
 
-       converted_string = _convert_to_UTF16_string(ai->artist);
+       converted_string = util_convert_to_UTF16_string(ai->artist);
 
        if (converted_string == NULL) {
                _ERR("_convert_to_UTF16_string failed");
                goto OUT;
        }
-       result_str = _convert_to_UTF8_string(converted_string);
+       result_str = util_convert_to_UTF8_string(converted_string);
 
 OUT:
        if (converted_string)
@@ -322,8 +264,8 @@ static char *_get_artist(struct album_info *ai)
                return NULL;
 
        char *result_str = NULL;
-       i18n_uchar *converted_string = NULL;
-       i18n_uchar sub_string[10] = { 0, };
+       UChar *converted_string = NULL;
+       UChar sub_string[10] = { 0, };
 
        converted_string = util_convert_to_UTF16_string(ai->artist);
 
@@ -333,7 +275,7 @@ static char *_get_artist(struct album_info *ai)
        }
 
        /* Get a character (not a byte) from left */
-       i18n_ustring_copy_n(sub_string, converted_string, 1);
+       u_strncpy(sub_string, converted_string, 1);
        result_str = util_convert_to_UTF8_string(sub_string);
 
 OUT:
index eac8507..66d3d1f 100644 (file)
@@ -18,6 +18,8 @@
 #include <media_content.h>
 #include <app_debug.h>
 #include <app_media.h>
+#include <unicode/ustring.h>
+#include <unicode/uchar.h>
 
 #include "data/datamgr.h"
 #include "util/util.h"
@@ -148,14 +150,14 @@ static int _compare_title(struct group_info *gi, app_media_info *info)
                return -1;
 
        int32_t result = -1;
-       i18n_uchar *converted_group_name = NULL;
-       i18n_uchar *converted_media_title = NULL;
+       UChar *converted_group_name = NULL;
+       UChar *converted_media_title = NULL;
 
        converted_group_name = util_convert_to_UTF16_string(gi->data);
        converted_media_title = util_convert_to_UTF16_string(info->title);
 
        if (converted_group_name && converted_media_title) {
-               result = i18n_ustring_case_compare_n(converted_group_name, converted_media_title, 1, I18N_USTRING_U_FOLD_CASE_DEFAULT);
+               result = u_strncasecmp(converted_group_name, converted_media_title, 1, U_FOLD_CASE_DEFAULT);
        }
 
        if (converted_group_name) {
@@ -175,7 +177,7 @@ static void *_get_data_title(app_media_info *info)
                return NULL;
 
        char *result_str = NULL;
-       i18n_uchar *converted_string = NULL;
+       UChar *converted_string = NULL;
 
        converted_string = util_convert_to_UTF16_string(info->title);
 
@@ -198,8 +200,8 @@ static char *_get_title(app_media_info *info)
                return NULL;
 
        char *result_str = NULL;
-       i18n_uchar *converted_string = NULL;
-       i18n_uchar sub_string[10] = { 0, };
+       UChar *converted_string = NULL;
+       UChar sub_string[10] = { 0, };
 
        converted_string = util_convert_to_UTF16_string(info->title);
 
@@ -209,7 +211,7 @@ static char *_get_title(app_media_info *info)
        }
 
        /* Get a character (not a byte) from left */
-       i18n_ustring_copy_n(sub_string, converted_string, 1);
+       u_strncpy(sub_string, converted_string, 1);
 
        result_str = util_convert_to_UTF8_string(sub_string);
 
@@ -798,3 +800,53 @@ struct data_ops *mediadata_get_ops(void)
 {
        return &_ops;
 };
+
+bool _media_item_cb(media_info_h item, void *user_data)
+{
+    app_media **am = (app_media**)user_data;
+
+    *am = app_media_create(item);
+
+    return false;   //only 1 item
+}
+
+
+app_media* mediadata_get_app_media_by_file_path(char *file_path)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       filter_h media_filter = NULL;
+       app_media *am = NULL;
+       char condition[PATH_MAX + 256] = {0,};
+
+       if (file_path == NULL) {
+               _ERR("filepath is NULL");
+               goto out;
+       }
+
+       media_content_connect();
+
+       snprintf(condition, sizeof(condition), "%s = '%s'", MEDIA_PATH, file_path);
+
+
+       if ((ret = media_filter_create(&media_filter)) != MEDIA_CONTENT_ERROR_NONE) {
+               _ERR("media_filter_create returns [%d]", ret);
+               goto out;
+       }
+
+       if ((ret = media_filter_set_condition(media_filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT)) != MEDIA_CONTENT_ERROR_NONE) {
+               _ERR("media_filter_create returns [%d]", ret);
+               goto out;
+       }
+
+       ret = media_filter_set_order(media_filter, MEDIA_CONTENT_ORDER_DESC, MEDIA_DISPLAY_NAME, MEDIA_CONTENT_COLLATE_NOCASE);
+
+       if ((ret = media_info_foreach_media_from_db(media_filter, _media_item_cb, &am)) != MEDIA_CONTENT_ERROR_NONE) {
+               _ERR("media_info_foreach_media_from_db is failed [%d]", ret);
+       }
+
+out:
+       if (media_filter)
+               media_filter_destroy(media_filter);
+
+       return am;
+}
index d1fba82..448ee44 100644 (file)
@@ -62,8 +62,9 @@ struct _priv {
        int source_type;
 
        struct grid_data *gdata;
-
+#ifdef __FEATURE_LOCATION_SERVICE__
        struct locmgr *locmgr;
+#endif
 };
 
 static void _recent_item_selected(struct _priv *priv, app_media *am)
@@ -177,7 +178,9 @@ static void _destroy_datamgr(struct _priv *priv)
 
 static void _destroy_utils(struct _priv *priv)
 {
+#ifdef __FEATURE_LOCATION_SERVICE__
        locmgr_destroy(priv->locmgr);
+#endif
        _destroy_datamgr(priv);
 
        listmgr_destroy(priv->listmgr);
@@ -187,8 +190,10 @@ static void _destroy_utils(struct _priv *priv)
 static Eina_Bool _create_location(void *data)
 {
        struct _priv *priv;
-       struct locmgr *locmgr;
        struct datamgr *dmgr;
+#ifdef __FEATURE_LOCATION_SERVICE__
+       struct locmgr *locmgr;
+#endif
 
        if (!data) {
                _ERR("invalid argument");
@@ -203,6 +208,7 @@ static Eina_Bool _create_location(void *data)
                return ECORE_CALLBACK_CANCEL;
        }
 
+#ifdef __FEATURE_LOCATION_SERVICE__
        locmgr = locmgr_create();
        if (!locmgr) {
                _ERR("failed to create locmgr");
@@ -213,6 +219,7 @@ static Eina_Bool _create_location(void *data)
 
        locmgr_set_locations(locmgr,
                        dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL));
+#endif
 
        return ECORE_CALLBACK_CANCEL;
 }
index 8f08b9d..67b0ecb 100644 (file)
@@ -126,13 +126,28 @@ static void _terminate(void *data)
        }
 }
 
+static void _open_media_file(char *media_type, char *media_file_path)
+{
+       if (strcmp(media_type, "Image") == 0) {
+               viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT_WITH_MEDIA_ID, media_file_path);
+               viewmgr_push_view(VIEW_VIEWER);
+       } else if (strcmp(media_type, "Video") == 0) {
+               viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT_WITH_MEDIA_ID, media_file_path);
+               viewmgr_push_view(VIEW_VIEWER);
+       } else if (strcmp(media_type, "Audio") == 0) {
+               viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT_WITH_MEDIA_ID, media_file_path);
+               viewmgr_push_view(VIEW_MPLAYER);
+       }
+}
+
 static void _app_control(app_control_h app_control, void *data)
 {
        struct _appdata *ad;
-       char *media_id;
-       char *caller_id;
+       char *media_id = NULL;
+       char *caller_id = NULL;
        int r;
 
+
        if (!data) {
                _ERR("failed to get data");
                return;
@@ -147,27 +162,52 @@ static void _app_control(app_control_h app_control, void *data)
        if (r != APP_CONTROL_ERROR_NONE)
                caller_id = NULL;
 
-       r = app_control_get_extra_data(app_control, PARAM_MEDIA_ID, &media_id);
-       if (r != APP_CONTROL_ERROR_NONE)
-               media_id = NULL;
-
-       if (media_id && caller_id) {
-               if (!strcmp(caller_id, APP_ID_FAVORITE)) {
-                       while (viewmgr_active_view_count() > 0)
-                               viewmgr_pop_view();
 
-                       viewmgr_update_view(VIEW_BASE,
-                                       UPDATE_FAVORITE, media_id);
-               } else if (!strcmp(caller_id, APP_ID_RECENT)) {
+       if (caller_id == NULL) {
+               r = app_control_get_extra_data(app_control, PARAM_MEDIA_ID, &media_id);
+               if (r != APP_CONTROL_ERROR_NONE)
+                       media_id = NULL;
+
+               if (media_id && caller_id) {
+                       if (!strcmp(caller_id, APP_ID_FAVORITE)) {
+                               while (viewmgr_active_view_count() > 0)
+                                       viewmgr_pop_view();
+
+                               viewmgr_update_view(VIEW_BASE,
+                                               UPDATE_FAVORITE, media_id);
+                       } else if (!strcmp(caller_id, APP_ID_RECENT)) {
+                               viewmgr_push_view(VIEW_BASE);
+                               viewmgr_update_view(VIEW_BASE,
+                                               UPDATE_RECENT, media_id);
+                       }
+               } else {
                        viewmgr_push_view(VIEW_BASE);
-                       viewmgr_update_view(VIEW_BASE,
-                                       UPDATE_RECENT, media_id);
+                       viewmgr_update_view(VIEW_BASE, UPDATE_RECENT, media_id);
                }
-       } else
-               viewmgr_push_view(VIEW_BASE);
 
-       free(media_id);
-       free(caller_id);
+       } else if (strcmp("org.tizen.myfiles", caller_id) == 0) {
+               char *file_path = NULL;
+               char *media_type = NULL;
+
+               app_control_get_extra_data(app_control, "Path", &file_path);
+               app_control_get_extra_data(app_control, "Media type", &media_type);
+
+               if (file_path == NULL) {
+                       _DBG("file_path is NULL");
+                       app_control_get_uri(app_control, &file_path);
+               }
+
+               if (file_path != NULL) {
+                       if (media_type != NULL) {
+                               _open_media_file(media_type, file_path);
+                       }
+               }
+       }
+       if (media_id)
+               free(media_id);
+       if (caller_id)
+               free(caller_id);
+
 }
 
 static void _pause(void *data)
index cb84c9e..5c0f282 100644 (file)
@@ -19,6 +19,7 @@
 #include <app_control.h>
 #include <app_debug.h>
 #include <app_contents.h>
+#include <unicode/ustring.h>
 
 #include "define.h"
 #include "util/util.h"
@@ -456,42 +457,64 @@ Elm_Image_Orient util_get_orient(media_content_orientation_e orient)
        return o;
 }
 
-i18n_uchar* util_convert_to_UTF16_string(const char *source_string)
+UChar* util_convert_to_UTF16_string(const char *source_string)
 {
        int buffer_length = 0;
-       i18n_error_code_e error_from_i18n;
-       i18n_uchar *converted_string = NULL;
+       UErrorCode error_from_icu = 0;
+       UChar *converted_string = NULL;
 
        /* Calc buffer size for converted UTF16 string */
-       i18n_ustring_from_UTF8(NULL, 0, &buffer_length, source_string, -1, &error_from_i18n);
-
-       converted_string = malloc((buffer_length + 2) * sizeof(i18n_uchar));
+       u_strFromUTF8(NULL, 0, &buffer_length, source_string, -1, &error_from_icu);
+       if (buffer_length == 0) {
+               _ERR("error form icu[%d][%s]", error_from_icu, u_errorName(error_from_icu));
+               goto OUT;
+       }
+       /* NOTE:
+        * Calling u_strFromUTF8 with 0 capacity always causes U_BUFFER_OVERFLOW_ERROR.
+        * When u_strFromUTF8 is succeeded, u_strFromUTF8 doesn't change error_from_icu.
+        * It means error_from_icu have U_BUFFER_OVERFLOW_ERROR even though there is no problem.
+        * So, error_from_icu should be reset as U_ZERO_ERROR here*/
+       error_from_icu = U_ZERO_ERROR;
+
+       converted_string = malloc((buffer_length + 2) * sizeof(UChar));
        if (converted_string == NULL) {
                _ERR("malloc failed");
                goto OUT;
        }
 
        /* Convert to i18n(UTF16) string  */
-       i18n_ustring_from_UTF8(converted_string, buffer_length + 1, &buffer_length, source_string, -1, &error_from_i18n);
-       if (error_from_i18n != I18N_ERROR_NONE) {
-               _ERR("i18n_ustring_from_UTF8 returns [%d]", error_from_i18n);
+        u_strFromUTF8(converted_string, buffer_length + 1, &buffer_length, source_string, -1, &error_from_icu);
+       if (U_FAILURE(error_from_icu)) {
+               _ERR("error form icu[%d][%s]", error_from_icu, u_errorName(error_from_icu));
                free(converted_string);
+               converted_string = NULL;
                goto OUT;
        }
-       converted_string[buffer_length] = (i18n_uchar)0;
+
+       converted_string[buffer_length] = (UChar)0;
 
 OUT:
 
        return converted_string;
 }
 
-char* util_convert_to_UTF8_string(i18n_uchar *sourct_string)
+char* util_convert_to_UTF8_string(UChar *source_string)
 {
        int buffer_length = 0;
-       i18n_error_code_e error_from_i18n;
+       UErrorCode error_from_icu;
        char *converted_string = NULL;
 
-       i18n_ustring_to_UTF8(NULL, 0, &buffer_length, sourct_string, -1, &error_from_i18n);
+       u_strToUTF8(NULL, 0, &buffer_length, source_string, -1, &error_from_icu);
+       if (buffer_length == 0) {
+               _ERR("error form icu[%d][%s]", error_from_icu, u_errorName(error_from_icu));
+               goto OUT;
+       }
+       /* NOTE:
+        * Calling u_strToUTF8 with 0 capacity always causes U_BUFFER_OVERFLOW_ERROR.
+        * When u_strFromUTF8 is succeeded, u_strFromUTF8 doesn't change error_from_icu.
+        * It means error_from_icu have U_BUFFER_OVERFLOW_ERROR even though there is no problem.
+        * So, error_from_icu should be reset as U_ZERO_ERROR here */
+       error_from_icu = U_ZERO_ERROR;
 
        converted_string = malloc((buffer_length + 2) * sizeof(char));
        if (converted_string == NULL) {
@@ -500,13 +523,14 @@ char* util_convert_to_UTF8_string(i18n_uchar *sourct_string)
        }
 
        /* Convert to UTF8 */
-       i18n_ustring_to_UTF8(converted_string, buffer_length + 1, &buffer_length, sourct_string, -1, &error_from_i18n);
-       if (error_from_i18n != I18N_ERROR_NONE) {
-               _ERR("i18n_ustring_to_UTF8 returns [%d]", error_from_i18n);
+       u_strToUTF8(converted_string, buffer_length + 1, &buffer_length, source_string, -1, &error_from_icu);
+       if (U_FAILURE(error_from_icu)) {
+               _ERR("error form icu[%d][%s]", error_from_icu, u_errorName(error_from_icu));
                free(converted_string);
                converted_string = NULL;
                goto OUT;
        }
+
        converted_string[buffer_length] = '\0';
 
 OUT:
index 3d87e96..9e45319 100644 (file)
@@ -904,6 +904,10 @@ static bool _update_items(struct _priv *priv, struct view_update_data *vdata)
        }
 
        priv->content_type = _get_content_type(mi);
+       if (priv->content_type >= E_CONTENT_MAX) {
+               _ERR("content_type[%d] exceeded E_CONTENT_MAX", priv->content_type);
+               return false;
+       }
 
        _update_menu_area(priv);
        _update_favorite_area(priv);
index abb826a..b144c79 100644 (file)
@@ -595,6 +595,11 @@ static void _update_recent_view(struct _priv *priv, const char *id)
 
        type = _get_layout_type(info);
 
+       if (type >= E_LAYOUT_MAX) {
+               _ERR("type[%d] exceeded E_LAYOUT_MAX", type);
+               return;
+       }
+
        _set_current_layout(priv, type);
 
        layoutmgr_update_layout(priv->lmgr, g_menu_item[type].layout_id,
index ab5ad4c..e085b72 100644 (file)
@@ -31,6 +31,8 @@
 #include "util/playermgr.h"
 #include "util/progressbar.h"
 #include "util/util.h"
+#include "data/mediadata.h"
+
 
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
 
@@ -1130,6 +1132,7 @@ static void _update(void *view_data, int update_type, void *data)
 {
        struct _priv *priv;
        struct view_update_data *vdata;
+       struct view_update_data temp_update_data;
 
        if (!view_data || !data) {
                _ERR("failed to get view data");
@@ -1137,7 +1140,19 @@ static void _update(void *view_data, int update_type, void *data)
        }
 
        priv = view_data;
-       vdata = data;
+
+       if (update_type == UPDATE_CONTENT_WITH_MEDIA_ID) {
+               app_media *am = NULL;
+
+               am = mediadata_get_app_media_by_file_path(data);
+               temp_update_data.list = eina_list_append(NULL, am);
+               temp_update_data.index = 0;
+               temp_update_data.id = NULL;
+               vdata = &temp_update_data;
+               update_type = UPDATE_CONTENT;
+       } else {
+               vdata = data;
+       }
 
        switch (update_type) {
        case UPDATE_CONTENT:
index c6e439e..c31e913 100644 (file)
@@ -33,6 +33,7 @@
 #include "util/playermgr.h"
 #include "util/progressbar.h"
 #include "util/util.h"
+#include "data/mediadata.h"
 
 #define STYLE_VIEWER_BTN "viewer_btn"
 #define PART_VIEWER_BTN "control_btn"
@@ -1462,6 +1463,7 @@ static void _update(void *view_data, int update_type, void *data)
 {
        struct _priv *priv;
        struct view_update_data *vdata;
+       struct view_update_data temp_update_data;
 
        if (!view_data) {
                _ERR("failed to get view data");
@@ -1469,7 +1471,18 @@ static void _update(void *view_data, int update_type, void *data)
        }
 
        priv = view_data;
-       vdata = data;
+
+       if (update_type == UPDATE_CONTENT_WITH_MEDIA_ID) {
+               app_media *am = NULL;
+               am = mediadata_get_app_media_by_file_path(data);
+               temp_update_data.list = eina_list_append(NULL, am);
+               temp_update_data.index = 0;
+               temp_update_data.id = NULL;
+               vdata = &temp_update_data;
+               update_type = UPDATE_CONTENT;
+       } else {
+               vdata = data;
+       }
 
        switch (update_type) {
        case UPDATE_CONTENT: