Fix checkbuttons in Settings 55/93955/2
authorKamil Nowac <k.nowac@samsung.com>
Wed, 26 Oct 2016 06:57:26 +0000 (08:57 +0200)
committerKamil Nowa? <k.nowac@samsung.com>
Thu, 27 Oct 2016 10:02:35 +0000 (03:02 -0700)
[Issue]    http://suprem.sec.samsung.net/jira/browse/TWF-2352
[Problem]  Checkbuttons are not working properly
[Solution] Changed mechanics
[Verify]   As in the issue

Change-Id: I218f6741644b0535286f0c2c5b4e40afd06f0056

services/SettingsUI/SettingsAdvanced.cpp
services/SettingsUI/SettingsAdvanced.h
services/SettingsUI/SettingsMain.cpp
services/SettingsUI/SettingsMain.h
services/SettingsUI/SettingsPrivacy.cpp
services/SettingsUI/SettingsPrivacy.h

index e66b896a3c6d4c7c5875eb5ae89e9cfa88c14841..3a0e76394aea5c369cbaa16c05b8eeb62d147c85 100755 (executable)
@@ -114,24 +114,47 @@ bool SettingsAdvanced::populateList(Evas_Object* genlist)
     m_naviframe->setTitle(_(Translations::SettingsAdvancedTitle.c_str()));
 
     m_genlistItems[SettingsAdvancedOptions::ENABLE_JS] =
-        appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsAdvancedOptions::ENABLE_JS], _enable_js_cb);
+        appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsAdvancedOptions::ENABLE_JS], _check_cb);
     m_genlistItems[SettingsAdvancedOptions::BLOCK_POPUPS] =
-        appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsAdvancedOptions::BLOCK_POPUPS], _block_popups_cb);
+        appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsAdvancedOptions::BLOCK_POPUPS], _check_cb);
     m_genlistItems[SettingsAdvancedOptions::SAVE_CONTENT] =
         appendGenlist(genlist, m_setting_item_class, &m_buttonsMap[SettingsAdvancedOptions::SAVE_CONTENT], _save_content_cb);
-
+    evas_object_smart_callback_add(genlist, "realized", _realized_cb, this);
     changeGenlistStorage();
 
     return true;
 }
 
+void SettingsAdvanced::_realized_cb(void* data, Evas_Object*, void* event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    auto ev = static_cast<Elm_Object_Item*>(event_info);
+    auto item = static_cast<ItemData*>(elm_object_item_data_get(ev));
+    auto sp = static_cast<SettingsAdvanced*>(data);
+    auto check = sp->m_checkboxes[item->id];
+    switch (item->id) {
+        case SettingsAdvancedOptions::ENABLE_JS:
+            evas_object_smart_callback_del(check, "changed", _enable_js_cb);
+            evas_object_smart_callback_add(check, "changed", _enable_js_cb, nullptr);
+            break;
+        case SettingsAdvancedOptions::BLOCK_POPUPS:
+            evas_object_smart_callback_del(check, "changed", _block_popups_cb);
+            evas_object_smart_callback_add(check, "changed", _block_popups_cb, nullptr);
+            break;
+        default:
+            break;
+    }
+}
+
 Evas_Object* SettingsAdvanced::createOnOffCheckBox(Evas_Object* obj, ItemData* itd)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     auto check = elm_check_add(obj);
     elm_object_style_set(check, "on&off");
     elm_check_state_set(check, getOriginalState(itd->id));
-    evas_object_smart_callback_add(check, "changed", grid_item_check_changed, itd);
+    evas_object_propagate_events_set(check, EINA_FALSE);
+
     return check;
 }
 
@@ -155,7 +178,7 @@ Eina_Bool SettingsAdvanced::getOriginalState(int id)
     return (sig && *sig) ? EINA_TRUE : EINA_FALSE;
 }
 
-void SettingsAdvanced::_enable_js_cb(void *, Evas_Object* obj, void*)
+void SettingsAdvanced::_check_cb(void*, Evas_Object* obj, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     auto el = elm_genlist_selected_item_get(obj);
@@ -163,6 +186,14 @@ void SettingsAdvanced::_enable_js_cb(void *, Evas_Object* obj, void*)
     auto value = !elm_check_state_get(check);
 
     elm_check_state_set(check, value);
+    evas_object_smart_callback_call(check, "changed", nullptr);
+}
+
+void SettingsAdvanced::_enable_js_cb(void *, Evas_Object* obj, void*)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    auto value = elm_check_state_get(obj);
+
     SPSC.setWebEngineSettingsParam(
         basic_webengine::WebEngineSettings::ENABLE_JAVASCRIPT,
         static_cast<bool>(value));
