diff options
-rw-r--r-- | client/CMakeLists.txt | 2 | ||||
-rw-r--r-- | client/ug-client.c | 108 | ||||
-rwxr-xr-x | client/ug-client.h | 2 | ||||
-rwxr-xr-x | include/SLP_UI_Gadget_PG.h | 3 | ||||
-rw-r--r-- | include/ug-module.h | 1 | ||||
-rwxr-xr-x | include/ug.h | 9 | ||||
-rwxr-xr-x | include/ui-gadget-engine.h | 5 | ||||
-rw-r--r-- | include/ui-gadget.h | 2 | ||||
-rw-r--r-- | packaging/ui-gadget-1.spec | 9 | ||||
-rw-r--r-- | src/manager.c | 262 | ||||
-rw-r--r-- | src/module.c | 73 | ||||
-rwxr-xr-x | ug-efl-engine/ug-efl-engine.c | 155 | ||||
-rw-r--r-- | ui-gadget-1.rule | 159 |
13 files changed, 542 insertions, 248 deletions
diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 875d87f..3bb2d21 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -7,7 +7,7 @@ SET(CLIENT_LOCALEDIR /usr/share/locale) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) INCLUDE(FindPkgConfig) -SET(CLIENT_PKGS_CHECK_MODULES "capi-appfw-application capi-system-runtime-info appcore-efl appsvc bundle edje dlog elementary evas") +SET(CLIENT_PKGS_CHECK_MODULES "capi-appfw-application capi-system-runtime-info appcore-efl appsvc bundle edje dlog elementary evas vconf") IF (with_x) PKG_CHECK_MODULES(CLIENT_PKGS REQUIRED ${CLIENT_PKGS_CHECK_MODULES} ecore-x x11) diff --git a/client/ug-client.c b/client/ug-client.c index ecaf16b..0c79d1e 100644 --- a/client/ug-client.c +++ b/client/ug-client.c @@ -29,9 +29,8 @@ #include <dlog.h> #include <aul.h> -#include <appsvc.h> #include <app.h> -#include <runtime_info.h> +#include <vconf.h> #include "ug-client.h" @@ -151,26 +150,61 @@ void _ug_client_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) } } -void _ug_client_result_cb(ui_gadget_h ug, service_h result, void *priv) +void _ug_client_result_cb(ui_gadget_h ug, service_h reply, void *priv) { - struct appdata *ad; + struct appdata *ad = NULL; int ret; + char* value = NULL; + int result; if (!ug || !priv) return; + + ret = service_get_extra_data (reply, UG_SERVICE_DATA_RESULT, &value); + if((ret == SERVICE_ERROR_NONE) && (value)) { + result = atoi(value); + LOGD("reply result is %d", result); + } else { + LOGW("get reply result error(%d) . result will be SERVICE_RESULT_SUCCEEDED", ret); + result = SERVICE_RESULT_SUCCEEDED; + } + ad = priv; + if (!ad) { + LOGE("appdata is null"); + return; + } - ret = service_reply_to_launch_request(result, ad->request, SERVICE_RESULT_SUCCEEDED); + ret = service_reply_to_launch_request(reply, ad->request, (service_result_e)result); if (ret != SERVICE_ERROR_NONE) LOGE("service_reply_to_launch_request failed, %d", ret); } void _ug_client_destroy_cb(ui_gadget_h ug, void *priv) { + struct appdata *ad = NULL; + if (!ug) return; - ug_destroy(ug); + ad = priv; + if (!ad) { + LOGE("appdata is null. win lower is fail"); + } else { + LOGD("window lower"); + elm_win_lower(ad->win); + } + + elm_exit(); +} + +void _ug_client_end_cb(ui_gadget_h ug, void *priv) +{ + if (!ug) + return; + + LOGD("_ug_client_end_cb invoked"); + elm_exit(); } @@ -181,7 +215,7 @@ static void profile_changed_cb(void *data, Evas_Object * obj, void *event) LOGE("!!! profile_changed_cb(%s) !!!", profile); if (strcmp(profile, "desktop") == 0) - elm_win_indicator_mode_set (obj, ELM_WIN_INDICATOR_HIDE); + elm_win_indicator_mode_set(obj, ELM_WIN_INDICATOR_HIDE); } static Evas_Object *create_win(const char *name) @@ -201,6 +235,8 @@ static Evas_Object *create_win(const char *name) ee = ecore_evas_ecore_evas_get(evas_object_evas_get(eo)); evas_output_size_get(ee, &w, &h); evas_object_resize(eo, w, h); + + elm_win_indicator_mode_set(eo,ELM_WIN_INDICATOR_SHOW); } return eo; @@ -237,13 +273,43 @@ static int low_battery(void *data) static int lang_changed(void *data) { + char* lang = NULL; + + lang = vconf_get_str(VCONFKEY_LANGSET); + if(lang) { + LOGD("lang : %s", lang); + elm_language_set((const char*)lang); + free(lang); + } else { + LOGW("language get error"); + } + return ug_send_event(UG_EVENT_LANG_CHANGE); } +static int region_changed(void *data) +{ + return ug_send_event(UG_EVENT_REGION_CHANGE); +} + +static void _home_screen_top_cb(keynode_t* node, void *data) +{ + struct appdata *ad = data; + + if (!node) { + LOGE("home screen top cb node value is null"); + return; + } + + if ((node->value.i == VCONFKEY_IDLE_SCREEN_TOP_TRUE) && (!ad->is_transient)) { + LOGW("home key pressed. window is not transient. ug client will be terminated"); + elm_exit(); + } +} + static int app_create(void *data) { struct appdata *ad = data; - enum appcore_rm rm; Evas_Object *win; Evas_Object *ly; Evas_Object *conform; @@ -279,7 +345,6 @@ static int app_create(void *data) edje_object_signal_callback_add(elm_layout_edje_get(ly), "EXIT", "*", main_quit_cb, NULL); ad->ly_main = ly; - elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW); lang_changed(ad); /* rotate notice */ @@ -305,6 +370,7 @@ static int app_create(void *data) appcore_set_event_callback(APPCORE_EVENT_LOW_MEMORY, low_memory, ad); appcore_set_event_callback(APPCORE_EVENT_LOW_BATTERY, low_battery, ad); appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, lang_changed, ad); + appcore_set_event_callback(APPCORE_EVENT_REGION_CHANGE, region_changed, ad); return 0; } @@ -329,6 +395,14 @@ static int app_terminate(void *data) ad->win = NULL; } + service_destroy(ad->request); + + if (ad->name) { + free(ad->name); + } + + LOGD("app_terminate end"); + return 0; } @@ -339,10 +413,14 @@ static int app_pause(void *data) LOGD("app_pause called"); ug_pause(); + +#if ENABLE_TRANSIENT_SUB_MODE if (!ad->is_transient) { LOGD("app_pause received. close ug service"); elm_exit(); } +#endif + return 0; } @@ -369,10 +447,15 @@ static int app_reset(bundle *b, void *data) ret = appsvc_request_transient_app(b, id2, svc_cb, "svc test"); - if (ret) + if (ret) { LOGD("fail to request transient app: return value(%d)", ret); - else + if(vconf_notify_key_changed(VCONFKEY_IDLE_SCREEN_TOP, _home_screen_top_cb, ad) != 0) { + LOGW("home screen vconf key changed cb error"); + } + } else { + /* check home screen raise */ ad->is_transient = 1; + } if (ad->win) { elm_win_activate(ad->win); @@ -392,6 +475,7 @@ static int app_reset(bundle *b, void *data) cbs.layout_cb = _ug_client_layout_cb; cbs.destroy_cb = _ug_client_destroy_cb; cbs.result_cb = _ug_client_result_cb; + cbs.end_cb = _ug_client_end_cb; cbs.priv = ad; mode = ad->is_frameview ? UG_MODE_FRAMEVIEW : UG_MODE_FULLVIEW; @@ -414,8 +498,6 @@ static int update_argument(const char *optarg, struct appdata *ad) return -1; val = optarg + strlen(key) + 1; - if (!val) - return -1; if (!ad->data) ad->data = bundle_create(); diff --git a/client/ug-client.h b/client/ug-client.h index af62743..ab6ee0c 100755 --- a/client/ug-client.h +++ b/client/ug-client.h @@ -48,7 +48,7 @@ struct appdata { Evas_Object *conform; ui_gadget_h ug; - const char *name; + char *name; int is_frameview; int is_transient; diff --git a/include/SLP_UI_Gadget_PG.h b/include/SLP_UI_Gadget_PG.h index 70387f2..08f683d 100755 --- a/include/SLP_UI_Gadget_PG.h +++ b/include/SLP_UI_Gadget_PG.h @@ -189,8 +189,6 @@ UG_OPT_INDICATOR_LANDSCAPE_ONLY UG_OPT_INDICATOR_DISABLE // current indicator status will be held UG_OPT_INDICATOR_MANUAL -// Enable indicator overlap -UG_OPT_OVERLAP_ENABLE @endcode \note <b>struct ug_data</b> is a user defined private data structure describing base layout, own UI gadget handler, and whatever you need: @@ -509,7 +507,6 @@ Available options are as following: - UG_OPT_LANDSCAPE_ONLY - UG_OPT_INDICATOR_DISABLE - UG_OPT_INDICATOR_MANUAL -- UG_OPT_OVERLAP_ENABLE And we used UG_OPT_INDICATOR_POTRAIT_ONLY in "helloUG-efl" diff --git a/include/ug-module.h b/include/ug-module.h index 7d7bf5e..2db135f 100644 --- a/include/ug-module.h +++ b/include/ug-module.h @@ -28,6 +28,7 @@ struct ug_module { void *handle; char *module_name; struct ug_module_ops ops; + char *addr; }; struct ug_module *ug_module_load(const char *name); diff --git a/include/ug.h b/include/ug.h index fe3be22..eb2ae64 100755 --- a/include/ug.h +++ b/include/ug.h @@ -22,18 +22,16 @@ #ifndef __UG_H__ #define __UG_H__ -#include <bundle.h> #include "ug-module.h" #include "ui-gadget.h" -struct ug_child; - enum ug_state { UG_STATE_READY = 0x00, UG_STATE_CREATED, UG_STATE_RUNNING, UG_STATE_STOPPED, UG_STATE_DESTROYING, + UG_STATE_PENDING_DESTROY, UG_STATE_DESTROYED, UG_STATE_INVALID, UG_STATE_MAX @@ -50,6 +48,11 @@ enum ug_layout_state { UG_LAYOUT_MAX }; +enum ug_ui_req { + UG_UI_REQ_GET_CONFORMANT = 0x00, + UG_UI_REQ_MAX +}; + struct ui_gadget_s { const char *name; void *layout; diff --git a/include/ui-gadget-engine.h b/include/ui-gadget-engine.h index 13986cf..7581256 100755 --- a/include/ui-gadget-engine.h +++ b/include/ui-gadget-engine.h @@ -38,7 +38,6 @@ * @{ */ -#include <bundle.h> #include "ui-gadget.h" #ifdef __cplusplus @@ -54,8 +53,10 @@ struct ug_engine_ops { void *(*create)(void *win, ui_gadget_h ug, void(*show_end_cb)(void *data)); /** destroy operation */ void (*destroy)(ui_gadget_h ug, ui_gadget_h fv_top, void(*hide_end_cb)(void *data)); + /** request operation */ + void *(*request)(void *data, ui_gadget_h ug, int req); /** reserved operations */ - void *reserved[4]; + void *reserved[3]; }; #ifdef __cplusplus diff --git a/include/ui-gadget.h b/include/ui-gadget.h index fbad11d..41f5637 100644 --- a/include/ui-gadget.h +++ b/include/ui-gadget.h @@ -131,7 +131,7 @@ enum ug_option { /**< Indicator option: Indicator will be handled manually */ UG_OPT_OVERLAP_ENABLE = 0x08, - /**< Overlap option: Enable indicator overlap */ + /**< Overlap option: Enable indicator overlap */ UG_OPT_MAX }; diff --git a/packaging/ui-gadget-1.spec b/packaging/ui-gadget-1.spec index baa0a30..3c084a9 100644 --- a/packaging/ui-gadget-1.spec +++ b/packaging/ui-gadget-1.spec @@ -3,7 +3,7 @@ Name: ui-gadget-1 Summary: UI Gadget Library -Version: 0.1.25 +Version: 0.1.30 Release: 1 Group: System/Libraries License: Apache License, Version 2.0 @@ -21,8 +21,8 @@ BuildRequires: pkgconfig(x11) %endif BuildRequires: pkgconfig(appsvc) BuildRequires: pkgconfig(capi-appfw-application) -BuildRequires: pkgconfig(capi-system-runtime-info) BuildRequires: pkgconfig(capi-appfw-app-manager) +BuildRequires: pkgconfig(vconf) BuildRequires: cmake BuildRequires: edje-bin BuildRequires: pkgconfig(libtzplatform-config) @@ -59,8 +59,10 @@ make %{?jobs:-j%jobs} %install rm -rf %{buildroot} %make_install +mkdir -p %{buildroot}/usr/share/license +install LICENSE %{buildroot}/usr/share/license/%{name} -%post +%post /sbin/ldconfig ln -sf %{TZ_SYS_BIN}/ug-client %{TZ_SYS_BIN}/ug-launcher @@ -75,6 +77,7 @@ ln -sf %{TZ_SYS_BIN}/ug-client %{TZ_SYS_BIN}/ug-launcher %{_bindir}/ug-client /usr/share/edje/ug-client/*.edj %{TZ_SYS_ETC}/smack/accesses.d/ui-gadget-1.rule +/usr/share/license/%{name} %files devel %manifest %{name}.manifest diff --git a/src/manager.c b/src/manager.c index c96d5b2..015e1eb 100644 --- a/src/manager.c +++ b/src/manager.c @@ -38,6 +38,11 @@ #include "ug-engine.h" #include "ug-dbg.h" +#define Idle_Cb Ecore_Cb + +#define ugman_idler_add(func, data) \ + ecore_job_add((Ecore_Cb) func, (void *)data); + struct ug_manager { ui_gadget_h root; ui_gadget_h fv_top; @@ -85,12 +90,19 @@ static int ug_relation_del(ui_gadget_h ug) p = ug->parent; if (!p) { - _ERR("ug_relation_del failed: no parent"); + _WRN("ug_relation_del failed: no parent"); return -1; } - p->children = g_slist_remove(p->children, ug); - if (ug->children) + + if(p->children) { + p->children = g_slist_remove(p->children, ug); + } + + if (ug->children) { g_slist_free(ug->children); + ug->children = NULL; + } + ug->parent = NULL; return 0; @@ -242,10 +254,11 @@ static void ugman_tree_dump(ui_gadget_h ug) while (child) { c = child->data; - _DBG("[%d] %s [%c] (%p) (PARENT: %s)", + _DBG("[%d] %s [%c] (mem : %s) (ug : %p) (PARENT: %s)", lv, c && c->name ? c->name : "NO CHILD INFO FIXIT!!!", - c && c->mode == UG_MODE_FULLVIEW ? 'F' : 'f', c, name); + c && c->mode == UG_MODE_FULLVIEW ? 'F' : 'f', + c->module->addr, c, name); ugman_tree_dump(c); child = g_slist_next(child); } @@ -279,7 +292,7 @@ static void ugman_ug_start(void *data) _ERR("ug is null"); return; } else if (ug->state != UG_STATE_CREATED) { - _ERR("ug(%p) state(%d) is error", ug, ug->state); + _DBG("start cb will be not invoked because ug(%p) state(%d) is not created", ug, ug->state); return; } @@ -339,6 +352,8 @@ static int ugman_ug_resume(void *data) if (!ug) goto end; + _DBG("ug(%p)->state : %d", ug, ug->state); + switch (ug->state) { case UG_STATE_CREATED: ugman_ug_start(ug); @@ -401,36 +416,40 @@ static int ugman_indicator_update(enum ug_option opt, enum ug_event event) _DBG("indicator update opt(%d) cur_state(%d)", opt, cur_state); +#ifndef ENABLE_UG_HANDLE_INDICATOR_HIDE + enable = 1; +#else switch (GET_OPT_INDICATOR_VAL(opt)) { - case UG_OPT_INDICATOR_ENABLE: - if (event == UG_EVENT_NONE) - enable = 1; - else - enable = cur_state ? 1 : 0; - break; - case UG_OPT_INDICATOR_PORTRAIT_ONLY: - enable = ug_man.is_landscape ? 0 : 1; - break; - case UG_OPT_INDICATOR_LANDSCAPE_ONLY: - enable = ug_man.is_landscape ? 1 : 0; - break; - case UG_OPT_INDICATOR_DISABLE: - enable = 0; - break; - case UG_OPT_INDICATOR_MANUAL: - return 0; - default: - _ERR("update failed: Invalid opt(%d)", opt); - return -1; + case UG_OPT_INDICATOR_ENABLE: + if (event == UG_EVENT_NONE) + enable = 1; + else + enable = cur_state ? 1 : 0; + break; + case UG_OPT_INDICATOR_PORTRAIT_ONLY: + enable = ug_man.is_landscape ? 0 : 1; + break; + case UG_OPT_INDICATOR_LANDSCAPE_ONLY: + enable = ug_man.is_landscape ? 1 : 0; + break; + case UG_OPT_INDICATOR_DISABLE: + enable = 0; + break; + case UG_OPT_INDICATOR_MANUAL: + return 0; + default: + _ERR("update failed: Invalid opt(%d)", opt); + return -1; } +#endif if(cur_state != enable) { _DBG("set indicator as %d", enable); - #ifndef WAYLAND utilx_enable_indicator(ug_man.disp, ug_man.win_id, enable); #endif } + return 0; } @@ -479,38 +498,31 @@ static int ugman_ug_destroy(void *data) { ui_gadget_h ug = data; struct ug_module_ops *ops = NULL; - GSList *child, *trail; + struct ug_cbs *cbs; job_start(); if (!ug) goto end; - _DBG("ugman_ug_destroy ug(%p) state(%d)", ug, ug->state); + _DBG("ug(%p) state(%d)", ug, ug->state); switch (ug->state) { - case UG_STATE_CREATED: - case UG_STATE_RUNNING: - case UG_STATE_STOPPED: - case UG_STATE_DESTROYING: - break; - default: - goto end; + case UG_STATE_CREATED: + case UG_STATE_RUNNING: + case UG_STATE_STOPPED: + case UG_STATE_DESTROYING: + case UG_STATE_PENDING_DESTROY: + break; + default: + _WRN("ug(%p) state is already destroyed", ug); + goto end; } ug->state = UG_STATE_DESTROYED; - if (ug->children) { - child = ug->children; - _DBG("ug_destroy ug(%p) has child(%p)", ug, child->data); - while (child) { - trail = g_slist_next(child); - ugman_ug_destroy(child->data); - child = trail; - } - } - if((ug != ug_man.root) && (ug->layout) && + (ug->mode == UG_MODE_FULLVIEW) && (ug->layout_state != UG_LAYOUT_DESTROY)) { /* ug_destroy_all case */ struct ug_engine_ops *eng_ops = NULL; @@ -530,13 +542,29 @@ static int ugman_ug_destroy(void *data) ops->destroy(ug, ug->service, ops->priv); } + cbs = &ug->cbs; + if (cbs && cbs->end_cb) { + _DBG("ug(%p) end cb will be invoked", ug); + cbs->end_cb(ug, cbs->priv); + } + + if((ug->parent) && (ug->parent->state == UG_STATE_PENDING_DESTROY)) { + if((ug->parent->children) && (g_slist_length(ug->parent->children) == 1)) { + _WRN("pended parent ug(%p) destroy job is added to loop", ug->parent); + ugman_idler_add((Idle_Cb)ugman_ug_destroy, ug->parent); + } else { + _WRN("pended parent ug(%p) will be destroyed after another children is destroyed", ug->parent); + } + } + if (ug != ug_man.root) ug_relation_del(ug); if (ug->mode == UG_MODE_FULLVIEW) { if (ug_man.fv_top == ug) { ug_fvlist_del(ug); - ugman_ug_getopt(ug_man.fv_top); + if(!ug_man.destroy_all) + ugman_ug_getopt(ug_man.fv_top); } else { ug_fvlist_del(ug); } @@ -558,7 +586,12 @@ static int ugman_ug_destroy(void *data) static void ug_hide_end_cb(void *data) { ui_gadget_h ug = data; - ecore_idler_add((Ecore_Task_Cb)ugman_ug_destroy, ug); + if (ug->children) { + _WRN("child ug is still destroying. parent ug(%p) will be destroyed later", ug); + ug->state = UG_STATE_PENDING_DESTROY; + } else { + ugman_idler_add((Idle_Cb)ugman_ug_destroy, (void *)ug); + } } static int ugman_ug_create(void *data) @@ -590,8 +623,9 @@ static int ugman_ug_create(void *data) } if (ug->mode == UG_MODE_FULLVIEW) { if (eng_ops && eng_ops->create) { - //change start cb function call after transition,finished for fullview ug_man.conform = eng_ops->create(ug_man.win, ug, ugman_ug_start); + if(!ug_man.conform) + return -1; } } cbs = &ug->cbs; @@ -642,8 +676,18 @@ int ugman_ug_add(ui_gadget_h parent, ui_gadget_h ug) ug_fvlist_add(ug_man.root); } - if (!parent) + if (!parent) { parent = ug_man.root; + } else { + switch (parent->state) { + case UG_STATE_DESTROYING: + case UG_STATE_PENDING_DESTROY: + case UG_STATE_DESTROYED: + _WRN("parent(%p) state(%d) error", parent, parent->state); + return -1; + default:; + } + } if (ug_relation_add(parent, ug)) { _ERR("failed : ug_relation_add fail"); @@ -707,7 +751,8 @@ ui_gadget_h ugman_ug_load(ui_gadget_h parent, int ugman_ug_destroying(ui_gadget_h ug) { struct ug_module_ops *ops = NULL; - GSList *child, *trail; + + _DBG("ugman_ug_destroying"); ug->destroy_me = 1; ug->state = UG_STATE_DESTROYING; @@ -715,15 +760,6 @@ int ugman_ug_destroying(ui_gadget_h ug) if (ug->module) ops = &ug->module->ops; - if (ug->children) { - child = ug->children; - while (child) { - trail = g_slist_next(child); - ugman_ug_destroying(child->data); - child = trail; - } - } - if (ops && ops->destroying) ops->destroying(ug, ug->service, ops->priv); @@ -743,12 +779,12 @@ int ugman_ug_del(ui_gadget_h ug) _DBG("ugman_ug_del start ug(%p)", ug); if (ug->destroy_me) { - _ERR("ugman_ug_del failed: ug is alreay on destroying"); + _WRN("ugman_ug_del failed: ug is alreay on destroying"); return -1; } if (!ug_man.is_initted) { - _ERR("ugman_ug_del failed: manager is not initted"); + _WRN("ugman_ug_del failed: manager is not initted"); return -1; } @@ -757,6 +793,18 @@ int ugman_ug_del(ui_gadget_h ug) return -1; } + if (ug->children) { + GSList *child, *trail; + + child = ug->children; + _DBG("ugman_ug_del ug(%p) has child(%p)", ug, child->data); + while (child) { + trail = g_slist_next(child); + ugman_ug_del(child->data); + child = trail; + } + } + ugman_ug_destroying(ug); /* pre call for indicator update time issue */ @@ -776,6 +824,7 @@ int ugman_ug_del(ui_gadget_h ug) } } } + if((is_update)&&(t)) { ugman_ug_getopt(t); } @@ -783,14 +832,37 @@ int ugman_ug_del(ui_gadget_h ug) if (ug_man.engine) eng_ops = &ug_man.engine->ops; - if (eng_ops && eng_ops->destroy) - if (ug->mode == UG_MODE_FULLVIEW) + if (ug->mode == UG_MODE_FULLVIEW) { + if (eng_ops && eng_ops->destroy) eng_ops->destroy(ug, ug_man.fv_top, ug_hide_end_cb); - else { - eng_ops->destroy(ug, NULL, ug_hide_end_cb); + else + ugman_idler_add((Idle_Cb)ugman_ug_destroy, ug); + } else { + _DBG("ug(%p) mode is frameview", ug); + ug_hide_end_cb(ug); + } + + _DBG("ugman_ug_del(%p) end", ug); + + return 0; +} + + +int ugman_ug_del_child(ui_gadget_h ug) +{ + GSList *child, *trail; + + if (ug->children) { + child = ug->children; + _DBG("ug destroy all. ug(%p) has child(%p)", ug, child->data); + while (child) { + trail = g_slist_next(child); + ugman_ug_del_child(child->data); + child = trail; } - else - ecore_idler_add((Ecore_Task_Cb)ugman_ug_destroy, ug); + } + + ugman_ug_destroy(ug); return 0; } @@ -810,10 +882,11 @@ int ugman_ug_del_all(void) _DBG("ug_del_all. root(%p) walking(%d) ", ug_man.root, ug_man.walking); - if (ug_man.walking > 0) + if (ug_man.walking > 0) { ug_man.destroy_all = 1; - else - ugman_ug_destroy(ug_man.root); + } else { + ugman_ug_del_child(ug_man.root); + } return 0; } @@ -821,13 +894,17 @@ int ugman_ug_del_all(void) #ifndef WAYLAND int ugman_init(Display *disp, Window xid, void *win, enum ug_option opt) { - ug_man.is_initted = 1; ug_man.win = win; ug_man.disp = disp; ug_man.win_id = xid; ug_man.base_opt = opt; ug_man.last_rotate_evt = UG_EVENT_NONE; - ug_man.engine = ug_engine_load(); + + if (!ug_man.is_initted) { + ug_man.engine = ug_engine_load(); + } + + ug_man.is_initted = 1; return 0; } @@ -848,7 +925,7 @@ int ugman_resume(void) _DBG("ugman_resume called"); - ecore_idler_add((Ecore_Task_Cb)ugman_ug_resume, ug_man.root); + ugman_idler_add((Idle_Cb)ugman_ug_resume, ug_man.root); return 0; } @@ -862,13 +939,13 @@ int ugman_pause(void) } if (!ug_man.root) { - _ERR("ugman_pause failed: no root"); + _WRN("ugman_pause failed: no root"); return -1; } _DBG("ugman_pause called"); - ecore_idler_add((Ecore_Task_Cb)ugman_ug_pause, ug_man.root); + ugman_idler_add((Idle_Cb)ugman_ug_pause, ug_man.root); return 0; } @@ -915,7 +992,7 @@ int ugman_send_event(enum ug_event event) is_rotation = 0; } - ecore_idler_add((Ecore_Task_Cb)ugman_send_event_pre, (void *)event); + ugman_idler_add((Idle_Cb)ugman_send_event_pre, (void *)event); if (is_rotation && ug_man.fv_top) ugman_indicator_update(ug_man.fv_top->opt, event); @@ -993,9 +1070,30 @@ void *ugman_get_window(void) void *ugman_get_conformant(void) { - return ug_man.conform; -} + struct ug_engine_ops *eng_ops = NULL; + void* ret = NULL; + + if(ug_man.conform) { + _DBG("return cached conform(%p) info", ug_man.conform); + return ug_man.conform; + } + + if (ug_man.engine) { + eng_ops = &ug_man.engine->ops; + } else { + _WRN("ui engine is not loaded"); + return NULL; + } + if (eng_ops && eng_ops->create) { + ret = eng_ops->request(ug_man.win, NULL, UG_UI_REQ_GET_CONFORMANT); + ug_man.conform = ret; + } else { + _WRN("ui engine is not loaded"); + } + + return ret; +} static inline void job_start(void) { @@ -1008,8 +1106,10 @@ static inline void job_end(void) if (!ug_man.walking && ug_man.destroy_all) { ug_man.destroy_all = 0; - if (ug_man.root) - ugman_ug_destroy(ug_man.root); + if (ug_man.root) { + _DBG("ug_destroy_all pneding job exist. ug_destroy_all begin"); + ugman_ug_del_all(); + } } if (ug_man.walking < 0) diff --git a/src/module.c b/src/module.c index 8307325..e07291e 100644 --- a/src/module.c +++ b/src/module.c @@ -38,6 +38,9 @@ #define UG_MODULE_INIT_SYM "UG_MODULE_INIT" #define UG_MODULE_EXIT_SYM "UG_MODULE_EXIT" +#define MEM_ADDR_LEN 8 +#define MEM_ADDR_TOT_LEN 17 + static int file_exist(const char *filename) { FILE *file; @@ -49,6 +52,66 @@ static int file_exist(const char *filename) return 0; } +static char *__ug_module_get_addr(const char *ug_so) +{ + FILE *file; + int ret; + char buf[PATH_MAX] = {0,}; + char mem[PATH_MAX] = {0,}; + + char *token_param = NULL; + char *saveptr = NULL; + int cnt = 0; + + if(ug_so == NULL) + goto func_out; + + snprintf(buf, sizeof(buf), "/proc/%d/maps", getpid()); + + file = fopen(buf, "r"); + if (file == NULL) { + _WRN("proc open fail(%d)", errno); + goto func_out; + } + + memset(buf, 0x00, PATH_MAX); + + while(fgets(buf, PATH_MAX, file) != NULL) + { + if(strstr(buf, ug_so)) { + token_param = strtok_r(buf," ", &saveptr); + if((token_param == NULL) || (strlen(token_param) > MEM_ADDR_TOT_LEN)) { + _ERR("proc token param(%s) error", token_param); + goto close_out; + } + + if(cnt > 0) { + memcpy((void *)(mem+MEM_ADDR_LEN+1), + (const void *)(token_param+MEM_ADDR_LEN+1), MEM_ADDR_LEN); + } else { + memcpy((void *)mem, (const void *)token_param, strlen(token_param)); + cnt++; + } + } else { + if(cnt > 0) + goto close_out; + } + + memset(buf, 0x00, PATH_MAX); + saveptr = NULL; + } + +close_out: + fclose(file); + file = NULL; + +func_out: + if(strlen(mem) > 0) + return strdup(mem); + else + return NULL; +} + struct ug_module *ug_module_load(const char *name) { void *handle; @@ -78,6 +141,9 @@ struct ug_module *ug_module_load(const char *name) snprintf(ug_file, PATH_MAX, "/usr/ug/lib/libug-%s.so", name); if (file_exist(ug_file)) break; + snprintf(ug_file, PATH_MAX, "/opt/ug/lib/libug-%s.so", name); + if (file_exist(ug_file)) + break; snprintf(ug_file, PATH_MAX, "/opt/usr/ug/lib/libug-%s.so", name); if (file_exist(ug_file)) break; @@ -105,6 +171,9 @@ struct ug_module *ug_module_load(const char *name) module->handle = handle; module->module_name = strdup(name); + + module->addr = __ug_module_get_addr(ug_file); + return module; module_dlclose: @@ -131,6 +200,7 @@ int ug_module_unload(struct ug_module *module) else _ERR("dlsym failed: %s", dlerror()); + _DBG("dlclose(%s)", module->module_name); dlclose(module->handle); module->handle = NULL; } @@ -138,6 +208,9 @@ int ug_module_unload(struct ug_module *module) if(module->module_name) free(module->module_name); + if(module->addr) + free(module->addr); + free(module); return 0; } diff --git a/ug-efl-engine/ug-efl-engine.c b/ug-efl-engine/ug-efl-engine.c index 1faefb8..88ff163 100755 --- a/ug-efl-engine/ug-efl-engine.c +++ b/ug-efl-engine/ug-efl-engine.c @@ -36,49 +36,39 @@ static Evas_Object *conform = NULL; static void on_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); static void (*show_end_cb)(void* data) = NULL; static void (*hide_end_cb)(void* data) = NULL; +static void __show_finished(void *data, Evas_Object *obj, void *event_info); -static void _layout_del_cb(void *data, Evas_Object *obj, void *event_info) +static Evas_Object *_get_win_conformant(Evas_Object *win) { - ui_gadget_h ug = (ui_gadget_h)data; - if (!ug) - return; + Evas_Object *con = NULL; - _WRN("ug(%p) layout is deleted by abnormal path", ug); + if (!win) { + _WRN("\t Invalid param error"); + return NULL; + } - evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL, _layout_del_cb); + con = evas_object_data_get(win, "\377 elm,conformant"); + if (con) + _DBG("\t success to get conformant"); + else + _WRN("\t fail to get conformant"); - ug->layout_state = UG_LAYOUT_DESTROY; - ug->layout = NULL; + return con; } -static Eina_Bool __destroy_end_cb(void *data) +static void _layout_del_cb(void *data, Evas_Object *obj, void *event_info) { - GSList *child; ui_gadget_h ug = (ui_gadget_h)data; + if (!ug) + return; - _DBG("\t __destroy_end_cb ug=%p", ug); - - if (ug->children) { - child = ug->children; - //_DBG("\t ug(%p) has children(%p)", ug, child); - while (child) { - if(!child->data) { - _ERR("child->data is null"); - return ECORE_CALLBACK_CANCEL; - } - - //_DBG("\t child(%p) layout_state(%d)", child, ((ui_gadget_h)child->data)->layout_state); + _WRN("ug(%p) layout is deleted by abnormal path", ug); - if( ((ui_gadget_h)child->data)->layout_state == UG_LAYOUT_HIDEEFFECT) { - //_DBG("\t wait hideeffect child(%p)", ug); - return ECORE_CALLBACK_RENEW; - } - child = g_slist_next(child); - } - } + evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL, + (Evas_Object_Event_Cb)_layout_del_cb); - hide_end_cb(ug); - return ECORE_CALLBACK_CANCEL; + ug->layout_state = UG_LAYOUT_DESTROY; + ug->layout = NULL; } static void __del_effect_end(ui_gadget_h ug) @@ -94,12 +84,13 @@ static void __del_effect_end(ui_gadget_h ug) } if (ug->layout) { evas_object_hide(ug->layout); - evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL, _layout_del_cb); + evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL, + (Evas_Object_Event_Cb)_layout_del_cb); } - ecore_idler_add((Ecore_Task_Cb)__destroy_end_cb, (void *)ug); - ug->layout_state = UG_LAYOUT_DESTROY; + + hide_end_cb(ug); } static void __del_finished(void *data, Evas_Object *obj, void *event_info) @@ -131,39 +122,19 @@ static void __del_effect_top_layout(ui_gadget_h ug) static void __del_effect_layout(ui_gadget_h ug, ui_gadget_h t_ug) { - GSList *child; - if (!ug) return; _DBG("\t ug=%p state=%d , t_ug=%p", ug, ug->layout_state, t_ug); - if (ug->children) { - child = ug->children; - _DBG("\t ug(%p) has children(%p)", ug, child); - while (child) { - __del_effect_layout(child->data, t_ug); - child = g_slist_next(child); - } - } - - if((ug == t_ug)&&(ug->layout_state != UG_LAYOUT_NOEFFECT)){ - if (ug->layout_state != UG_LAYOUT_HIDEEFFECT) { - __del_effect_top_layout(ug); - } else { - _ERR("\t top ug(%p) state is hideeffect."); - return; - } - } else { - _DBG("\t remove navi item: ug=%p state=%d", ug, ug->layout_state); - elm_object_item_del(ug->effect_layout); - ug->effect_layout = NULL; - } + _DBG("\t remove navi item: ug=%p state=%d", ug, ug->layout_state); + elm_object_item_del(ug->effect_layout); + ug->effect_layout = NULL; __del_effect_end(ug); } -static void __hide_effect_end(ui_gadget_h ug) +static void __hide_end(ui_gadget_h ug) { if (navi) { Elm_Object_Item *t = elm_naviframe_top_item_get(navi); @@ -178,6 +149,11 @@ static void __hide_effect_end(ui_gadget_h ug) if (ug->layout) { evas_object_hide(ug->layout); } +} + +static void __hide_effect_end(ui_gadget_h ug) +{ + __hide_end(ug); ug->layout_state = UG_LAYOUT_HIDE; } @@ -220,7 +196,8 @@ static void __on_hideonly_cb(void *data, Evas_Object *obj) return; } - if (elm_naviframe_top_item_get(navi) == ug->effect_layout) { + if ((elm_naviframe_top_item_get(navi) == ug->effect_layout) + && (ug->layout_state != UG_LAYOUT_NOEFFECT)) { _DBG("\t cb transition add ug=%p", ug); evas_object_smart_callback_add(navi, "transition,finished", __hide_finished, ug); @@ -228,7 +205,7 @@ static void __on_hideonly_cb(void *data, Evas_Object *obj) ug->layout_state = UG_LAYOUT_HIDEEFFECT; } else { elm_object_item_del(ug->effect_layout); - __hide_effect_end(ug); + __hide_end(ug); } ug->effect_layout = NULL; @@ -239,14 +216,15 @@ static void on_destroy(ui_gadget_h ug, ui_gadget_h t_ug, { if (!ug) return; - _DBG("\t ug=%p tug=%p state=%d", ug, t_ug, ug->layout_state); + _DBG("\t ug=%p tug=%p layout_state=%d", ug, t_ug, ug->layout_state); evas_object_intercept_hide_callback_del(ug->layout, __on_hideonly_cb); if(hide_cb == NULL) { /* ug_destroy_all case */ - evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL, _layout_del_cb); + evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL, + (Evas_Object_Event_Cb)_layout_del_cb); return; } @@ -261,29 +239,21 @@ static void on_destroy(ui_gadget_h ug, ui_gadget_h t_ug, if(ug->layout_state == UG_LAYOUT_SHOW) { __del_effect_top_layout(ug); + } else if (ug->layout_state == UG_LAYOUT_SHOWEFFECT) { + evas_object_smart_callback_del(navi, "transition,finished", + __show_finished); + __del_effect_top_layout(ug); } else if (ug->layout_state == UG_LAYOUT_HIDE - || ug->layout_state == UG_LAYOUT_NOEFFECT - || ug->layout_state == UG_LAYOUT_SHOWEFFECT) { + || ug->layout_state == UG_LAYOUT_NOEFFECT) { __del_effect_layout(ug, t_ug); } else if (ug->layout_state == UG_LAYOUT_HIDEEFFECT) { ; } else { - _WRN("[UG Effect Plug-in] : layout state error!!"); + _WRN("[UG Effect Plug-in] : layout state(%p) error!!", ug->layout_state); __del_effect_end(ug); } } -static void __update_indicator_overlap(int opt) -{ - if (GET_OPT_OVERLAP_VAL(opt)) { - _DBG("\t this is Overlap UG. Send overlap sig on_show_cb"); - elm_object_signal_emit(conform, "elm,state,indicator,overlap", ""); - } else { - _DBG("\t this is no overlap UG. Send no overlap sig on_show_cb"); - elm_object_signal_emit(conform, "elm,state,indicator,nooverlap", ""); - } -} - static void __show_finished(void *data, Evas_Object *obj, void *event_info) { ui_gadget_h ug = (ui_gadget_h)data; @@ -330,17 +300,12 @@ static void on_show_cb(void *data, Evas *e, Evas_Object *obj, _DBG("\t UG_LAYOUT_Init(%d) obj=%p", ug->layout_state, obj); ug->layout_state = UG_LAYOUT_SHOWEFFECT; - __update_indicator_overlap(ug->opt); - evas_object_smart_callback_add(navi, "transition,finished", __show_finished, ug); ug->effect_layout = elm_naviframe_item_push(navi, NULL, NULL, NULL, ug->layout, NULL); } else if (ug->layout_state == UG_LAYOUT_NOEFFECT) { _DBG("\t UG_LAYOUT_NOEFFECT obj=%p", obj); - - __update_indicator_overlap(ug->opt); - Elm_Object_Item *navi_top = elm_naviframe_top_item_get(navi); ug->effect_layout = elm_naviframe_item_insert_after(navi, navi_top, NULL, NULL, NULL, ug->layout, NULL); @@ -368,9 +333,10 @@ static void *on_create(void *win, ui_gadget_h ug, if (con) { conform = con; _DBG("\t There is conformant"); + } else { + _ERR("\t There is no conformant"); + return NULL; } - else - _DBG("\t There is NO conformant"); if (!navi) { navi = elm_naviframe_add(conform); @@ -392,13 +358,33 @@ static void *on_create(void *win, ui_gadget_h ug, evas_object_hide(ug->layout); evas_object_event_callback_add(ug->layout, EVAS_CALLBACK_SHOW, on_show_cb, ug); - evas_object_event_callback_add(ug->layout, EVAS_CALLBACK_DEL, _layout_del_cb, ug); + evas_object_event_callback_add(ug->layout, EVAS_CALLBACK_DEL, + (Evas_Object_Event_Cb)_layout_del_cb, ug); ug->layout_state = UG_LAYOUT_INIT; return conform; } +static void *on_request(void *data, ui_gadget_h ug, int req) +{ + void *ret; + + _DBG("on_request ug(%p) req(%d)", ug, req); + + switch(req) + { + case UG_UI_REQ_GET_CONFORMANT : + ret = (void *)_get_win_conformant((Evas_Object *)data); + break; + default : + _WRN("wrong req id(%d)", req); + return NULL; + } + + return ret; +} + UG_ENGINE_API int UG_ENGINE_INIT(struct ug_engine_ops *ops) { if (!ops) @@ -406,6 +392,7 @@ UG_ENGINE_API int UG_ENGINE_INIT(struct ug_engine_ops *ops) ops->create = on_create; ops->destroy = on_destroy; + ops->request = on_request; return 0; } diff --git a/ui-gadget-1.rule b/ui-gadget-1.rule index ae18ea8..6898151 100644 --- a/ui-gadget-1.rule +++ b/ui-gadget-1.rule @@ -7,47 +7,56 @@ ui-gadget::client sys-assert::core rwxat e17 ui-gadget::client rwx-- stest-service ui-gadget::client r-x-- ui-gadget::client stest-service -w--- -ui-gadget::client system::vconf_setting r---- -ui-gadget::client system::vconf_inhouse r---- -ui-gadget::client system::vconf_privacy r---- -ui-gadget::client system::vconf_system r---- -ui-gadget::client system::vconf_multimedia r---- -ui-gadget::client system::vconf_network r---- -ui-gadget::client system::vconf_misc r---- +ui-gadget::client system::vconf_setting rwxat +ui-gadget::client system::vconf_inhouse rwxat +ui-gadget::client system::vconf_privacy rwxat +ui-gadget::client system::vconf_system rwxat +ui-gadget::client system::vconf_multimedia rwxat +ui-gadget::client system::vconf_network rwxat +ui-gadget::client system::vconf_misc rwxat ui-gadget::client system::pulseaudio rwxat -com.samsung.app-tray ui-gadget::client r-xat +org.tizen.app-tray ui-gadget::client r-x-- ui-gadget::client isf rwx-- -ui-gadget::client com.samsung.indicator rwx-- +ui-gadget::client org.tizen.indicator rwx-- ui-gadget::client activesync-ui::eas-appsvc rw--- ui-gadget::client eas-engine rwx-- ui-gadget::client eas-engine::db rw--- ui-gadget::client csc-manager rwx-- ui-gadget::client secure-storage rwx-- -ui-gadget::client com.samsung.setting rwx-- +ui-gadget::client org.tizen.setting rwx-- ui-gadget::client cert-svc rwx-- ui-gadget::client pkgmgr::db rw--- +ui-gadget::client secure-storage::activesync rw--- ui-gadget::client email-service rwx-- ui-gadget::client email-service::db rw--- -ui-gadget::client com.samsung.gallery rwxa- -ui-gadget::client com.samsung.email::db rw--- +ui-gadget::client org.tizen.gallery rwxa- +ui-gadget::client org.tizen.email::db rw--- +ui-gadget::client org.tizen.setting::default-resources r-x-- +ui-gadget::client xorg::screencapture r---- ui-gadget::client ug_bluetooth r-x-- ui-gadget::client syspopup::db rwx-- +ui-gadget::client bt-service::admin -w--- +ui-gadget::client bt-service::gap -w--- +ui-gadget::client bt-service::manager -w--- ui-gadget::client system::home rwxat ui-gadget::client device::app_logging -w--- ui-gadget::client media-data::db rw--- ui-gadget::client ail::db rw--- -ui-gadget::client com.samsung.gallery::web-media.db rwx-- -ui-gadget::client com.samsung.gallery::gallery-media.db rwx-- -ui-gadget::client com.samsung.gallery-service rwx-- -ui-gadget::client com.samsung.contacts rwx-- -ui-gadget::client com.samsung.cluster-home rwx-- +ui-gadget::client org.tizen.gallery::web-media.db rwx-- +ui-gadget::client org.tizen.gallery::gallery-media.db rwx-- +ui-gadget::client org.tizen.gallery-service rwx-- +ui-gadget::client org.tizen.contacts rwx-- +ui-gadget::client org.tizen.cluster-home rwx-- ui-gadget::client media-server rwx-- ui-gadget::client ug-image-viewer-efl rwxat ui-gadget::client download-provider rw--- ui-gadget::client drmfw rw--- ui-gadget::client contacts-service rwx-- ui-gadget::client cbhm rwx-- -ui-gadget::client data-provider-master rwx-- +ui-gadget::client data-provider-master rw--- +ui-gadget::client data-provider-master::shortcut rw--- +ui-gadget::client data-provider-master::utility rw--- +ui-gadget::client data-provider-master::notification rw--- ui-gadget::client allshare::svc rwx-- ui-gadget::client sound_server rwx-- ui-gadget::client net-config r-x-- @@ -58,7 +67,7 @@ ui-gadget::client system::use_internet rwxat ui-gadget::client system-server rwxa- ui-gadget::client deviced rwxa- ui-gadget::client dbus rwxat -ui-gadget::client com.samsung.myfile rw--- +ui-gadget::client org.tizen.myfile rw--- ui-gadget::client dali rwxat ui-gadget::client crash-worker --x-- ui-gadget::client msg-service rwx-- @@ -66,37 +75,51 @@ ui-gadget::client cloud-content-sync::db rw--- ui-gadget::client cloud-content-sync rwx-- ui-gadget::client device::video rw--- ui-gadget::client device::hwcodec rw--- -ui-gadget::client com.samsung.gallery::face-svc.db rwx-- +ui-gadget::client org.tizen.gallery::face-svc.db rwx-- ui-gadget::client ug-email-viewer-efl rwx-- ui-gadget::client ug-email-docsearch-efl --x-- +ui-gadget::client camera-external-engine rw--- +ui-gadget::client system::vconf_inouse r---- aul ui-gadget::client rwx-- isf ui-gadget::client r---- -com.samsung.gallery-service ui-gadget::client rwx-- -com.samsung.cluster-home ug-image-viewer-efl r-x-- -com.samsung.lockscreen ug-image-viewer-efl r-x-- -ui-gadget::client contacts-service::db rw--- -ui-gadget::client com.samsung.smemo rwx-- +org.tizen.gallery-service ui-gadget::client rwx-- +org.tizen.cluster-home ug-image-viewer-efl r-x-- +org.tizen.lockscreen ug-image-viewer-efl r-x-- +ui-gadget::client contacts-service::db rwx-- +ui-gadget::client org.tizen.smemo rwx-- ui-gadget::client ims-service::db rw--- ui-gadget::client app-svc::db rw--- -ui-gadget::client com.samsung.message rwx-- +ui-gadget::client org.tizen.message rwx-- ui-gadget::client mdm-server rwx-- -ui-gadget::client ug-msg-composer-efl rwxat media-server ui-gadget::client -w--- +ui-gadget::client contacts-service::svc rwx-- +ui-gadget::client contacts-service::phonelog rw--- +ui-gadget::client msg-service::read rw--- +ui-gadget::client msg-service::write rw--- +ui-gadget::client msg-service::wappush rw--- +ui-gadget::client telephony_framework::api_manager r---- +ui-gadget::client telephony_framework::api_modem -w--- ui-gadget::client smemo::db rw--- -ui-gadget::client com.samsung.browser rw--- -ui-gadget::client com.samsung.image-editor r---- -ui-gadget::client com.samsung.email rwx-- -ui-gadget::client com.samsung.calendar rwx-- +ui-gadget::client org.tizen.browser rw--- +ui-gadget::client org.tizen.image-editor r---- +ui-gadget::client org.tizen.email rwx-- +ui-gadget::client org.tizen.calendar rwx-- ui-gadget::client calendar-service rwx-- ui-gadget::client device::sys_logging -w--- ui-gadget::client webkit2-efl r-x-- +ui-gadget::client data-provider-master::badge rw--- ui-gadget::client resman::db rw--- ui-gadget::client map-efl rwxat ui-gadget::client ug-email-composer-efl rwxat +ui-gadget::client ui-gadget::client r-x-- +ui-gadget::client secure-storage::pkcs12 r---- +ui-gadget::client email-service::write rw--- +ui-gadget::client calendar-service::svc rw--- ui-gadget::client system::app_logging -w--- ui-gadget::client svi-data rwxat ui-gadget::client immvibed rwx-- ui-gadget::client libaccounts-svc::db rw--- +ui-gadget::client org.tizen.volume rwx-- ui-gadget::client device::camera rw--- ui-gadget::client device::mdnie rw--- ui-gadget::client pkgmer::db r---- @@ -107,14 +130,14 @@ ui-gadget::client ug-camera-efl rwxat ui-gadget::client vcs-server rwx-- ui-gadget::client image-filter-d::db rw--- ui-gadget::client location_fw::db rw--- -ui-gadget::client com.samsung.svoice rwxat -ui-gadget::client com.samsung.dropbox r---- -ui-gadget::client com.samsung.facebook r-x-- +ui-gadget::client org.tizen.svoice rwx-- +ui-gadget::client org.tizen.dropbox r-x-- +ui-gadget::client org.tizen.facebook r-x-- ui-gadget::client oma-ds-agent rwx-- oma-ds-agent ui-gadget::client rwx-- ui-gadget::client oma-ds-agent::cfg rwxat -com.samsung.setting ui-gadget::client r-x-- -com.samsung.setting oma-ds-agent::cfg rwx-- +org.tizen.setting ui-gadget::client r-x-- +org.tizen.setting oma-ds-agent::cfg rwx-- system::use_internet oma-ds-agent rwx-- oma-ds-agent system::use_internet rwx-- ui-gadget::client syslogd rwx-- @@ -128,8 +151,8 @@ ui-gadget::client starter r-x-- ui-gadget::client osp-app-service r-x-- ui-gadget::client osp-security-service r-x-- ui-gadget::client osp-channel-service r-x-- -ui-gadget::client com.samsung.app-tray r-x-- -ui-gadget::client com.samsung.quickpanel r-x-- +ui-gadget::client org.tizen.app-tray r-x-- +ui-gadget::client org.tizen.quickpanel r-x-- ui-gadget::client connman rwx-- ui-gadget::client mobicore-daemon r-x-- ui-gadget::client alarm-server rwx-- @@ -137,42 +160,66 @@ ui-gadget::client brcm_daemon r-x-- ui-gadget::client resman r-x-- ui-gadget::client osp-connectivity-service rwx-- ui-gadget::client push-service rwx-- -ui-gadget::client com.samsung.data-provider-slave rwx-- +ui-gadget::client org.tizen.data-provider-slave rwx-- +ui-gadget::client org.tizen.data-provider-slave rwx-- ui-gadget::client usb-server rwx-- ui-gadget::client mtp-responder rwx-- ui-gadget::client sdbd rwx-- -ui-gadget::client com.samsung.volume rwx-- +ui-gadget::client oma-ds-agent::svc rw--- ui-gadget::client samsung-account-front r-x-- +ui-gadget::client worldclock::db rw--- ui-gadget::client thumb-server r---- +ui-gadget::client data-provider-master::shortcut.shortcut -w--- +ui-gadget::client data-provider-master::notification.client -w--- context-service ui-gadget::client r-x-- ui-gadget::client location_fw::client rwx-- -ui-gadget::client com.samsung.smartsearch --x-- +ui-gadget::client org.tizen.smartsearch --x-- ui-gadget::client ug-map-efl rwxat system::use_internet ui-gadget::client -w--- ui-gadget::client obexd r-x-- ui-gadget::client phone-misc::db rw--- ui-gadget::client msg-service::db rw--- -ui-gadget::client ug-msg-viewer-efl rwxat -ui-gadget::client com.samsung.fileshare-service rwxat +ui-gadget::client org.tizen.fileshare-service rwxat ui-gadget::client wifi_direct_manager rw--- -com.samsung.fileshare-service ui-gadget::client r---- +org.tizen.fileshare-service ui-gadget::client r-x-- ui-gadget::client nfc-manager rwx-- ui-gadget::client nfc-manager::p2p rwx-- ui-gadget::client nfc-manager::admin rwx-- -com.samsung.cluster-home ui-gadget::client r-x-- -ui-gadget::client com.samsung.pwlock r---- +ui-gadget::client ug-setting-gallery-efl rwxat +ui-gadget::client org.tizen.music-player --x-- +org.tizen.cluster-home ui-gadget::client r-x-- +ui-gadget::client org.tizen.pwlock r---- ui-gadget::client ug-worldclock-efl r---- -ui-gadget::client worldclock::db rw--- -ui-gadget::client com.samsung.camera-app r---- -ui-gadget::client com.samsung.music-player --x-- -ui-gadget::client com.samsung.phone rw--- -com.samsung.gallery ui-gadget::client r-x-- -ui-gadget::client ui-gadget::client r---- +ui-gadget::client org.tizen.camera-app r---- +ui-gadget::client app-selector --x-- +org.tizen.app-selector ui-gadget::client --x-- +ui-gadget::client org.tizen.phone rw--- +org.tizen.gallery ui-gadget::client r-x-- +ui-gadget::client ug-setting-call-efl rwxat +ui-gadget::client system::camera rw-at +ui-gadget::client org.tizen.add-viewer r-x-- +ui-gadget::client org.tizen.call-eq-analyzer rwx-- +ui-gadget::client intl-dial::db rw--- +ui-gadget::client intl-dial --x-- +ui-gadget::client org.tizen.vtmain --x-- +ui-gadget::client telephony_framework::api_sim r-x-- +ui-gadget::client telephony_framework::api_phonebook rwx-- +ui-gadget::client telephony_framework::api_ss rwx-- +ui-gadget::client telephony_framework::vconf rwx-- +ui-gadget::client ug-setting-call-efl::vconf rw--- +ui-gadget::client testmode r-x-- ui-gadget::client device::led rw--- ui-gadget::client notification::db rw--- ui-gadget::client data-provider-master::share --x-- ui-gadget::client secure-storage-client r---- -ui-gadget::client com.samsung.videos rwx-- -com.samsung.videos ui-gadget::client rwx-- -ui-gadget::client com.samsung.dailybriefing-accuweather rwx-- -ui-gadget::client com.samsung.dailybriefing-common rwx-- +ui-gadget::client org.tizen.videos rwx-- +ui-gadget::client org.tizen.video-player rwx-- +ui-gadget::client device::bklight rw--- +ui-gadget::client secure-storage::divx-fragment rw--- +org.tizen.videos ui-gadget::client rwx-- +ui-gadget::client org.tizen.dailybriefing-accuweather rwx-- +ui-gadget::client org.tizen.dailybriefing-common rwx-- +ui-gadget::client secure-storage::tethering rw--- +ui-gadget::client ug-setting-mobileap-efl rw--- +ui-gadget::client org.tizen.dailybriefing-yfinance rwx-- +ui-gadget::client 57r43275q7::db rw--- |