Universal-switch settings 75/145775/19
authorPawel Kurowski <p.kurowski2@samsung.com>
Wed, 23 Aug 2017 17:34:48 +0000 (19:34 +0200)
committerPawel Kurowski <p.kurowski2@samsung.com>
Mon, 18 Sep 2017 10:25:46 +0000 (12:25 +0200)
Updating any switch.
Managing accessories (add/delete/update/check if already exist)
Disabling mapped switches.
Now saving options (including switch management) can be done, by selecting desired option, rather than on click of virtual back button.
UI Corrections according to the guide
This patch is a continuation of https://review.tizen.org/gerrit/#/c/143128/

Change-Id: If38bfc57bcd75a934622d6640cef9eef53bb10dc

22 files changed:
resource/accessibility-settings-set-value.edc
resource/icons/plus.png
resource/po/en_US.po
setting-accessibility/include/setting-accessibility-universal-switch-add-switch.h
setting-accessibility/include/setting-accessibility-universal-switch-dbus.h
setting-accessibility/include/setting-accessibility-universal-switch-remove-switch.h
setting-accessibility/include/setting-accessibility-universal-switch-settings-set-value.h
setting-accessibility/include/setting-accessibility-universal-switch-settings.h
setting-accessibility/include/setting-accessibility-universal-switch-switches.h
setting-accessibility/include/setting-accessibility-universal-switch-update-switch.h [new file with mode: 0644]
setting-accessibility/include/setting-accessibility.h
setting-accessibility/src/setting-accessibility-universal-switch-action.c
setting-accessibility/src/setting-accessibility-universal-switch-add-switch-accessories.c
setting-accessibility/src/setting-accessibility-universal-switch-add-switch-camera.c
setting-accessibility/src/setting-accessibility-universal-switch-add-switch.c
setting-accessibility/src/setting-accessibility-universal-switch-dbus.c
setting-accessibility/src/setting-accessibility-universal-switch-remove-switch.c
setting-accessibility/src/setting-accessibility-universal-switch-settings-set-value.c
setting-accessibility/src/setting-accessibility-universal-switch-settings.c
setting-accessibility/src/setting-accessibility-universal-switch-switches.c
setting-accessibility/src/setting-accessibility-universal-switch-update-switch.c [new file with mode: 0644]
setting-accessibility/src/setting-accessibility-universal-switch.c

index d1bd86fb903bb2e936f18b341ddbe467e2f4edd6..0ef664e6f0b20e565f9eeb9fa3aea33088379b4f 100644 (file)
@@ -33,6 +33,7 @@
 #define GRP_SET_VALUE_RADIOS "set-value-radios"
 #define GRP_SET_VALUE_SWITCHES "set-value-switches"
 #define GRP_SET_VALUE_LIST_SWITCH "set-value-list-switch"
+#define GRP_SET_VALUE_UPDATE_ACCESSORIES_SWITCH "set-value-update-accessories-switch"
 #define PRT_SET_VALUE_BG "set-value-bg"
 #define PRT_SET_VALUE_SWITCH_BG "set-value-switch-bg"
 #define PRT_SET_VALUE_SWITCH "set-value-switch"
@@ -46,6 +47,7 @@
 #define PRT_SET_VALUE_RANGE "set-value-range"
 #define PRT_SET_VALUE_DESC "set-value-desc"
 #define PRT_SET_VALUE_LIST "set-value-list"
+#define PRT_SET_VALUE_ENTRY "set-value-entry"
 
 styles {
        style {
@@ -542,4 +544,57 @@ collections {
                        }
                }
        }
+
+       group {
+               name: GRP_SET_VALUE_UPDATE_ACCESSORIES_SWITCH;
+               parts {
+                       part {
+                               name: PRT_SET_VALUE_BG;
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       color: 255 255 255 255;
+                               }
+                       }
+
+                       part {
+                               name: PRT_SET_VALUE_DESC;
+                               type: TEXTBLOCK;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.offset: 40 5;
+                                       rel1.to: PRT_SET_VALUE_BG;
+                                       text.style: TXT_STYLE_DESC;
+                                       text.align: 0.0 0.0;
+                               }
+                       }
+
+                       part {
+                               name: PRT_SET_VALUE_ENTRY;
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.offset: 40 150;
+                                       rel1.to_x: PRT_SET_VALUE_BG;
+                                       rel2.relative: 1.0 0.0;
+                                       rel2.to: PRT_SET_VALUE_BG;
+                               }
+                       }
+
+                       part {
+                               name: PRT_SET_VALUE_LIST;
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1.relative: 0.0 1.0;
+                                       rel1.to_x: PRT_SET_VALUE_BG;
+                                       rel1.to_y: PRT_SET_VALUE_ENTRY;
+                                       rel2.relative: 1.0 1.0;
+                                       rel2.to: PRT_SET_VALUE_BG;
+                               }
+                       }
+               }
+       }
 }
\ No newline at end of file
index 54fbab100cdaa5858e0442185f3bc3a41493cd98..0407f0666cd1c85465191c71235d3124fe5aa086 100644 (file)
Binary files a/resource/icons/plus.png and b/resource/icons/plus.png differ
index b8d7b84a153fc697eaf6b877aac750facf713116..c3c154299a65a0f2581b876faaae4410a1a439ac 100755 (executable)
@@ -2733,4 +2733,3 @@ msgstr "Secure erase"
 
 msgid "IDS_ST_SBODY_ERASE_ALL_DELETED_DATA_ON_THE_PHONE_PERMANENTLY_FOR_SECURITY_PURPOSES_THIS_DATA_WILL_NOT_BE_RECOVERABLE_BY_ANYONE"
 msgstr "Erase all deleted data on the phone permanently for security purposes. This data will not be recoverable by anyone."
-
index 6296cedc8023e12de1cfdaf033a5fac41a8c008f..4c81d1712bcdb1e406711160919241a79548c9d6 100644 (file)
@@ -5,6 +5,7 @@
 
 void setting_accessibility_universal_switch_add_switch_page_create(SettingAccessibility *ad);
 void setting_accessibility_universal_switch_add_switch_new_switch_callback_attach(SettingAccessibility *ad, universal_switch_added_cb cb);
+void setting_accessibility_universal_switch_disable_already_mapped_switch(Eina_Array *configuration_items, const char *switch_id, Elm_Object_Item *item);
 
 #endif /* SETTINGACCESSIBILITYUNIVERSALSWITCHADDSWITCH_H */
 
index 646d4e42862ccce9812ecf8caf8db1304d737efd..70748f3d688376e9d49831f0b1600b81bb545d6b 100644 (file)
@@ -55,6 +55,7 @@ struct _UniversalSwitchConfigurationItem {
        char *switch_id;
        char *user_name;
        char *activity_type;
+       char *provider_id;
 };
 
 typedef struct _UniversalSwitchConfigurationItem UniversalSwitchConfigurationItem;
index 0a68932bc68ada952edd0ca262efc5f3eff3778e..67e8991bac5aea12ad99d26d9a61abcb19b47ecc 100644 (file)
@@ -4,6 +4,7 @@
 #include "setting-accessibility.h"
 
 void setting_accessibility_universal_switch_remove_switch_page_create(SettingAccessibility *ad);
+void setting_accessibility_universal_switch_use_naviframe_title_as_counter(SettingAccessibility *ad);
 void setting_accessibility_universal_switch_remove_switch_callback_attach(SettingAccessibility *ad, universal_switch_removed_cb cb);
 
 