@@ -171,11 +202,8 @@ void SettingsAdvanced::_enable_js_cb(void *, Evas_Object* obj, void*)
 void SettingsAdvanced::_block_popups_cb(void *, Evas_Object* obj, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    auto el = elm_genlist_selected_item_get(obj);
-    auto check = elm_object_item_part_content_get(el, "elm.swallow.end");
-    auto value = !elm_check_state_get(check);
+    auto value = elm_check_state_get(obj);
 
-    elm_check_state_set(check, value);
     SPSC.setWebEngineSettingsParam(
         basic_webengine::WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES,
         static_cast<bool>(value));
index 009b6cf370760665774db2040190a589b6a06305..a597dc8227fb7c684c58a2e1c2f94ae5d093a842 100755 (executable)
@@ -53,11 +53,13 @@ class SettingsAdvanced
 public:
     SettingsAdvanced(Evas_Object* parent);
     virtual ~SettingsAdvanced();
-    virtual bool populateList(Evas_Object* genlist) override;
-    virtual void updateButtonMap() override;
-    Evas_Object* createOnOffCheckBox(Evas_Object* obj, ItemData*);
+    bool populateList(Evas_Object* genlist) override;
+    void updateButtonMap() override;
+    Evas_Object* createOnOffCheckBox(Evas_Object* obj, ItemData*) override;
     Eina_Bool getOriginalState(int id);
     void changeGenlistStorage();
+    static void _realized_cb(void* data, Evas_Object*, void* event_info);
+    static void _check_cb(void* data, Evas_Object* obj, void* event_info);
     static void _enable_js_cb(void *data, Evas_Object*obj , void* event_info);
     static void _block_popups_cb(void *data, Evas_Object*obj , void* event_info);
     static void _save_content_cb(void *data, Evas_Object*obj , void* event_info);
index 458fa0d506b911ea1437c554c94f230db7c339af..1f6f46da3f329b3b908b1a92d01242566ddf6227 100644 (file)
@@ -114,16 +114,36 @@ bool SettingsMain::populateList(Evas_Object* genlist)
         appendGenlist(genlist, m_setting_item_class, &m_buttonsMap[SettingsMainOptions::ADVANCED], _advanced_cb);
     m_genlistItems[SettingsMainOptions::USER_AGENT] =
         appendGenlist(genlist, m_setting_item_class, &m_buttonsMap[SettingsMainOptions::USER_AGENT], _user_agent_cb);
+    evas_object_smart_callback_add(genlist, "realized", _realized_cb, this);
+
     return true;
 }
 
-Evas_Object* SettingsMain::createOnOffCheckBox(Evas_Object* obj, ItemData* itd)
+void SettingsMain::_realized_cb(void* data, Evas_Object*, void* event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    auto ev = static_cast<Elm_Object_Item*>(event_info);
+    auto item = static_cast<ItemData*>(elm_object_item_data_get(ev));
+    auto sp = static_cast<SettingsMain*>(data);
+    auto check = sp->m_checkboxes[item->id];
+    switch (item->id) {
+        case SettingsMainOptions::ZOOM:
+            evas_object_smart_callback_del(check, "changed", grid_item_check_changed);
+            evas_object_smart_callback_add(check, "changed", grid_item_check_changed, nullptr);
+            break;
+        default:
+            break;
+    }
+}
+
+Evas_Object* SettingsMain::createOnOffCheckBox(Evas_Object* obj, ItemData*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     auto check = elm_check_add(obj);
     elm_object_style_set(check, "on&off");
     elm_check_state_set(check, getOriginalZoomState());
-    evas_object_smart_callback_add(check, "changed", grid_item_check_changed, itd);
+    evas_object_propagate_events_set(check, EINA_FALSE);
     return check;
 }
 
