Add option to load imengine in IME process 38/240638/3
authorJihoon Kim <jihoon48.kim@samsung.com>
Mon, 10 Aug 2020 08:07:00 +0000 (17:07 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Mon, 10 Aug 2020 12:56:07 +0000 (21:56 +0900)
Change-Id: I8f9e38361f1f739ededd61ddd5e19ca189f8e37e
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
data/layout/mobile/ise_lang_table.xml
data/layout/tv/ise_lang_table.xml
data/layout/wearable/ise_lang_table.xml
packaging/ise-default.spec
src/include/languages.h
src/ise-dbus.cpp
src/ise.cpp
src/sdk/ise_lang_table.cpp
src/sdk/ise_lang_table.h
src/sdk/sdk.cpp

index 8068f92..f4bba41 100644 (file)
@@ -12,7 +12,7 @@
     <rec name="uuid_clm_korean" uuid="org.tizen.ise-engine-glm.korean"/>
 </keyboard_uuid_table>
 <language_table>
-  <rec language="English" language_name="English" language_name_abbr="EN(US)" inputmode_QTY="ENGLISH_QTY" inputmode_QTY_name="Qwerty" keyboard_ise_uuid="uuid_clm_english" country_code_URL="uk" is_latin_language="true" accepts_caps_mode="true" locale_string="en_US"/>
+  <rec language="English" language_name="English" language_name_abbr="EN(US)" inputmode_QTY="ENGLISH_QTY" inputmode_QTY_name="Qwerty" keyboard_ise_uuid="uuid_clm_english" country_code_URL="uk" is_latin_language="true" accepts_caps_mode="true" locale_string="en_US" load_in_ime="true"/>
   <rec language="Italian" language_name="Italiano" language_name_abbr="IT"  inputmode_QTY="ITALIAN_QTY" inputmode_QTY_name="Tastiera Qwerty" keyboard_ise_uuid="uuid_default" country_code_URL="it" is_latin_language="true" accepts_caps_mode="true" locale_string="it_IT"/>
   <rec language="Spanish" language_name="Español" language_name_abbr="ES(ES)" inputmode_QTY="SPANISH_QTY" inputmode_QTY_name="Teclado Qwerty" keyboard_ise_uuid="uuid_default" country_code_URL="es" is_latin_language="true" accepts_caps_mode="true" locale_string="es_ES"/>
   <rec language="Galician" language_name="Galego" language_name_abbr="GL" inputmode_QTY="GALICIAN_QTY" inputmode_QTY_name="Qwerty" keyboard_ise_uuid="uuid_default" country_code_URL="gl" is_latin_language="true" accepts_caps_mode="true" locale_string="gl_ES"/>
@@ -56,7 +56,7 @@
   <rec language="Hebrew" language_name="עברית" language_name_abbr="HE" inputmode_QTY="HEBREW_QTY" inputmode_QTY_name="Hebrew" keyboard_ise_uuid="uuid_default" country_code_URL="il"/>
   -->
   <rec language="Korean" language_name="한국어" language_name_abbr="KR" inputmode_QTY="KOREAN_QTY" inputmode_QTY_name="쿼티" keyboard_ise_uuid="uuid_korean" country_code_URL="kr" locale_string="ko_KR"/>
-  <rec language="Chinese" language_name="简体中文" language_name_abbr="CN" inputmode_QTY="CHINESE_QTY" inputmode_QTY_name="Qwerty键盘" main_keyboard_name="中" keyboard_ise_uuid="uuid_clm_chinese" country_code_URL="cn" locale_string="zh_CN"/>
+  <rec language="Chinese" language_name="简体中文" language_name_abbr="CN" inputmode_QTY="CHINESE_QTY" inputmode_QTY_name="Qwerty键盘" main_keyboard_name="中" keyboard_ise_uuid="uuid_clm_chinese" country_code_URL="cn" locale_string="zh_CN" load_in_ime="true"/>
   <rec language="Taiwan" language_name="繁體中文-註音" language_name_abbr="TW" inputmode_QTY="ZHUYIN_QTY" inputmode_QTY_name="註音" main_keyboard_name="中" keyboard_ise_uuid="uuid_zhuyin_big" country_code_URL="tw" locale_string="zh_TW"/>
   <rec language="Hongkong" language_name="繁體中文-倉頡" language_name_abbr="HK" inputmode_QTY="CANGJIE_QTY" inputmode_QTY_name="倉頡" main_keyboard_name="中" keyboard_ise_uuid="uuid_cangjie_3" country_code_URL="hk" locale_string="zh_HK"/>
   <rec language="Japanese" language_name="日本語" language_name_abbr="JA" inputmode_QTY="JAPANESE_QTY" inputmode_QTY_name="Qwerty" main_keyboard_name="あ" keyboard_ise_uuid="uuid_anthy" country_code_URL="jp" locale_string="ja_JP"/>
index 52366cb..2b76d59 100644 (file)
@@ -12,7 +12,7 @@
     <rec name="uuid_clm_korean" uuid="org.tizen.ise-engine-glm.korean"/>
 </keyboard_uuid_table>
 <language_table>
-  <rec language="English" language_name="English" inputmode_QTY="ENGLISH_QTY" inputmode_QTY_name="Qwerty" keyboard_ise_uuid="uuid_clm_english" country_code_URL="uk" is_latin_language="true" accepts_caps_mode="true" locale_string="en_US"/>
+  <rec language="English" language_name="English" inputmode_QTY="ENGLISH_QTY" inputmode_QTY_name="Qwerty" keyboard_ise_uuid="uuid_clm_english" country_code_URL="uk" is_latin_language="true" accepts_caps_mode="true" locale_string="en_US" load_in_ime="true"/>
   <rec language="Italian" language_name="Italiano" inputmode_QTY="ITALIAN_QTY" inputmode_QTY_name="Tastiera Qwerty" keyboard_ise_uuid="uuid_default" country_code_URL="it" is_latin_language="true" accepts_caps_mode="true" locale_string="it_IT"/>
   <rec language="Spanish" language_name="Español" inputmode_QTY="SPANISH_QTY" inputmode_QTY_name="Teclado Qwerty" keyboard_ise_uuid="uuid_default" country_code_URL="es" is_latin_language="true" accepts_caps_mode="true" locale_string="es_ES"/>
   <rec language="Galician" language_name="Galego" inputmode_QTY="GALICIAN_QTY" inputmode_QTY_name="Qwerty" keyboard_ise_uuid="uuid_default" country_code_URL="gl" is_latin_language="true" accepts_caps_mode="true" locale_string="gl_ES"/>
@@ -56,7 +56,7 @@
   <rec language="Hebrew" language_name="עברית" inputmode_QTY="HEBREW_QTY" inputmode_QTY_name="Hebrew" keyboard_ise_uuid="uuid_default" country_code_URL="il"/>
   -->
   <rec language="Korean" language_name="한국어" inputmode_QTY="KOREAN_QTY" inputmode_QTY_name="쿼티" keyboard_ise_uuid="uuid_korean" country_code_URL="kr" locale_string="ko_KR"/>
-  <rec language="Chinese" language_name="简体中文" inputmode_QTY="CHINESE_QTY" inputmode_QTY_name="Qwerty键盘" main_keyboard_name="中" keyboard_ise_uuid="uuid_clm_chinese" country_code_URL="cn" locale_string="zh_CN"/>
+  <rec language="Chinese" language_name="简体中文" inputmode_QTY="CHINESE_QTY" inputmode_QTY_name="Qwerty键盘" main_keyboard_name="中" keyboard_ise_uuid="uuid_clm_chinese" country_code_URL="cn" locale_string="zh_CN" load_in_ime="true"/>
   <rec language="Taiwan" language_name="繁體中文-註音" inputmode_QTY="ZHUYIN_QTY" inputmode_QTY_name="註音" main_keyboard_name="中" keyboard_ise_uuid="uuid_zhuyin_big" country_code_URL="tw" locale_string="zh_TW"/>
   <rec language="Hongkong" language_name="繁體中文-倉頡" inputmode_QTY="CANGJIE_QTY" inputmode_QTY_name="倉頡" main_keyboard_name="中" keyboard_ise_uuid="uuid_cangjie_3" country_code_URL="hk" locale_string="zh_HK"/>
   <rec language="Japanese" language_name="日本語" inputmode_QTY="JAPANESE_QTY" inputmode_QTY_name="Qwerty" main_keyboard_name="あ" keyboard_ise_uuid="uuid_anthy" country_code_URL="jp" locale_string="ja_JP"/>
index d516d8a..0c62487 100644 (file)
@@ -12,7 +12,7 @@
     <rec name="uuid_clm_korean" uuid="org.tizen.ise-engine-glm.korean"/>
 </keyboard_uuid_table>
 <language_table>
-  <rec language="English" language_name="EN(US)" language_name_abbr="EN(US)" inputmode_QTY="ENGLISH_4X4" inputmode_QTY_name="3x4 keyboard" keyboard_ise_uuid="uuid_clm_english" country_code_URL="uk" is_latin_language="true" accepts_caps_mode="true" locale_string="en_US"/>
+  <rec language="English" language_name="EN(US)" language_name_abbr="EN(US)" inputmode_QTY="ENGLISH_4X4" inputmode_QTY_name="3x4 keyboard" keyboard_ise_uuid="uuid_clm_english" country_code_URL="uk" is_latin_language="true" accepts_caps_mode="true" locale_string="en_US" load_in_ime="true"/>
   <rec language="Italian" language_name="Italiano" language_name_abbr="IT" inputmode_QTY="ITALIAN_4X4" inputmode_QTY_name="3x4 keyboard" keyboard_ise_uuid="uuid_default" country_code_URL="it" is_latin_language="true" accepts_caps_mode="true" locale_string="it_IT"/>
   <rec language="Spanish" language_name="Español" language_name_abbr="ES(ES)" inputmode_QTY="SPANISH_4X4" inputmode_QTY_name="3x4 keyboard" keyboard_ise_uuid="uuid_default" country_code_URL="es" is_latin_language="true" accepts_caps_mode="true" locale_string="es_ES"/>
   <rec language="Galician" language_name="Galego" language_name_abbr="GL" inputmode_QTY="GALICIA_4X4" inputmode_QTY_name="3x4 keyboard" keyboard_ise_uuid="uuid_default" country_code_URL="gl" is_latin_language="true" accepts_caps_mode="true" locale_string="gl_ES"/>
index d768a87..66640ab 100644 (file)
@@ -29,6 +29,7 @@ BuildRequires:  pkgconfig(glib-2.0)
 BuildRequires:  pkgconfig(gio-2.0)
 BuildRequires:  pkgconfig(pkgmgr-info)
 Requires:       ise-engine-glm
+Requires:       ise-engine-default
 
 # This is for old profile-based OBS project optimizations.
 # In 4.0 unified build env, this if statement is always true.
index 00190b3..66b6522 100644 (file)
@@ -61,6 +61,7 @@ typedef struct _LANGUAGE_INFO {
         priority = LANGAUGE_PRIORITY_NONE;
         is_latin_language = false;
         accepts_caps_mode = false;
+        load_in_ime = false;
     }
     /* Indicates whether this language was enabled in option window's language selection list */
     sclboolean enabled;
@@ -91,6 +92,7 @@ typedef struct _LANGUAGE_INFO {
     sclboolean is_latin_language;
     /* If this language accepts caps mode, try to handle AutoCapitalization option */
     sclboolean accepts_caps_mode;
+    sclboolean load_in_ime;
 } LANGUAGE_INFO;
 
 
index eba40ca..06260bb 100644 (file)
@@ -654,6 +654,8 @@ void engine_loader_set_imengine(const char *engine_id, const char *module_name)
     GVariant *reply_body = NULL;
     bool result = false;
 
+    LOGD("engine id : %s, module name : %s", engine_id, module_name);
+
     if (!dbus_info) {
         LOGW("dbus info is not allocated.");
         return;
index c5845ec..8ebe3e7 100644 (file)
@@ -145,12 +145,16 @@ static sclu32               _context_layout_variation = 0;
 
 Candidate                  *g_candidate = NULL;
 
+static ISELanguageManager _language_manager;
+
 class CandidateEventListener: public EventListener
 {
     public:
         void on_event(const EventDesc &desc)
         {
             const MultiEventDesc &multidesc = dynamic_cast<const MultiEventDesc &>(desc);
+            LANGUAGE_INFO *info = _language_manager.get_language_info(_language_manager.get_current_language());
+
             switch (multidesc.type) {
                 case MultiEventDesc::CANDIDATE_ITEM_MOUSE_DOWN:
                     if (g_autofill_exist) {
@@ -163,13 +167,20 @@ class CandidateEventListener: public EventListener
                         } else if (multidesc.index < (int)g_smartreply_size + 1) {
                             ise_send_string(g_softcandidate_string[multidesc.index].c_str());
                         } else {
-                            engine_loader_select_candidate(multidesc.index - g_smartreply_size - 1);
+                            if (info && info->load_in_ime)
+                                ime_select_candidate(multidesc.index - g_smartreply_size - 1);
+                            else
+                                engine_loader_select_candidate(multidesc.index - g_smartreply_size - 1);
                         }
                     } else {
                         if (multidesc.index < (int)g_smartreply_size)
                             ise_send_string(g_softcandidate_string[multidesc.index].c_str());
-                        else
-                            engine_loader_select_candidate(multidesc.index - g_smartreply_size);
+                        else {
+                            if (info && info->load_in_ime)
+                                ime_select_candidate(multidesc.index - g_smartreply_size);
+                            else
+                                engine_loader_select_candidate(multidesc.index - g_smartreply_size);
+                        }
                     }
                     break;
                 case MultiEventDesc::CANDIDATE_MORE_VIEW_SHOW:
@@ -194,7 +205,6 @@ class CandidateEventListener: public EventListener
 };
 static CandidateEventListener g_candidate_event_listener;
 
-static ISELanguageManager _language_manager;
 #define MVK_Shift_L 0xffe1
 #define MVK_Caps_Lock 0xffe5
 #define MVK_Shift_Off 0xffe1
@@ -618,10 +628,16 @@ on_input_mode_changed(const sclchar *key_value, sclulong key_event, sclint key_t
             LANGUAGE_INFO *info = _language_manager.get_language_info(cur_lang);
             if (info) {
                 if (info->accepts_caps_mode) {
-                    engine_loader_send_imengine_event(MVK_Shift_Enable, 0);
+                    if (info->load_in_ime)
+                        ime_send_imengine_event(MVK_Shift_Enable, 0);
+                    else
+                        engine_loader_send_imengine_event(MVK_Shift_Enable, 0);
                     set_caps_mode(g_keyboard_state.caps_mode);
                 } else {
-                    engine_loader_send_imengine_event(MVK_Shift_Disable, 0);
+                    if (info->load_in_ime)
+                        ime_send_imengine_event(MVK_Shift_Disable, 0);
+                    else
+                        engine_loader_send_imengine_event(MVK_Shift_Disable, 0);
                     g_ui->set_shift_state(SCL_SHIFT_STATE_OFF);
                 }
             }
@@ -685,11 +701,20 @@ SCLEventReturnType CUIEventCallback::on_event_notification(SCLUINotiType noti_ty
                     if (info->accepts_caps_mode) {
                         LOGD("shift state: %d\n", desc->shift_state);
                         if (desc->shift_state == SCL_SHIFT_STATE_OFF) {
-                            engine_loader_send_imengine_event(MVK_Shift_Off, 0);
+                            if (info->load_in_ime)
+                                ime_send_imengine_event(MVK_Shift_Off, 0);
+                            else
+                                engine_loader_send_imengine_event(MVK_Shift_Off, 0);
                         } else if (desc->shift_state == SCL_SHIFT_STATE_ON) {
-                            engine_loader_send_imengine_event(MVK_Shift_On, 0);
+                            if (info->load_in_ime)
+                                ime_send_imengine_event(MVK_Shift_On, 0);
+                            else
+                                engine_loader_send_imengine_event(MVK_Shift_On, 0);
                         } else if (desc->shift_state == SCL_SHIFT_STATE_LOCK) {
-                            engine_loader_send_imengine_event(MVK_Shift_Lock, 0);
+                            if (info->load_in_ime)
+                                ime_send_imengine_event(MVK_Shift_Lock, 0);
+                            else
+                                engine_loader_send_imengine_event(MVK_Shift_Lock, 0);
                         }
                         ret = SCL_EVENT_PASS_ON;
                     }
@@ -1415,7 +1440,7 @@ ise_show(int ic)
                 g_keyboard_state.layout == ISE_LAYOUT_STYLE_IP ||
                 g_keyboard_state.layout == ISE_LAYOUT_STYLE_MONTH ||
                 g_keyboard_state.layout == ISE_LAYOUT_STYLE_NUMBERONLY) {
-
+                ime_set_engine_loader_flag(true);
                 engine_loader_set_imengine(DEFAULT_KEYBOARD_ISE_UUID, DEFAULT_KEYBOARD_ISE_PKGID);
             }
         }
index 4183e57..365aa5e 100644 (file)
@@ -262,6 +262,7 @@ ISELangTableMgr::parse_lang_table(const xmlNodePtr p_node) {
             m_table[m_size].flush_command = get_prop_int(cur_node, "flush_command");
             m_table[m_size].is_latin_language = get_prop_bool(cur_node, "is_latin_language");
             m_table[m_size].accepts_caps_mode = get_prop_bool(cur_node, "accepts_caps_mode");
+            m_table[m_size].load_in_ime = get_prop_bool(cur_node, "load_in_ime");
 
             m_size++;
         }
index 945186d..1327e42 100644 (file)
@@ -38,6 +38,7 @@ typedef struct ISE_LANG_TABLE {
         flush_command = 0;
         is_latin_language = false;
         accepts_caps_mode = false;
+        load_in_ime = false;
     }
     /* This is the string ID of this language, used in ISE side. For example, ISE developer can use this string to select this language, by passing "Korean" to ISELanguageManager::select_language() function */
     char *language;
@@ -78,6 +79,7 @@ typedef struct ISE_LANG_TABLE {
     bool is_latin_language;
     /* If this language accepts caps mode, try to handle AutoCapitalization option */
     bool accepts_caps_mode;
+    bool load_in_ime;
 } ISE_LANG_TABLE;
 
 typedef struct Keyboard_UUID {
index b084d8d..26fa074 100644 (file)
@@ -79,6 +79,7 @@ public :
                 language.resource_file = MAIN_ENTRY_XML_PATH;
                 language.is_latin_language = table[loop].is_latin_language;
                 language.accepts_caps_mode = table[loop].accepts_caps_mode;
+                language.load_in_ime = table[loop].load_in_ime;
 
                 /* These variable should be read from stored setting values */
                 language.enabled = FALSE;
@@ -264,15 +265,26 @@ SCLEventReturnType CSDKISE::on_event_key_clicked(SclUIEventDesc event_desc)
 {
     SCLEventReturnType ret = SCL_EVENT_PASS_ON;
     const sclchar *cur_lang = _language_manager.get_current_language();
-    if (event_desc.key_modifier == KEY_MODIFIER_LONGKEY)
-        engine_loader_flush_imengine();
+    LANGUAGE_INFO *info = NULL;
+    if (cur_lang)
+        info = _language_manager.get_language_info(cur_lang);
 
+    if (event_desc.key_modifier == KEY_MODIFIER_LONGKEY) {
+        if (info && info->load_in_ime)
+            ime_flush_imengine();
+        else
+            engine_loader_flush_imengine();
+    }
     switch (event_desc.key_type) {
         case KEY_TYPE_CHAR:
             ret = process_key_type_char(event_desc);
             break;
         case KEY_TYPE_STRING:
-            engine_loader_flush_imengine();
+            if (info && info->load_in_ime)
+                ime_flush_imengine();
+            else
+                engine_loader_flush_imengine();
+
             if (cur_lang && strcmp(cur_lang, "Korean") == 0) {
                 process_korean_automata(false, SIPKEY_ERROR);
             }
@@ -283,7 +295,11 @@ SCLEventReturnType CSDKISE::on_event_key_clicked(SclUIEventDesc event_desc)
             break;
         case KEY_TYPE_MODECHANGE:
             {
-                engine_loader_flush_imengine();
+                if (info && info->load_in_ime)
+                    ime_flush_imengine();
+                else
+                    engine_loader_flush_imengine();
+
                 if (cur_lang && strcmp(cur_lang, "Korean") == 0) {
                     process_korean_automata(false, SIPKEY_ERROR);
                 }
@@ -303,14 +319,20 @@ SCLEventReturnType CSDKISE::on_event_key_clicked(SclUIEventDesc event_desc)
                 } else if (event_desc.key_event == MVK_space) {
                     if (_language_manager.get_enabled_languages_num() > 1) {
                         if (event_desc.key_modifier == KEY_MODIFIER_DIRECTION_LEFT) {
-                            engine_loader_flush_imengine();
+                            if (info && info->load_in_ime)
+                                ime_flush_imengine();
+                            else
+                                engine_loader_flush_imengine();
 
                             /* If flick event upon space key was detected, perform a language change and don't proceed anymore */
                             _language_manager.select_previous_language();
                             g_keyboard_state.disable_force_latin = TRUE;
                             ret = SCL_EVENT_DONE;
                         } else if (event_desc.key_modifier == KEY_MODIFIER_DIRECTION_RIGHT) {
-                            engine_loader_flush_imengine();
+                            if (info && info->load_in_ime)
+                                ime_flush_imengine();
+                            else
+                                engine_loader_flush_imengine();
 
                             /* If flick event upon space key was detected, perform a language change and don't proceed anymore */
                             _language_manager.select_next_language();
@@ -398,7 +420,16 @@ sclboolean CSDKISE::on_language_selected(const sclchar *language, const sclchar
                         if (ret == PMINFO_R_OK) {
                             ret = pkgmgrinfo_appinfo_get_pkgid(handle, &pkgid);
                             if (ret == PMINFO_R_OK) {
-                                engine_loader_set_imengine(table[loop].keyboard_ise_uuid, pkgid);
+                                if (table[loop].load_in_ime) {
+                                    engine_loader_set_imengine(DEFAULT_KEYBOARD_ISE_UUID, DEFAULT_KEYBOARD_ISE_PKGID);
+                                    ime_set_engine_loader_flag(false);
+                                    ime_set_imengine(table[loop].keyboard_ise_uuid);
+                                }
+                                else {
+                                    ime_set_imengine(DEFAULT_KEYBOARD_ISE_UUID);
+                                    ime_set_engine_loader_flag(true);
+                                    engine_loader_set_imengine(table[loop].keyboard_ise_uuid, pkgid);
+                                }
                             }
                             else {
                                 LOGE("Retrieve pkgid failed : %s, %p", table[loop].keyboard_ise_uuid, handle);
@@ -428,11 +459,17 @@ sclboolean CSDKISE::on_language_selected(const sclchar *language, const sclchar
                         if (info->accepts_caps_mode) {
                             if (g_keyboard_state.caps_mode) {
                                 g_ui->set_shift_state(SCL_SHIFT_STATE_ON);
-                                engine_loader_send_imengine_event(MVK_Shift_On, 0);
+                                if (table[loop].load_in_ime)
+                                    ime_send_imengine_event(MVK_Shift_On, 0);
+                                else
+                                    engine_loader_send_imengine_event(MVK_Shift_On, 0);
                                 g_keyboard_state.caps_mode = TRUE;
                             } else {
                                 g_ui->set_shift_state(SCL_SHIFT_STATE_OFF);
-                                engine_loader_send_imengine_event(MVK_Shift_Off, 0);
+                                if (table[loop].load_in_ime)
+                                    ime_send_imengine_event(MVK_Shift_Off, 0);
+                                else
+                                    engine_loader_send_imengine_event(MVK_Shift_Off, 0);
                                 g_keyboard_state.caps_mode = FALSE;
                             }
                         } else {
@@ -573,7 +610,10 @@ sclboolean CSDKISE::flush_imengine(const sclchar *language)
                 */
                 bRet = true;
             } else {
-                engine_loader_reset_imengine();
+                if (table[lang_id].load_in_ime)
+                    ime_reset_imengine();
+                else
+                    engine_loader_reset_imengine();
                 bRet = true;
             }
         }