index f0a566bda5b1ab7a6462d5df22d68efc20e515e7..ccfbba36837d7173a89ff188d4ce721c3d475772 100644 (file)
@@ -12,12 +12,15 @@ void setting_accessibility_universal_switch_settings_set_value_value_set(Setting
 void setting_accessibility_universal_switch_settings_set_value_switch_set(SettingAccessibility *ad, bool state);
 void setting_accessibility_universal_switch_settings_set_value_radio_item_add(SettingAccessibility *ad, const char *caption, int id, bool selected);
 void setting_accessibility_universal_switch_settings_set_value_switch_item_add(SettingAccessibility *ad, const char *caption, int id, bool state);
+void setting_accessibility_universal_switch_settings_set_value_switch_item_with_subtext_add(SettingAccessibility *ad, const char *caption, const char *subtext, int id, bool state);
 Setting_GenGroupItem_Data* setting_accessibility_universal_switch_settings_set_value_radio_list_item_add(SettingAccessibility *ad, const char *main_text, const char *sub_text, int option_id);
 void setting_accessibility_universal_switch_settings_set_value_add_value_change_cb(SettingAccessibility *ad, change_value_cb cb);
 void setting_accessibility_universal_switch_settings_set_value_add_switch_change_cb(SettingAccessibility *ad, change_switch_cb cb);
 void setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(SettingAccessibility *ad, change_radio_item_cb cb);
 void setting_accessibility_universal_switch_settings_set_value_add_switch_item_change_cb(SettingAccessibility *ad, change_switch_item_cb cb);
 void setting_accessibility_universal_switch_settings_set_value_add_list_item_options_request_cb(SettingAccessibility *ad, request_list_item_options_cb cb);
+void setting_accessibility_universal_switch_settings_create_update_accesories_switch_page(SettingAccessibility *ad);
+void setting_accessibility_universal_switch_settings_synchronize_page_with_vconf(keynode_t *node, void *user_data);
 
 #endif /* SETTINGACCESSIBILITYUNIVERSALSWITCHSETTINGSSETVALUE_H */
 
index a4ad7533ed7fb7cc8877d597de94299ebc5188a0..1c6f2407b37617399b22cd627f0f072ecf5a2c78 100644 (file)
@@ -3,7 +3,36 @@
 
 #include "setting-accessibility.h"
 
-void setting_accessibility_universal_switch_settings_page_create(SettingAccessibility *ad);
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_INT "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_INT"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_PT_SPEED "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_PT_SPEED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_STATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_STATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_STATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_STATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_KBD_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_KBD_STATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_VOLUME "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_VOLUME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_RATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_RATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_VOLUME "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_VOLUME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_ACTIONS "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_ACTIONS"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_SETTINGS "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_SETTINGS"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_HOMESCREEN "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_HOMESCREEN"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_KEYS "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_KEYS"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_EDITTEXT "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_EDITTEXT"
+
+void setting_accessibility_universal_switch_settings_page_create(SettingAccessibility *data);
 
 #endif /* SETTINGACCESSIBILITYUNIVERSALSWITCHSETTINGS_H */
 
index 4c0b0efce5eb2c91846e2018961d80efb1ed1a69..f4b4a9f293dadf5c1f0fe61d5266fd52acfae738 100644 (file)
@@ -5,6 +5,7 @@
 
 void setting_accessibility_universal_switch_switches_page_create(SettingAccessibility *ad);
 void setting_accessibility_universal_switch_switches_callback_attach(SettingAccessibility *ad, back_cb callback);
+void setting_accessibility_universal_switch_add_switch_cb(SettingAccessibility *ad, const char *switch_id, switch_action_t switch_action, const char *switch_name);
 
 #endif /* SETTINGACCESSIBILITYUNIVERSALSWITCHSWITCHES_H */
 
diff --git a/setting-accessibility/include/setting-accessibility-universal-switch-update-switch.h b/setting-accessibility/include/setting-accessibility-universal-switch-update-switch.h
new file mode 100644 (file)
index 0000000..9e5aeb0
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef SETTINGACCESSIBILITYUNIVERSALSWITCHUPDATESWITCH_H
+#define SETTINGACCESSIBILITYUNIVERSALSWITCHUPDATESWITCH_H
+
+#include "setting-accessibility.h"
+
+void setting_accessibility_universal_switch_update_switch_page_create(SettingAccessibility *ad, UniversalSwitchConfigurationItem *config_item);
+void setting_accessibility_universal_switch_update_switch_callback_attach(SettingAccessibility *ad, universal_switch_updated_cb cb);
+
+#endif /* SETTINGACCESSIBILITYUNIVERSALSWITCHUPDATESWITCH_H */
+
index 0d7c0614c181164ac4e51e529beb99413a4eca6d..d7b12bde0c9e36e8f779f520ff8d3cc2d6bbca2a 100755 (executable)
@@ -30,6 +30,8 @@
 #include "setting-common-init.h"
 #include "setting-accessibility-universal-switch-dbus.h"
 
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_STATE "db/setting/accessibility/universal-switch"
+
 #define DEVOPTION_STR_ACCESSIBILITY_VISION     "IDS_ST_HEADER_VISION"
 #define DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS_SPEECH \
        "IDS_ST_BODY_SPEECH"
        the opening of your mouth and the blinking of your eyes."
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS "Settings"
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_POPUP_ADD "Add switch"
-#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_POPUP_CANCEL "Cancel"
-#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_POPUP_SAVE "Save"
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_CANCEL "Cancel"
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SAVE "Save"
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_NAME "Name"
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ACTION "Action"
 
-#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS "Settings"
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES "Switches"
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES_ADD_SWITCH "Add switch"
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES_DELETE "DELETE"
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_FEEDBACK_VOICE "Select the volume and speed of voice feedback."
 
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SELECT_ACTION "Select switch action"
-#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ENTER_NAME "Enter switch name."
 
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH "Add switch"
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_DELETE_SWITCHES "Delete switches"
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_DELETE_ALL_SWITCHES_DESC "All switches will be removed. Universal Switch will be disabled."
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_DELETE_SWITCHES_DESC "switches will be removed."
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_OK "Ok"
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_UNABLE_TO_ADD "Unable to add accessory"
+#define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ALREADY_ADDED "This accessory has already been added. Try adding another accessory."
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_NAME "Switch name"
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_SCREEN "Screen"
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_SCREEN_HINT "Tap anywhere on the screen."
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_BLINK_SUB "Close your eyes for at least 2.0 seconds to allow the device to recognise this switch."
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_MOUTH "Open mouth"
 
+#define DEVOPTION_STR_ACCESSIBILITY_SELECT_ITEMS "Select items"
+#define DEVOPTION_STR_ACCESSIBILITY_DELETE     "Delete"
+#define DEVOPTION_STR_ACCESSIBILITY_ALL_CAPS "ALL"
+#define DEVOPTION_STR_ACCESSIBILITY_DELETE_CAPS        "DELETE"
+#define DEVOPTION_STR_ACCESSIBILITY_SETTINGS_CAPS "SETTINGS"
 #define DEVOPTION_STR_ACCESSIBILITY_INDICATOR_TIME     "IDS_ST_HEADER_TIME"
 #define DEVOPTION_STR_ACCESSIBILITY_INDICATOR_BATTERY  "IDS_ST_BODY_BATTERY"
 #define DEVOPTION_STR_ACCESSIBILITY_INDICATOR_BLUETOOTH        "IDS_ST_BODY_BLUETOOTH"
 #define ACCESSIBILITY_UNIVERSAL_SWITCH_ACCESSORIES_SWITCH_PROVIDER "AccessoriesSwitchProvider"
 #define ACCESSIBILITY_UNIVERSAL_SWITCH_CAMERA_SWITCH_PROVIDER "CameraSwitchProvider"
 #define ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN "Screen"
+#define ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN_SWITCH_ID "ScreenSwitchProvider_touch"
 
 #define ACCESSIBILITY_UNIVERSAL_SWITCH_PLUS_ICON SETTING_ICON_PATH "/plus.png"
 
@@ -233,6 +247,10 @@ struct _SettingAccessibility {
        Elm_Genlist_Item_Class itc_1text;
        Evas_Object *popup;
        Evas_Object *entry;
+       Evas_Object *all_checkbox;
+       Evas_Object *remove_switches_page_button;
+       Evas_Object *update_accessories_action_genlist;
+       Elm_Object_Item *save_object_item;
        SetValueLayout set_value_layout;
 
        Setting_GenGroupItem_Data *speech_rate_item;
@@ -249,7 +267,6 @@ struct _SettingAccessibility {
        Setting_GenGroupItem_Data *universal_switch_item;
        Setting_GenGroupItem_Data *universal_switch_off_checkbox;
        Setting_GenGroupItem_Data *universal_switch_comment;
-       Setting_GenGroupItem_Data *universal_switch_settings;
        Setting_GenGroupItem_Data *universal_switch_add_switch_screen;
        Setting_GenGroupItem_Data *universal_switch_add_switch_accessories;
        Setting_GenGroupItem_Data *universal_switch_add_switch_camera;
@@ -278,6 +295,7 @@ struct _SettingAccessibility {
        tts_h tts;
 
        UniversalSwitchDbusConfig config;
+       UniversalSwitchConfigurationItem config_item_to_update;
        char * switch_id;
        bool auto_scan;
        double auto_scan_interval;
@@ -309,6 +327,7 @@ struct _SettingAccessibility {
        universal_switch_removed_cb switch_removed_cb;
        universal_switch_updated_cb switch_updated_cb;
        bool empty_flag;
+       int switches_to_remove_counter;
 };
 
 extern setting_view setting_view_accessibility_main;
index 81a5168497bf6a2624678b6a146df9f1e08b1a27..07278cf519673d2045c88514368998dd870715d0 100644 (file)
@@ -53,17 +53,15 @@ void setting_accessibility_universal_switch_action_page_create(SettingAccessibil
        retm_if(ad == NULL, "Input parameter is NULL");
 
        setting_accessibility_universal_switch_settings_set_value_page_create(ad, VT_RADIOS, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SELECT_ACTION));
+       setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, __action_changed_cb);
 
        Eina_Array_Iterator iterator;
        UniversalSwitchActivityType *activity;
        int i;
        EINA_ARRAY_ITER_NEXT(ad->config.activity_types, i, activity, iterator) {
-               setting_accessibility_universal_switch_settings_set_value_radio_item_add(ad, activity->name, i, /*_action[i].id == ...*/false);
+               setting_accessibility_universal_switch_settings_set_value_radio_item_add(ad, activity->name, i, false);
        }
 
-       elm_radio_value_set(ad->set_value_layout.radio_group, -1);
-       setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, __action_changed_cb);
-
        SETTING_TRACE_END;
 }
 
index e89b5db9259ba1b0bb66d8d18ca9c2e83446b762..d9fbc3703e093ac3f10b19bd6ca6ee1ba8cfd77f 100755 (executable)
 
 static Evas_Object *__create_layout(Evas_Object *parent, const char *edj_file, const char *group);
 static Evas_Object *__create_entry(Evas_Object *parent, const char *part_name);
+static void __capture_switch_cb(void *user_data, const char *switch_id);
 
 static void __back_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Data argument is NULL");
        SettingAccessibility *ad = (SettingAccessibility *)data;
+       elm_naviframe_item_pop(ad->md.naviframe);
+
+       SETTING_TRACE_END;
+}
+
+static Eina_Bool __naviframe_pop_cb(void *data, Elm_Object_Item *it)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(data == NULL, EINA_TRUE);
+       SettingAccessibility *ad = (SettingAccessibility *)data;
 
-       //TODO: should be called whenever exiting frame
        setting_accessibility_universal_switch_dbus_config_cancelCaptureSwitch(&ad->config);
-       if (ad->switch_id) {
-               free(ad->switch_id);
-               ad->switch_id = NULL;
-       }
+       free(ad->switch_id);
+       ad->switch_id = NULL;
 
-       elm_naviframe_item_pop(ad->md.naviframe);
+       SETTING_TRACE_END;
+       return EINA_TRUE;
+}
+
+static Eina_Bool __renew_capture_switch_cb(void *data, Elm_Object_Item *it)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(data == NULL, EINA_TRUE);
+       SettingAccessibility *ad = (SettingAccessibility *)data;
+
+       setting_accessibility_universal_switch_dbus_config_captureSwitch(&ad->config, ACCESSIBILITY_UNIVERSAL_SWITCH_ACCESSORIES_SWITCH_PROVIDER, -1, __capture_switch_cb, ad);
 
        SETTING_TRACE_END;
+       return EINA_TRUE;
 }
 
 static void __accessory_switch_action_cb(SettingAccessibility *ad, switch_action_t action, void *user_data)
@@ -83,14 +102,48 @@ static void __popup_response_cb(void *data, Evas_Object *obj, void *event_info)
                }
 
                setting_accessibility_universal_switch_action_page_create(ad);
+               elm_naviframe_item_pop_cb_set(elm_naviframe_top_item_get(ad->md.naviframe), __renew_capture_switch_cb, ad);
                setting_accessibility_universal_switch_action_callback_attach(ad, __accessory_switch_action_cb, (void *)strdup(switch_name));
+       } else {
+               __renew_capture_switch_cb(ad, NULL);
        }
 
-       if (ad->popup) {
-               evas_object_del(ad->popup);
-               ad->popup = NULL;
-               ad->entry = NULL;
-       }
+       evas_object_del(ad->popup);
+       ad->popup = NULL;
+       ad->entry = NULL;
+
+       SETTING_TRACE_END;
+}
+
+static void __ok_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
+       SettingAccessibility *ad = (SettingAccessibility *)data;
+
+       __renew_capture_switch_cb(ad, NULL);
+
+       evas_object_del(ad->popup);
+       ad->popup = NULL;
+
+       SETTING_TRACE_END;
+}
+
+static void __switch_already_mapped_popup(SettingAccessibility *ad)
+{
+       SETTING_TRACE_BEGIN;
+
+       ad->popup = setting_create_popup(ad, ad->md.naviframe,
+                                                       _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_UNABLE_TO_ADD), NULL,
+                                                       __ok_response_cb, 0,
+                                                       true,
+                                                       true,
+                                                       1, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_OK);
+
+       Evas_Object *layout = __create_layout(ad->popup, EDJ_ACCESSORY_POPUP, GRP_ACCESSORY_POPUP);
+
+       elm_object_part_text_set(layout, PRT_ACCESSORY_POPUP_LABEL, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ALREADY_ADDED);
+       elm_object_content_set(ad->popup, layout);
 
        SETTING_TRACE_END;
 }
@@ -102,16 +155,26 @@ static void __capture_switch_cb(void *user_data, const char *switch_id)
        retm_if(switch_id == NULL, "switch_id is NULL");
        SettingAccessibility *ad = (SettingAccessibility *)user_data;
 
+       Eina_Array_Iterator iterator;
+       UniversalSwitchConfigurationItem *config_item;
+       int i;
+       EINA_ARRAY_ITER_NEXT(ad->config.configuration_items, i, config_item, iterator) {
+               if (strlen(switch_id) == strlen(config_item->switch_id) && strncmp(switch_id, config_item->switch_id, strlen(switch_id)) == 0) {
+                       __switch_already_mapped_popup(ad);
+                       SETTING_TRACE_END;
+                       return;
+               }
+       }
+
        ad->switch_id = strdup(switch_id);
        ad->popup = setting_create_popup(ad, ad->md.naviframe,
                                                        _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH), NULL,
                                                        __popup_response_cb, 0,
                                                        true,
                                                        true,
-                                                       2, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_POPUP_CANCEL, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_POPUP_SAVE);
+                                                       2, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_CANCEL, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SAVE);
 
        Evas_Object *layout = __create_layout(ad->popup, EDJ_ACCESSORY_POPUP, GRP_ACCESSORY_POPUP);
-       elm_object_part_text_set(layout, PRT_ACCESSORY_POPUP_LABEL, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ENTER_NAME));
 
        ad->entry = __create_entry(layout, PRT_ACCESSORY_POPUP_ENTRY);
        elm_object_part_text_set(ad->entry, "guide", _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_NAME));
@@ -165,6 +228,7 @@ void setting_accessibility_universal_switch_add_switch_accessories_page_create(S
        elm_layout_text_set(layout, PRT_ACCESSORY_LABEL, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_ACCESSORIES_DESC));
 
        Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_ACCESSORIES_TITLE), NULL, NULL, layout, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, __naviframe_pop_cb, ad);
        elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
 
        Evas_Object *back_btn = setting_create_button(ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __back_cb, ad);
index e689bbf7211f2a0759e8ae2ced3d42204ff544ea..bce612311397e2ba144a3d4bc5a86861118169ca 100755 (executable)
@@ -21,6 +21,7 @@
 
 #include "setting-accessibility-universal-switch-add-switch-camera.h"
 #include "setting-accessibility-universal-switch-action.h"
+#include "setting-accessibility-universal-switch-add-switch.h"
 
 
 static void __back_cb(void *data, Evas_Object *obj, void *event_info)
@@ -110,8 +111,11 @@ void setting_accessibility_universal_switch_add_switch_camera_page_create(Settin
                        item = setting_create_Gendial_field_def(genlist, &itc_1text, __add_camera_switch_cb, camer_switch,
                                        SWALLOW_Type_INVALID, NULL, NULL, 0, camer_switch->name, description, NULL);
 
-                       if (item)
+                       if (item) {
                                item->userdata = ad;
+                               setting_accessibility_universal_switch_disable_already_mapped_switch(ad->config.configuration_items, camer_switch->id, item->item);
+                       }
+
                }
        }
 
index f3a715cfef98c71c8e55d67cef2240feeb376200..3dcde20c9cd8ef0bb0d5e8b794abd95c7d3d94ca 100755 (executable)
@@ -24,7 +24,7 @@
 #include "setting-accessibility-universal-switch-add-switch-accessories.h"
 #include "setting-accessibility-universal-switch-add-switch-camera.h"
 
