Fix issue that UI is not updated when IME is installed / uninstalled with CLI 13/122413/3
authorJihoon Kim <jihoon48.kim@samsung.com>
Mon, 27 Mar 2017 07:54:28 +0000 (16:54 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Fri, 31 Mar 2017 09:25:28 +0000 (18:25 +0900)
Change-Id: I648b27d46fbdaad7676600c91ce8e33e692cebd0
Signed-off-by: sungwook79.park <sungwook79.park@samsung.com>
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
CMakeLists.txt
im_setting_list/input_method_setting_list_popup_view.cpp
im_setting_list/input_method_setting_list_popup_view.h
im_setting_list/input_method_setting_list_ui.cpp
org.tizen.inputmethod-setting.xml
packaging/org.tizen.inputmethod-setting.spec

index 13a2505..97cbb70 100644 (file)
@@ -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})
index 5c08649..1b0e8ad 100644 (file)
@@ -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)
 {
index 32898f9..875d7b2 100644 (file)
@@ -20,6 +20,7 @@
 #include <Elementary.h>
 
 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 */
 
index ac8e355..da91394 100644 (file)
@@ -24,6 +24,8 @@
 #include <algorithm>
 #include <tzplatform_config.h>
 #include <inputmethod_manager.h>
+#include <package_manager.h>
+
 #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<gen_item_data>   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);
 }
index ad254ed..34b17e5 100644 (file)
@@ -19,5 +19,7 @@
         <privileges>
             <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
             <privilege>http://tizen.org/privilege/imemanager</privilege>
+            <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+            <privilege>http://tizen.org/privilege/packagemanager.install</privilege>
         </privileges>
 </manifest>
index 82550c4..76554de 100644 (file)
@@ -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