Load IME default setting from configuration file 53/256253/4
authorInHong Han <inhong1.han@samsung.com>
Mon, 29 Mar 2021 05:27:09 +0000 (14:27 +0900)
committerInHong Han <inhong1.han@samsung.com>
Wed, 31 Mar 2021 10:06:41 +0000 (19:06 +0900)
Change-Id: I23086e73b3c6dbef2092b0a691b7bce65658d203

CMakeLists.txt
ise-default-config/README [new file with mode: 0644]
ise-default-config/config/config.json [new file with mode: 0644]
ise-default-config/ise-default-config.manifest [new file with mode: 0644]
packaging/ise-default.spec
src/config.cpp
src/include/config.h
src/ise.cpp

index 27958c6..d046d4e 100644 (file)
@@ -89,6 +89,7 @@ SET(PKGS_CHECK_MODULES
         pkgmgr-info
         capi-ui-sticker-consumer
         capi-content-mime-type
+        json-glib-1.0
         )
 
 IF (with_cbhm)
@@ -112,6 +113,7 @@ SET(SETTING_PKGS_CHECK_MODULES
         capi-appfw-preference
         capi-system-system-settings
         key-manager
+        json-glib-1.0
         )
 
 pkg_check_modules(ISE_SETTING_PKGS REQUIRED ${SETTING_PKGS_CHECK_MODULES})
diff --git a/ise-default-config/README b/ise-default-config/README
new file mode 100644 (file)
index 0000000..4aea521
--- /dev/null
@@ -0,0 +1,19 @@
+ise-default-config
+==================
+
+This is a configuration file for setting IME's default settings.
+The settings specified in the config.json file are the default settings used by IME.
+
+usage
+=====
+
+    * prediction_on - Enable the predictive text feature.
+    * enabled_languages - Set the input language of the IME. (e.g. ["English", "Korean"], ["English", "Chinese"], ...)
+    * selected_language - Set the display language of the IME. (e.g. "English", "Korean", "Chinese", ...)
+    * auto_capitalise - Capitalize the first letter of each sentence automatically.
+    * sound_on - Play a sound when the IME is tapped.
+    * vibration_on - Enable vibrations when the IME is tapped.
+    * preview_on - Show a big character bubble when a key on the IME is tapped.
+    * floating_mode - Enable the floating IME.
+    * first_guideline_popup_for_setting - Show the guide message when the setting button is tapped for the first time.
+    * first_guideline_popup_for_language_change - Show the guide message when the language is changed for the first time.
\ No newline at end of file
diff --git a/ise-default-config/config/config.json b/ise-default-config/config/config.json
new file mode 100644 (file)
index 0000000..2909173
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "default_setting":
+       {
+               "prediction_on" : false,
+               "enabled_languages" : ["Korean", "English"],
+               "selected_language" : "Korean",
+               "auto_capitalise" : false,
+               "sound_on" : true,
+               "vibration_on" : false,
+               "preview_on" : true,
+               "floating_mode" : false,
+               "first_guideline_popup_for_setting" : false,
+               "first_guideline_popup_for_language_change" : false
+       }
+}
\ No newline at end of file
diff --git a/ise-default-config/ise-default-config.manifest b/ise-default-config/ise-default-config.manifest
new file mode 100644 (file)
index 0000000..017d22d
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+    <domain name="_"/>
+ </request>
+</manifest>
index d82cd24..77b4995 100644 (file)
@@ -31,6 +31,7 @@ BuildRequires:  pkgconfig(gio-2.0)
 BuildRequires:  pkgconfig(pkgmgr-info)
 BuildRequires:  pkgconfig(capi-ui-sticker-consumer)
 BuildRequires:  pkgconfig(capi-content-mime-type)
+BuildRequires:  pkgconfig(json-glib-1.0)
 Requires:       ise-engine-glm
 Requires:       ise-engine-default
 
@@ -146,6 +147,14 @@ Tizen keyboard (ise-default) binaries and resources with wearable options.
 This is intended to support wearable profiles with rectangle display.
 %endif
 
+%package -n ise-default-config
+Summary: ISE config file
+BuildArch: noarch
+Requires: %{name} = %{version}-%{release}
+
+%description -n ise-default-config
+ISE configuration file for default setting
+
 %prep
 %setup -q
 
@@ -249,6 +258,10 @@ make %{?jobs:-j%jobs}
 %install
 rm -rf %{buildroot}
 