-static Eina_Bool __universal_switch_add_switch_page_hide_cb(void *data, Elm_Object_Item *it)
+static Eina_Bool __naviframe_pop_cb(void *data, Elm_Object_Item *it)
 {
        SETTING_TRACE_BEGIN;
        retv_if(data == NULL, EINA_TRUE);
@@ -38,7 +38,7 @@ static Eina_Bool __universal_switch_add_switch_page_hide_cb(void *data, Elm_Obje
        return EINA_TRUE;
 }
 
-static void __universal_switch_back_cb(void *data, Evas_Object *obj, void *event_info)
+static void __back_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Data argument is NULL");
@@ -78,6 +78,38 @@ static void __add_switch_cb(void *data, Evas_Object *obj, void *event_info)
        SETTING_TRACE_END;
 }
 
+void setting_accessibility_universal_switch_disable_already_mapped_switch(Eina_Array *configuration_items, const char *switch_id, Elm_Object_Item *item)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(configuration_items == NULL, "Input parameter is NULL");
+       retm_if(switch_id == NULL, "Input parameter is NULL");
+       retm_if(item == NULL, "Input parameter is NULL");
+
+       Eina_Array_Iterator already_mapped_iterator;
+       UniversalSwitchConfigurationItem *config_item;
+       int i;
+       EINA_ARRAY_ITER_NEXT(configuration_items, i, config_item, already_mapped_iterator) {
+               if (strcmp(switch_id, config_item->switch_id) == 0)
+                       elm_object_item_disabled_set(item, EINA_TRUE);
+       }
+       SETTING_TRACE_END;
+}
+
+static void __disable_screen_switch_provider_when_screen_switches_is_mapped(Eina_Array *configuration_items, UniversalSwitchSwitchProvider *switch_provider, Elm_Object_Item *item)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(configuration_items == NULL, "Input parameter is NULL");
+       retm_if(switch_provider == NULL, "Input parameter is NULL");
+       retm_if(item == NULL, "Input parameter is NULL");
+
+       SETTING_TRACE_DEBUG("provider_id %s", switch_provider->info->id);
+
+       if (strcmp(switch_provider->info->id, ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN_SWITCH_PROVIDER) == 0)
+               setting_accessibility_universal_switch_disable_already_mapped_switch(configuration_items, ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN_SWITCH_ID, item);
+
+       SETTING_TRACE_END;
+}
+
 void setting_accessibility_universal_switch_add_switch_page_create(SettingAccessibility *ad)
 {
        SETTING_TRACE_BEGIN;
@@ -102,15 +134,17 @@ void setting_accessibility_universal_switch_add_switch_page_create(SettingAccess
                                switch_provider->info->name,
                                switch_provider->info->description, NULL);
 
-               if (item)
+               if (item) {
                        item->userdata = ad;
+                       __disable_screen_switch_provider_when_screen_switches_is_mapped(ad->config.configuration_items, switch_provider, item->item);
+               }
        }
 
        Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH), NULL, NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, __naviframe_pop_cb, ad);
        elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
-       elm_naviframe_item_pop_cb_set(navi_it, __universal_switch_add_switch_page_hide_cb, ad);
 
-       Evas_Object *back_btn = setting_create_button(ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __universal_switch_back_cb, ad);
+       Evas_Object *back_btn = setting_create_button(ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __back_cb, ad);
        elm_layout_content_set(ad->md.naviframe, "prev_btn", back_btn);
 
        SETTING_TRACE_END;
index 55c0987b19c897113fd65ca6cd551cf7c927acc3..f543ce5b2f808a9adbe1b697818f4734b2f08b4c 100755 (executable)
@@ -97,7 +97,6 @@ static void __eldbus_getInfoArray(Eina_Array *infoTypes, Eldbus_Message *reply)
                info->id = strdup(id);
                info->name = strdup(name);
                info->description = strdup(description);
-               SETTING_TRACE_DEBUG("id: %s, name: %s, desc: %s", info->id, info->name, info->description);
                eina_array_push(infoTypes, info);
        }
 }
@@ -200,6 +199,7 @@ static Eina_Array * __eldbus_getAllActivityTypes(UniversalSwitchEldbus *eldbus)
 
 static void __eldbus_getAllSwitchConfigurationItemsArray(Eina_Array *infoTypes, Eldbus_Message *reply)
 {
+       SETTING_TRACE_BEGIN;
        Eldbus_Message_Iter *array;
        Eldbus_Message_Iter *struct_sssi;
 
@@ -208,23 +208,33 @@ static void __eldbus_getAllSwitchConfigurationItemsArray(Eina_Array *infoTypes,
                return;
        }
        while (eldbus_message_iter_get_and_next(array, 'r', &struct_sssi)) {
-               char *switchId, *userName, *activityType;
+               char *switchId;
+               char *userName;
+               char *activityType;
                int changeType;
 
                if (!eldbus_message_iter_arguments_get(struct_sssi, "sssi", &switchId, &userName, &activityType, &changeType)) {
                        SETTING_TRACE_ERROR("Error on eldbus_message_arguments_get()\n");
                        return;
                }
+               char *pointer_to_end_of_switch_provider_str = strstr(switchId, "_");
+               if (!pointer_to_end_of_switch_provider_str) {
+                       SETTING_TRACE_ERROR("Wrong switch ID format");
+                       return;
+               }
+               size_t provider_id_size = pointer_to_end_of_switch_provider_str - switchId;
                UniversalSwitchConfigurationItem *item = calloc(1, sizeof(UniversalSwitchConfigurationItem));
                if (!item) {
                        SETTING_TRACE_ERROR("Out of memory");
                        return;
                }
+               item->provider_id = strndup(switchId, provider_id_size);
                item->switch_id = strdup(switchId);
                item->user_name = strdup(userName);
                item->activity_type = strdup(activityType);
                eina_array_push(infoTypes, item);
        }
+       SETTING_TRACE_END;
 }
 
 static Eina_Array * __eldbus_getAllSwitchConfigurationItems(UniversalSwitchEldbus *eldbus)
@@ -262,6 +272,7 @@ static void __relese_configuration_items(UniversalSwitchDbusConfig *config)
                free(item->switch_id);
                free(item->user_name);
                free(item->activity_type);
+               free(item->provider_id);
                free(item);
        }
        eina_array_free(config->configuration_items);
@@ -434,10 +445,15 @@ void setting_accessibility_universal_switch_dbus_config_captureSwitch(UniversalS
 void setting_accessibility_universal_switch_dbus_config_cancelCaptureSwitch(UniversalSwitchDbusConfig *config)
 {
        UniversalSwitchEldbus * eldbus = &config->eldbus;
+
+       SETTING_TRACE_DEBUG("Running " IFACE ".cancelCaptureSwitch");
+       eldbus_proxy_call(config->eldbus.proxy, "cancelCaptureSwitch", NULL, NULL, ELDBUS_TIMEOUT, "");
+
        SETTING_TRACE_DEBUG("DBus call captureSwitch canceled");
        eldbus->capture_switch_callback = NULL;
-       if (eldbus->capture_switch_request)
+       if (eldbus->capture_switch_request) {
                eldbus_pending_cancel(eldbus->capture_switch_request);
-       eldbus->capture_switch_request = NULL;
+               eldbus->capture_switch_request = NULL;
+       }
 }
 
index 36d5df0e92ec84801ba528b5ff4066e1df762d9a..c10326024a22d0c5d076321eede8a3ce48c17bc4 100644 (file)
 #include "setting-accessibility-universal-switch-settings-set-value.h"
 #include "setting-accessibility-universal-switch-dbus.h"
 
+#define SWITCH_COUNTER_MAX 99
+#define SWITCH_COUNTER_TITLE_LENGTH 4
 
-static void __action_remove_cb(SettingAccessibility *ad, int item_id)
+static void __remove_switch(SettingAccessibility *ad, int item_id)
 {
        SETTING_TRACE_BEGIN;
        retm_if(ad == NULL, "Input parameter is NULL");
@@ -50,23 +52,169 @@ static void __action_remove_cb(SettingAccessibility *ad, int item_id)
        SETTING_TRACE_END;
 }
 
+static void __remove_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+}
+
+static void __cancel_button_clicked_remove_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup = data;
+       evas_object_del(popup);
+}
+
+static void __remove_selected_switches_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SettingAccessibility *ad = data;
+       bool disable_universal_switch = (ad->switches_to_remove_counter == elm_genlist_items_count(ad->set_value_layout.genlist));
+
+       Elm_Object_Item *item = elm_genlist_last_item_get(ad->set_value_layout.genlist);
+       while (item != NULL) {
+               Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
+               item = elm_genlist_item_prev_get(item);
+               if (list_item->chk_status)
+                       __remove_switch(ad, list_item->chk_id);
+       }
+
+       evas_object_del(ad->popup);
+       ad->popup = NULL;
+       elm_naviframe_item_pop(ad->md.naviframe);
+
+       if (disable_universal_switch && vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_STATE, 0))
+               LOGE("Failed to set vconf key %s.", VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_STATE);
+}
+
+static void __confirm_removing_switches_create_popup(SettingAccessibility *ad)
+{
+       ad->popup = elm_popup_add(ad->md.naviframe);
+       retm_if(!ad->popup, "Popup creation failure");
+       elm_popup_orient_set(ad->popup, ELM_POPUP_ORIENT_CENTER);
+       evas_object_size_hint_weight_set(ad->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       int vconf_val;
+       int vconf_ret = vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_STATE, &vconf_val);
+       retm_if(vconf_ret != 0,
+               "Failed to get vconf bool value VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_STATE. Error: %d", vconf_ret);
+
+       elm_object_part_text_set(ad->popup, "title,text", _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_DELETE_SWITCHES));
+
+       if (vconf_val && ad->switches_to_remove_counter ==  elm_genlist_items_count(ad->set_value_layout.genlist)) {
+               elm_object_text_set(ad->popup, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_DELETE_ALL_SWITCHES_DESC));
+       } else {
+               char s[64];
+               snprintf(s, 64, "%d %s", ad->switches_to_remove_counter, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_DELETE_SWITCHES_DESC));
+               elm_object_text_set(ad->popup, s);
+       }
+
+       eext_object_event_callback_add(ad->popup, EEXT_CALLBACK_BACK, __remove_popup_cb, NULL);
+       evas_object_smart_callback_add(ad->popup, "dismissed", __remove_popup_cb, NULL);
+       evas_object_smart_callback_add(ad->popup, "block,clicked", __remove_popup_cb, NULL);
+
+
+       Evas_Object *btn = elm_button_add(ad->popup);
+       if (!btn) {
+               SETTING_TRACE_ERROR("Button creation failed");
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+       elm_object_style_set(btn, "bottom");
+       elm_object_text_set(btn, _(IDS_ST_BUTTON_CANCEL));
+       elm_object_part_content_set(ad->popup, "button1", btn);
+       evas_object_smart_callback_add(btn, "clicked", __cancel_button_clicked_remove_popup_cb, ad->popup);
+
+
+       btn = elm_button_add(ad->popup);
+       if (!btn) {
+               SETTING_TRACE_ERROR("Button creation failed");
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+       elm_object_style_set(btn, "bottom");
+       elm_object_text_set(btn, _(DEVOPTION_STR_ACCESSIBILITY_DELETE));
+       elm_object_part_content_set(ad->popup, "button2", btn);
+       evas_object_smart_callback_add(btn, "clicked", __remove_selected_switches_cb, ad);
+
+       evas_object_show(ad->popup);
+}
+
+void setting_accessibility_universal_switch_use_naviframe_title_as_counter(SettingAccessibility *ad)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(ad == NULL, "Input parameter is NULL");
+
+       elm_check_state_set(ad->all_checkbox, ad->switches_to_remove_counter == elm_genlist_items_count(ad->set_value_layout.genlist));
+
+       char array[SWITCH_COUNTER_TITLE_LENGTH];
+       char *title = array;
+       if (ad->switches_to_remove_counter > SWITCH_COUNTER_MAX) {
+               snprintf(title, SWITCH_COUNTER_TITLE_LENGTH, "%d+", SWITCH_COUNTER_MAX);
+       } else if (ad->switches_to_remove_counter > 0) {
+               snprintf(title, SWITCH_COUNTER_TITLE_LENGTH, "%d", ad->switches_to_remove_counter);
+       } else {
+               title = _(DEVOPTION_STR_ACCESSIBILITY_SELECT_ITEMS);
+       }
+       elm_layout_text_set(ad->md.naviframe, "default", title);
+       SETTING_TRACE_END;
+}
+
+static void __all_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       SettingAccessibility *ad = (SettingAccessibility *)data;
+       retm_if(ad == NULL, "Input parameter is NULL");
+       retm_if(ad->set_value_layout.genlist == NULL, "No genlist provided");
+
+       int genlist_size = elm_genlist_items_count(ad->set_value_layout.genlist);
+       bool all_selected = (ad->switches_to_remove_counter == genlist_size);
+
+       Elm_Object_Item *item = elm_genlist_first_item_get(ad->set_value_layout.genlist);
+       while (item != NULL) {
+               Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
+               setting_update_gl_item_chk_status(list_item, !all_selected);
+               item = elm_genlist_item_next_get(item);
+       }
+
+       ad->switches_to_remove_counter = all_selected ? 0 : genlist_size;
+       setting_accessibility_universal_switch_use_naviframe_title_as_counter(ad);
+
+       SETTING_TRACE_END;
+}
+
+static void __delete_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       SettingAccessibility *ad = data;
+       retm_if(ad == NULL, "Input parameter is NULL");
+       retm_if(ad->set_value_layout.genlist == NULL, "No genlist provided");
+
+       __confirm_removing_switches_create_popup(ad);
+
+       SETTING_TRACE_END;
+}
+
 void setting_accessibility_universal_switch_remove_switch_page_create(SettingAccessibility *ad)
 {
        SETTING_TRACE_BEGIN;
        retm_if(ad == NULL, "Input parameter is NULL");
 
-       setting_accessibility_universal_switch_settings_set_value_page_create(ad, VT_RADIOS, "");
+       ad->switches_to_remove_counter = 0;
+
+       setting_accessibility_universal_switch_settings_set_value_page_create(ad, VT_SWITCHES, _(DEVOPTION_STR_ACCESSIBILITY_SELECT_ITEMS));
+
+       ad->all_checkbox = elm_check_add(ad->md.naviframe);
+       evas_object_smart_callback_add(ad->all_checkbox, "changed", __all_button_clicked_cb, ad);
+       elm_layout_content_set(ad->md.naviframe, "prev_btn", ad->all_checkbox);
+
+       Evas_Object *delete_btn = setting_create_button(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_DELETE_CAPS), "naviframe/title_right", __delete_button_clicked_cb, ad);
+       elm_layout_content_set(ad->md.naviframe, "title_right_btn", delete_btn);
 
        Eina_Array_Iterator iterator;
        UniversalSwitchConfigurationItem *config_item;
        int i;
        EINA_ARRAY_ITER_NEXT(ad->config.configuration_items, i, config_item, iterator) {
-               setting_accessibility_universal_switch_settings_set_value_radio_item_add(ad, config_item->user_name, i, /*_action[i].id == ...*/false);
+               const char *activity_name = setting_accessibility_universal_switch_dbus_config_get_activity_name(&ad->config, config_item->activity_type);
+               setting_accessibility_universal_switch_settings_set_value_switch_item_with_subtext_add(ad, config_item->user_name, activity_name, i, false);
        }
 
