Reduce duplicated code 76/247876/3
authorJihoon Kim <jihoon48.kim@samsung.com>
Wed, 18 Nov 2020 03:05:46 +0000 (12:05 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Wed, 18 Nov 2020 07:05:54 +0000 (16:05 +0900)
Change-Id: I8f17d95d9711719105ba7da22a87cfbcbc8dce63
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
common/ime_info.cpp [new file with mode: 0644]
common/ime_info.h [new file with mode: 0644]
common/input_method_setting_genlist.cpp
common/input_method_setting_genlist.h
im_setting_list/CMakeLists.txt
im_setting_list/input_method_setting_list_popup_view.cpp
im_setting_list/input_method_setting_list_ui.cpp
im_setting_selector/CMakeLists.txt
im_setting_selector/input_method_setting_selector_ui.cpp

diff --git a/common/ime_info.cpp b/common/ime_info.cpp
new file mode 100644 (file)
index 0000000..d8956a8
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include "ime_info.h"
+#include <vector>
+#include <iostream>
+#include <algorithm>
+#include <strings.h>
+
+class ime_info_compare
+{
+    public:
+    bool operator()(const ime_info_s &first, const ime_info_s &sec)
+    {
+        return (strcasecmp(first.label, sec.label) < 0);
+    }
+};
+
+void im_setting_sort_ime_info(std::vector<ime_info_s> &preinstall, std::vector<ime_info_s> &user, std::vector<ime_info_s> &ime_info_list)
+{
+    std::sort(preinstall.begin(), preinstall.end(), ime_info_compare());
+    std::sort(user.begin(), user.end(), ime_info_compare());
+    for (unsigned int i = 0; i < preinstall.size(); ++i)
+    {
+        ime_info_list.push_back(preinstall[i]);
+    }
+    for (unsigned int i = 0; i < user.size(); ++i)
+    {
+        ime_info_list.push_back(user[i]);
+    }
+}
diff --git a/common/ime_info.h b/common/ime_info.h
new file mode 100644 (file)
index 0000000..16876f5
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <vector>
+#include <isf_control.h>
+
+#ifndef __IME_INFO_H
+#define __IME_INFO_H
+
+void im_setting_sort_ime_info(std::vector<ime_info_s> &preinstall, std::vector<ime_info_s> &user, std::vector<ime_info_s> &ime_info_list);
+
+#endif
index b5ed0ba..58d093f 100644 (file)
@@ -40,6 +40,32 @@ static void gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
 }
 #endif
 