@@ -162,14 +182,13 @@ void SettingsMain::_search_engine_cb(void*, Evas_Object*, void*)
 void SettingsMain::_zoom_cb(void *, Evas_Object* obj, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
     auto el = elm_genlist_selected_item_get(obj);
     auto check = elm_object_item_part_content_get(el, "elm.swallow.end");
     auto value = !elm_check_state_get(check);
 
     elm_check_state_set(check, value);
-    SPSC.setWebEngineSettingsParam(
-        basic_webengine::WebEngineSettings::PAGE_OVERVIEW,
-        static_cast<bool>(value));
+    evas_object_smart_callback_call(check, "changed", nullptr);
 }
 
 void SettingsMain::_advanced_cb(void*, Evas_Object*, void*)
@@ -200,9 +219,8 @@ void SettingsMain::grid_item_check_changed(void*, Evas_Object* obj, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
-    auto value = !elm_check_state_get(obj);
+    auto value = elm_check_state_get(obj);
 
-    elm_check_state_set(obj, value);
     SPSC.setWebEngineSettingsParam(
         basic_webengine::WebEngineSettings::PAGE_OVERVIEW,
         static_cast<bool>(value));
index 3fcf6d0c0016ded674cd7d74ce1f2bb3b064ef63..0dace031c9f72f55ebc6f8aa5e6ecef2ce542831 100644 (file)
@@ -53,13 +53,14 @@ public:
     SettingsMain(){};
     SettingsMain(Evas_Object* parent);
     virtual ~SettingsMain();
-    virtual bool populateList(Evas_Object* genlist) override;
-    Evas_Object* createOnOffCheckBox(Evas_Object* obj, ItemData* itd);
+    bool populateList(Evas_Object* genlist) override;
+    Evas_Object* createOnOffCheckBox(Evas_Object* obj, ItemData* itd) override;
     Eina_Bool getOriginalZoomState();
     std::string getHomePage();
-    virtual void updateButtonMap() override;
-    virtual void connectSignals() override {};
-    virtual void disconnectSignals() override {};
+    void updateButtonMap() override;
+    void connectSignals() override {};
+    void disconnectSignals() override {};
+    static void _realized_cb(void* data, Evas_Object*, void* event_info);
     static void _home_page_cb(void *data, Evas_Object*obj , void* event_info);
     static void _search_engine_cb(void *data, Evas_Object*obj , void* event_info);
     static void _zoom_cb(void *data, Evas_Object*obj , void* event_info);
index 55a138263045353d63bc26199088383050d5159d..2652a163a478392afeb7a84500b4863cf2509f63 100755 (executable)
@@ -23,7 +23,8 @@ namespace tizen_browser{
 namespace base_ui{
 
 
-SettingsPrivacy::SettingsPrivacy(Evas_Object* parent){
+SettingsPrivacy::SettingsPrivacy(Evas_Object* parent)
+{
     init(parent);
     updateButtonMap();
 };
@@ -35,19 +36,24 @@ SettingsPrivacy::~SettingsPrivacy()
 
 void SettingsPrivacy::updateButtonMap()
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
     ItemData cookies;
     cookies.buttonText = _(Translations::SettingsPrivacyAcceptCookies.c_str());
     cookies.subText = _(Translations::SettingsPrivacyAcceptCookiesSub.c_str());
     cookies.sui = this;
+    cookies.id = SettingsPrivacyOptions::COOKIES;
 
     ItemData signIn;
     signIn.buttonText = _(Translations::SettingsPrivacySaveSigninInfo.c_str());
     signIn.subText = _(Translations::SettingsPrivacySaveSigninInfo.c_str());
     signIn.sui = this;
+    signIn.id = SettingsPrivacyOptions::SIGNIN_INFO;
 
     ItemData delPerData;
     delPerData.buttonText = _(Translations::SettingsPrivacyDeletePersonalData.c_str());
     delPerData.sui = this;
+    delPerData.id = SettingsPrivacyOptions::DEL_PER_DATA;
 
     m_buttonsMap[SettingsPrivacyOptions::COOKIES] = cookies;
     m_buttonsMap[SettingsPrivacyOptions::SIGNIN_INFO] = signIn;
@@ -56,18 +62,43 @@ void SettingsPrivacy::updateButtonMap()
 
 bool SettingsPrivacy::populateList(Evas_Object* genlist)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
     m_naviframe->setLeftButtonVisible(false);
     m_naviframe->setRightButtonVisible(false);
     m_naviframe->setPrevButtonVisible(true);
     m_naviframe->setTitle(_(Translations::SettingsPrivacyTitle.c_str()));
 
-    appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsPrivacyOptions::COOKIES], _cookies_cb);
-    appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsPrivacyOptions::SIGNIN_INFO], _signin_cb);
+    appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsPrivacyOptions::COOKIES], _check_cb);
+    appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsPrivacyOptions::SIGNIN_INFO], _check_cb);
     appendGenlist(genlist, m_setting_item_class, &m_buttonsMap[SettingsPrivacyOptions::DEL_PER_DATA], _del_per_data_cb);
