From: Jihoon Kim Date: Mon, 27 Mar 2017 07:54:28 +0000 (+0900) Subject: Fix issue that UI is not updated when IME is installed / uninstalled with CLI X-Git-Tag: submit/tizen_3.0/20170404.231057~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=081a9d7582e6740d0ecc3ec2b3e9c88f312fdb6f;p=platform%2Fcore%2Fuifw%2Finputmethod-setting.git Fix issue that UI is not updated when IME is installed / uninstalled with CLI Change-Id: I648b27d46fbdaad7676600c91ce8e33e692cebd0 Signed-off-by: sungwook79.park Signed-off-by: Jihoon Kim --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 13a2505..97cbb70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) INCLUDE(FindPkgConfig) pkg_check_modules(pkgs REQUIRED capi-appfw-application isf elementary -efl-extension dlog capi-ui-inputmethod-manager +efl-extension dlog capi-ui-inputmethod-manager capi-appfw-package-manager ) FOREACH(flag ${pkgs_CFLAGS}) diff --git a/im_setting_list/input_method_setting_list_popup_view.cpp b/im_setting_list/input_method_setting_list_popup_view.cpp index 5c08649..1b0e8ad 100644 --- a/im_setting_list/input_method_setting_list_popup_view.cpp +++ b/im_setting_list/input_method_setting_list_popup_view.cpp @@ -406,6 +406,22 @@ static void im_setting_list_screen_create(void *data) } #endif +void im_setting_list_popup_view_del(void *data) +{ + appdata *ad = (appdata *)data; + if (!ad || !ad->win) + return; + + if (ad->popup) { + evas_object_del(ad->popup); + } + ad->popup = NULL; + + if (ad->naviframe) { + elm_naviframe_item_pop(ad->naviframe); + } +} + void im_setting_list_popup_view_create(void *data) { diff --git a/im_setting_list/input_method_setting_list_popup_view.h b/im_setting_list/input_method_setting_list_popup_view.h index 32898f9..875d7b2 100644 --- a/im_setting_list/input_method_setting_list_popup_view.h +++ b/im_setting_list/input_method_setting_list_popup_view.h @@ -20,6 +20,7 @@ #include void im_setting_list_popup_view_create(void *data); +void im_setting_list_popup_view_del(void *data); #endif /* __INPUTMETHOD_SETTING_LIST_POPUP_VIEW_H */ diff --git a/im_setting_list/input_method_setting_list_ui.cpp b/im_setting_list/input_method_setting_list_ui.cpp index ac8e355..da91394 100644 --- a/im_setting_list/input_method_setting_list_ui.cpp +++ b/im_setting_list/input_method_setting_list_ui.cpp @@ -24,6 +24,8 @@ #include #include #include +#include + #include "isf_control.h" #define IM_SETTING_LIST_PACKAGE PACKAGE @@ -88,6 +90,7 @@ static Elm_Genlist_Item_Class *itc_im_list_title = NULL; static int g_active_ime_index = -1; static list_item_text item_text[2]; static std::vector g_gen_item_data; +static package_manager_h pkgmgr = NULL; void im_setting_list_update_window(void *data); @@ -851,6 +854,11 @@ void im_setting_list_app_terminate(void *data) elm_genlist_item_class_free(itc_im_list_title); itc_im_list_title = NULL; } + + if (pkgmgr) { + package_manager_destroy(pkgmgr); + pkgmgr = NULL; + } } void im_setting_list_update_window(void *data) @@ -862,6 +870,27 @@ void im_setting_list_update_window(void *data) im_setting_list_add_ime(ad); } +static void _package_manager_event_cb(const char *type, const char *package, package_manager_event_type_e event_type, package_manager_event_state_e event_state, int progress, package_manager_error_e error, void *user_data) +{ + appdata *ad = (appdata *)user_data; + + if (!package || !type) + return; + + if (event_state != PACKAGE_MANAGER_EVENT_STATE_COMPLETED) + return; + + if (event_type == PACKAGE_MANAGER_EVENT_TYPE_INSTALL || + event_type == PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL || + event_type == PACKAGE_MANAGER_EVENT_TYPE_UPDATE) { + LOGD("PACKAGE_MANAGER_EVENT type : %d", event_type); + /* Wait for updating IME package list in ISF */ + usleep(20000); + im_setting_list_popup_view_del(ad); + im_setting_list_popup_view_create(ad); + } +} + void im_setting_list_app_create(void *data) { @@ -873,6 +902,20 @@ im_setting_list_app_create(void *data) im_setting_list_bg_create(ad->win); im_setting_list_load_ime_info(); + if (!pkgmgr) { + int ret = package_manager_create(&pkgmgr); + if (ret == PACKAGE_MANAGER_ERROR_NONE) { + ret = package_manager_set_event_cb(pkgmgr, _package_manager_event_cb, ad); + if (ret == PACKAGE_MANAGER_ERROR_NONE) { + LOGD("package_manager_set_event_cb succeeded.\n"); + } else { + LOGD("package_manager_set_event_cb failed(%d)\n", ret); + } + } else { + LOGD("package_manager_create failed(%d)\n", ret); + } + } + im_setting_list_list_create(ad); evas_object_show(ad->win); } diff --git a/org.tizen.inputmethod-setting.xml b/org.tizen.inputmethod-setting.xml index ad254ed..34b17e5 100644 --- a/org.tizen.inputmethod-setting.xml +++ b/org.tizen.inputmethod-setting.xml @@ -19,5 +19,7 @@ http://tizen.org/privilege/appmanager.launch http://tizen.org/privilege/imemanager + http://tizen.org/privilege/packagemanager.info + http://tizen.org/privilege/packagemanager.install diff --git a/packaging/org.tizen.inputmethod-setting.spec b/packaging/org.tizen.inputmethod-setting.spec index 82550c4..76554de 100644 --- a/packaging/org.tizen.inputmethod-setting.spec +++ b/packaging/org.tizen.inputmethod-setting.spec @@ -15,6 +15,7 @@ BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(efl-extension) BuildRequires: pkgconfig(libtzplatform-config) BuildRequires: pkgconfig(capi-ui-inputmethod-manager) +BuildRequires: pkgconfig(capi-appfw-package-manager) BuildRequires: model-build-features %description