tizen 2.3.1 release
[apps/home/settings.git] / setting-common / src / setting-cfg.c
old mode 100755 (executable)
new mode 100644 (file)
index 005738a..338302e
@@ -1,18 +1,22 @@
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.0 (the License);
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * 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://floralicense.org/license/
+ * 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,
+ * 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 <setting-cfg.h>
 #include <stdio.h>
 #include <Elementary.h>
 #include <setting-common-general-func.h>
+#include <setting-common-data-type.h>
+#include <setting-common-data-slp-setting.h>
 #include <unistd.h>
+#include <vconf.h>
 
-#define CFG_FILE_DIR_PATH      "/opt/data/setting/"
+#define CFG_FILE_DIR_PATH      "/opt/usr/apps/org.tizen.setting/data/"
 #define CFG_FILE_PATH          CFG_FILE_DIR_PATH"setting.cfg"
 
-JsonParserparser;
-JsonNode*   root; /* category_list */
+JsonParser *parser;
+JsonNode   *root; /* category_list */
 
-char* setting_cfg_get_path()
+EXPORT_PUBLIC
+char *setting_cfg_get_path()
 {
        return CFG_FILE_PATH;
 }
 
-int setting_cfg_file_write( JsonNode * node );
-
-#define __create_an_item(item_name, icon_path, ug_args, defaultPos, is_resetable) do\
-{\
-       if (!is_ug_installed_by_ug_args(ug_args)) break;\
-       menu_item = json_node_new(JSON_NODE_OBJECT); \
-       object = json_object_new(); \
-       json_node_take_object(menu_item, object); \
-       json_object_set_string_member(object, "key_name", item_name); \
-       json_object_set_string_member(object, "icon_path", icon_path); \
-       json_object_set_string_member(object, "ug_args", ug_args); \
-       json_object_set_int_member(object, "pos", defaultPos); \
-       json_object_set_int_member(object, "click_times", 0); \
-       json_object_set_int_member(object, "is_resetable", is_resetable); \
-       json_array_add_element(menu, menu_item); \
-} while(0);\
-
-#define __create_an_item_by_pkg(item_name, pkg_name, ug_args, defaultPos, is_resetable) do\
-{\
-       if (!is_ug_installed_by_ug_args(ug_args)) break;\
-       menu_item = json_node_new(JSON_NODE_OBJECT); \
-       object = json_object_new(); \
-       char* __temp_##item_name = get_icon_path(pkg_name); \
-       json_node_take_object(menu_item, object); \
-       json_object_set_string_member(object, "key_name", item_name); \
-       json_object_set_string_member(object, "icon_path", __temp_##item_name); \
-       json_object_set_string_member(object, "ug_args", ug_args); \
-       json_object_set_int_member(object, "pos", defaultPos); \
-       json_object_set_int_member(object, "click_times", 0); \
-       json_object_set_int_member(object, "is_resetable", is_resetable); \
-       json_array_add_element(menu, menu_item); \
-       free(__temp_##item_name); __temp_##item_name = NULL; \
-} while(0);\
-
-
+int setting_cfg_file_write(JsonNode *node);
+
+#define __create_an_item(item_name, icon_path, ug_args, shortcut_appid, defaultPos, item_type,  is_resetable, ug_exist, uuid, click_times, last_clicked) do\
+       {\
+               if (ug_exist) { \
+                       if (!is_ug_installed_by_ug_args(ug_args)) break;\
+               } \
+               menu_item = json_node_new(JSON_NODE_OBJECT); \
+               object = json_object_new(); \
+               json_node_take_object(menu_item, object); \
+               json_object_set_string_member(object, "key_name", item_name); \
+               json_object_set_string_member(object, "icon_path", icon_path); \
+               json_object_set_string_member(object, "ug_args", ug_args); \
+               json_object_set_string_member(object, "shortcut_appid", shortcut_appid); \
+               json_object_set_int_member(object, "pos", defaultPos); \
+               json_object_set_int_member(object, "click_times", click_times); \
+               json_object_set_int_member(object, "item_type", item_type); \
+               json_object_set_int_member(object, "is_resetable", is_resetable); \
+               json_object_set_int_member(object, "last_clicked", last_clicked); \
+               json_object_set_string_member(object, "uuid", uuid); \
+               json_array_add_element(menu, menu_item); \
+       } while(0);\
+        
 #define __create_a_menu(menu_name)\
-{\
-       category = json_node_new( JSON_NODE_OBJECT );\
-       object = json_object_new();\
-       json_node_take_object ( category, object );\
-       json_object_set_string_member( object, "name", menu_name );\
-       menu = json_array_new();\
-       json_object_set_array_member( object, "menu", menu );\
-       json_array_add_element( json_node_get_array( category_list ), category );\
-}
+       {\
+               category = json_node_new( JSON_NODE_OBJECT );\
+               object = json_object_new();\
+               json_node_take_object ( category, object );\
+               json_object_set_string_member( object, "name", menu_name );\
+               menu = json_array_new();\
+               json_object_set_array_member( object, "menu", menu );\
+               json_array_add_element( json_node_get_array( category_list ), category );\
+       }
 
-void setting_cfg_print( void )
+
+int nearbydevice_toggle_get_state(Cfg_Item_State *stat, void *data);
+int wifi_toggle_get_state(Cfg_Item_State *stat, void *data);
+int flightmode_toggle_get_state(Cfg_Item_State *stat, void *data);
+int bluetooth_toggle_get_state(Cfg_Item_State *stat, void *data);
+int blockingmode_toggle_get_state(Cfg_Item_State *stat, void *data);
+int drivingmode_toggle_get_state(Cfg_Item_State *stat, void *data);
+int network_restriction_mode_toggle_get_state(Cfg_Item_State *stat, void *data);
+int personalmode_toggle_get_state(Cfg_Item_State *stat, void *data);
+int handfree_toggle_get_state(Cfg_Item_State *stat, void *data);
+int nfc_toggle_get_state(Cfg_Item_State *stat, void *data);
+int sbeam_toggle_get_state(Cfg_Item_State *stat, void *data);
+int multiwindow_toggle_get_state(Cfg_Item_State *stat, void *data);
+
+/*/////////////////////////////////////////////////////////////////////////////////////////// */
+/* nearby device - DONE */
+EXPORT_PUBLIC
+cfg_func_table nearbydevice_tfunc = {
+       .get_item_state = nearbydevice_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* wifi - DONE */
+EXPORT_PUBLIC
+cfg_func_table wifi_tfunc = {
+       .get_item_state = wifi_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* flight mode - DONE */
+EXPORT_PUBLIC
+cfg_func_table flightmode_tfunc = {
+       .get_item_state = flightmode_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* bluetooth - ***** FAILED ***** */
+EXPORT_PUBLIC
+cfg_func_table bluetooth_tfunc = {
+       .get_item_state = bluetooth_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* blocking mode - partially done - need to work by UG-side */
+EXPORT_PUBLIC
+cfg_func_table blockingmode_tfunc = {
+       .get_item_state = blockingmode_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* driving mode - Done */
+EXPORT_PUBLIC
+cfg_func_table drivingmode_tfunc = {
+       .get_item_state = drivingmode_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* network restrictrion mode - Done */
+EXPORT_PUBLIC
+cfg_func_table network_restruction_mode_tfunc = {
+       .get_item_state = network_restriction_mode_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* personal mode ?? - partially done */
+EXPORT_PUBLIC
+cfg_func_table personalmode_tfunc = {
+       .get_item_state = personalmode_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* NFC - ??? */
+EXPORT_PUBLIC
+cfg_func_table nfc_tfunc = {
+       .get_item_state = nfc_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* sbeam - ??? */
+EXPORT_PUBLIC
+cfg_func_table sbeam_tfunc = {
+       .get_item_state = sbeam_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+/* sbeam - ??? */
+EXPORT_PUBLIC
+cfg_func_table multiwindow_tfunc = {
+       .get_item_state = multiwindow_toggle_get_state,
+       .set_item_state = NULL,
+       .set_item_update_ui = NULL,
+};
+
+
+EXPORT_PUBLIC
+void setting_cfg_print(void)
 {
-       JsonNode * node = root;
+       JsonNode *node = root;
 
-       JsonGenerator *generator = json_generator_new ();
-       g_object_set( generator, "pretty", TRUE, NULL );
-       json_generator_set_root ( generator, node );
-       gchar *data = json_generator_to_data ( generator, NULL );
-       SETTING_TRACE( "%s", (char *)data );
+       JsonGenerator *generator = json_generator_new();
+       g_object_set(generator, "pretty", TRUE, NULL);
+       json_generator_set_root(generator, node);
+       gchar *data = json_generator_to_data(generator, NULL);
+       SETTING_TRACE("%s", (char *)data);
 
        g_free(data);
        g_object_unref(generator);
 }
 
+
 /* create config file from scratch */
-int setting_cfg_create(void)
-{
-       JsonNode *category_list, *category, *menu_item;
-       JsonArray *menu;
-       JsonObject *object;
+static Setting_Cfg_Node_T s_cfg_node_array[] = {
+       {KeyStr_Connectivity, NULL, "move://Tab2.top", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_Title_Node, NULL, NULL, NULL, uuid_Connectivity, 0, NULL},
+       {KeyStr_WiFi, IMG_WiFi, "wifi-efl-ug", Cfg_Item_Pos_Level0, Cfg_Item_Resetable,   0, Cfg_Item_AppLauncher_Node, NULL, KeyStr_Connectivity, &wifi_tfunc, uuid_WiFi, 0, "wifi-efl-ug"},
+       {KeyStr_Bluetooth, IMG_Bluetooth, "ug-bluetooth-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable,  0, Cfg_Item_AppLauncher_Node, NULL, KeyStr_Connectivity, &bluetooth_tfunc, uuid_Bluetooth, 0, "ug-bluetooth-efl"},
+       {KeyStr_MobileAP, IMG_MobileAP, "setting-mobileap-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable,  0, Cfg_Item_AppLauncher_Node, NULL, KeyStr_Connectivity, NULL, uuid_MobileAP, 0, NULL},
+#ifdef TIZEN_BUILD_TARGET
+       {KeyStr_WiFiDirect, IMG_WiFiDirect, "setting-wifidirect-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_AppLauncher_Node, NULL, KeyStr_Connectivity, NULL, uuid_WiFiDirect, 0, NULL},
+#endif
+       {KeyStr_FlightMode, IMG_FlightMode, "setting-flightmode-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable,  0, Cfg_Item_Ui_Node_Toggle, NULL, KeyStr_Connectivity, &flightmode_tfunc, uuid_FlightMode, 0, NULL},
 
-       /* Category list */
-       category_list = json_node_new (JSON_NODE_ARRAY);
-       json_node_take_array ( category_list, json_array_new () );
+       {KeyStr_Location, IMG_Location, "org.tizen.setting-location", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0,  Cfg_Item_AppLauncher_Node, NULL, KeyStr_Connectivity, NULL, uuid_Location, 0, NULL},
+#ifdef TIZEN_BUILD_TARGET
+       {KeyStr_Network, IMG_Network, "setting-network-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0,  Cfg_Item_Ug_Node, NULL, KeyStr_Connectivity, NULL, uuid_Network, 0, NULL},
+       {KeyStr_NFC, IMG_NFC, "setting-nfc-efl|type:nfc", Cfg_Item_Pos_Level0, Cfg_Item_unResetable,  0, Cfg_Item_Ug_Node_Toggle, NULL, KeyStr_ShareAndTransfer, &nfc_tfunc, uuid_NFC, 0, "setting-nfc-efl"},
+#endif
+       /* a new group:Screen */
+       {KeyStr_SoundDisplay, NULL, "move://Tab3.top", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_Title_Node, NULL, NULL, NULL, uuid_SoundDisplay, 0, NULL},
+       {KeyStr_Sounds, IMG_Sounds, "setting-profile-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_SoundDisplay, NULL, uuid_SoundDisplay, 0, NULL},
+       {KeyStr_Display, IMG_Display, "setting-display-efl|viewtype:main", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_SoundDisplay, NULL, uuid_Display, 0, "org.tizen.setting.display"},
 
-       /* Connectivity */
-       __create_a_menu(KeyStr_Connectivity);
+       {KeyStr_Personal, NULL, "move://Tab3.top", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_Title_Node, NULL, NULL, NULL, uuid_Personal, 0, NULL},
 
-       __create_an_item(KeyStr_WiFi, IMG_WiFi, "wifi-efl-UG", Cfg_Item_Pos_Level0, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_MobileAP, IMG_MobileAP, "setting-mobile-ap-ug", Cfg_Item_Pos_Level0, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_Location, IMG_Location, "setting-location-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_Network, IMG_Network, "setting-network-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_Bluetooth, IMG_Bluetooth, "setting-bluetooth-efl", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_NFC, IMG_NFC, "setting-nfc-efl|type:nfc", Cfg_Item_Pos_Level1, Cfg_Item_unResetable);
+       {KeyStr_Wallpaper, IMG_Wallpaper, "org.tizen.wallpaper-ui-service", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_AppLauncher_Node, NULL, KeyStr_Personal, NULL, uuid_HomeAndLockscreen, 0, "org.tizen.setting.wallpaper-ui-service"},
 
-#if SUPPORT_DATA_USAGE
-       __create_an_item(KeyStr_DataUsage, IMG_DataUsage, "setting-datausage-efl", Cfg_Item_Pos_Level1, Cfg_Item_unResetable);
-#endif
+       /*      {KeyStr_Font, IMG_Font, "setting-font-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_Personal, NULL, uuid_Font, 0, NULL}, */
 
-#if SUPPORT_WIFI_DIRECT
-       __create_an_item(KeyStr_WiFiDirect, IMG_WiFiDirect, "setting-wifidirect-efl", Cfg_Item_Pos_Level1, Cfg_Item_unResetable);
+#if SUPPORT_PERSONALPAGE
+       {KeyStr_PersonalMode, IMG_PersonalMode, "setting-personalpage-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable, 0, Cfg_Item_Ug_Node_Toggle, NULL, KeyStr_Personal, &personalmode_tfunc, uuid_PersonalMode, 0, "org.tizen.setting.personal"},
+#endif
+#if SUPPORT_SMARTSCREEN
+       {Keystr_SmartScreen, IMG_SmartScreen, "setting-display-efl|viewtype:smartscreen", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_MotionControl, NULL, uuid_SmartScreen, 0, "org.tizen.setting.smartscreen"},
 #endif
 
-       /* System */
-       __create_a_menu(KeyStr_System);
-       /* a new group.. */
-       __create_an_item(KeyStr_FlightMode, IMG_FlightMode, NULL, Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
+       {KeyStr_BackupOption, NULL, "move://Tab4.top", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_Title_Node, NULL, NULL, NULL, uuid_BackupOption, 0, NULL},
+       {KeyStr_Accounts, IMG_Accounts, "setting-myaccount-efl|mode:account_list", Cfg_Item_Pos_Level0, Cfg_Item_unResetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_BackupOption, NULL, uuid_Accounts, 0, "setting-myaccount-efl"},
 
-       // Wallpaper -- here
-#if SUPPORT_WALLPAPER
-       /* kinds of wallpaper version.. */
-       __create_an_item(KeyStr_Wallpaper, IMG_Wallpaper, "setting-display-efl|viewtype:wallpaper", Cfg_Item_Pos_Level0, Cfg_Item_Resetable);
-#endif
+       /*{KeyStr_Reset, IMG_Reset, "setting-reset-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_BackupOption, NULL, uuid_Reset, 0, NULL}, */
 
-       __create_an_item(KeyStr_Sounds, IMG_Sounds, "setting-profile-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable);
+       {KeyStr_System, NULL, "move://Tab4.top", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_Title_Node, NULL, NULL, NULL, uuid_DeviceMange, 0,  NULL},
+       {KeyStr_LanguageKeyboard, IMG_DisplayLanguage, "setting-phone-efl|viewtype:language", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_DeviceMange, NULL, uuid_LanguageKeyboard, 0, "org.tizen.setting.language"},
+       {KeyStr_DateTime, IMG_DateTime, "setting-time-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_DeviceMange, NULL, uuid_DateTime, 0, NULL},
 
-#if SUPPOR_SEPARATE_BRIGHTNESS
-       __create_an_item(KeyStr_Brightness, IMG_Brightness, "setting-display-efl|viewtype:brightness", Cfg_Item_Pos_Level0, Cfg_Item_Resetable);
+#if SUPPORT_STORAGE
+       {KeyStr_Storage, IMG_StorageIcon, "setting-storage-efl|caller:setting", Cfg_Item_Pos_Level0, Cfg_Item_unResetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_DeviceMange, NULL, uuid_Storage, 0, "setting-storage-efl"},
 #endif
-
-#if SUPPORT_SECURITY
-       __create_an_item(KeyStr_Security, IMG_Security, "setting-security-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable);
+#if SUPPORT_SIMSETTING
+       {KeyStr_Security, IMG_Security, "setting-security-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_DeviceMange, NULL, uuid_Security, 0,  NULL},
 #endif
+       {KeyStr_DeveloperOption, IMG_USBconnection, "setting-developeroption-efl|viewtype:usb", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_DeviceMange, NULL, uuid_DeveloperOption, 0, "org.tizen.setting.developeroptions"},
+       {KeyStr_AboutPhone, IMG_AboutPhone, "setting-about-efl", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_DeviceMange, NULL, uuid_AboutPhone, 0, NULL},
 
-#if SUPPORT_POWERSAVING
-       __create_an_item(KeyStr_Powersaving, IMG_Powersaving, "setting-powersaving-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
+       /* Downloaded App */
+       {KeyStr_DownloadedAPPs, NULL, "move://Tab6.top", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_Title_Node, NULL, NULL, NULL, uuid_APP, 0, NULL},
+       {KeyStr_ManageApps, IMG_MANAGE_APPS, "setting-manage-applications-efl|viewtype:manage-applications", Cfg_Item_Pos_Level0, Cfg_Item_Resetable, 0, Cfg_Item_Ug_Node, NULL, KeyStr_DeviceMange, NULL, uuid_ManageApps, 0, "org.tizen.setting.manageapplications"},
+#if SUPPORT_CALL
+       {KeyStr_Call, IMG_Call, "setting-call-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable, 0, Cfg_Item_AppLauncher_Node, NULL, KeyStr_DownloadedAPPs, NULL, uuid_Call, 0, NULL},
 #endif
+};
 
-#if SUPPORT_FONT
-       __create_an_item(KeyStr_Font, IMG_Font, "setting-font-efl", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
-#endif
+EXPORT_PUBLIC Setting_Cfg_Node_T *get_cfg_node_by_keystr(const char *keystr)
+{
+       int size = get_cfg_array_size();
 
-       __create_an_item(KeyStr_Display, IMG_Dispaly, "setting-display-efl|viewtype:main", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
-#if SUPPORT_MENUSCREEN
-       __create_an_item(KeyStr_Menuscreen, IMG_Menuscreen, "setting-homescreen-efl", Cfg_Item_Pos_Level1, Cfg_Item_unResetable);
-#endif
-       __create_an_item(KeyStr_Landscape, IMG_Landscape, NULL, Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_DateTime, IMG_DateTime, "setting-time-efl", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_LanguageRegion, IMG_DisplayLanguage, "setting-phone-efl|viewtype:language", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_KeyboradLanguage, IMG_KeyboradLanguage, "isfsetting-efl", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
+       int i;
+       for (i = 0; i < size; i++) {
+               if (0 == safeStrCmp(keystr, _(s_cfg_node_array[i].key_name))) {
+                       return &(s_cfg_node_array[i]);
+               }
+       }
+       return NULL;
+}
 
-#if SUPPORT_STORAGE
-       __create_an_item(KeyStr_Storage, IMG_DefaultIcon, "setting-storage-efl", Cfg_Item_Pos_Level1, Cfg_Item_unResetable);
-#endif
-       __create_an_item(KeyStr_ManageApps, IMG_MANAGE_APPS, "setting-manage-applications-efl|viewtype:manage-applications", Cfg_Item_Pos_Level1,
-                           Cfg_Item_Resetable);
+EXPORT_PUBLIC int get_index_by_keystr(const char *keystr)
+{
+       int size = get_cfg_array_size();
+       /*SETTING_TRACE(" size of array : %d ", size); */
 
-#if SUPPORT_WEB_APPLICATION
-       __create_an_item(KeyStr_WebApps, IMG_Web_Apps, "webapp-common-efl", Cfg_Item_Pos_Level1, Cfg_Item_unResetable);
-#endif
+       int i;
+       /*SETTING_TRACE("keystr:%s", keystr); */
+       for (i = 0; i < size; i++) {
+               /*SETTING_TRACE("s_cfg_node_array[%d].key_name:%s", i, s_cfg_node_array[i].key_name); */
+               if (0 == safeStrCmp(keystr, s_cfg_node_array[i].key_name)) {
+                       return i;
+               }
+       }
+       /*not found */
+       return -1;
+}
 
-#if SUPPORT_CERTIFICATES
-       __create_an_item(KeyStr_CertUI, IMG_MANAGE_APPS, "setting-manage-certificates-efl", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
-#endif
 
-       __create_an_item(KeyStr_Memory, IMG_Memory, "setting-memory-efl", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_Reset, IMG_Reset, "setting-reset-efl", Cfg_Item_Pos_Level1, Cfg_Item_unResetable);
-       __create_an_item(KeyStr_DeveloperOption, IMG_USBconnection, "setting-developeroption-efl|viewtype:usb", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
-       __create_an_item(KeyStr_AboutPhone, IMG_AboutPhone, "setting-about-efl", Cfg_Item_Pos_Level1, Cfg_Item_Resetable);
+EXPORT_PUBLIC char *get_iconpath_by_keystr(const char *keystr)
+{
+       int size = get_cfg_array_size();
 
-       /* Applications */
-       __create_a_menu(KeyStr_Applications);
+       int i;
+       /*SETTING_TRACE("keystr:%s", keystr); */
+       for (i = 0; i < size; i++) {
+               if (0 == safeStrCmp(keystr, _(s_cfg_node_array[i].key_name))) {
+                       if (s_cfg_node_array[i].icon_path) {
+                               return s_cfg_node_array[i].icon_path;
+                       } else {
+                               goto END;
+                       }
+               }
+       }
 
-       __create_an_item(KeyStr_Call, IMG_Call, "setting-call-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
-       __create_an_item(KeyStr_Messages, IMG_Messages, "msg-setting-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
-       __create_an_item(KeyStr_Email, IMG_Email, "email-setting-efl|VIEW_TYPE:main-view", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
-       __create_an_item(KeyStr_Contacts, IMG_Contacts, "contacts-settings-efl|request_type:71", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
+END:
+       return IMG_SETTING;
+}
 
-       __create_an_item(KeyStr_Calendar, IMG_Calendar, "calendar-settings-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
+/* plistitem->title */
+EXPORT_PUBLIC void *get_node_pointer(char *name)
+{
+       int size = get_cfg_array_size();
 
-       __create_an_item(KeyStr_Gallery, IMG_Gallery, "setting-gallery-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
-       __create_an_item(KeyStr_VoiceRecorder, IMG_VoiceRecorder, "setting-voicerecorder-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
+       int i;
+       for (i = 0; i < size; i++) {
+               if (0 == safeStrCmp(name, _(s_cfg_node_array[i].key_name))) {
+                       return s_cfg_node_array[i].data;
+               }
+       }
+       return NULL;
+}
 
-#if SUPPORT_FMradio
-       // FMradio setting
-       __create_an_item_by_pkg(KeyStr_FMRadio, "org.tizen.fm-radio", "setting-fmradio-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
-       SETTING_TRACE_DEBUG("Added FMRadio");
-#endif
 
+EXPORT_PUBLIC int set_node_pointer(char *name, void *ptr)
+{
+       int size = get_cfg_array_size();
 
+       int i;
+       for (i = 0; i < size; i++) {
+               if (0 == safeStrCmp(name, s_cfg_node_array[i].key_name)) {
+                       /*return i; */
+                       s_cfg_node_array[i].data = ptr;
+                       return 0;
+               }
+       }
 
+       return -1;
+}
 
+EXPORT_PUBLIC int set_cfg_node_tfunc(char *name, void *ptr)
+{
+       int size = get_cfg_array_size();
 
+       int i;
+       for (i = 0; i < size; i++) {
+               if (0 == safeStrCmp(_(name), _(s_cfg_node_array[i].key_name))) {
+                       /*return i; */
+                       s_cfg_node_array[i].tfunc = (cfg_func_table *)ptr;
+                       return 0;
+               }
+       }
 
-#if DISABLED_CODE
-       __create_an_item_by_pkg(KeyStr_NFC, "com.samsung.nfc-app", "setting-nfc-efl", Cfg_Item_Pos_Level0, Cfg_Item_unResetable);
-#endif
+       return -1;
+}
 
-       /* Downloaded App */
-       __create_a_menu(KeyStr_DownloadedAPPs);
+EXPORT_PUBLIC int set_cfg_node_tfunc_set_ptr(char *name, int (*set_item_state)(Cfg_Item_State stat, void *item, void *data))
+{
+       int size = get_cfg_array_size();
 
-       /* write to file */
-       int ret = setting_cfg_file_write( category_list );
+       int i;
+       for (i = 0; i < size; i++) {
+               if (0 == safeStrCmp(_(name), _(s_cfg_node_array[i].key_name))) {
+                       /*return i; */
+                       s_cfg_node_array[i].tfunc->set_item_state = set_item_state;
+                       return 0;
+               }
+       }
+
+       return -1;
+}
 
-       json_node_free( category_list );
+EXPORT_PUBLIC
+Setting_Cfg_Node_T *get_cfg_node_first()
+{
+       return &s_cfg_node_array[0];
+}
+
+EXPORT_PUBLIC
+int get_cfg_array_size()
+{
+       int arr_size = sizeof(s_cfg_node_array);
+       int node_size = sizeof(s_cfg_node_array[0]);
+
+       return arr_size / node_size;
+}
+
+/**
+* @brief
+
+Cfg_Item_Title_Node
+Cfg_Item_App_Node
+Cfg_Item_Ui_Node
+Cfg_Item_Ug_Node
+*
+* @param check_ug
+*
+* @return
+*/
+EXPORT_PUBLIC
+int setting_cfg_create(bool check_ug_exist)
+{
+       SETTING_TRACE_BEGIN;
+       JsonNode *category_list, *category, *menu_item;
+       JsonArray *menu = NULL;
+       JsonObject *object = NULL;
+
+       /* Category list */
+       category_list = json_node_new(JSON_NODE_ARRAY);
+       json_node_take_array(category_list, json_array_new());
+
+       Setting_Cfg_Node_T *pitem = get_cfg_node_first();       /* head */
+       int size = get_cfg_array_size();
+       SETTING_TRACE(" size of array : %d ", size);
+
+       int i;
+       for (i = 0; i < size; i++) {
+               /* Check Emul and block Wifi & Bluetooth menu */
+               if (isEmulBin() &&
+                   (!safeStrCmp(pitem[i].key_name, KeyStr_Bluetooth) || !safeStrCmp(pitem[i].key_name, KeyStr_WiFi))) {
+                       SETTING_TRACE("Skip %s", pitem[i].key_name);
+                       continue;
+               }
+
+               SETTING_TRACE(" index : %d ", i);
+               Cfg_Item_Type item_type = pitem[i].item_type % 10;
+               if (item_type == Cfg_Item_Title_Node) {
+                       SETTING_TRACE(" add title : %s ", pitem[i].key_name);
 
+                       /* __create_a_menu HEADER */
+                       __create_a_menu(pitem[i].key_name);
+
+               } else if (item_type == Cfg_Item_App_Node
+                          || item_type == Cfg_Item_Ui_Node
+                          || item_type == Cfg_Item_AppLauncher_Node) {
+
+                       __create_an_item(pitem[i].key_name, pitem[i].icon_path, pitem[i].ug_args, pitem[i].shortcut_appid, pitem[i].pos, pitem[i].item_type, pitem[i].reset_type, false, pitem[i].uuid, pitem[i].click_times, pitem[i].last_clicked);
+                       /*SETTING_TRACE(" add menu - name : %s (%d) - APP ", pitem[i].key_name,pitem[i].item_type); */
+
+               } else if (item_type == Cfg_Item_Ug_Node) {
+                       /* app-control */
+                       __create_an_item(pitem[i].key_name, pitem[i].icon_path, pitem[i].ug_args, pitem[i].shortcut_appid, pitem[i].pos, pitem[i].item_type, pitem[i].reset_type, check_ug_exist, pitem[i].uuid, pitem[i].click_times, pitem[i].last_clicked);
+                       /*SETTING_TRACE(" add menu - name : %s (%d) - UG ", pitem[i].key_name,pitem[i].item_type); */
+               }
+       }
+       /* write to file */
+       int ret = setting_cfg_file_write(category_list);
+       json_node_free(category_list);
        return ret;
 }
 
 
 /* load file */
-int setting_cfg_file_read( void )
+EXPORT_PUBLIC
+int setting_cfg_file_read(void)
 {
-#if DISABLED_CODE
-       if (access( CFG_FILE_PATH, R_OK|F_OK ) !=0 )
-       {
-               SETTING_TRACE("file [%s] not legal, need to check your file-system.[%s:%d]\n", CFG_FILE_PATH, __FILE__, __LINE__);
-               //return Cfg_Error_Type_FilePermissionDenied;
-               return FALSE;
+       struct stat sb;
+       memset(&sb, 0, sizeof(struct stat));
+       int r = stat(CFG_FILE_PATH, &sb);
+       if (0 != r) {
+               SETTING_TRACE("ERROR, r:%d", r);
        }
-#endif
-       parser = json_parser_new (); /* to be freed on exit */
+       SETTING_TRACE("sb.st_size:%d", sb.st_size);
 
+       parser = json_parser_new();  /* to be freed on exit */
        /* file -> parser */
        GError *error = NULL;
-       gboolean ret = json_parser_load_from_file( parser, CFG_FILE_PATH, &error );
-
-       if( FALSE == ret )
-       {
-               return FALSE;
-#if DISABLED_CODE
-               SETTING_TRACE_ERROR("error->message:%s", (char*)(error->message));
-
-        /* The file is existing and can be accessed normally, but it was
-         * loaded failed as a json script, it means setting.cfg is
-         * damaged(not the normal formatting ), we need to remove
-         * the file and recreate in next running time*/
+       /*gboolean ret = json_parser_load_from_file( parser, CFG_FILE_PATH, &error ); */
+       if (!sb.st_size || FALSE == json_parser_load_from_file(parser, CFG_FILE_PATH, &error)) {
+               if (error)
+                       SETTING_TRACE_ERROR("error->message:%s", (char *)(error->message));
+               /*return FALSE; */
+
+               /* The file is existing and can be accessed normally, but it was
+                * loaded failed as a json script, it means setting.cfg is
+                * damaged(not the normal formatting ), we need to remove
+                * the file and recreate in next running time*/
                SETTING_TRACE_ERROR("The file[%s] is existing and can be accessed "\
-                            "normally, but it was loaded failed as a json "\
-                            "script, it means setting.cfg is damaged (the "\
-                            "formatting ia abnormal), we need to remove the"\
-                            " file and recreate in next running time!",
-                            CFG_FILE_PATH);
-
-        SETTING_TRACE("Trying to removing the damaged file.");
-        if (remove(CFG_FILE_PATH) != 0)
-        {
-            SETTING_TRACE_ERROR("Error to remove the damaged file");
-            return FALSE;
-        }
-
-        if( FALSE == setting_cfg_create() )
-        {
-            SETTING_TRACE_ERROR("Error to create a new config file");
-            return FALSE;
-        }
-        /*if the failed is  caused by reading the file recursively invoking */
-        return setting_cfg_file_read();
-#endif
+                                   "normally, but it was 0 size or loaded failed as a json "\
+                                   "script, it means setting.cfg is damaged (the "\
+                                   "formatting ia abnormal), we need to remove the"\
+                                   " file and recreate in next running time!",
+                                   CFG_FILE_PATH);
+
+               SETTING_TRACE("Trying to removing the damaged file.");
+               if (remove(CFG_FILE_PATH) != 0) {
+                       SETTING_TRACE_ERROR("Error to remove the damaged file");
+                       return FALSE;
+               }
+
+               if (FALSE == setting_cfg_create(true)) {
+                       SETTING_TRACE_ERROR("Error to create a new config file");
+                       return FALSE;
+               }
+               /*if the failed is  caused by reading the file recursively invoking */
+               return setting_cfg_file_read();
        }
 
        /* parser -> root */
-       root = json_parser_get_root( parser ); /* to be freed on exit*/
+       root = json_parser_get_root(parser);   /* to be freed on exit*/
        return TRUE;
 }
 
 /**
 * @brief dump JSON to file
 */
-int setting_cfg_file_write( JsonNode * node )
+EXPORT_PUBLIC
+int setting_cfg_file_write(JsonNode *node)
 {
        GError *error = NULL;
-       JsonGenerator *generator = json_generator_new ();
-       json_generator_set_root ( generator, node );
-       g_object_set( generator, "pretty", TRUE, NULL ); //write file in indent format
-       gboolean ret = json_generator_to_file( generator, CFG_FILE_PATH, &error );
+       JsonGenerator *generator = json_generator_new();
+       json_generator_set_root(generator, node);
+       g_object_set(generator, "pretty", TRUE, NULL);   /*write file in indent format */
+       gboolean ret = json_generator_to_file(generator, CFG_FILE_PATH, &error);
        g_object_unref(generator);
 
        /* ***BEGIN***  DAC black screen SAMSUNG 2010/8/9 add
         *add read permission
         *chown -R inhouse:inhouse /home/inhouse/setting.cfg
         */
-       if( FALSE == ret )
-       {
-               SETTING_TRACE_ERROR("Error writing file %s!", CFG_FILE_PATH );
+       if (FALSE == ret) {
+               SETTING_TRACE_ERROR("Error writing file %s!", CFG_FILE_PATH);
                return FALSE;
        }
        return TRUE;
 }
 
 /*   public functions  */
-#if DISABLED_CODE
-int setting_cfg_init( void )
-{
-       g_type_init ();
-
-       struct stat st;
-       //int ret = -1;
-
-       if (access( CFG_FILE_DIR_PATH, R_OK|W_OK|F_OK ) !=0 )
-    {
-               SETTING_TRACE_ERROR("dir [%s] not legal, need to check your file-system.[%s:%d]\n", CFG_FILE_DIR_PATH, __FILE__, __LINE__);
-        return Cfg_Error_Type_DirPermissionDenied;
-    }
-       if( stat(CFG_FILE_DIR_PATH, &st) != 0)/* to make more stable */
-       {
-               /* if (0 != system("sudo mkdir /opt/data/setting/")); */
-               /* if (EINA_TRUE != ecore_file_mkpath(CFG_FILE_DIR_PATH)); */
-               if (EINA_TRUE != ecore_file_mkdir(CFG_FILE_DIR_PATH));
-               {
-                       perror("mkdir");
-                       return Cfg_Error_Type_Mkdir_Failed;
-               }
-       }
-
-       if( stat(CFG_FILE_PATH, &st) != 0)
-       {
-               SETTING_TRACE_ERROR("Config file doesn't exist. Create it!");
-               if(     FALSE == setting_cfg_create() )
-               {
-                       /* perror("setting_cfg_create"); */
-                       return Cfg_Error_Type_CreateCfg_Failed;
-               }
-               stat(CFG_FILE_PATH, &st);
-       }
-       /* ***BEGIN***  error handle(caused by unstable file system) SAMSUNG 2010/9/10 add*/
-       else if (0 == st.st_size ||
-             0 != access( CFG_FILE_PATH, R_OK|F_OK ))
-       {
-               SETTING_TRACE("the %s is 0 Byte, we need to recreate it.", CFG_FILE_PATH);
-               /* delete the file */
-               if (remove(CFG_FILE_PATH) != 0)
-               {
-                       perror("remove");
-                       return Cfg_Error_Type_RemoveCfg_Failed;
-               }
-               if(     FALSE == setting_cfg_create() )
-               {
-                       /* perror("setting_cfg_create"); */
-                       return Cfg_Error_Type_CreateCfg_Failed;
-               }
-
-       }
-       /* ****END****  error handle(caused by unstable  file system) SAMSUNG 2010/9/10 add
-        * cfg file exists but invalid -> re-create
-        * load file into parser
-        */
-       if( FALSE == setting_cfg_file_read() )
-       {
-               /* remove current setting file */
-               if (remove(CFG_FILE_PATH) != 0)
-               {
-                       /* perror("remove"); */
-                       return Cfg_Error_Type_RemoveCfg_Failed;
-               }
-               return Cfg_Error_Type_ReadCfg_Failed;
-       }
-
-       return Cfg_Error_Type_Sucess;
-}
-#endif
-
-int setting_cfg_init( void )
+EXPORT_PUBLIC
+int setting_cfg_init(void)
 {
-       g_type_init ();
+       g_type_init();
 
-       if (!access(CFG_FILE_PATH, R_OK|W_OK|F_OK )) { // succeed to access
-               if(!setting_cfg_file_read()) { // return FALSE
+       if (!access(CFG_FILE_PATH, R_OK | W_OK | F_OK)) { /* succeed to access */
+               if (!setting_cfg_file_read()) { /* return FALSE */
                        if (remove(CFG_FILE_PATH)) {
                                return Cfg_Error_Type_RemoveCfg_Failed;
                        }
@@ -384,17 +539,28 @@ int setting_cfg_init( void )
                }
 
                return Cfg_Error_Type_Sucess;
-       } else { // fail to access
+       } else { /* fail to access */
                switch (errno) {
-                       // file non-existing case
+                               /* file non-existing case */
                        case ENOENT:
-                               SETTING_TRACE_ERROR("non-existing file/dir");
-                               ecore_file_mkdir(CFG_FILE_DIR_PATH);
-                               if (!setting_cfg_create()) { // return FALSE
+                               SETTING_TRACE_ERROR("non-existing [%s]", CFG_FILE_PATH);
+                               if (! ecore_file_is_dir(CFG_FILE_DIR_PATH)) {
+                                       SETTING_TRACE_ERROR("non-existing [%s]", CFG_FILE_DIR_PATH);
+                                       Eina_Bool flag = ecore_file_mkdir(CFG_FILE_DIR_PATH);
+                                       if (flag == EINA_FALSE) {
+                                               SETTING_TRACE_ERROR(">failed to create dir");
+                                       } else {
+                                               SETTING_TRACE_ERROR(">OK to create dir");
+                                       }
+                               }
+
+                               if (!setting_cfg_create(true)) { /* return FALSE */
                                        SETTING_TRACE_ERROR("Error to create a new config file");
                                        return Cfg_Error_Type_CreateCfg_Failed;
                                }
-                               if(!setting_cfg_file_read() ) { // return FALSE
+
+                               if (!setting_cfg_file_read()) { /* return FALSE */
+                                       SETTING_TRACE_ERROR("Error to read config file");
                                        if (remove(CFG_FILE_PATH)) {
                                                return Cfg_Error_Type_RemoveCfg_Failed;
                                        }
@@ -402,7 +568,7 @@ int setting_cfg_init( void )
                                }
 
                                return Cfg_Error_Type_Sucess;
-                       // other cases
+                               /* other cases */
                        case EACCES:
                        case EROFS:
                        default:
@@ -411,136 +577,261 @@ int setting_cfg_init( void )
        }
 }
 
-void setting_cfg_exit( void )
+EXPORT_PUBLIC
+void setting_cfg_exit(void)
 {
-       json_node_free(root);
-       g_object_unref (parser);
+       g_object_unref(parser);
 }
 
-int setting_cfg_file_update( void )
+EXPORT_PUBLIC
+int setting_cfg_file_update(void)
 {
-       if (access( CFG_FILE_PATH, W_OK|F_OK ) !=0 )
-       {
+       if (access(CFG_FILE_PATH, W_OK | F_OK) != 0) {
+               return FALSE;
+       }
+       return setting_cfg_file_write(root);
+}
+
+static void _update_nodes_table_by_uuid(char *uuid, int click_times, int last_clicked)
+{
+       int size = get_cfg_array_size();
+
+       int i;
+       for (i = 0; i < size; i++) {
+               if (0 == safeStrCmp(uuid, (s_cfg_node_array[i].uuid))) {
+                       s_cfg_node_array[i].click_times = click_times;
+                       s_cfg_node_array[i].last_clicked = last_clicked;
+                       return;
+               }
+       }
+}
+
+EXPORT_PUBLIC
+int setting_cfg_migrate(void)
+{
+       /*1. read old cfg file */
+       struct stat sb;
+       memset(&sb, 0, sizeof(struct stat));
+       int r = stat(CFG_FILE_PATH, &sb);
+       if (0 != r) {
+               SETTING_TRACE("ERROR, r:%d", r);
+       }
+       SETTING_TRACE("sb.st_size:%d", sb.st_size);
+
+       parser = json_parser_new();
+       GError *error = NULL;
+       if (!sb.st_size || FALSE == json_parser_load_from_file(parser, CFG_FILE_PATH, &error)) {
+               if (error)
+                       SETTING_TRACE_ERROR("error->message:%s", (char *)(error->message));
+
+               /*if read old cfg file unseccessfully, remove it */
+               SETTING_TRACE("Read old cfg fail, Trying to remove it");
+               if (remove(CFG_FILE_PATH) != 0) {
+                       SETTING_TRACE_ERROR("Error to remove the damaged file");
+               }
+               /*re-create cfg file */
+               SETTING_TRACE("Trying to re-create cfg file.");
+               if (FALSE == setting_cfg_create(true)) {
+                       SETTING_TRACE_ERROR("Error to create a new config file");
+               }
+               g_object_unref(parser);
+               return FALSE;
+       }
+       root = json_parser_get_root(parser);
+
+       /*2. update click_times & last_clicked in s_cfg_node_array with old cfg */
+       int i, j, click_times, last_clicked;
+       JsonObject *category_obj;
+       JsonArray *menu;
+       JsonObject *menu_item;
+       char *uuid;
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       category_obj = json_array_get_object_element(json_node_get_array(root), i);
+                       menu = json_object_get_array_member(category_obj, "menu");
+                       menu_item = json_array_get_object_element(menu, j);
+                       uuid = (char *)json_object_get_string_member(menu_item, "uuid");
+                       click_times =  json_object_get_int_member(menu_item, "click_times");
+                       last_clicked =  json_object_get_int_member(menu_item, "last_clicked");
+                       if (click_times != 0 || last_clicked != 0) {
+                               _update_nodes_table_by_uuid(uuid, click_times, last_clicked);
+                       }
+               }
+       }
+
+       /*3. create new cfg file */
+       if (!setting_cfg_create(true)) {
+               SETTING_TRACE_ERROR("fail to create new cfg file");
+               setting_cfg_exit();
                return FALSE;
        }
-       return setting_cfg_file_write( root );
+
+       setting_cfg_exit();
+       return TRUE;
+}
+
+EXPORT_PUBLIC
+int setting_cfg_get_category_length(void)
+{
+       return json_array_get_length(json_node_get_array(root));
 }
 
-int setting_cfg_get_category_length( void )
+EXPORT_PUBLIC
+char *setting_cfg_get_category_name(int category_index)
 {
-       return json_array_get_length( json_node_get_array( root ) );
+       JsonObject *category_obj = json_array_get_object_element(json_node_get_array(root), category_index);
+       return (char *)json_object_get_string_member(category_obj, "name");
 }
 
-char* setting_cfg_get_category_name( int category_index )
+EXPORT_PUBLIC
+int setting_cfg_get_menu_length(int category_index)
 {
-       JsonObject * category_obj = json_array_get_object_element( json_node_get_array( root ), category_index );
-       return (char*)json_object_get_string_member( category_obj, "name" );
+       JsonObject *category_obj = json_array_get_object_element(json_node_get_array(root), category_index);
+       JsonArray *menu = json_object_get_array_member(category_obj, "menu");
+       return json_array_get_length(menu);
 }
 
-int setting_cfg_get_menu_length( int category_index )
+EXPORT_PUBLIC
+char *setting_cfg_get_keyname_idx(int category_index, int menu_index)
 {
-       JsonObject * category_obj = json_array_get_object_element( json_node_get_array( root ), category_index );
-       JsonArray * menu = json_object_get_array_member( category_obj, "menu" );
-       return json_array_get_length( menu );
+       JsonObject *category_obj = json_array_get_object_element(json_node_get_array(root), category_index);
+       JsonArray *menu = json_object_get_array_member(category_obj, "menu");
+       JsonObject *menu_item = json_array_get_object_element(menu, menu_index);
+       return (char *)json_object_get_string_member(menu_item, "key_name");
 }
 
-char * setting_cfg_get_keyname_idx( int category_index, int menu_index )
+EXPORT_PUBLIC
+int setting_cfg_get_itemtype_idx(int category_index, int menu_index)
 {
-       JsonObject * category_obj = json_array_get_object_element( json_node_get_array( root ), category_index );
-       JsonArray * menu = json_object_get_array_member( category_obj, "menu" );
-       JsonObject * menu_item = json_array_get_object_element( menu, menu_index );
-       return (char*)json_object_get_string_member( menu_item, "key_name" );
+       JsonObject *category_obj = json_array_get_object_element(json_node_get_array(root), category_index);
+       JsonArray *menu = json_object_get_array_member(category_obj, "menu");
+       JsonObject *menu_item = json_array_get_object_element(menu, menu_index);
+       return json_object_get_int_member(menu_item, "item_type");
 }
 
-char * setting_cfg_get_string_field_idx( int category_index, int menu_index, char *field_name)
+EXPORT_PUBLIC
+char *setting_cfg_get_string_field_idx(int category_index, int menu_index, char *field_name)
 {
-       JsonObject * category_obj = json_array_get_object_element( json_node_get_array( root ), category_index );
-       JsonArray * menu = json_object_get_array_member( category_obj, "menu" );
-       JsonObject * menu_item = json_array_get_object_element( menu, menu_index );
+       JsonObject *category_obj = json_array_get_object_element(json_node_get_array(root), category_index);
+       JsonArray *menu = json_object_get_array_member(category_obj, "menu");
+       JsonObject *menu_item = json_array_get_object_element(menu, menu_index);
 
-       char *data = (char *)json_object_get_string_member( menu_item, field_name );
-       if (!safeStrCmp(data, "(null)"))/* pass NULL to ug_args when create setting.cfg. */
-       {
+       char *data = (char *)json_object_get_string_member(menu_item, field_name);
+       if (!safeStrCmp(data, "(null)")) { /* pass NULL to ug_args when create setting.cfg. */
                return NULL;
        }
        return data;
 }
 
-int setting_cfg_get_int_field_idx( int category_index, int menu_index , char *field_name)
+EXPORT_PUBLIC
+int setting_cfg_get_int_field_idx(int category_index, int menu_index , char *field_name)
 {
-       JsonObject * category_obj = json_array_get_object_element( json_node_get_array( root ), category_index );
-       JsonArray * menu = json_object_get_array_member( category_obj, "menu" );
-       JsonObject * menu_item = json_array_get_object_element( menu, menu_index );
-       return json_object_get_int_member( menu_item, field_name );
+       JsonObject *category_obj = json_array_get_object_element(json_node_get_array(root), category_index);
+       JsonArray *menu = json_object_get_array_member(category_obj, "menu");
+       JsonObject *menu_item = json_array_get_object_element(menu, menu_index);
+       return json_object_get_int_member(menu_item, field_name);
 }
 
-char * setting_cfg_get_icon_path_idx( int category_index, int menu_index )
+EXPORT_PUBLIC
+char *setting_cfg_get_icon_path_idx(int category_index, int menu_index)
 {
        return setting_cfg_get_string_field_idx(category_index, menu_index, "icon_path");
 }
 
-char * setting_cfg_get_ug_args_idx( int category_index, int menu_index )
+EXPORT_PUBLIC
+char *setting_cfg_get_shortcut_appid_idx(int category_index, int menu_index)
+{
+       return setting_cfg_get_string_field_idx(category_index, menu_index, "shortcut_appid");
+}
+
+EXPORT_PUBLIC
+char *setting_cfg_get_icon_path(char *keyname)
+{
+       int i, j;
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0)
+                               return setting_cfg_get_icon_path_idx(i, j);
+               }
+       }
+       return NULL;
+}
+
+EXPORT_PUBLIC
+char *setting_cfg_get_ug_args_idx(int category_index, int menu_index)
 {
        return setting_cfg_get_string_field_idx(category_index, menu_index, "ug_args");
 }
 
-char * setting_cfg_get_ugpath_idx( int category_index, int menu_index )
+EXPORT_PUBLIC
+char *setting_cfg_get_ug_args(char *keyname)
+{
+       int i, j;
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0)
+                               return setting_cfg_get_ug_args_idx(i, j);
+               }
+       }
+       return NULL;
+}
+
+EXPORT_PUBLIC
+char *setting_cfg_get_ugpath_idx(int category_index, int menu_index)
 {
        return setting_cfg_get_string_field_idx(category_index, menu_index, "ug_path");
 }
 
-char * setting_cfg_get_ugpath( char * keyname )
+EXPORT_PUBLIC
+char *setting_cfg_get_ugpath(char *keyname)
 {
        int i, j;
-       for( i = 0; i < setting_cfg_get_category_length(); i++ )
-       {
-               for( j = 0; j < setting_cfg_get_menu_length( i ); j++ )
-               {
-                       if( safeStrCmp( setting_cfg_get_keyname_idx( i, j ), keyname ) == 0 )
-                               return setting_cfg_get_ugpath_idx( i, j );
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0)
+                               return setting_cfg_get_ugpath_idx(i, j);
                }
        }
        return NULL;
 }
 
-int setting_cfg_get_pos_idx( int category_index, int menu_index )
+EXPORT_PUBLIC
+int setting_cfg_get_pos_idx(int category_index, int menu_index)
 {
        return setting_cfg_get_int_field_idx(category_index, menu_index, "pos");
 }
 
-int setting_cfg_get_pos( char * keyname )
+EXPORT_PUBLIC
+int setting_cfg_get_pos(char *keyname)
 {
        int i, j;
-       for( i = 0; i < setting_cfg_get_category_length(); i++ )
-       {
-               for( j = 0; j < setting_cfg_get_menu_length( i ); j++ )
-               {
-                       if( safeStrCmp( setting_cfg_get_keyname_idx( i, j ), keyname ) == 0 )
-                               return setting_cfg_get_pos_idx( i, j );
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0)
+                               return setting_cfg_get_pos_idx(i, j);
                }
        }
        return 0;
 }
 
-void setting_cfg_set_pos_idx( int category_index, int menu_index, int pos )
+EXPORT_PUBLIC
+void setting_cfg_set_pos_idx(int category_index, int menu_index, int pos)
 {
-       JsonObject * category_obj = json_array_get_object_element( json_node_get_array( root ), category_index );
-       JsonArray * menu = json_object_get_array_member( category_obj, "menu" );
-       JsonObject * menu_item = json_array_get_object_element( menu, menu_index );
-       json_object_remove_member( menu_item, "pos" );
-       json_object_set_int_member( menu_item, "pos", pos );
+       JsonObject *category_obj = json_array_get_object_element(json_node_get_array(root), category_index);
+       JsonArray *menu = json_object_get_array_member(category_obj, "menu");
+       JsonObject *menu_item = json_array_get_object_element(menu, menu_index);
+       json_object_remove_member(menu_item, "pos");
+       json_object_set_int_member(menu_item, "pos", pos);
 }
 
-void setting_cfg_set_pos( char * keyname, int pos )
+EXPORT_PUBLIC
+void setting_cfg_set_pos(char *keyname, int pos)
 {
        int i, j;
-       for( i = 0; i < setting_cfg_get_category_length(); i++ )
-       {
-               for( j = 0; j < setting_cfg_get_menu_length( i ); j++ )
-               {
-                       if( safeStrCmp( setting_cfg_get_keyname_idx( i, j ), keyname ) == 0 )
-                       {
-                               setting_cfg_set_pos_idx( i, j, pos );
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0) {
+                               setting_cfg_set_pos_idx(i, j, pos);
                                return ;
                        }
                }
@@ -548,44 +839,89 @@ void setting_cfg_set_pos( char * keyname, int pos )
 
 }
 
-int setting_cfg_get_click_times_idx( int category_index, int menu_index )
+EXPORT_PUBLIC
+int setting_cfg_get_last_clicked_idx(int category_index, int menu_index)
+{
+       return setting_cfg_get_int_field_idx(category_index, menu_index, "last_clicked");
+}
+
+EXPORT_PUBLIC
+int setting_cfg_get_last_clicked(char *keyname)
+{
+       int i, j;
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0)
+                               return setting_cfg_get_last_clicked_idx(i, j);
+               }
+       }
+       return 0;
+}
+
+EXPORT_PUBLIC
+void setting_cfg_set_last_clicked_idx(int category_index, int menu_index, int last_clicked)
+{
+       JsonObject *category_obj = json_array_get_object_element(json_node_get_array(root), category_index);
+       JsonArray *menu = json_object_get_array_member(category_obj, "menu");
+       JsonObject *menu_item = json_array_get_object_element(menu, menu_index);
+       json_object_remove_member(menu_item, "last_clicked");
+       json_object_set_int_member(menu_item, "last_clicked", last_clicked);
+}
+
+EXPORT_PUBLIC
+void setting_cfg_set_last_clicked(char *keyname, int last_clicked)
+{
+       int i, j;
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0) {
+                               setting_cfg_set_last_clicked_idx(i, j, last_clicked);
+                               return ;
+                       }
+               }
+       }
+
+}
+
+EXPORT_PUBLIC
+int setting_cfg_get_click_times_idx(int category_index, int menu_index)
 {
        return setting_cfg_get_int_field_idx(category_index, menu_index, "click_times");
 }
 
-int setting_cfg_get_click_times( char * keyname )
+EXPORT_PUBLIC
+int setting_cfg_get_click_times(char *keyname)
 {
        int i, j;
-       for( i = 0; i < setting_cfg_get_category_length(); i++ )
-       {
-               for( j = 0; j < setting_cfg_get_menu_length( i ); j++ )
-               {
-                       if( safeStrCmp( setting_cfg_get_keyname_idx( i, j ), keyname ) == 0 )
-                               return setting_cfg_get_click_times_idx( i, j );
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0)
+                               return setting_cfg_get_click_times_idx(i, j);
                }
        }
        return 0;
 }
 
-void setting_cfg_set_click_times_idx( int category_index, int menu_index, int click_times )
+EXPORT_PUBLIC
+void setting_cfg_set_click_times_idx(int category_index, int menu_index, int click_times)
 {
-       JsonObject * category_obj = json_array_get_object_element( json_node_get_array( root ), category_index );
-       JsonArray * menu = json_object_get_array_member( category_obj, "menu" );
-       JsonObject * menu_item = json_array_get_object_element( menu, menu_index );
-       json_object_remove_member( menu_item, "click_times" );
-       json_object_set_int_member( menu_item, "click_times", click_times );
+       JsonObject *category_obj = json_array_get_object_element(json_node_get_array(root), category_index);
+       JsonArray *menu = json_object_get_array_member(category_obj, "menu");
+       JsonObject *menu_item = json_array_get_object_element(menu, menu_index);
+       json_object_remove_member(menu_item, "click_times");
+       json_object_set_int_member(menu_item, "click_times", click_times);
 }
 
-void setting_cfg_set_click_times( char * keyname, int click_times )
+EXPORT_PUBLIC
+void setting_cfg_set_click_times(char *keyname, int click_times)
 {
        int i, j;
-       for( i = 0; i < setting_cfg_get_category_length(); i++ )
-       {
-               for( j = 0; j < setting_cfg_get_menu_length( i ); j++ )
-               {
-                       if( safeStrCmp( setting_cfg_get_keyname_idx( i, j ), keyname ) == 0 )
-                       {
-                               setting_cfg_set_click_times_idx( i, j, click_times );
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                       if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0) {
+                               setting_cfg_set_click_times_idx(i, j, click_times);
+                               time_t ctime = time(NULL);
+                               setting_cfg_set_last_clicked_idx(i, j, (int)ctime);
                                return ;
                        }
                }
@@ -593,55 +929,51 @@ void setting_cfg_set_click_times( char * keyname, int click_times )
 
 }
 
+EXPORT_PUBLIC
 int setting_cfg_get_resetable_flag_idx(int category_index, int menu_index)
 {
        return setting_cfg_get_int_field_idx(category_index, menu_index,
-                                            "is_resetable");
+                                            "is_resetable");
 }
 
-void setting_cfg_add_downloaded_app( char *keyname, char *icon_path, char *ug_args, int pos)
+EXPORT_PUBLIC
+void setting_cfg_add_downloaded_app(char *keyname, char *icon_path, char *ug_args, int pos)
 {
        int i;
        JsonNode *menu_item;
        JsonObject *object;
        JsonArray *menu;
 
-       for( i=0; i<setting_cfg_get_category_length(); i++ )
-       {
-               if( safeStrCmp( setting_cfg_get_category_name(i), "Downloaded App" ) == 0 )
-               {
-                       menu_item = json_node_new( JSON_NODE_OBJECT );
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               if (safeStrCmp(setting_cfg_get_category_name(i), "Downloaded App") == 0) {
+                       menu_item = json_node_new(JSON_NODE_OBJECT);
                        object = json_object_new();
-                       json_node_take_object ( menu_item, object );
-                       json_object_set_string_member( object, "key_name", keyname );
-                       json_object_set_string_member( object, "icon_path", icon_path );
-                       json_object_set_string_member( object, "ug_args", ug_args );
-                       json_object_set_int_member( object, "pos", pos );
-
-                       object = json_array_get_object_element( json_node_get_array( root ), i );
-                       menu = json_object_get_array_member( object, "menu" );
-                       json_array_add_element( menu, menu_item );
+                       json_node_take_object(menu_item, object);
+                       json_object_set_string_member(object, "key_name", keyname);
+                       json_object_set_string_member(object, "icon_path", icon_path);
+                       json_object_set_string_member(object, "ug_args", ug_args);
+                       json_object_set_int_member(object, "pos", pos);
+
+                       object = json_array_get_object_element(json_node_get_array(root), i);
+                       menu = json_object_get_array_member(object, "menu");
+                       json_array_add_element(menu, menu_item);
                }
        }
 }
 
-void setting_cfg_remove_downloaded_app( char * keyname )
+void setting_cfg_remove_downloaded_app(char *keyname)
 {
        int i, j;
        JsonObject *object;
        JsonArray *menu;
 
-       for( i = 0; i < setting_cfg_get_category_length(); i++ )
-       {
-               if( safeStrCmp( setting_cfg_get_category_name(i), "Downloaded App" ) == 0 )
-               {
-                       for( j = 0; j < setting_cfg_get_menu_length( i ); j++ )
-                       {
-                               if( safeStrCmp( setting_cfg_get_keyname_idx( i, j ), keyname ) == 0 )
-                               {
-                                       object = json_array_get_object_element( json_node_get_array( root ), i );
-                                       menu = json_object_get_array_member( object, "menu" );
-                                       json_array_remove_element( menu, j );
+       for (i = 0; i < setting_cfg_get_category_length(); i++) {
+               if (safeStrCmp(setting_cfg_get_category_name(i), "Downloaded App") == 0) {
+                       for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
+                               if (safeStrCmp(setting_cfg_get_keyname_idx(i, j), keyname) == 0) {
+                                       object = json_array_get_object_element(json_node_get_array(root), i);
+                                       menu = json_object_get_array_member(object, "menu");
+                                       json_array_remove_element(menu, j);
                                        return ;
                                }
                        }
@@ -649,63 +981,20 @@ void setting_cfg_remove_downloaded_app( char * keyname )
        }
 }
 
+EXPORT_PUBLIC
 bool is_ug_installed_by_ug_args(void *data)
 {
-       retv_if(!data, TRUE);//if passing NULL,drawing it
-       char* ug_args = data;
-       char *ug_name = get_ug_path_from_ug_args(ug_args);
-
-       bool is_installed_in_usr = false;
-       bool is_installed_in_opt = false;
-
-       //1.first do exist-checking in /usr/ug/lib
-       char ug_file[PATH_MAX + 1];
-       snprintf(ug_file, PATH_MAX, "%s/libug-%s.so", SETTING_UG_PATH, ug_name);
-       struct stat st;
-       if(stat(ug_file, &st) != 0) {
-
-               //2.if it does not exit in /usr/ug/lib, then do exist-checking in /usr/ug/lib
-               memset(ug_file, 0x00, PATH_MAX + 1);
-               snprintf(ug_file, PATH_MAX, "%s/libug-%s.so", SETTING_UG_PATH_USR, ug_name);
-               if(stat(ug_file, &st) != 0) {
-                       //both not exist,skip it
-                       SETTING_TRACE_ERROR(" libug-%s.so is *NOT* present, so skip it..\n", ug_name);
-                       //return FALSE;
-                       is_installed_in_usr = false;
-               } else {
-                       is_installed_in_usr = true;
-               }
-       } else {
-               is_installed_in_usr = true;
-       }
-
-       //2.first do exist-checking in /opt/ug/lib
-       //char ug_file[PATH_MAX + 1];
-       memset(ug_file, 0x00, PATH_MAX + 1);
-       snprintf(ug_file, PATH_MAX, "%s/libug-%s.so", SETTING_UG_PATH_OPT, ug_name);
-       //struct stat st;
-       if(stat(ug_file, &st) != 0) {
-
-               //2.if it does not exit in /usr/ug/lib, then do exist-checking in /usr/ug/lib
-               memset(ug_file, 0x00, PATH_MAX + 1);
-               snprintf(ug_file, PATH_MAX, "%s/libug-%s.so", SETTING_UG_PATH_USR_OPT, ug_name);
-               if(stat(ug_file, &st) != 0) {
-                       //both not exist,skip it
-                       SETTING_TRACE_ERROR(" libug-%s.so is *NOT* present, so skip it..\n", ug_name);
-                       //return FALSE;
-                       is_installed_in_opt = false;
-               } else {
-                       is_installed_in_opt = true;
-               }
-       } else {
-               is_installed_in_opt = true;
-       }
+       retv_if(!data, TRUE);/*if passing NULL,drawing it */
+       char *ug_args = data;
+       char *path = get_ug_path_from_ug_args(ug_args);
+       int is_installed = ug_is_installed(path);
 
-       FREE(ug_name);
-       return (is_installed_in_usr || is_installed_in_opt);
+       FREE(path);
+       return is_installed;
 }
 
 /*other relative function*/
+EXPORT_PUBLIC
 char *get_ug_path_from_ug_args(void *data)
 {
        /*SETTING_TRACE_BEGIN;*/
@@ -733,7 +1022,8 @@ char *get_ug_path_from_ug_args(void *data)
        return path;
 }
 
-service_h get_bundle_from_ug_args(void *data)
+EXPORT_PUBLIC
+app_control_h get_bundle_from_ug_args(void *data)
 {
        /*SETTING_TRACE_BEGIN;*/
        char *p = (char *)data;
@@ -742,21 +1032,21 @@ service_h get_bundle_from_ug_args(void *data)
        }
        char *m = NULL;
        char *q = strchr(p, '|');
-       if (q) {                /* (key, value) pairs exit. eg: ug_args = "sevenemail-setting-efl|caller:setting; cmd:main option" */
+       if (q) {/* (key, value) pairs exit. eg: ug_args = "sevenemail-setting-efl|caller:setting; cmd:main option" */
                /* alloc data */
-               service_h svc;
-               if (service_create(&svc))
+               app_control_h svc;
+               if (app_control_create(&svc))
                        return NULL;
                int str_len = safeStrLen(p) + 1;
                char *v_key = (char *)calloc(1, str_len);
                if (!v_key) {
-                       service_destroy(svc);
+                       app_control_destroy(svc);
                        return NULL;
                }
 
                char *v_value = (char *)calloc(1, str_len);
                if (!v_value) {
-                       service_destroy(svc);
+                       app_control_destroy(svc);
                        FREE(v_key);
                        return NULL;
                }
@@ -772,12 +1062,12 @@ service_h get_bundle_from_ug_args(void *data)
                                        ++m;
                                        safeCopyStr(v_value, m, q - m);
                                        SETTING_TRACE
-                                           ("To add ('%s', '%s') to bundle data",
-                                            v_key, v_value);
-                                       service_add_extra_data(svc, v_key, v_value);
+                                       ("To add ('%s', '%s') to bundle data",
+                                        v_key, v_value);
+                                       app_control_add_extra_data(svc, v_key, v_value);
                                } else {
                                        SETTING_TRACE_ERROR
-                                           ("invalid key-value format!!\n");
+                                       ("invalid key-value format!!\n");
                                        break;  /* end the whole while */
                                }
                        } else {        /* the last field */
@@ -788,10 +1078,10 @@ service_h get_bundle_from_ug_args(void *data)
                                        ++m;
                                        safeCopyStr(v_value, m, safeStrLen(m));
 
-                                       service_add_extra_data(svc, v_key, v_value);
+                                       app_control_add_extra_data(svc, v_key, v_value);
                                } else {
                                        SETTING_TRACE_ERROR
-                                           ("invalid key-value format!!\n");
+                                       ("invalid key-value format!!\n");
                                }
                                break;  /* end the whole while */
                        }
@@ -812,3 +1102,316 @@ service_h get_bundle_from_ug_args(void *data)
 
 }
 
+EXPORT_PUBLIC void setting_cfg_dump_basic_info()
+{
+#if 1
+       bool fileExit = (0 == access(CFG_FILE_PATH, R_OK | W_OK | F_OK));
+       SETTING_TRACE("%s's exist:%d", CFG_FILE_PATH, fileExit);
+
+       struct stat sb;
+       memset(&sb, 0, sizeof(struct stat));
+       int r = stat(CFG_FILE_PATH, &sb);
+       if (0 != r) {
+               SETTING_TRACE("ERROR, r:%d", r);
+       }
+       SETTING_TRACE("sb.st_size:%d", sb.st_size);
+#endif
+}
+
+
+/**
+* @brief helper function for search
+*
+* @param key_name
+* @param url
+* @param icon_path
+* @param item_type
+* @param data
+*
+* @return
+*/
+EXPORT_PUBLIC Setting_Cfg_Node_T *setting_plugin_search_item_add(char *key_name, char *url, char *icon_path, int item_type, void *data)
+{
+       Setting_Cfg_Node_T *node = calloc(1, sizeof(Setting_Cfg_Node_T));
+       setting_retvm_if(NULL == node, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "node is NULL");
+       if (key_name)   node->key_name = strdup(key_name);
+       if (url)                node->ug_args = strdup(url);
+       if (icon_path)  node->icon_path = strdup(icon_path);
+       node->pos = 0;
+       node->reset_type = 0;
+       node->click_times = 0;
+       node->item_type = item_type;
+       node->data = data;
+       node->sub_index = NULL;
+       node->tfunc = NULL;
+       return node;
+}
+
+EXPORT_PUBLIC Setting_Cfg_Node_T *setting_plugin_search_item_subindex_add(char *key_name, char *url, char *icon_path, int item_type, void *data, char *sub_index)
+{
+       Setting_Cfg_Node_T *node = calloc(1, sizeof(Setting_Cfg_Node_T));
+       setting_retvm_if(NULL == node, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "node is NULL");
+       if (key_name)   node->key_name = strdup(key_name);
+       if (url)                node->ug_args = strdup(url);
+       if (icon_path)  node->icon_path = strdup(icon_path);
+       node->pos = 0;
+       node->reset_type = 0;
+       node->click_times = 0;
+       node->item_type = item_type;
+       node->data = data;
+       if (sub_index) node->sub_index = strdup(sub_index);
+       node->tfunc = NULL;
+       return node;
+}
+
+EXPORT_PUBLIC Cfg_Item_Type setting_search_type(char *type)
+{
+       Cfg_Item_Type ret_code = Cfg_Item_Node_Error;
+       if (type) {
+               if (!safeStrCmp(type, SEARCH_TYPE_ERROR))
+                       ret_code = Cfg_Item_Node_Error;
+               else if (!safeStrCmp(type, SEARCH_TYPE_UG_NODE))
+                       ret_code = Cfg_Item_Ug_Node;
+               else if (!safeStrCmp(type, SEARCH_TYPE_UI_NODE))
+                       ret_code = Cfg_Item_Ui_Node;
+               else if (!safeStrCmp(type, SEARCH_TYPE_TITLE_NODE))
+                       ret_code = Cfg_Item_Title_Node;
+               else if (!safeStrCmp(type, SEARCH_TYPE_APP_NODE))
+                       ret_code = Cfg_Item_App_Node;
+               else if (!safeStrCmp(type, SEARCH_TYPE_VIEW_NODE))
+                       ret_code = Cfg_Item_View_Node;
+               else if (!safeStrCmp(type, SEARCH_TYPE_APPLAUNCHER_NODE))
+                       ret_code = Cfg_Item_AppLauncher_Node;
+               else if (!safeStrCmp(type, SEARCH_TYPE_APPLAUNCHER_VIEW_NODE))
+                       ret_code = Cfg_Item_AppLauncher_View_Node;
+               else if (!safeStrCmp(type, SEARCH_TYPE_UG_NODE_TOGGLE))
+                       ret_code = Cfg_Item_Ug_Node_Toggle;
+               else if (!safeStrCmp(type, SEARCH_TYPE_UI_NODE_TOGGLE))
+                       ret_code = Cfg_Item_Ui_Node_Toggle;
+               else if (!safeStrCmp(type, SEARCH_TYPE_APPLAUNCHER_NODE_TOGGLE))
+                       ret_code = Cfg_Item_AppLauncher_Node_Toggle;
+               else if (!safeStrCmp(type, SEARCH_TYPE_VIEW_NODE_TOGGLE))
+                       ret_code = Cfg_Item_View_Node_Toggle;
+       }
+
+       return ret_code;
+}
+
+/*////////////////////////////////////////////////////////////////////////// */
+/*
+ * @return 0 on success, -1 on error
+ */
+EXPORT_PUBLIC
+int wifi_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err;
+       int value = -1;
+       setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
+
+       if (value == VCONFKEY_WIFI_OFF)
+               *stat = Cfg_Item_Off;
+       else
+               *stat = Cfg_Item_On;
+
+       return err;
+}
+
+EXPORT_PUBLIC
+int flightmode_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err;
+       int value = -1;
+       setting_get_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE, &value, &err);
+
+       if (value == 1)
+               *stat = Cfg_Item_On;
+       else
+               *stat = Cfg_Item_Off;
+
+       return err;
+}
+
+
+EXPORT_PUBLIC
+int bluetooth_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err;
+       int value = -1;
+       setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
+
+       if (value == 1)
+               *stat = Cfg_Item_On;
+       else
+               *stat = Cfg_Item_Off;
+
+       return err;
+}
+
+#if SUPPORT_BLOCKINGMODE
+EXPORT_PUBLIC
+int blockingmode_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err = 0;
+       *stat = Cfg_Item_Off;
+
+       int value;
+       int ret = vconf_get_bool(VCONFKEY_SETAPPL_BLOCKINGMODE_BLOCKINGMODE, &value);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("get vconf failed");
+               *stat = Cfg_Item_Error;
+               return -1;
+       }
+
+       *stat = (value) ? Cfg_Item_On : Cfg_Item_Off;
+       return err;
+}
+#endif
+
+EXPORT_PUBLIC
+int drivingmode_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err = 0;
+       *stat = Cfg_Item_Off;
+
+       int value;
+       int ret = vconf_get_bool(VCONFKEY_SETAPPL_DM_DRIVING_MODE, &value);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("get vconf failed");
+               *stat = Cfg_Item_Error;
+               return -1;
+       }
+
+       *stat = (value) ? Cfg_Item_On : Cfg_Item_Off;
+       return err;
+}
+
+EXPORT_PUBLIC
+int glove_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int value = -1;
+       int ret = vconf_get_bool(VCONFKEY_SETAPPL_ENHANCED_TOUCH, &value);
+       if (value == 1)
+               *stat = Cfg_Item_On;
+       else
+               *stat = Cfg_Item_Off;
+
+       return ret;
+}
+
+EXPORT_PUBLIC
+int network_restriction_mode_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err;
+       int value = -1;
+       setting_get_bool_slp_key(BOOL_SLP_SETTING_NET_RESTRICTION_MODE, &value, &err);
+
+       if (value == 1)
+               *stat = Cfg_Item_On;
+       else
+               *stat = Cfg_Item_Off;
+
+       return err;
+}
+
+/*////////////////////////////////////////////////////////////////////////// */
+/* personal mode */
+
+EXPORT_PUBLIC
+int personalmode_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err = 0;
+       *stat = Cfg_Item_Off;
+
+       int value;
+       int ret = vconf_get_bool(VCONFKEY_SETAPPL_PERSONAL_MODE_STATUS_BOOL, &value);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("get vconf failed");
+               *stat = Cfg_Item_Error;
+               return -1;
+       }
+
+       *stat = (value) ? Cfg_Item_On : Cfg_Item_Off;
+       return err;
+}
+
+/*////////////////////////////////////////////////////////////////////////// */
+/* NFC */
+
+EXPORT_PUBLIC
+int nfc_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err;
+       int value = -1;
+       setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
+
+       if (value == 1)
+               *stat = Cfg_Item_On;
+       else
+               *stat = Cfg_Item_Off;
+
+       return err;
+}
+
+EXPORT_PUBLIC
+int sbeam_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err;
+       int value = -1;
+       setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_SBEAM, &value, &err);
+
+       if (value == 1)
+               *stat = Cfg_Item_On;
+       else
+               *stat = Cfg_Item_Off;
+
+       return err;
+
+}
+
+EXPORT_PUBLIC
+int multiwindow_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int err = 0;
+       *stat = Cfg_Item_Off;
+
+       int value;
+       int ret = vconf_get_bool(VCONFKEY_QUICKSETTING_MULTIWINDOW_ENABLED, &value);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("get vconf failed");
+               *stat = Cfg_Item_Error;
+               return -1;
+       }
+
+       *stat = (value) ? Cfg_Item_On : Cfg_Item_Off;
+       return err;
+}
+
+
+EXPORT_PUBLIC
+int nearbydevice_toggle_get_state(Cfg_Item_State *stat, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       int ret = -1;
+       int value = 0;
+
+       ret = vconf_get_int(VCONFKEY_ALLSHARE_STATUS, &value);
+
+       if (value == 1)
+               *stat = Cfg_Item_On;
+       else
+               *stat = Cfg_Item_Off;
+
+
+       return ret;
+}