-       setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, __action_remove_cb);
-       elm_radio_value_set(ad->set_value_layout.radio_group, -1);
-
        SETTING_TRACE_END;
 }
 
index 9812ddb2836f56d46da4c69196dc95b77e44ea35..ce042cd4320e31fad3df857b2d691e3aeb884865 100755 (executable)
@@ -23,6 +23,9 @@
 #include <efl_extension.h>
 
 #include "setting-accessibility-universal-switch-settings-set-value.h"
+#include "setting-accessibility-universal-switch-remove-switch.h"
+#include "setting-accessibility-universal-switch-action.h"
+#include "setting-accessibility-universal-switch-settings.h"
 
 #define EDJ_SET_VALUE "edje/accessibility-settings-set-value.edj"
 #define GRP_SET_VALUE_NUMERIC "set-value-numeric"
@@ -30,6 +33,7 @@
 #define GRP_SET_VALUE_RADIOS "set-value-radios"
 #define GRP_SET_VALUE_SWITCHES "set-value-switches"
 #define GRP_SET_VALUE_LIST_SWITCH "set-value-list-switch"
+#define GRP_SET_VALUE_UPDATE_ACCESSORIES_SWITCH "set-value-update-accessories-switch"
 #define PRT_SET_VALUE_LIST "set-value-list"
 #define PRT_SET_VALUE_SWITCH_LABEL "set-value-switch-label"
 #define PRT_SET_VALUE_SWITCH "set-value-switch"
@@ -38,6 +42,7 @@
 #define PRT_SET_VALUE_RANGE "set-value-range"
 #define PRT_SET_VALUE_DESC "set-value-desc"
 #define PRT_SET_VALUE_LIST "set-value-list"
+#define PRT_SET_VALUE_ENTRY "set-value-entry"
 
 typedef struct _options_item {
        SettingAccessibility *ad;
@@ -55,18 +60,26 @@ static void __back_cb(void *data, Evas_Object *obj, void *event_info)
        retm_if(data == NULL, "Data argument is NULL");
        SettingAccessibility *ad = (SettingAccessibility *)data;
 
+       elm_naviframe_item_pop(ad->md.naviframe);
+
+       SETTING_TRACE_END;
+}
+
+static Eina_Bool __naviframe_pop_cb(void *data, Elm_Object_Item *it)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(data == NULL, EINA_TRUE);
+       SettingAccessibility *ad = data;
+
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE, setting_accessibility_universal_switch_settings_synchronize_page_with_vconf);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE, setting_accessibility_universal_switch_settings_synchronize_page_with_vconf);
+
        if (ad->set_value_layout.value_change_cb) {
                int page_num = 0;
                elm_scroller_current_page_get(ad->set_value_layout.scroller, NULL, &page_num);
                ad->set_value_layout.value_change_cb(ad, (double)page_num * ad->set_value_layout.step + ad->set_value_layout.min_val);
        }
 
-       if (ad->set_value_layout.radio_item_change_cb) {
-               int radio_id = elm_radio_value_get(ad->set_value_layout.radio_group);
-               ad->set_value_layout.radio_item_change_cb(ad, radio_id);
-               ad->set_value_layout.radio_item_change_cb = NULL;
-       }
-
        if (ad->set_value_layout.options_data) {
                options_item_t *opt_item = NULL;
                EINA_LIST_FREE(ad->set_value_layout.options_data, opt_item)
@@ -75,26 +88,8 @@ static void __back_cb(void *data, Evas_Object *obj, void *event_info)
                ad->set_value_layout.options_data = NULL;
        }
 
-       elm_naviframe_item_pop(ad->md.naviframe);
-
-       SETTING_TRACE_END;
-}
-
-static void __list_back_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       SETTING_TRACE_BEGIN;
-       retm_if(data == NULL, "Data argument is NULL");
-       SettingAccessibility *ad = (SettingAccessibility *)data;
-
-       if (ad->set_value_layout.radio_item_change_cb) {
-               int radio_id = elm_radio_value_get(ad->set_value_layout.radio_group);
-               ad->set_value_layout.radio_item_change_cb(ad, radio_id);
-               ad->set_value_layout.radio_item_change_cb = NULL;
-       }
-
-       elm_naviframe_item_pop(ad->md.naviframe);
-
        SETTING_TRACE_END;
+       return EINA_TRUE;
 }
 
 static void __check_state_changed_cb(void *data, Evas_Object *obj, void *event_info)
@@ -125,6 +120,22 @@ static void __check_state_changed_cb(void *data, Evas_Object *obj, void *event_i
        SETTING_TRACE_END;
 }
 
+void setting_accessibility_universal_switch_settings_synchronize_page_with_vconf(keynode_t *node, void *user_data)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(user_data == NULL, "Data parameter is NULL");
+       retm_if(node == NULL, "Data parameter is NULL");
+       SettingAccessibility *ad = user_data;
+       int ret = vconf_keynode_get_bool(node);
+       retm_if(ret < 0, "FAIL: vconf_keynode_get_bool");
+       if (elm_check_state_get(ad->set_value_layout.check) != ret) {
+       elm_check_state_set(ad->set_value_layout.check, ret);
+
+       __check_state_changed_cb(ad, ad->set_value_layout.check, NULL);
+       }
+       SETTING_TRACE_END;
+}
+
 static void __scroller_scroll_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
@@ -142,25 +153,13 @@ static void __scroller_scroll_cb(void *data, Evas_Object *obj, void *event_info)
 static void __list_item_click_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
-       const char *page_title = NULL;
        elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
        retm_if(data == NULL, "Input parameter is NULL");
        options_item_t *opt_item = (options_item_t *)data;
+       retm_if(opt_item->ad->set_value_layout.list_item_options_request_cb == NULL, "Function not provided");
 
-       opt_item->ad->set_value_layout.radio_group = NULL;
-       opt_item->ad->set_value_layout.layout = __create_layout(opt_item->ad->md.naviframe, GRP_SET_VALUE_RADIOS);
-       opt_item->ad->set_value_layout.scroller = __create_scroller(opt_item->ad->set_value_layout.layout);
-       opt_item->ad->set_value_layout.box = __create_box(opt_item->ad->set_value_layout.scroller);
-       evas_object_smart_callback_add(opt_item->ad->set_value_layout.scroller, "scroll,page,changed", __scroller_scroll_cb, (void *)opt_item->ad);
-
-       if (opt_item->ad->set_value_layout.list_item_options_request_cb)
-               opt_item->ad->set_value_layout.list_item_options_request_cb(opt_item->ad, opt_item->option_id, &page_title);
+       opt_item->ad->set_value_layout.list_item_options_request_cb(opt_item->ad, opt_item->option_id, NULL);
 
-       Elm_Object_Item *navi_it = elm_naviframe_item_push(opt_item->ad->md.naviframe, page_title, NULL, NULL, opt_item->ad->set_value_layout.layout, NULL);
-       elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
-
-       Evas_Object *back_btn = setting_create_button(opt_item->ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __list_back_cb, opt_item->ad);
-       elm_layout_content_set(opt_item->ad->md.naviframe, "prev_btn", back_btn);
        SETTING_TRACE_END;
 }
 
@@ -270,51 +269,6 @@ static Evas_Object *__create_check(Evas_Object *parent, bool state)
        return check;
 }
 