+    evas_object_smart_callback_add(genlist, "realized", _realized_cb, this);
     return true;
 }
 
-void SettingsPrivacy::_cookies_cb(void *, Evas_Object* obj, void*)
+void SettingsPrivacy::_realized_cb(void* data, Evas_Object*, void* event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    auto ev = static_cast<Elm_Object_Item*>(event_info);
+    auto item = static_cast<ItemData*>(elm_object_item_data_get(ev));
+    auto sp = static_cast<SettingsPrivacy*>(data);
+    auto check = sp->m_checkboxes[item->id];
+    switch (item->id) {
+        case SettingsPrivacyOptions::COOKIES:
+            evas_object_smart_callback_del(check, "changed", _cookies_cb);
+            evas_object_smart_callback_add(check, "changed", _cookies_cb, nullptr);
+            break;
+        case SettingsPrivacyOptions::SIGNIN_INFO:
+            evas_object_smart_callback_del(check, "changed", _signin_cb);
+            evas_object_smart_callback_add(check, "changed", _signin_cb, nullptr);
+            break;
+        default:
+            break;
+    }
+}
+
+void SettingsPrivacy::_check_cb(void*, Evas_Object* obj, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     auto el = elm_genlist_selected_item_get(obj);
@@ -75,6 +106,13 @@ void SettingsPrivacy::_cookies_cb(void *, Evas_Object* obj, void*)
     auto value = !elm_check_state_get(check);
 
     elm_check_state_set(check, value);
+    evas_object_smart_callback_call(check, "changed", nullptr);
+}
+
+void SettingsPrivacy::_cookies_cb(void*, Evas_Object* obj, void*)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    auto value = elm_check_state_get(obj);
     if (value == EINA_TRUE)
         ewk_cookie_manager_accept_policy_set(
             ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_ALWAYS);
@@ -83,14 +121,10 @@ void SettingsPrivacy::_cookies_cb(void *, Evas_Object* obj, void*)
             ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_NEVER);
 }
 
-void SettingsPrivacy::_signin_cb(void *, Evas_Object* obj, void*)
+void SettingsPrivacy::_signin_cb(void*, Evas_Object* obj, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    auto el = elm_genlist_selected_item_get(obj);
-    auto check = elm_object_item_part_content_get(el, "elm.swallow.end");
-    auto value = !elm_check_state_get(check);
-
-    elm_check_state_set(check, value);
+    auto value = elm_check_state_get(obj);
     SPSC.setWebEngineSettingsParam(
         basic_webengine::WebEngineSettings::REMEMBER_PASSWORDS,
         static_cast<bool>(value));
index 3c37f0e4ff651487a0a69abdaf490a3d9cfebd50..a9a91627f05010632244374ac8ace083e257f8f3 100755 (executable)
@@ -45,11 +45,13 @@ public:
     SettingsPrivacy(){};
     SettingsPrivacy(Evas_Object* parent);
     virtual ~SettingsPrivacy();
-    virtual bool populateList(Evas_Object* genlist);
-    virtual void updateButtonMap();
+    bool populateList(Evas_Object* genlist) override;
+    void updateButtonMap() override;
     static void _cookies_cb(void *data, Evas_Object*obj , void* event_info);
     static void _signin_cb(void *data, Evas_Object*obj , void* event_info);
     static void _del_per_data_cb(void *data, Evas_Object*obj , void* event_info);
+    static void _realized_cb(void* data, Evas_Object* obj, void* event_info);
+    static void _check_cb(void* data, Evas_Object* obj, void* event_info);
 };
 
 }