+%make_install
+%__mkdir_p %{buildroot}%{_sysconfdir}/ise/conf
+%__cp ise-default-config/config/* %{buildroot}%{_sysconfdir}/ise/conf
+
 # This is for old profile-based OBS project optimizations.
 # In 4.0 unified build env, this if statement is always true.
 %if "%{?profile}" != "mobile" && "%{?profile}" != "wearable" && "%{?profile}" != "tv" && "%{?profile}" != "ivi"
@@ -551,3 +564,8 @@ fi
 %defattr(-,root,root,-)
 %{TZ_SYS_RO_APP}/ise-default/wearable-rectangle/*
 %endif
+
+%files -n ise-default-config
+%manifest ise-default-config/ise-default-config.manifest
+%{_sysconfdir}/ise/conf/*
+%license LICENSE
\ No newline at end of file
index 8fe7f94..726f51a 100644 (file)
@@ -21,6 +21,8 @@
 #include <iterator>
 
 #include <app_preference.h>
+#include <json-glib/json-glib.h>
+#include <dlog.h>
 
 #include "config.h"
 #include "languages.h"
@@ -47,6 +49,9 @@ using namespace scl;
 #define FLOATING_MODE   FALSE
 #endif
 
+#undef LOG_TAG
+#define LOG_TAG "ISE_DEFAULT"
+
 CONFIG_VALUES::CONFIG_VALUES()
 {
     keypad_mode = KEYPAD_MODE_QTY; // keypad_mode
@@ -62,6 +67,7 @@ CONFIG_VALUES::CONFIG_VALUES()
     number_tutorial_enable = TRUE;
     symbol_tutorial_enable = FALSE;
     dataclear = FALSE;
+    init_flag = FALSE;
 };
 
 static CONFIG_VALUES g_config_values;
@@ -236,6 +242,14 @@ void read_ise_floating_mode()
     if (config_values) config_values->floating_mode = value;
 }
 
+void read_ise_init_flag()
+{
+    sclboolean value;
+    read_ise_config_bool(ISE_CONFIG_INIT_FLAG, value, false);
+    CONFIG_VALUES *config_values = get_config_values();
+    if (config_values) config_values->init_flag = value;
+}
+
 void read_ise_config_values()
 {
     /* keypad mode */
@@ -279,6 +293,9 @@ void read_ise_config_values()
 
     /* Floating mode */
     read_ise_floating_mode();
+
+    /* Initialization flag */
+    read_ise_init_flag();
 }
 
 void write_ise_config_values()
@@ -309,6 +326,7 @@ void write_ise_config_values()
     preference_set_int(ISE_CONFIG_NUMBER_TUTORIAL_POPUP, config_values->number_tutorial_enable);
     preference_set_int(ISE_CONFIG_SYMBOL_TUTORIAL_POPUP, config_values->symbol_tutorial_enable);
     preference_set_int(ISE_CLEAR_DATA_ON, config_values->dataclear);
+    preference_set_int(ISE_CONFIG_INIT_FLAG, config_values->init_flag);
 }
 
 void erase_ise_config_values()
@@ -327,6 +345,7 @@ void erase_ise_config_values()
     preference_remove(ISE_CONFIG_FIRST_GUIDELINE_POPUP_FOR_LANGUAGE_CHANGE);
     preference_remove(ISE_CONFIG_NUMBER_TUTORIAL_POPUP);
     preference_remove(ISE_CONFIG_SYMBOL_TUTORIAL_POPUP);
+    preference_remove(ISE_CONFIG_INIT_FLAG);
 }
 
 void reset_ise_config_values()
@@ -334,21 +353,23 @@ void reset_ise_config_values()
     CONFIG_VALUES *config_values = get_config_values();
     if (!config_values) return;
 
-    config_values->keypad_mode = KEYPAD_MODE_QTY;
-    config_values->prediction_on = FALSE;
-    config_values->selected_language = "English";
-    config_values->enabled_languages.clear();
-    config_values->enabled_languages.push_back("English");
-    config_values->auto_capitalise = TRUE;
-    config_values->auto_punctuate = AUTOPUNCTUATE_ON;
-    config_values->sound_on = SOUND_ON;
-    config_values->vibration_on = VIBRATION_ON;
-    config_values->preview_on = PREVIEW_ON;
-    config_values->floating_mode = FALSE;
-    config_values->first_guideset = FALSE;
-    config_values->first_guidechange = FALSE;
-    config_values->number_tutorial_enable = TRUE;
-    config_values->symbol_tutorial_enable = FALSE;
+    if (access(ISE_CONFIG_FILE_PATH, F_OK) != 0 || !read_ise_config_file()) {
+        config_values->keypad_mode = KEYPAD_MODE_QTY;
+        config_values->prediction_on = FALSE;
+        config_values->selected_language = "English";
+        config_values->enabled_languages.clear();
+        config_values->enabled_languages.push_back("English");
+        config_values->auto_capitalise = TRUE;
+        config_values->auto_punctuate = AUTOPUNCTUATE_ON;
+        config_values->sound_on = SOUND_ON;
+        config_values->vibration_on = VIBRATION_ON;
+        config_values->preview_on = PREVIEW_ON;
+        config_values->floating_mode = FALSE;
+        config_values->first_guideset = FALSE;
+        config_values->first_guidechange = FALSE;
+        config_values->number_tutorial_enable = TRUE;
+        config_values->symbol_tutorial_enable = FALSE;
+    }
 
     write_ise_config_values();
 }