-static Evas_Object *__create_radio(SettingAccessibility *ad, Evas_Object *parent_box, const char *caption, int radio_id, bool selected)
-{
-       SETTING_TRACE_BEGIN;
-       retvm_if(ad == NULL || parent_box == NULL, NULL, "Input parameter is NULL");
-
-       Evas_Object *radio = elm_radio_add(parent_box);
-       if (!ad->set_value_layout.radio_group)
-               ad->set_value_layout.radio_group = radio;
-
-       elm_radio_group_add(radio, ad->set_value_layout.radio_group);
-       elm_radio_state_value_set(radio, radio_id);
-       elm_object_text_set(radio, caption);
-
-       evas_object_size_hint_align_set(radio, 0.0, 0.0);
-       evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_padding_set(radio, 50, 0, 10, 10);
-       evas_object_show(radio);
-
-       elm_box_pack_end(parent_box, radio);
-
-       if (selected)
-               elm_radio_value_set(radio, radio_id);
-
-       SETTING_TRACE_END;
-       return radio;
-}
-
-static Evas_Object *__create_separator(Evas_Object *parent_box)
-{
-       SETTING_TRACE_BEGIN;
-       retvm_if(parent_box == NULL, NULL, "Input parameter is NULL");
-
-       Evas_Object *sep = evas_object_rectangle_add(evas_object_evas_get(parent_box));
-       evas_object_size_hint_min_set(sep, 720, 2);
-       evas_object_size_hint_max_set(sep, 720, 2);
-       evas_object_move(sep, 0, 0);
-       evas_object_resize(sep, 720, 2);
-       evas_object_color_set(sep, 192, 192, 192, 255);
-       evas_object_show(sep);
-
-       elm_box_pack_end(parent_box, sep);
-       SETTING_TRACE_END;
-       return sep;
-}
-
 static Evas_Object *__create_genlist(Evas_Object *parent, const char *title)
 {
        SETTING_TRACE_BEGIN;
@@ -344,7 +298,7 @@ void setting_accessibility_universal_switch_settings_set_value_page_create(Setti
        switch (type) {
        case VT_NUMERIC: layout_grp = GRP_SET_VALUE_NUMERIC; break;
        case VT_NUMERIC_SWITCH: layout_grp = GRP_SET_VALUE_NUMERIC_SWITCH; break;
-       case VT_RADIOS: layout_grp = GRP_SET_VALUE_RADIOS; break;
+       case VT_RADIOS:
        case VT_SWITCHES: layout_grp = GRP_SET_VALUE_SWITCHES; break;
        case VT_LIST_SWITCH: layout_grp = GRP_SET_VALUE_LIST_SWITCH; break;
        default:
@@ -354,30 +308,37 @@ void setting_accessibility_universal_switch_settings_set_value_page_create(Setti
 
        ad->set_value_layout.layout = __create_layout(ad->md.naviframe, layout_grp);
 
-       if (type == VT_NUMERIC) {
+       switch (type) {
+       case VT_NUMERIC:
                ad->set_value_layout.scroller = __create_scroller(ad->set_value_layout.layout);
                ad->set_value_layout.box = __create_box(ad->set_value_layout.scroller);
                evas_object_smart_callback_add(ad->set_value_layout.scroller, "scroll,page,changed", __scroller_scroll_cb, (void *)ad);
-       } else if (type == VT_NUMERIC_SWITCH) {
+               break;
+       case VT_NUMERIC_SWITCH:
                ad->set_value_layout.scroller = __create_scroller(ad->set_value_layout.layout);
                ad->set_value_layout.box = __create_box(ad->set_value_layout.scroller);
                ad->set_value_layout.check = __create_check(ad->set_value_layout.layout, EINA_FALSE);
                evas_object_smart_callback_add(ad->set_value_layout.scroller, "scroll,page,changed", __scroller_scroll_cb, (void *)ad);
                evas_object_smart_callback_add(ad->set_value_layout.check, "changed", __check_state_changed_cb, (void *)ad);
-       } else if (type == VT_RADIOS) {
-               ad->set_value_layout.radio_group = NULL;
-               ad->set_value_layout.scroller = __create_scroller(ad->set_value_layout.layout);
-               ad->set_value_layout.box = __create_box(ad->set_value_layout.scroller);
-               evas_object_smart_callback_add(ad->set_value_layout.scroller, "scroll,page,changed", __scroller_scroll_cb, (void *)ad);
-       } else if (type == VT_SWITCHES) {
+               break;
+       case VT_RADIOS:
+               ad->set_value_layout.radio_item_change_cb = NULL;
+               ad->set_value_layout.genlist = __create_genlist(ad->set_value_layout.layout, NULL);
+               break;
+       case VT_SWITCHES:
                ad->set_value_layout.genlist = __create_genlist(ad->set_value_layout.layout, NULL);
-       } else if (type == VT_LIST_SWITCH) {
+               break;
+       case VT_LIST_SWITCH:
                ad->set_value_layout.check = __create_check(ad->set_value_layout.layout, EINA_FALSE);
                ad->set_value_layout.genlist = __create_genlist(ad->set_value_layout.layout, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_OPTIONS));
                evas_object_smart_callback_add(ad->set_value_layout.check, "changed", __check_state_changed_cb, (void *)ad);
-       }
+               break;
+       default:
+               LOGE("Wrong value type");
+}
 
        Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->md.naviframe, title, NULL, NULL, ad->set_value_layout.layout, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, __naviframe_pop_cb, ad);
        elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
 
        Evas_Object *back_btn = setting_create_button(ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __back_cb, ad);
@@ -465,30 +426,57 @@ void setting_accessibility_universal_switch_settings_set_value_switch_set(Settin
        SETTING_TRACE_END;
 }
 
-void setting_accessibility_universal_switch_settings_set_value_radio_item_add(SettingAccessibility *ad, const char *caption, int id, bool selected)
+static void __switch_item_checkbox_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
-       retm_if(ad == NULL, "Input parameter is NULL");
+       retm_if(data == NULL, "Input parameter is NULL");
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
+       SettingAccessibility *ad = (SettingAccessibility *)list_item->userdata;
 
-       Evas_Object *box = __create_box(ad->set_value_layout.box);
-       __create_radio(ad, box, caption, id, selected);
-       __create_separator(box);
-       elm_box_pack_end(ad->set_value_layout.box, box);
+       if (ad->set_value_layout.switch_item_change_cb) {
+               bool state = elm_check_state_get(list_item->eo_check);
+               ad->set_value_layout.switch_item_change_cb(ad, list_item->chk_id, state);
+       }
 
        SETTING_TRACE_END;
 }
 
-static void __switch_item_checkbox_cb(void *data, Evas_Object *obj, void *event_info)
+static void __gendial_remove_item_checkbox_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Input parameter is NULL");
        Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
        SettingAccessibility *ad = (SettingAccessibility *)list_item->userdata;
+       if (elm_check_state_get(list_item->eo_check))
+               ad->switches_to_remove_counter++;
+       else
+               ad->switches_to_remove_counter--;
 
-       if (ad->set_value_layout.switch_item_change_cb) {
-               bool state = elm_check_state_get(list_item->eo_check);
-               ad->set_value_layout.switch_item_change_cb(ad, list_item->chk_id, state);
-       }
+       setting_accessibility_universal_switch_use_naviframe_title_as_counter(ad);
+
+       SETTING_TRACE_END;
+}
+
+static void __gendial_remove_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+
+       elm_genlist_item_selected_set(item, 0);
+
+       Setting_GenGroupItem_Data *list_item = elm_object_item_data_get(item);
+       setting_update_gl_item_chk_status(list_item,
+                       list_item->chk_status ? 0 : 1);
+
+       SettingAccessibility *ad = (SettingAccessibility *)list_item->userdata;
+
+       if (elm_check_state_get(list_item->eo_check))
+               ad->switches_to_remove_counter++;
+       else
+               ad->switches_to_remove_counter--;
+
+       setting_accessibility_universal_switch_use_naviframe_title_as_counter(ad);
 
        SETTING_TRACE_END;
 }
@@ -504,6 +492,73 @@ void setting_accessibility_universal_switch_settings_set_value_switch_item_add(S
                        caption, NULL,
                        __switch_item_checkbox_cb);
 
+       if (item) {
+               item->userdata = (void *)ad;
+               item->chk_id = id;
+       }
+       SETTING_TRACE_END;
+}
+
+static void __gendial_radio_item_selected_cb(
+               void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+
+       elm_genlist_item_selected_set(item, 0);
+
+       Setting_GenGroupItem_Data *list_item =
+                       (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
+       if (list_item->chk_status)
+               setting_update_gl_item_chk_status(list_item, 0);
+
+       SettingAccessibility *ad = (SettingAccessibility *)list_item->userdata;
+
+       if (ad->set_value_layout.radio_item_change_cb)
+               ad->set_value_layout.radio_item_change_cb(ad, list_item->chk_id);
+
+       if (ad->md.naviframe_it) {
+               elm_naviframe_item_pop_cb_set(elm_naviframe_top_item_get(ad->md.naviframe), NULL, NULL);
+               elm_naviframe_item_pop_to(ad->md.naviframe_it);
+       } else {
+               elm_naviframe_item_pop(ad->md.naviframe);
+       }
+
+       SETTING_TRACE_END;
+}
+
+void setting_accessibility_universal_switch_settings_set_value_radio_item_add(SettingAccessibility *ad, const char *caption, int id, bool selected)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(ad == NULL, "Input parameter is NULL");
+
+       Setting_GenGroupItem_Data *item = setting_create_Gendial_field_def(ad->set_value_layout.genlist, &itc_1text_1icon_3,
+                       __gendial_radio_item_selected_cb, NULL,
+                       SWALLOW_Type_1RADIO, NULL, NULL, selected ? 0 : -1,
+                       caption, NULL,
+                       NULL);
+
+       if (item) {
+               item->userdata = ad;
+               item->chk_id = id;
+       }
+
+       SETTING_TRACE_END;
+}
+
+void setting_accessibility_universal_switch_settings_set_value_switch_item_with_subtext_add(SettingAccessibility *ad, const char *caption,
+                                                                                                                                                                                       const char *subtext, int id, bool state)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(ad == NULL, "Input parameter is NULL");
+
+       Setting_GenGroupItem_Data *item = setting_create_Gendial_field_def(ad->set_value_layout.genlist, &itc_1text_1icon_3,
+                       __gendial_remove_item_selected_cb, NULL,
+                       SWALLOW_Type_1CHECK, NULL, NULL, (int)state,
+                       caption, subtext,
+                       __gendial_remove_item_checkbox_cb);
+
        if (item) {
                item->userdata = (void *)ad;
                item->chk_id = id;
@@ -586,3 +641,120 @@ void setting_accessibility_universal_switch_settings_set_value_add_list_item_opt
 
        SETTING_TRACE_END;
 }
+
+static void __update_accessories_switch_save_changes(SettingAccessibility *ad)
+{
+       SETTING_TRACE_BEGIN;
+       if (ad->switch_updated_cb) {
+               ad->switch_updated_cb(ad, ad->config_item_to_update.switch_id, ad->config_item_to_update.activity_type, elm_entry_entry_get(ad->entry));
+       }
+       SETTING_TRACE_END;
+}
+
+static void __close_update_accessories_switch_page(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       SettingAccessibility *ad = data;
+       retm_if(ad == NULL, "Data argument is NULL");
+
+       if (event_info == ad->save_object_item)
+               __update_accessories_switch_save_changes(ad);
+
+       if (ad->config_item_to_update.switch_id) {
+               free(ad->config_item_to_update.switch_id);
+               ad->config_item_to_update.switch_id = NULL;
+       }
+
+       if (ad->config_item_to_update.activity_type) {
+               free(ad->config_item_to_update.activity_type);
+               ad->config_item_to_update.activity_type = NULL;
+       }
+
+       if (ad->config_item_to_update.user_name) {
+               free(ad->config_item_to_update.user_name);
+               ad->config_item_to_update.user_name = NULL;
+       }
+
+       elm_naviframe_item_pop(ad->md.naviframe);
+       SETTING_TRACE_END;
+}
+
+static void __add_action_gendial_field(SettingAccessibility *ad);
+
+static void __update_action_gendial_field(SettingAccessibility *ad)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(ad == NULL, "Input argument is NULL");
+
+       elm_genlist_clear(ad->update_accessories_action_genlist);
+       __add_action_gendial_field(ad);
+       SETTING_TRACE_END;
+}
+
+static void __update_accessible_switch_choose_action(SettingAccessibility *ad, switch_action_t action, void *user_data)
+{
+       SETTING_TRACE_BEGIN;
+       free(ad->config_item_to_update.activity_type);
+       ad->config_item_to_update.activity_type = strdup(action);
+       __update_action_gendial_field(ad);
+       elm_naviframe_item_pop(ad->md.naviframe);
+       SETTING_TRACE_END;
+}
+
+static void __update_accessible_switch_action(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       elm_genlist_item_selected_set(event_info, 0);
+       SettingAccessibility *ad = data;
+       retm_if(ad == NULL, "Data argument is NULL");
+
+       setting_accessibility_universal_switch_action_page_create(ad);
+       setting_accessibility_universal_switch_action_callback_attach(ad, __update_accessible_switch_choose_action, ad);
+       SETTING_TRACE_END;
+}
+
+static void __add_action_gendial_field(SettingAccessibility *ad)
+{
+       SETTING_TRACE_BEGIN;
+       setting_create_Gendial_field_def(ad->update_accessories_action_genlist, &itc_1text,
+               __update_accessible_switch_action, ad,
+               SWALLOW_Type_INVALID, NULL, NULL, 0,
+               _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ACTION),
+       setting_accessibility_universal_switch_dbus_config_get_activity_name(&ad->config, ad->config_item_to_update.activity_type),
+       NULL);
+       SETTING_TRACE_END;
+}
+
+void setting_accessibility_universal_switch_settings_create_update_accesories_switch_page(SettingAccessibility *ad)
+{
+       SETTING_TRACE_BEGIN;
+       Evas_Object *tb;
+       Elm_Object_Item *nf_it;
+       tb = elm_toolbar_add(ad->md.naviframe);
+       elm_toolbar_select_mode_set(tb, ELM_OBJECT_SELECT_MODE_NONE);
+       evas_object_smart_callback_add(tb, "clicked", __close_update_accessories_switch_page, ad);
+       evas_object_show(tb);
+
+       elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(tb, EINA_TRUE);
+
+       elm_toolbar_item_append(tb, NULL, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_CANCEL), NULL, NULL);
+       ad->save_object_item = elm_toolbar_item_append(tb, NULL, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SAVE), NULL, NULL);
+
+       ad->set_value_layout.layout = __create_layout(ad->md.naviframe, GRP_SET_VALUE_UPDATE_ACCESSORIES_SWITCH);
+       ad->entry = elm_entry_add(ad->set_value_layout.layout);
+       elm_entry_entry_set(ad->entry, ad->config_item_to_update.user_name);
+       elm_entry_cursor_end_set(ad->entry);
+       evas_object_show(ad->entry);
+       elm_object_part_content_set(ad->set_value_layout.layout, PRT_SET_VALUE_ENTRY, ad->entry);
+
+       elm_object_part_text_set(ad->set_value_layout.layout, PRT_SET_VALUE_DESC, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_NAME));
+
+       ad->update_accessories_action_genlist = __create_genlist(ad->set_value_layout.layout, NULL);
+       __add_action_gendial_field(ad);
+
+       nf_it = elm_naviframe_item_push(ad->md.naviframe, "", NULL, NULL, ad->set_value_layout.layout, "tabbar/notitle");
+       elm_object_item_domain_text_translatable_set(nf_it, SETTING_PACKAGE, EINA_TRUE);
+       elm_object_item_part_content_set(nf_it, "tabbar", tb);
+       SETTING_TRACE_END;
+}
index 11b3fbf0a04965aee3184688e263e61a277074bf..061e60dd78b9828d2a2f2c2862f09551430d2c98 100755 (executable)
 #define DEFAULT_MANAGE_KEYS true
 #define DEFAULT_MANAGE_EDITTEXT true
 
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_INT "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_INT"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_PT_SPEED "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_PT_SPEED"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_STATE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_VALUE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_STATE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_VALUE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_STATE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_VALUE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_STATE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_VALUE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_VALUE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_KBD_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_KBD_STATE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_VOLUME "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_VOLUME"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_RATE "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_RATE"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_VOLUME "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_VOLUME"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_ACTIONS "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_ACTIONS"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_SETTINGS "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_SETTINGS"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_HOMESCREEN "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_HOMESCREEN"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_KEYS "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_KEYS"
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_EDITTEXT "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_EDITTEXT"
 
 typedef enum {VOICE_FEEDBACK_SPEECH_RATE, VOICE_FEEDBACK_VOLUME} voice_feedback_type_t;
 
