2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "advancedview.h"
23 #include <Elementary.h>
25 #include <dpl/foreach.h>
26 #include <dpl/assert.h>
27 #include <dpl/wrt-dao-ro/WrtDatabase.h>
28 #include <dpl/wrt-dao-rw/widget_dao.h>
29 #include "exceptionsview.h"
32 namespace WebAppDetailSetting {
35 const char* const ELM_STYLE_CHECKBOX = "checkbox";
36 const char* const ELM_PART_ICON = "elm.icon";
37 const char* const EVAS_SMART_CALLBACK_CHANGED = "changed";
38 const char* const ELM_GENLIST_ITEM_CLASS_STYLE_GROUPINDEX = "groupindex";
39 const char* const ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT = "1text";
40 const char* const ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT_1ICON_6 = "1text.1icon.2";
41 const char* const TEXT_NAVIFRAME_TITLE = "ALLOW LIST";
44 AdvancedView::AdvancedView(Evas_Object *navi, DPL::String appID) :
48 m_groupMenuMap[GROUP_IDX_SECURITY_SETTINGS] = "Security Settings";
49 m_groupMenuMap[GROUP_IDX_DEVELOPER_OPTIONS] = "Developer Options";
51 m_menuMap[SECURITY_SETTINGS_IDX_SECURITY_POPUP_USAGE] =
52 "Show security warnings";
53 m_menuMap[SECURITY_SETTINGS_IDX_GEOLOCATION_USAGE] =
55 m_menuMap[SECURITY_SETTINGS_IDX_WEB_NOTIFICATION_USAGE] =
57 m_menuMap[SECURITY_SETTINGS_IDX_WEB_STORAGE_USAGE] =
59 m_menuMap[SECURITY_SETTINGS_IDX_EXCEPTIONS_SETTINGS] =
60 "Exceptions Settings";
61 m_menuMap[DEVELOPER_OPTIONS_IDX_MEMORY_SAVING_MODE] =
65 AdvancedView::~AdvancedView(void)
69 char* AdvancedView::getGroupText(void* data,
74 AdvancedSettingsGroupData* advancedSettingsData =
75 static_cast<AdvancedSettingsGroupData*>(data);
76 return strdup(advancedSettingsData->m_menuText.c_str());
79 void AdvancedView::delGroupData(void* data,
83 AdvancedSettingsGroupData* advancedSettingsData =
84 static_cast<AdvancedSettingsGroupData*>(data);
85 delete advancedSettingsData;
88 char* AdvancedView::getSettingText(void *data,
93 SettingData* settingData = static_cast<SettingData*>(data);
94 return strdup(settingData->m_menuText.c_str());
97 Evas_Object* AdvancedView::getSettingContent(void* data,
102 SettingData* settingData =
103 static_cast<SettingData*>(data);
106 Evas_Object* icon = elm_check_add(obj);
107 elm_check_state_set(icon, EINA_TRUE);
108 elm_object_style_set(icon, ELM_STYLE_CHECKBOX);
109 settingData->m_iconPart = ELM_PART_ICON;
111 evas_object_propagate_events_set(
114 elm_check_state_set(icon, settingData->isEnabled() ? EINA_TRUE : EINA_FALSE);
115 evas_object_smart_callback_add(icon,
116 EVAS_SMART_CALLBACK_CHANGED,
117 settingChangedCallback,
123 void AdvancedView::delSettingData(void* data,
124 Evas_Object* /*obj*/)
127 SettingData* settingData = static_cast<SettingData*>(data);
131 void AdvancedView::settingSelectedCallback(void* data,
136 Elm_Object_Item* item = static_cast<Elm_Object_Item*>(eventInfo);
137 elm_genlist_item_selected_set(item, EINA_FALSE);
139 SettingData* settingData =
140 static_cast<SettingData*>(elm_object_item_data_get(item));
144 elm_object_item_part_content_get(item,
145 settingData->m_iconPart.c_str());
147 bool state = !elm_check_state_get(check);
148 settingData->saveChange(state);
149 elm_check_state_set(check, state);
152 void AdvancedView::settingChangedCallback(void* data,
157 SettingData* settingData =
158 static_cast<SettingData*>(data);
160 settingData->saveChange(elm_check_state_get(obj));
163 char* AdvancedView::getSecurityExceptionsSettingsText(void *data,
168 return strdup("Exceptions Settings");
171 void AdvancedView::securityExceptionsSettingsSelectedCallback(void* data,
176 Elm_Object_Item* item = static_cast<Elm_Object_Item*>(eventInfo);
177 elm_genlist_item_selected_set(item, EINA_FALSE);
180 static_cast<AdvancedView*>(elm_object_item_data_get(item));
182 This->m_exceptionsView.Reset(
183 new ExceptionsView(This->m_naviframe, This->m_appID));
184 if (!This->m_exceptionsView->loadView()) {
185 This->m_exceptionsView.Reset();
189 bool AdvancedView::loadView(void)
191 m_exceptionsView.Reset(
192 new ExceptionsView(m_naviframe, m_appID));
193 if (!m_exceptionsView->loadView()) {
194 m_exceptionsView.Reset();
199 void AdvancedView::loadSecuritySettingsMenu(Evas_Object* genlist)
201 for (int index = SECURITY_SETTINGS_IDX_START; index <= SECURITY_SETTINGS_IDX_END; index++) {
202 if (index == SECURITY_SETTINGS_IDX_EXCEPTIONS_SETTINGS) {
203 // create exceptions security settings menu
204 static Elm_Genlist_Item_Class itcSecurityExceptionsSettings = {0,};
205 itcSecurityExceptionsSettings.item_style =
206 ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT;
207 itcSecurityExceptionsSettings.func.text_get = getSecurityExceptionsSettingsText;
208 itcSecurityExceptionsSettings.func.content_get = NULL;
209 itcSecurityExceptionsSettings.func.state_get = NULL;
210 itcSecurityExceptionsSettings.func.del = NULL;
211 elm_genlist_item_append(genlist,
212 &itcSecurityExceptionsSettings,
213 static_cast<void*>(this),
215 ELM_GENLIST_ITEM_NONE,
216 securityExceptionsSettingsSelectedCallback,
221 static Elm_Genlist_Item_Class itcSecuritySettings = {0,};
222 itcSecuritySettings.item_style =
223 ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT_1ICON_6;
224 itcSecuritySettings.func.text_get = getSettingText;
225 itcSecuritySettings.func.content_get = getSettingContent;
226 itcSecuritySettings.func.state_get = NULL;
227 itcSecuritySettings.func.del = delSettingData;
229 elm_genlist_item_append(genlist,
230 &itcSecuritySettings,
233 m_appID, index, m_menuMap[index])),
235 ELM_GENLIST_ITEM_NONE,
236 settingSelectedCallback,
242 void AdvancedView::loadDeveloperOptionsMenu(Evas_Object* genlist)
244 static Elm_Genlist_Item_Class itcDeveloperOptions = {0,};
245 itcDeveloperOptions.item_style =
246 ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT_1ICON_6;
247 itcDeveloperOptions.func.text_get = getSettingText;
248 itcDeveloperOptions.func.content_get = getSettingContent;
249 itcDeveloperOptions.func.state_get = NULL;
250 itcDeveloperOptions.func.del = delSettingData;
252 for (int index = DEVELOPER_OPTIONS_IDX_START; index <= DEVELOPER_OPTIONS_IDX_END; index++) {
253 elm_genlist_item_append(genlist,
254 &itcDeveloperOptions,
257 m_appID, index, m_menuMap[index])),
259 ELM_GENLIST_ITEM_NONE,
260 settingSelectedCallback,
265 SettingData::SettingData(DPL::String appID, int index, std::string menuText) :
266 m_index(static_cast<MenuIndex>(index)),
269 m_dao.Reset(new WrtDB::WidgetDAO(appID));
272 bool SettingData::isEnabled()
274 using namespace WrtDB;
275 SettingsType ret = SETTINGS_TYPE_UNKNOWN;
276 if (m_index == SECURITY_SETTINGS_IDX_SECURITY_POPUP_USAGE) {
277 ret = m_dao->getSecurityPopupUsage();
278 } else if (m_index == SECURITY_SETTINGS_IDX_GEOLOCATION_USAGE) {
279 ret = m_dao->getSecurityPopupUsage();
280 } else if (m_index == SECURITY_SETTINGS_IDX_WEB_NOTIFICATION_USAGE) {
281 ret = m_dao->getSecurityPopupUsage();
282 } else if (m_index == SECURITY_SETTINGS_IDX_WEB_STORAGE_USAGE) {
283 ret = m_dao->getSecurityPopupUsage();
285 Assert("Wrong menu index");
288 if (ret == SETTINGS_TYPE_ON) {
290 } else if (ret == SETTINGS_TYPE_OFF) {
294 Assert("Unsupported value");
295 // For preventing compile warning, even this code isn't necessary.
299 void SettingData::saveChange(bool state)
301 using namespace WrtDB;
302 SettingsType result = state ? SETTINGS_TYPE_ON : SETTINGS_TYPE_OFF;
304 if (m_index == SECURITY_SETTINGS_IDX_SECURITY_POPUP_USAGE) {
305 m_dao->setSecurityPopupUsage(result);
306 } else if (m_index == SECURITY_SETTINGS_IDX_GEOLOCATION_USAGE) {
307 m_dao->setGeolocationUsage(result);
308 } else if (m_index == SECURITY_SETTINGS_IDX_WEB_NOTIFICATION_USAGE) {
309 m_dao->setWebNotificationUsage(result);
310 } else if (m_index == SECURITY_SETTINGS_IDX_WEB_STORAGE_USAGE) {
311 m_dao->setWebDatabaseUsage(result);
313 Assert("Wrong menu index");
317 } /* WebAppDetailSetting */