@@ -362,3 +383,78 @@ void clear_ise_data_values()
 
     write_ise_config_values();
 }
+
+sclboolean read_ise_config_file()
+{
+    sclboolean ret = FALSE;
+    CONFIG_VALUES *config_values = get_config_values();
+    if (!config_values) return ret;
+
+    JsonParser* parser = NULL;
+    JsonNode *root = NULL;
+    JsonObject *obj = NULL;
+    JsonObject *settings = NULL;
+    GError* err_msg = NULL;
+    JsonArray *enabled_lang_arr = NULL;
+    int arr_len = 0;
+
+    parser = json_parser_new();
+    json_parser_load_from_file(parser, ISE_CONFIG_FILE_PATH, &err_msg);
+    if (err_msg) {
+        LOGE("Failed to load configuration file. error message: %s", err_msg->message);
+        goto cleanup;
+    }
+
+    root = json_parser_get_root(parser);
+    if (!root) {
+        LOGE("Failed to get root");
+        goto cleanup;
+    }
+
+    obj = json_node_get_object(root);
+    if (!obj) {
+        LOGE("Failed to get object");
+        goto cleanup;
+    }
+
+    settings = json_object_get_object_member(obj, "default_setting");
+    if (!settings) {
+        LOGE("Failed to get object member");
+        goto cleanup;
+    }
+
+    {
+        config_values->keypad_mode = KEYPAD_MODE_QTY;
+        config_values->prediction_on = json_object_get_boolean_member(settings, "prediction_on");
+
+        config_values->enabled_languages.clear();
+        enabled_lang_arr = json_object_get_array_member(settings, "enabled_languages");
+        arr_len = json_array_get_length(enabled_lang_arr);
+        for (int i = 0; i < arr_len; i++) {
+            config_values->enabled_languages.push_back(std::string(json_array_get_string_element(enabled_lang_arr, i)));
+        }
+
+        config_values->selected_language = std::string(json_object_get_string_member(settings, "selected_language"));
+        config_values->auto_capitalise = json_object_get_boolean_member(settings, "auto_capitalise");
+        config_values->sound_on = json_object_get_boolean_member(settings, "sound_on");
+        config_values->vibration_on = json_object_get_boolean_member(settings, "vibration_on");
+        config_values->preview_on = json_object_get_boolean_member(settings, "preview_on");
+        config_values->floating_mode = json_object_get_boolean_member(settings, "floating_mode");
+        config_values->first_guideset = json_object_get_boolean_member(settings, "first_guideline_popup_for_setting");
+        config_values->first_guidechange = json_object_get_boolean_member(settings, "first_guideline_popup_for_language_change");
+        config_values->number_tutorial_enable = TRUE;
+        config_values->symbol_tutorial_enable = FALSE;
+        config_values->init_flag = TRUE;
+        write_ise_config_values();
+        ret = TRUE;
+    }
+
+cleanup:
+    if (err_msg)
+        g_error_free(err_msg);
+
+    if (parser)
+        g_object_unref(parser);
+
+    return ret;
+}
\ No newline at end of file
index 9f1d03a..f24ff29 100644 (file)
@@ -39,6 +39,8 @@
 #define ISE_CONFIG_FIRST_GUIDELINE_POPUP_FOR_LANGUAGE_CHANGE        "/ise-default/first_guideline_popup_for_language_change"
 #define ISE_CONFIG_NUMBER_TUTORIAL_POPUP "/ise-default/number_tutorial_enable"
 #define ISE_CONFIG_SYMBOL_TUTORIAL_POPUP "/ise-default/symbol_tutorial_enable"
+#define ISE_CONFIG_INIT_FLAG             "/ise-default/init_flag"
+#define ISE_CONFIG_FILE_PATH             "/etc/ise/conf/config.json"
 using namespace scl;
 
 enum KEYPAD_MODE {
@@ -64,6 +66,7 @@ struct CONFIG_VALUES {
     sclboolean first_guidechange;
     sclboolean number_tutorial_enable;
     sclboolean symbol_tutorial_enable;
+    sclboolean init_flag;
 };
 
 CONFIG_VALUES* get_config_values();
@@ -114,6 +117,9 @@ read_ise_language_guide_popup_mode();
 void
 read_ise_floating_mode();
 
+void
+read_ise_init_flag();
+
 /**
  * Writes all option values to SCIM config file
     @return     Nothing.
@@ -139,4 +145,6 @@ void reset_ise_config_values();
 
 void clear_ise_data_values();
 
+sclboolean read_ise_config_file();
+
 #endif
index 35c70a4..85b331b 100644 (file)
@@ -2148,6 +2148,9 @@ ise_create()
             }
 
             read_ise_config_values();
+            if (access(ISE_CONFIG_FILE_PATH, F_OK) == 0 && !config_values->init_flag)
+                read_ise_config_file();
+
             if (config_values) {
                 _language_manager.set_enabled_languages(config_values->enabled_languages);
                 _language_manager.select_language(config_values->selected_language.c_str());