@@ -160,7 +132,45 @@ static const char *__get_scan_method_text(scan_method_t method);
 static const char *__get_scan_direction_text(scan_dir_t direction);
 static Evas_Object *__create_ctxpopup(SettingAccessibility *ad);
 static void __set_ctxpopup_position(SettingAccessibility *ad, Evas_Object *ctxpopup);
+static void __auto_scan_checkbox_cb(void *data, Evas_Object *obj, void *event_info);
+static void __feedback_sound_checkbox_cb(void *data, Evas_Object *obj, void *event_info);
+static void __feedback_voice_checkbox_cb(void *data, Evas_Object *obj, void *event_info);
 
+static void __synchronize_checkbox_with_vconf(keynode_t *node, void *user_data, setting_call_back_func cb_func)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(user_data == NULL, "Data parameter is NULL");
+       retm_if(node == NULL, "Data parameter is NULL");
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)user_data;
+       int ret = vconf_keynode_get_bool(node);
+       retm_if(ret < 0, "FAIL: vconf_keynode_get_bool");
+       if (list_item->chk_status != ret) {
+               setting_update_gl_item_chk_status(list_item, ret);
+               cb_func(list_item, list_item->eo_check, NULL);
+       }
+       SETTING_TRACE_END;
+}
+
+static void __synchronize_auto_scan_with_vconf(keynode_t *node, void *user_data)
+{
+       SETTING_TRACE_BEGIN;
+       __synchronize_checkbox_with_vconf(node, user_data, __auto_scan_checkbox_cb);
+       SETTING_TRACE_END;
+}
+
+static void __synchronize_sound_feedback_with_vconf(keynode_t *node, void *user_data)
+{
+       SETTING_TRACE_BEGIN;
+       __synchronize_checkbox_with_vconf(node, user_data, __feedback_sound_checkbox_cb);
+       SETTING_TRACE_END;
+}
+
+static void __synchronize_voice_feedback_with_vconf(keynode_t *node, void *user_data)
+{
+       SETTING_TRACE_BEGIN;
+       __synchronize_checkbox_with_vconf(node, user_data, __feedback_voice_checkbox_cb);
+       SETTING_TRACE_END;
+}
 
 static void __back_cb(void *data, Evas_Object *obj, void *event_info)
 {
@@ -173,6 +183,19 @@ static void __back_cb(void *data, Evas_Object *obj, void *event_info)
        SETTING_TRACE_END;
 }
 
+static Eina_Bool __naviframe_pop_cb(void *data, Elm_Object_Item *it)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(data == NULL, EINA_TRUE);
+
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED, __synchronize_auto_scan_with_vconf);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE, __synchronize_sound_feedback_with_vconf);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE, __synchronize_voice_feedback_with_vconf);
+
+       SETTING_TRACE_END;
+       return EINA_TRUE;
+}
+
 static void __ctxpopup_del_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
@@ -212,7 +235,7 @@ static void __auto_scan_checkbox_cb(void *data, Evas_Object *obj, void *event_in
        elm_object_item_disabled_set(ad->universal_switch_pause_on_first->item, (Eina_Bool)!ad->auto_scan);
        elm_object_item_disabled_set(ad->universal_switch_auto_move_int->item, (Eina_Bool)ad->auto_scan);
 
-       __update_vconf_value(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN, (bool *)&list_item->chk_status, NULL, NULL);
+       __update_vconf_value(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED, (bool *)&list_item->chk_status, NULL, NULL);
 
        SETTING_TRACE_END;
 }
@@ -841,11 +864,12 @@ static void __cursor_color_cb(void *data, Evas_Object *obj, void *event_info)
        retm_if(ad == NULL, "Data argument is NULL");
 
        setting_accessibility_universal_switch_settings_set_value_page_create(ad, VT_RADIOS, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL));
+       setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, __cursor_color_list_item_changed_cb);
+       elm_naviframe_item_pop_cb_set(elm_naviframe_top_item_get(ad->md.naviframe), NULL, NULL);
+
        for (i = 0; i < CURSOR_COLORS_COUNT; i++)
                setting_accessibility_universal_switch_settings_set_value_radio_item_add(ad, _cursor_color[i].key, i, _cursor_color[i].id == ad->cursor_color);
 
-       setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, __cursor_color_list_item_changed_cb);
-
        SETTING_TRACE_END;
 }
 
@@ -915,15 +939,15 @@ static void __feedback_sound_volume_changed_cb(SettingAccessibility *ad, int ite
 static void __feedback_sound_item_options_request_cb(SettingAccessibility *ad, int option_id, const char **title)
 {
        SETTING_TRACE_BEGIN;
-       int i;
 
-       *title = _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND_VOLUME);
+       setting_accessibility_universal_switch_settings_set_value_page_create(ad, VT_RADIOS, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND_VOLUME));
+       setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, __feedback_sound_volume_changed_cb);
+       elm_naviframe_item_pop_cb_set(elm_naviframe_top_item_get(ad->md.naviframe), NULL, NULL);
 
+       int i;
        for (i = 0; i < MEDIA_LEVEL_COUNT; i++)
                setting_accessibility_universal_switch_settings_set_value_radio_item_add(ad, _media_level[i].key, i, _media_level[i].id == ad->feedback_sound_volume);
 
-       setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, __feedback_sound_volume_changed_cb);
-
        SETTING_TRACE_END;
 }
 
@@ -944,6 +968,9 @@ static void __feedback_sound_cb(void *data, Evas_Object *obj, void *event_info)
        ad->universal_switch_feedback_sound_volume = setting_accessibility_universal_switch_settings_set_value_radio_list_item_add(ad,
                _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND_VOLUME), str, 0);
        setting_accessibility_universal_switch_settings_set_value_add_list_item_options_request_cb(ad, __feedback_sound_item_options_request_cb);
+       int vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE, setting_accessibility_universal_switch_settings_synchronize_page_with_vconf, ad);
+       if (vconf_ret)
+               SETTING_TRACE_ERROR("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE)");
 
        SETTING_TRACE_END;
 }
@@ -1027,23 +1054,31 @@ static void __feedback_voice_speech_volume_changed_cb(SettingAccessibility *ad,
        SETTING_TRACE_END;
 }
 
-static void __feedback_voice_item_options_request_cb(SettingAccessibility *ad, int option_id, const char **title)
+static void __feedback_voice_item_options_request_cb(SettingAccessibility *ad, int option_id, const char **title /*remove last arg*/)
 {
        SETTING_TRACE_BEGIN;
-       int i;
-       int sel_value = 0;
 
+       char *page_title = NULL;
+       int sel_value = 0;
+       change_radio_item_cb cb = NULL;
        if (option_id == VOICE_FEEDBACK_SPEECH_RATE) {
-               *title = _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE_SPEECH_RATE);
+               page_title = _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE_SPEECH_RATE);
                sel_value = ad->feedback_voice_speech_rate;
-               setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, __feedback_voice_speech_rate_changed_cb);
+               cb = __feedback_voice_speech_rate_changed_cb;
        } else if (option_id == VOICE_FEEDBACK_VOLUME) {
-               *title = _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE_SPEECH_VOLUME);
+               page_title = _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE_SPEECH_VOLUME);
                sel_value = ad->feedback_voice_speech_volume;
-               setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, __feedback_voice_speech_volume_changed_cb);
-       } else
-               *title = "Undefined";
+               cb = __feedback_voice_speech_volume_changed_cb;
+       } else {
+               SETTING_TRACE_END;
+               return;
+       }
+
+       setting_accessibility_universal_switch_settings_set_value_page_create(ad, VT_RADIOS, page_title);
+       setting_accessibility_universal_switch_settings_set_value_add_radio_item_change_cb(ad, cb);
+       elm_naviframe_item_pop_cb_set(elm_naviframe_top_item_get(ad->md.naviframe), NULL, NULL);
 
+       int i;
        for (i = 0; i < MEDIA_LEVEL_COUNT; i++)
                setting_accessibility_universal_switch_settings_set_value_radio_item_add(ad, _media_level[i].key, i, _media_level[i].id == sel_value);
 
@@ -1062,6 +1097,9 @@ static void __feedback_voice_cb(void *data, Evas_Object *obj, void *event_info)
        setting_accessibility_universal_switch_settings_set_value_switch_set(ad, ad->feedback_voice_state);
        setting_accessibility_universal_switch_settings_set_value_description_set(ad, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_FEEDBACK_VOICE));
        setting_accessibility_universal_switch_settings_set_value_add_switch_change_cb(ad, __feedback_voice_switch_changed_cb);
+       int vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE, setting_accessibility_universal_switch_settings_synchronize_page_with_vconf, ad);
+       if (vconf_ret)
+               SETTING_TRACE_ERROR("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE)");
 
        snprintf(str, sizeof(str), "%d%%", ad->feedback_voice_speech_rate);
        ad->universal_switch_feedback_voice_speech_rate = setting_accessibility_universal_switch_settings_set_value_radio_list_item_add(ad,
@@ -1170,12 +1208,21 @@ static bool __update_vconf_value(const char *key, bool *bvalue, int *ivalue, dou
        retvm_if(key == NULL, false, "Key input argument is NULL");
 
        if (bvalue) {
+               bool b;
+               __get_vconf_value(key, &b, NULL, NULL);
+               retvm_if(b == *bvalue, false, "Value already set");
                ret = preference_set_boolean(key, *bvalue);
                warn_if(ret != PREFERENCE_ERROR_NONE, "Failed to update %s value.", key);
        } else if (ivalue) {
+               int i;
+               __get_vconf_value(key, NULL, &i, NULL);
+               retvm_if(i == *ivalue, false, "Value already set");
                ret = preference_set_int(key, *ivalue);
                warn_if(ret != PREFERENCE_ERROR_NONE, "Failed to update %s value.", key);
        } else if (dvalue) {
+               double d;
+               __get_vconf_value(key, NULL, NULL, &d);
+               retvm_if(d == *dvalue, false, "Value already set");
                ret = preference_set_double(key, *dvalue);
                warn_if(ret != PREFERENCE_ERROR_NONE, "Failed to update %s value.", key);
        } else {
@@ -1221,7 +1268,7 @@ static void __get_vconf_settings(SettingAccessibility *ad)
        ad->manage_options_state[MANAGE_OPT_KEYS] = DEFAULT_MANAGE_KEYS;
        ad->manage_options_state[MANAGE_OPT_EDITTEXT] = DEFAULT_MANAGE_EDITTEXT;
 
-       __get_vconf_value(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN, &ad->auto_scan, NULL, NULL);
+       __get_vconf_value(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED, &ad->auto_scan, NULL, NULL);
        __get_vconf_value(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_INT, NULL, NULL, &ad->auto_scan_interval);
        __get_vconf_value(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS, NULL, &ad->auto_scan_num, NULL);
        __get_vconf_value(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD, NULL, (int *)&ad->scan_method, NULL);
@@ -1374,6 +1421,29 @@ static void __create_switches_group(SettingAccessibility *ad, Evas_Object *genli
        SETTING_TRACE_END;
 }
 
+static void __auto_scan_menu_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       Setting_GenGroupItem_Data *list_item = elm_object_item_data_get(item);
+       setting_retm_if(list_item == NULL, "Data parameter is NULL");
+       setting_update_gl_item_chk_status(list_item, list_item->chk_status ? 0 : 1);
+
+       SettingAccessibility *ad = (SettingAccessibility *)list_item->userdata;
+       ad->auto_scan = list_item->chk_status;
+       elm_object_item_disabled_set(ad->universal_switch_auto_scan_int->item, (Eina_Bool)!ad->auto_scan);
+       elm_object_item_disabled_set(ad->universal_switch_scans_num->item, (Eina_Bool)!ad->auto_scan);
+       elm_object_item_disabled_set(ad->universal_switch_pause_on_first->item, (Eina_Bool)!ad->auto_scan);
+       elm_object_item_disabled_set(ad->universal_switch_auto_move_int->item, (Eina_Bool)ad->auto_scan);
+
+       __update_vconf_value(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED, (bool *)&list_item->chk_status, NULL, NULL);
+       SETTING_TRACE_END;
+}
+
 static void __create_scanning_group(SettingAccessibility *ad, Evas_Object *genlist)
 {
        SETTING_TRACE_BEGIN;
@@ -1382,7 +1452,10 @@ static void __create_scanning_group(SettingAccessibility *ad, Evas_Object *genli
 
        setting_create_Gendial_field_titleItem(genlist, &itc_group_item, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING, NULL);
 
-       __add_menu_item(ad, genlist, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN), NULL, NULL, true, ad->auto_scan, __auto_scan_checkbox_cb);
+       Setting_GenGroupItem_Data *item = __add_menu_item(ad, genlist, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN), NULL, __auto_scan_menu_item_selected, true, ad->auto_scan, __auto_scan_checkbox_cb);
+       int vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED, __synchronize_auto_scan_with_vconf, item);
+       if (vconf_ret)
+               SETTING_TRACE_ERROR("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED)");
 
        str = __get_value_unit_text(NULL, &ad->auto_scan_interval, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SECONDS), false, NULL);
        ad->universal_switch_auto_scan_int = __add_menu_item(ad, genlist, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN_INT), str, __auto_scan_interval_cb, false, false, NULL);