+Evas_Object *im_setting_genlist_item_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+    sel_cb_data *cb_data = (sel_cb_data *)data;
+    if (!cb_data)
+        return NULL;
+
+    int index = cb_data->index;
+    Elm_Object_Item *it = elm_genlist_nth_item_get(obj, index);
+
+    if (!strcmp(part, "elm.swallow.end") ||
+        !strcmp(part, "elm.icon")) {
+        Evas_Object *radio = elm_radio_add(obj);
+        elm_object_style_set(radio, "list");
+        elm_radio_state_value_set(radio, index);
+        evas_object_propagate_events_set(radio, EINA_TRUE);
+        elm_radio_group_add(radio, cb_data->group_radio);
+        evas_object_show(radio);
+
+        elm_atspi_accessible_relationship_append(it, ELM_ATSPI_RELATION_DESCRIBED_BY, radio);
+        elm_atspi_accessible_relationship_append(radio, ELM_ATSPI_RELATION_CONTROLLED_BY, it);
+
+        return radio;
+    }
+    return NULL;
+}
+
 Evas_Object *im_setting_genlist_create(Evas_Object* parent, Evas_Object* conform, Evas_Object **cgenlist)
 {
     Evas_Object *genlist = elm_genlist_add(parent);
index fd0058f..eb803bf 100644 (file)
 #ifndef __INPUTMETHOD_SETTING_GENLIST_H
 #define __INPUTMETHOD_SETTING_GENLIST_H
 
+#ifdef _WEARABLE
+#define IME_SETTING_LIST_1LINE_STYLE "1text.1icon.1"
+#define IME_SETTING_LIST_2LINE_STYLE "1text.1icon.1"
+#elif _MOBILE
+#define IME_SETTING_LIST_1LINE_STYLE "type1"
+#define IME_SETTING_LIST_2LINE_STYLE "type1"
+#else
+#define IME_SETTING_LIST_1LINE_STYLE "1line"
+#define IME_SETTING_LIST_2LINE_STYLE "2line"
+#endif
+
+typedef struct {
+    void        *data;
+    int         index;
+    Evas_Object *group_radio;
+} sel_cb_data;
+
 Evas_Object *im_setting_genlist_create(Evas_Object* parent, Evas_Object* conform, Evas_Object **cgenlist = NULL);
+Evas_Object *im_setting_genlist_item_icon_get(void *data, Evas_Object *obj, const char *part);
 
-#endif
\ No newline at end of file
+#endif
index 02bb53c..a995ae9 100644 (file)
@@ -2,6 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 
 SET(SRC_LIST
     ../common/input_method_setting_genlist.cpp
+    ../common/ime_info.cpp
     input_method_setting_list_ui.cpp
     input_method_setting_list.cpp
     input_method_setting_list_popup_view.cpp
index 5813c2c..b708319 100644 (file)
 #include "input_method_setting_list_ui.h"
 #include "input_method_setting_list_popup_view.h"
 #include "../common/input_method_setting_genlist.h"
+#include "../common/ime_info.h"
 
 #include <string>
 #include <efl_extension.h>
 #include <vector>
 #include <isf_control.h>
-#include <algorithm>
 #include <inputmethod_manager.h>
 #include <vconf.h>
 
@@ -34,36 +34,8 @@ static Elm_Genlist_Item_Class       *itc_im_list = NULL;
 static Evas_Object                  *group_radio = NULL;
 static int                          g_active_ime_id = -1;
 
-typedef struct {
-    void        *data;
-    int         index;
-} sel_cb_data;
-
-class ime_info_compare
-{
-    public:
-    bool operator()(const ime_info_s &first, const ime_info_s &sec)
-    {
-        return (strcasecmp(first.label, sec.label) < 0);
-    }
-};
-
 static int selected_index = 0;
 
-static void im_setting_list_sort_ime_info(std::vector<ime_info_s> &preinstall, std::vector<ime_info_s> &user)
-{
-    std::sort(preinstall.begin(), preinstall.end(), ime_info_compare());
-    std::sort(user.begin(), user.end(), ime_info_compare());
-    for (unsigned int i = 0; i < preinstall.size(); ++i)
-    {
-        g_active_ime_info_list.push_back(preinstall[i]);
-    }
-    for (unsigned int i = 0; i < user.size(); ++i)
-    {
-        g_active_ime_info_list.push_back(user[i]);
-    }
-}
-
 static void im_setting_list_load_active_ime_info(void)
 {
     std::vector<ime_info_s>      active_ime_info_list_preinstall;
@@ -93,7 +65,7 @@ static void im_setting_list_load_active_ime_info(void)
         free(info);
     }
 
-    im_setting_list_sort_ime_info(active_ime_info_list_preinstall, active_ime_info_list_user);
+    im_setting_sort_ime_info(active_ime_info_list_preinstall, active_ime_info_list_user, g_active_ime_info_list);
     for (unsigned int i = 0; i < g_active_ime_info_list.size(); ++i)
     {
         if (active_ime_appid && (!strcmp(active_ime_appid, g_active_ime_info_list[i].appid)))
@@ -218,32 +190,6 @@ static char *im_setting_list_genlist_item_label_get(void *data, Evas_Object *obj
     return NULL;
 }
 
-static Evas_Object *im_setting_list_genlist_item_icon_get(void *data, Evas_Object *obj, const char *part)
-{
-    sel_cb_data *cb_data = (sel_cb_data *)data;
-    if (!cb_data)
-        return NULL;
-
-    int index = cb_data->index;
-    Elm_Object_Item *it = elm_genlist_nth_item_get(obj, index);
-
-    if (!strcmp(part, "elm.swallow.end") ||
-        !strcmp(part, "elm.icon")) {
-        Evas_Object *radio = elm_radio_add(obj);
-        elm_object_style_set(radio, "list");
-        elm_radio_state_value_set(radio, index);
-        evas_object_propagate_events_set(radio, EINA_TRUE);
-        elm_radio_group_add(radio, group_radio);
-        evas_object_show(radio);
-
-        elm_atspi_accessible_relationship_append(it, ELM_ATSPI_RELATION_DESCRIBED_BY, radio);
-        elm_atspi_accessible_relationship_append(radio, ELM_ATSPI_RELATION_CONTROLLED_BY, it);
-
-        return radio;
-    }
-    return NULL;
-}
-
 static void im_setting_list_genlist_item_del_cb(void *data, Evas_Object *obj)
 {
     sel_cb_data *cb_data = (sel_cb_data *)data;
@@ -257,15 +203,9 @@ static void im_setting_list_genlist_item_class_create(void)
 {
     itc_im_list = elm_genlist_item_class_new();
     if (itc_im_list) {
-#ifdef _WEARABLE
-        itc_im_list->item_style = "1text.1icon.1";
-#elif _MOBILE
-        itc_im_list->item_style = "type1";
-#else
-        itc_im_list->item_style = "1line";
-#endif
+        itc_im_list->item_style = IME_SETTING_LIST_1LINE_STYLE;
         itc_im_list->func.text_get = im_setting_list_genlist_item_label_get;
-        itc_im_list->func.content_get = im_setting_list_genlist_item_icon_get;
+        itc_im_list->func.content_get = im_setting_genlist_item_icon_get;
         itc_im_list->func.state_get = NULL;
         itc_im_list->func.del = im_setting_list_genlist_item_del_cb;
     }
@@ -289,6 +229,7 @@ static Evas_Object *im_setting_list_list_create(void *data)
         sel_cb_data *cb_data = new sel_cb_data;
         cb_data->data = data;
         cb_data->index = i;
+        cb_data->group_radio = group_radio;
         elm_genlist_item_append(genlist,
             itc_im_list,
             (void *)(cb_data),
@@ -415,6 +356,7 @@ static void im_setting_list_screen_create(void *data)
         sel_cb_data *cb_data = new sel_cb_data;
         cb_data->data = data;
         cb_data->index = i;
+        cb_data->group_radio = group_radio;
         elm_genlist_item_append(genlist,
             itc_im_list,
             (void *)(cb_data),
index 39e3ad3..00dd2d5 100644 (file)
 #include "input_method_setting_list_ui.h"
 #include "input_method_setting_list_popup_view.h"
 #include "../common/input_method_setting_genlist.h"
+#include "../common/ime_info.h"
 
 #include <string>
 #include <app.h>
 #include <vector>
-#include <algorithm>
 #include <tzplatform_config.h>
 #include <inputmethod_manager.h>
 #include <package_manager.h>
@@ -72,19 +72,10 @@ typedef struct _Item_Data
     Elm_Object_Item *item;
 } Item_Data;
 
-class ime_info_compare
-{
-    public:
-    bool operator()(const ime_info_s &first, const ime_info_s &sec)
-    {
-        return (strcasecmp(first.label, sec.label) < 0);
-    }
-};
-
 typedef void (*popup_ok_cb)(void *data, Evas_Object *obj, void *event_info);
 typedef void (*popup_cancel_cb)(void *data, Evas_Object *obj, void *event_info);
 
-static std::vector<ime_info_s>      g_ime_info_list;
+std::vector<ime_info_s>      g_ime_info_list;
 static Elm_Genlist_Item_Class       *itc_im_list_keyboard_list = NULL;
 static Elm_Genlist_Item_Class       *itc_im_list_group = NULL;
 static Elm_Genlist_Item_Class       *itc_im_list_item = NULL;
@@ -136,20 +127,6 @@ static Evas_Object* im_setting_list_bg_create(Evas_Object *parent)
     return bg;
 }
 
-static void im_setting_list_sort_ime_info(std::vector<ime_info_s> &preinstall, std::vector<ime_info_s> &user)
-{
-    std::sort(preinstall.begin(), preinstall.end(), ime_info_compare());
-    std::sort(user.begin(), user.end(), ime_info_compare());
-    for (unsigned int i = 0; i < preinstall.size(); ++i)
-    {
-        g_ime_info_list.push_back(preinstall[i]);
-    }
-    for (unsigned int i = 0; i < user.size(); ++i)
-    {
-        g_ime_info_list.push_back(user[i]);
-    }
-}
-
 static void im_setting_list_load_ime_info(void)
 {
     std::vector<ime_info_s>      ime_info_list_preinstall;
@@ -171,7 +148,7 @@ static void im_setting_list_load_ime_info(void)
     } else {
         LOGW("isf_control_get_all_ime_info failed\n");
     }
-    im_setting_list_sort_ime_info(ime_info_list_preinstall, ime_info_list_user);
+    im_setting_sort_ime_info(ime_info_list_preinstall, ime_info_list_user, g_ime_info_list);
 }
 
 static int im_setting_list_get_active_ime_index(void)
@@ -653,13 +630,7 @@ static void im_setting_list_genlist_item_class_create(int app_type)
         itc_im_list_keyboard_list = elm_genlist_item_class_new();
         if (itc_im_list_keyboard_list)
         {
-#ifdef _WEARABLE
-            itc_im_list_keyboard_list->item_style = "1text.1icon.1";
-#elif _MOBILE
-            itc_im_list_keyboard_list->item_style = "type1";
-#else
-            itc_im_list_keyboard_list->item_style = "2line";
-#endif
+            itc_im_list_keyboard_list->item_style = IME_SETTING_LIST_2LINE_STYLE;
             itc_im_list_keyboard_list->func.text_get = im_setting_list_genlist_keyboard_list_item_label_get;
             itc_im_list_keyboard_list->func.content_get = im_setting_list_genlist_keyboard_list_item_icon_get;
             itc_im_list_keyboard_list->func.state_get = NULL;
index 4553069..b5cee92 100644 (file)
@@ -2,6 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 
 SET(SRC_LIST
     ../common/input_method_setting_genlist.cpp
+    ../common/ime_info.cpp
     input_method_setting_selector_ui.cpp
     input_method_setting_selector.cpp
 )
index 8d86fe3..cb09e51 100644 (file)
 #include <app.h>
 #include <vector>
 #include <isf_control.h>
-#include <algorithm>
 #include <tzplatform_config.h>
 #include <inputmethod_manager.h>
 #include "../common/input_method_setting_genlist.h"
+#include "../common/ime_info.h"
 
 #define IM_SETTING_SELECTOR_PACKAGE        PACKAGE
 #define IM_SETTING_SELECTOR_LOCALE_DIR     tzplatform_mkpath(TZ_SYS_RO_APP, PACKAGE_NAME"/res/locale")
@@ -34,20 +34,6 @@ static Elm_Genlist_Item_Class       *itc_im_selector = NULL;
 static Evas_Object                  *group_radio = NULL;
 static int                          g_active_ime_id = -1;
 
-typedef struct {
-    void *data;
-    int index;
-} sel_cb_data;
-
-class ime_info_compare
-{
-    public:
-    bool operator()(const ime_info_s &first, const ime_info_s &sec)
-    {
-        return (strcasecmp(first.label, sec.label) < 0);
-    }
-};
-
 static int selected_index = 0;
 
 static void im_setting_selector_text_domain_set(void)
@@ -93,20 +79,6 @@ im_setting_selector_main_window_create(const char *name)
     return eo;
 }
 
-static void im_setting_selector_sort_ime_info(std::vector<ime_info_s> &preinstall, std::vector<ime_info_s> &user)
-{
-    std::sort(preinstall.begin(), preinstall.end(), ime_info_compare());
-    std::sort(user.begin(), user.end(), ime_info_compare());
-    for (unsigned int i = 0; i < preinstall.size(); ++i)
-    {
-        g_ime_info_list.push_back(preinstall[i]);
-    }
-    for (unsigned int i = 0; i < user.size(); ++i)
-    {
-        g_ime_info_list.push_back(user[i]);
-    }
-}
-
 static void im_setting_selector_load_ime_info(void)
 {
     std::vector<ime_info_s>      ime_info_list_preinstall;
@@ -136,7 +108,7 @@ static void im_setting_selector_load_ime_info(void)
         free(info);
     }
 
-    im_setting_selector_sort_ime_info(ime_info_list_preinstall, ime_info_list_user);
+    im_setting_sort_ime_info(ime_info_list_preinstall, ime_info_list_user, g_ime_info_list);
     for (unsigned int i = 0; i < g_ime_info_list.size(); ++i)
     {
         if (active_ime_appid && (!strcmp(active_ime_appid, g_ime_info_list[i].appid)))
@@ -237,32 +209,6 @@ static char *im_setting_selector_genlist_item_label_get(void *data, Evas_Object
     return NULL;
 }
 
-static Evas_Object *im_setting_selector_genlist_item_icon_get(void *data, Evas_Object *obj, const char *part)
-{
-    sel_cb_data *cb_data = (sel_cb_data *)data;
-    if (!cb_data)
-        return NULL;
-
-    int index = cb_data->index;
-    Elm_Object_Item *it = elm_genlist_nth_item_get(obj, index);
-
-    if (!strcmp(part, "elm.swallow.end") ||
-        !strcmp(part, "elm.icon")) {
-        Evas_Object *radio = elm_radio_add(obj);
-        elm_object_style_set(radio, "list");
-        elm_radio_state_value_set(radio, index);
-        evas_object_propagate_events_set(radio, EINA_TRUE);
-        elm_radio_group_add(radio, group_radio);
-        evas_object_show(radio);
-
-        elm_atspi_accessible_relationship_append(it, ELM_ATSPI_RELATION_DESCRIBED_BY, radio);
-        elm_atspi_accessible_relationship_append(radio, ELM_ATSPI_RELATION_CONTROLLED_BY, it);
-
-        return radio;
-    }
-    return NULL;
-}
-
 static void
 im_setting_selector_genlist_item_del_cb(void *data, Evas_Object *obj)
 {
@@ -277,15 +223,9 @@ static void im_setting_selector_genlist_item_class_create(void)
 {
     itc_im_selector = elm_genlist_item_class_new();
     if (itc_im_selector) {
-#ifdef _WEARABLE
-        itc_im_selector->item_style = "1text.1icon.1";
-#elif _MOBILE
-        itc_im_selector->item_style = "type1";
-#else
-        itc_im_selector->item_style = "1line";
-#endif
+        itc_im_selector->item_style = IME_SETTING_LIST_1LINE_STYLE;
         itc_im_selector->func.text_get = im_setting_selector_genlist_item_label_get;
-        itc_im_selector->func.content_get = im_setting_selector_genlist_item_icon_get;
+        itc_im_selector->func.content_get = im_setting_genlist_item_icon_get;
         itc_im_selector->func.state_get = NULL;
         itc_im_selector->func.del = im_setting_selector_genlist_item_del_cb;
     }
@@ -303,6 +243,7 @@ static void im_setting_selector_add_ime(void *data) {
         sel_cb_data *cb_data = new sel_cb_data;
         cb_data->data = data;
         cb_data->index = i;
+        cb_data->group_radio = group_radio;
 
         elm_genlist_item_append(ad->genlist,
             itc_im_selector,
@@ -468,6 +409,8 @@ static void im_setting_selector_screen_create(void *data)
         sel_cb_data *cb_data = new sel_cb_data;
         cb_data->data = data;
         cb_data->index = i;
+        cb_data->group_radio = group_radio;
+
         elm_genlist_item_append(genlist,
             itc_im_selector,
             (void *)(cb_data),