@@ -1445,11 +1518,8 @@ static void __create_additional_settings_group(SettingAccessibility *ad, Evas_Ob
        if (ad->universal_switch_auto_move_int)
                elm_object_item_disabled_set(ad->universal_switch_auto_move_int->item, (Eina_Bool)ad->auto_scan);
 
-       Setting_GenGroupItem_Data *item = __add_menu_item(ad, genlist, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP_KBD),
+       __add_menu_item(ad, genlist, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP_KBD),
                        _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP_KBD_SUB), NULL, true, ad->auto_tap_kbd_state, __auto_tap_kbd_checkbox_cb);
-
-       if (item)
-               elm_object_item_disabled_set(item->item, EINA_TRUE);
 }
 
 static void __create_feedback_group(SettingAccessibility *ad, Evas_Object *genlist)
@@ -1472,11 +1542,17 @@ static void __create_feedback_group(SettingAccessibility *ad, Evas_Object *genli
                                _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_OFF));
        ad->universal_switch_feedback_sound = __add_menu_item(ad, genlist, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND),
                        str, __feedback_sound_cb, true, ad->feedback_sound_state, __feedback_sound_checkbox_cb);
+       int vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE, __synchronize_sound_feedback_with_vconf, ad->universal_switch_feedback_sound);
+       if (vconf_ret)
+               SETTING_TRACE_ERROR("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE)");
 
        str = __get_boolean_text(ad->feedback_voice_state, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_ON),
                                _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_OFF));
        ad->universal_switch_feedback_voice = __add_menu_item(ad, genlist, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE),
                        str, __feedback_voice_cb, true, ad->feedback_voice_state, __feedback_voice_checkbox_cb);
+       vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE, __synchronize_voice_feedback_with_vconf, ad->universal_switch_feedback_voice);
+       if (vconf_ret)
+               SETTING_TRACE_ERROR("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE)");
 }
 
 static void __create_manage_group(SettingAccessibility *ad, Evas_Object *genlist)
@@ -1485,10 +1561,12 @@ static void __create_manage_group(SettingAccessibility *ad, Evas_Object *genlist
                        _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_SUB), __manage_options_cb, false, false, NULL);
 }
 
-void setting_accessibility_universal_switch_settings_page_create(SettingAccessibility *ad)
+void setting_accessibility_universal_switch_settings_page_create(SettingAccessibility *data)
 {
        SETTING_TRACE_BEGIN;
+       SettingAccessibility *ad = data;
        retm_if(ad == NULL, "Input parameter is NULL");
+       ad->md.naviframe_it = NULL;
        Evas_Object *genlist = elm_genlist_add(ad->md.naviframe);
        retm_if(genlist == NULL, "Cannot set genlist object as content of layout");
 
@@ -1503,6 +1581,7 @@ void setting_accessibility_universal_switch_settings_page_create(SettingAccessib
        __create_manage_group(ad, genlist);
 
        Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS), NULL, NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, __naviframe_pop_cb, ad);
        elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
 
        Evas_Object *back_btn = setting_create_button(ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __back_cb, ad);
index 90bcddf78e5695c41595bd0f8484166cc77acb50..6918dfddedfb1664b3cb32e4ee82e6181dc1168b 100644 (file)
 #include "setting-accessibility-universal-switch-settings.h"
 #include "setting-accessibility-universal-switch-add-switch.h"
 #include "setting-accessibility-universal-switch-remove-switch.h"
+#include "setting-accessibility-universal-switch-update-switch.h"
 
 
-static void __update_genlist(SettingAccessibility *ad, Evas_Object *genlist);
+static void __update_switches_list(SettingAccessibility *ad, Evas_Object *genlist);
 
 static void __back_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Data argument is NULL");
-       SettingAccessibility *ad = (SettingAccessibility *)data;
+       SettingAccessibility *ad = data;
+
+       elm_naviframe_item_pop(ad->md.naviframe);
+
+       SETTING_TRACE_END;
+}
+
+static Eina_Bool __naviframe_pop_cb(void *data, Elm_Object_Item *it)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(data == NULL, EINA_TRUE);
+       SettingAccessibility *ad = data;
 
        if (ad->universal_switch_switches_back)
                ad->universal_switch_switches_back(ad);
 
        ad->universal_switch_switches_back = NULL;
        ad->universal_switch_switches = NULL;
-       elm_naviframe_item_pop(ad->md.naviframe);
+       ad->md.naviframe_it = NULL;
 
        SETTING_TRACE_END;
+       return EINA_TRUE;
 }
 
-static Setting_GenGroupItem_Data *__add_menu_item(SettingAccessibility *ad, Evas_Object *genlist, const char *main_text, const char *sub_text,
-               setting_call_back_func item_cb, bool chk, bool chk_state, setting_call_back_func chk_cb)
+static Setting_GenGroupItem_Data *__add_mapped_switch_menu_item(SettingAccessibility *ad, Evas_Object *genlist, const char *main_text,
+                                                                                                                               const char *sub_text, setting_call_back_func item_cb, void *user_data)
 {
        SETTING_TRACE_BEGIN;
        retvm_if(ad == NULL, NULL, "Input argument is NULL");
        retvm_if(genlist == NULL, NULL, "Input genlist argument is NULL");
-       int item_type = SWALLOW_Type_INVALID;
        Setting_GenGroupItem_Data *item;
 
-       if (chk)
-               item_type = SWALLOW_Type_1ICON_1RADIO;
-
        item =  setting_create_Gendial_field_def(genlist, &itc_2text_1icon_3,
                        item_cb, ad,
-                       item_type, NULL, NULL, (int)chk_state,
+                       SWALLOW_Type_INVALID, NULL, NULL, 0,
                        main_text, sub_text,
-                       chk_cb);
+                       NULL);
 
        if (item)
-               item->userdata = ad;
+               item->userdata = user_data;
 
        SETTING_TRACE_END;
 
        return item;
 }
 
-static void __switch_click_cb(void *data, Evas_Object *obj, void *event_info)
+void setting_accessibility_universal_switch_add_switch_cb(SettingAccessibility *ad, const char *switch_id, switch_action_t switch_action, const char *switch_name)
 {
        SETTING_TRACE_BEGIN;
-       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
-       retm_if(data == NULL, "Data argument is NULL");
+       retm_if(ad == NULL, "Input parameter is NULL");
 
-       //TODO: add functionality
+       SETTING_TRACE_DEBUG("Add switch, id: %s, name: %s, action: %s.", switch_id, switch_name, switch_action);
+       setting_accessibility_universal_switch_dbus_config_addSwitchConfigurationItem(&ad->config, switch_id, switch_name, switch_action);
+       __update_switches_list(ad, ad->universal_switch_switches);
 
        SETTING_TRACE_END;
 }
 
-static void __new_switch_added_cb(SettingAccessibility *ad, const char *switch_id, switch_action_t switch_action, const char *switch_name)
+
+static void __switch_removed_cb(SettingAccessibility *ad, const char *switch_id, switch_action_t switch_action, const char *switch_name)
 {
        SETTING_TRACE_BEGIN;
        retm_if(ad == NULL, "Input parameter is NULL");
 
-       SETTING_TRACE_DEBUG("New switch added, id: %s, name: %s, action: %s.", switch_id, switch_name, switch_action);
-       setting_accessibility_universal_switch_dbus_config_addSwitchConfigurationItem(&ad->config, switch_id, switch_name, switch_action);
-       __update_genlist(ad, ad->universal_switch_switches);
+       SETTING_TRACE_DEBUG("Switch removed, name: %s, id: %s, action: %s.", switch_name, switch_id, switch_action);
+       setting_accessibility_universal_switch_dbus_config_removeSwitchConfigurationItem(&ad->config, switch_id);
+       __update_switches_list(ad, ad->universal_switch_switches);
 
        SETTING_TRACE_END;
 }
 
-
-static void __switch_removed_cb(SettingAccessibility *ad, const char *switch_id, switch_action_t switch_action, const char *switch_name)
+static void __switch_updated_cb(SettingAccessibility *ad, const char *switch_id, switch_action_t switch_action, const char *switch_name)
 {
        SETTING_TRACE_BEGIN;
        retm_if(ad == NULL, "Input parameter is NULL");
 
-       SETTING_TRACE_DEBUG("Switch removed, name: %s, id: %s, action: %s.", switch_name, switch_id, switch_action);
-       setting_accessibility_universal_switch_dbus_config_removeSwitchConfigurationItem(&ad->config, switch_id);
-       __update_genlist(ad, ad->universal_switch_switches);
+       SETTING_TRACE_DEBUG("Switch updated, id: %s, name: %s, action: %s.", switch_id, switch_name, switch_action);
+       setting_accessibility_universal_switch_dbus_config_updateSwitchConfigurationItem(&ad->config, switch_id, switch_name, switch_action);
+       __update_switches_list(ad, ad->universal_switch_switches);
+
+       SETTING_TRACE_END;
+}
+
+static void __switch_click_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       Elm_Object_Item *item = event_info;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+       retm_if(data == NULL, "Data argument is NULL");
+
+       Setting_GenGroupItem_Data *list_item = elm_object_item_data_get(item);
+       UniversalSwitchConfigurationItem *config_item = list_item->userdata;
+
+       SettingAccessibility *ad = data;
+       setting_accessibility_universal_switch_update_switch_callback_attach(ad, __switch_updated_cb);
+       setting_accessibility_universal_switch_update_switch_page_create(ad, config_item);
 
        SETTING_TRACE_END;
 }
@@ -114,20 +142,20 @@ static void __add_switch_click_cb(void *data, Evas_Object *obj, void *event_info
        SETTING_TRACE_BEGIN;
        elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
        retm_if(data == NULL, "Data argument is NULL");
-       SettingAccessibility *ad = (SettingAccessibility *)data;
+       SettingAccessibility *ad = data;
 
-       setting_accessibility_universal_switch_add_switch_new_switch_callback_attach(ad, __new_switch_added_cb);
+       setting_accessibility_universal_switch_add_switch_new_switch_callback_attach(ad, setting_accessibility_universal_switch_add_switch_cb);
        setting_accessibility_universal_switch_add_switch_page_create(ad);
 
        SETTING_TRACE_END;
 }
 
 
-static void __delete_click_cb(void *data, Evas_Object *obj, void *event_info)
+static void __create_remove_page_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Data argument is NULL");
-       SettingAccessibility *ad = (SettingAccessibility *)data;
+       SettingAccessibility *ad = data;
 
        setting_accessibility_universal_switch_remove_switch_page_create(ad);
        setting_accessibility_universal_switch_remove_switch_callback_attach(ad, __switch_removed_cb);
@@ -144,20 +172,20 @@ static void __create_switches_group(SettingAccessibility *ad, Evas_Object *genli
        UniversalSwitchConfigurationItem *config_item;
        int i;
        EINA_ARRAY_ITER_NEXT(ad->config.configuration_items, i, config_item, iterator) {
-               SETTING_TRACE_DEBUG("Switch: %d. switch_id: %s, user_name: %s, activity_type: %s.", i, config_item->switch_id, config_item->user_name, config_item->activity_type);
+               SETTING_TRACE_DEBUG("Switch: %d. switch_id: %s, provider_id: %s, user_name: %s, activity_type: %s.", i, config_item->switch_id, config_item->provider_id, config_item->user_name, config_item->activity_type);
                const char * activity_name = setting_accessibility_universal_switch_dbus_config_get_activity_name(&ad->config, config_item->activity_type);
-               __add_menu_item(ad, genlist, config_item->user_name, activity_name, __switch_click_cb, false, false, NULL);
+               __add_mapped_switch_menu_item(ad, genlist, config_item->user_name, activity_name, __switch_click_cb, config_item);
        }
 
        SETTING_TRACE_END;
 }
 
-static void __create_modify_switch_group(SettingAccessibility *ad, Evas_Object *genlist)
+static void __create_add_switch_button_in_genlist(SettingAccessibility *ad, Evas_Object *genlist)
 {
        SETTING_TRACE_BEGIN;
        retm_if(ad == NULL, "Input argument is NULL");
 
-       Setting_GenGroupItem_Data * item = setting_create_Gendial_field_def(genlist, &itc_2text_1icon_3,
+       Setting_GenGroupItem_Data *item = setting_create_Gendial_field_def(genlist, &itc_1text_1icon_3,
                        __add_switch_click_cb, ad,
                        SWALLOW_Type_1ICON_1IMAGE, ACCESSIBILITY_UNIVERSAL_SWITCH_PLUS_ICON, NULL, 0,
                         _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES_ADD_SWITCH), NULL,
@@ -169,7 +197,7 @@ static void __create_modify_switch_group(SettingAccessibility *ad, Evas_Object *
        SETTING_TRACE_END;
 }
 
-static void __update_genlist(SettingAccessibility *ad, Evas_Object *genlist)
+static void __update_switches_list(SettingAccessibility *ad, Evas_Object *genlist)
 {
        SETTING_TRACE_BEGIN;
        retm_if(ad == NULL, "Input argument is NULL");
@@ -177,7 +205,8 @@ static void __update_genlist(SettingAccessibility *ad, Evas_Object *genlist)
 
        elm_genlist_clear(genlist);
        __create_switches_group(ad, genlist);
-       __create_modify_switch_group(ad, genlist);
+       __create_add_switch_button_in_genlist(ad, genlist);
+       elm_object_disabled_set(ad->remove_switches_page_button, eina_array_count_get(ad->config.configuration_items) == 0);
 
        SETTING_TRACE_END;
 }
@@ -189,21 +218,21 @@ void setting_accessibility_universal_switch_switches_page_create(SettingAccessib
        Evas_Object *genlist = elm_genlist_add(ad->md.naviframe);
        retm_if(genlist == NULL, "Cannot set genlist object as content of layout");
 
-       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-       elm_object_style_set(genlist, "dialogue");
-
-       __update_genlist(ad, genlist);
-       ad->universal_switch_switches = genlist;
-
-       Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES), NULL, NULL, genlist, NULL);
-       elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
-
+       ad->md.naviframe_it = elm_naviframe_item_push(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES), NULL, NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(ad->md.naviframe_it, __naviframe_pop_cb, ad);
+       elm_object_item_domain_text_translatable_set(ad->md.naviframe_it, SETTING_PACKAGE, EINA_TRUE);
 
        Evas_Object *back_btn = setting_create_button(ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __back_cb, ad);
        elm_layout_content_set(ad->md.naviframe, "prev_btn", back_btn);
 
-       Evas_Object *delete_btn = setting_create_button(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES_DELETE), "naviframe/title_right", __delete_click_cb, ad);
-       elm_layout_content_set(ad->md.naviframe, "title_right_btn", delete_btn);
+       ad->remove_switches_page_button = setting_create_button(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_DELETE_CAPS), "naviframe/title_right", __create_remove_page_cb, ad);
+       elm_layout_content_set(ad->md.naviframe, "title_right_btn", ad->remove_switches_page_button);
+
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       elm_object_style_set(genlist, "dialogue");
+
+       __update_switches_list(ad, genlist);
+       ad->universal_switch_switches = genlist;
 
        SETTING_TRACE_END;
 }
diff --git a/setting-accessibility/src/setting-accessibility-universal-switch-update-switch.c b/setting-accessibility/src/setting-accessibility-universal-switch-update-switch.c
new file mode 100644 (file)
index 0000000..48c9cba
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * accessibility
+ *
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Pawel Kurowski <p.kurowski2@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://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 "setting-accessibility-universal-switch-update-switch.h"
+#include "setting-accessibility-universal-switch-action.h"
+#include "setting-accessibility-universal-switch-settings-set-value.h"
+
+static void __update_switch_action_cb(SettingAccessibility *ad, switch_action_t action, void *user_data)
+{
+       SETTING_TRACE_BEGIN;
+
+       if (ad->switch_updated_cb) {
+               UniversalSwitchConfigurationItem *config_item = user_data;
+               ad->switch_updated_cb(ad, config_item->switch_id, action, config_item->user_name);
+       }
+
+       SETTING_TRACE_END;
+}
+
+void setting_accessibility_universal_switch_update_switch_page_create(SettingAccessibility *ad, UniversalSwitchConfigurationItem *config_item)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(ad == NULL, "Input parameter is NULL");
+
+       if (strlen(config_item->provider_id) == strlen(ACCESSIBILITY_UNIVERSAL_SWITCH_ACCESSORIES_SWITCH_PROVIDER)
+               && !strncmp(config_item->provider_id, ACCESSIBILITY_UNIVERSAL_SWITCH_ACCESSORIES_SWITCH_PROVIDER, strlen(ACCESSIBILITY_UNIVERSAL_SWITCH_ACCESSORIES_SWITCH_PROVIDER)) != 0) {
+
+               ad->config_item_to_update.activity_type = strdup(config_item->activity_type);
+               ad->config_item_to_update.switch_id = strdup(config_item->switch_id);
+               ad->config_item_to_update.user_name = strdup(config_item->user_name);
+               setting_accessibility_universal_switch_settings_create_update_accesories_switch_page(ad);
+       } else {
+               setting_accessibility_universal_switch_action_page_create(ad);
+               setting_accessibility_universal_switch_action_callback_attach(ad, __update_switch_action_cb, config_item);
+       }
+
+       SETTING_TRACE_END;
+}
+
+void setting_accessibility_universal_switch_update_switch_callback_attach(SettingAccessibility *ad, universal_switch_updated_cb cb)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(ad == NULL, "Input parameter is NULL");
+
+       ad->switch_updated_cb = cb;
+
+       SETTING_TRACE_END;
+}
index 7d9ee311b6068abc07ece804bd1d4ff8ba05f7fd..f2187301758c905cb74891ffc98cf8fc240464da 100644 (file)
@@ -24,8 +24,8 @@
 #include "setting-accessibility-universal-switch-settings.h"
 #include "setting-accessibility-universal-switch-add-switch.h"
 #include "setting-accessibility-universal-switch-action.h"
+#include "setting-accessibility-universal-switch-switches.h"
 
-#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_STATE "db/setting/accessibility/universal-switch"
 
 static void __universal_switch_vconf_key_update(int state, void* data);
 static bool __universal_switch_state_set(bool state);
@@ -77,18 +77,7 @@ static void __universal_switch_off_mouse_up_Gendial_list_cb(void *data, Evas_Obj
        SETTING_TRACE_END;
 }
 
-static void __universal_switch_settings_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       SETTING_TRACE_BEGIN;
-       retm_if(data == NULL, "Invalid argument: data is NULL");
-
-       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
-       setting_accessibility_universal_switch_settings_page_create((SettingAccessibility *)data);
-
-       SETTING_TRACE_END;
-}
-
-static Eina_Bool __universal_switch_page_hide_cb(void *data, Elm_Object_Item *it)
+static Eina_Bool __naviframe_pop_cb(void *data, Elm_Object_Item *it)
 {
        SETTING_TRACE_BEGIN;
 
@@ -98,7 +87,7 @@ static Eina_Bool __universal_switch_page_hide_cb(void *data, Elm_Object_Item *it
        return EINA_TRUE;
 }
 
-static void __universal_switch_back_cb(void *data, Evas_Object *obj, void *event_info)
+static void __back_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Data argument is NULL");
@@ -131,10 +120,8 @@ static void __universal_switch_popup_response_cb(void *data, Evas_Object *obj, v
                break;
        }
 
-       if (ad->popup) {
-               evas_object_del(ad->popup);
-               ad->popup = NULL;
-       }
+       evas_object_del(ad->popup);
+       ad->popup = NULL;
        SETTING_TRACE_END;
 }
 
@@ -142,6 +129,7 @@ static void __universal_switch_new_switch_added_cb(SettingAccessibility *ad, con
 {
        SETTING_TRACE_BEGIN;
        retm_if(ad == NULL, "Input parameter is NULL");
+       setting_accessibility_universal_switch_add_switch_cb(ad, switch_id, switch_action, switch_name);
        int switch_count = setting_accessibility_universal_switch_dbus_config_get_switch_count(&ad->config);
 
        if (switch_count == 1)
@@ -160,12 +148,13 @@ static void __universal_switch_vconf_key_update(int state, void *data)
 
        if (state && switch_count == 0) {
                elm_check_state_set(ad->universal_switch_off_checkbox->eo_check, EINA_FALSE);
+               ad->md.naviframe_it = elm_naviframe_top_item_get(ad->md.naviframe);
                ad->popup = setting_create_popup(data, ad->md.window,
                                                                NULL, "To turn on Universal switch, tap ADD SWITCH and add at least one switch",
                                                                __universal_switch_popup_response_cb, 0,
                                                                true,
                                                                true,
-                                                               2, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_POPUP_ADD, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_POPUP_CANCEL);
+                                                               2, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_POPUP_ADD, DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_CANCEL);
        } else {
                __universal_switch_state_set(state);
        }
@@ -195,10 +184,9 @@ static void __universal_switch_state_display(SettingAccessibility *ad, bool stat
                ad->universal_switch_off_checkbox->keyStr = strdup(item_label);
        }
 
-       elm_object_item_disabled_set(ad->universal_switch_settings->item, !state);
+       setting_update_gl_item_chk_status(ad->universal_switch_off_checkbox, (int) state);
 
        elm_genlist_item_update(ad->universal_switch_off_checkbox->item);
-       elm_genlist_item_update(ad->universal_switch_settings->item);
        SETTING_TRACE_END;
 }
 
@@ -213,11 +201,24 @@ static void __universal_switch_new_switch_add(SettingAccessibility *ad)
        SETTING_TRACE_END;
 }
 
+static void __create_settings_page(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       SettingAccessibility *ad = data;
+       retm_if(ad == NULL, "Input parameter is NULL");
+
+       setting_accessibility_universal_switch_settings_page_create(ad);
+
+       SETTING_TRACE_END;
+}
+
 void setting_accessibility_universal_switch_page_create(SettingAccessibility *data)
 {
+       SETTING_TRACE_BEGIN;
        int ret;
        int state = false;
        SettingAccessibility *ad = (SettingAccessibility *)data;
+       ad->md.naviframe_it = NULL;
        Evas_Object *genlist = elm_genlist_add(ad->md.naviframe);
        retm_if(genlist == NULL, "Cannot set genlist object as content of layout");
 
@@ -261,24 +262,23 @@ void setting_accessibility_universal_switch_page_create(SettingAccessibility *da
                elm_genlist_item_select_mode_set(ad->universal_switch_comment->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
        }
 
-       ad->universal_switch_settings = setting_create_Gendial_field_def(
-                       genlist, &itc_1text,
-                       __universal_switch_settings_mouse_up_Gendial_list_cb,
-                       ad, SWALLOW_Type_INVALID, NULL,
-                       NULL, 0,
-                       _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS),
-                       NULL, NULL);
+       ad->md.naviframe_it = elm_naviframe_item_push(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH), NULL, NULL, genlist, NULL);
+       elm_object_item_domain_text_translatable_set(ad->md.naviframe_it, SETTING_PACKAGE, EINA_TRUE);
+       elm_naviframe_item_pop_cb_set(ad->md.naviframe_it, __naviframe_pop_cb, ad);
 
-       if (ad->universal_switch_settings) {
-               ad->universal_switch_settings->userdata = ad;
-               __universal_switch_state_display(ad, state);
-               __BACK_POINTER_SET(ad->universal_switch_settings);
-       }
+       char *title_str;
+       char *str1 = "<font_size=30>";
+       char *str2 = _(DEVOPTION_STR_ACCESSIBILITY_SETTINGS_CAPS);
+       char *str3 = "</font_size>";
+       size_t title_size = strlen(str1) + strlen(str2) + strlen(str3) + 1;
+       if ((title_str = malloc(title_size)) != NULL)
+               snprintf(title_str, title_size, "%s%s%s", str1, str2, str3);
 
-       Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH), NULL, NULL, genlist, NULL);
-       elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
-       elm_naviframe_item_pop_cb_set(navi_it, __universal_switch_page_hide_cb, ad);
+       Evas_Object *settings_button = setting_create_button(ad->md.naviframe, title_str, "naviframe/title_right", __create_settings_page, ad);
+       elm_layout_content_set(ad->md.naviframe, "title_right_btn", settings_button);
+       free(title_str);
 
-       Evas_Object *back_btn = setting_create_button(ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __universal_switch_back_cb, ad);
+       Evas_Object *back_btn = setting_create_button(ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __back_cb, ad);
        elm_layout_content_set(ad->md.naviframe, "prev_btn", back_btn);
+       SETTING_TRACE_END;
 }