2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (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>
26 #include <dpl/foreach.h>
27 #include <dpl/assert.h>
28 #include <dpl/wrt-dao-ro/WrtDatabase.h>
29 #include <dpl/wrt-dao-ro/vconf_config.h>
30 #include <dpl/wrt-dao-rw/widget_dao.h>
31 #include "exceptionsview.h"
34 namespace WebAppDetailSetting {
37 const char* const ELM_STYLE_ON_OFF = "on&off";
38 const char* const ELM_PART_ICON = "elm.icon";
39 const char* const EVAS_SMART_CALLBACK_CHANGED = "changed";
40 const char* const ELM_GENLIST_ITEM_CLASS_STYLE_GROUPINDEX = "groupindex";
41 const char* const ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT = "1text";
42 const char* const ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT_1ICON_6 = "1text.1icon.6";
43 const char* const TEXT_NAVIFRAME_TITLE = "Advanced Settings";
46 AdvancedView::AdvancedView(Evas_Object *navi, int appID) :
50 m_groupMenuMap[GROUP_IDX_SECURITY_SETTINGS] = "Security Settings";
51 m_groupMenuMap[GROUP_IDX_DEVELOPER_OPTIONS] = "Developer Options";
53 m_menuMap[SECURITY_SETTINGS_IDX_SECURITY_POPUP_USAGE] =
54 "Show security warnings";
55 m_menuMap[SECURITY_SETTINGS_IDX_GEOLOCATION_USAGE] =
57 m_menuMap[SECURITY_SETTINGS_IDX_WEB_NOTIFICATION_USAGE] =
59 m_menuMap[SECURITY_SETTINGS_IDX_WEB_DATABASE_USAGE] =
61 m_menuMap[SECURITY_SETTINGS_IDX_FILE_SYSTEM_USAGE] =
63 m_menuMap[SECURITY_SETTINGS_IDX_EXCEPTIONS_SETTINGS] =
64 "Exceptions Settings";
65 m_menuMap[DEVELOPER_OPTIONS_IDX_MEMORY_SAVING_MODE] =
69 AdvancedView::~AdvancedView(void)
73 char* AdvancedView::getGroupText(void* data,
78 AdvancedSettingsGroupData* advancedSettingsData =
79 static_cast<AdvancedSettingsGroupData*>(data);
80 return strdup(advancedSettingsData->m_menuText.c_str());
83 void AdvancedView::delGroupData(void* data,
87 AdvancedSettingsGroupData* advancedSettingsData =
88 static_cast<AdvancedSettingsGroupData*>(data);
89 delete advancedSettingsData;
92 char* AdvancedView::getSettingText(void *data,
97 SettingData* settingData = static_cast<SettingData*>(data);
98 return strdup(settingData->m_menuText.c_str());
101 Evas_Object* AdvancedView::getSettingContent(void* data,
103 const char* /*part*/)
106 SettingData* settingData =
107 static_cast<SettingData*>(data);
110 Evas_Object* icon = elm_check_add(obj);
111 elm_check_state_set(icon, EINA_TRUE);
112 elm_object_style_set(icon, ELM_STYLE_ON_OFF);
113 settingData->m_iconPart = ELM_PART_ICON;
115 evas_object_propagate_events_set(
118 elm_check_state_set(icon, settingData->isEnabled() ? EINA_TRUE : EINA_FALSE);
119 evas_object_smart_callback_add(icon,
120 EVAS_SMART_CALLBACK_CHANGED,
121 settingChangedCallback,
127 void AdvancedView::delSettingData(void* data,
128 Evas_Object* /*obj*/)
131 SettingData* settingData = static_cast<SettingData*>(data);
135 void AdvancedView::settingSelectedCallback(void* data,
140 Elm_Object_Item* item = static_cast<Elm_Object_Item*>(eventInfo);
141 elm_genlist_item_selected_set(item, EINA_FALSE);
143 SettingData* settingData =
144 static_cast<SettingData*>(elm_object_item_data_get(item));
148 elm_object_item_part_content_get(item,
149 settingData->m_iconPart.c_str());
151 bool state = !elm_check_state_get(check);
152 settingData->saveChange(state);
153 elm_check_state_set(check, state);
156 void AdvancedView::settingChangedCallback(void* data,
161 SettingData* settingData =
162 static_cast<SettingData*>(data);
164 settingData->saveChange(elm_check_state_get(obj));
167 char* AdvancedView::getSecurityExceptionsSettingsText(void *data,
172 return strdup("Exceptions Settings");
175 void AdvancedView::securityExceptionsSettingsSelectedCallback(void* data,
180 Elm_Object_Item* item = static_cast<Elm_Object_Item*>(eventInfo);
181 elm_genlist_item_selected_set(item, EINA_FALSE);
184 static_cast<AdvancedView*>(elm_object_item_data_get(item));
186 This->m_exceptionsView.Reset(
187 new ExceptionsView(This->m_naviframe, This->m_appID));
188 if (!This->m_exceptionsView->loadView()) {
189 This->m_exceptionsView.Reset();
193 bool AdvancedView::loadView(void)
197 Evas_Object* genlist = NULL;
198 genlist = elm_genlist_add(m_naviframe);
201 static Elm_Genlist_Item_Class itcGroup = {0,};
202 itcGroup.item_style = ELM_GENLIST_ITEM_CLASS_STYLE_GROUPINDEX;
203 itcGroup.func.text_get = getGroupText;
204 itcGroup.func.del = delGroupData;
206 for (int index = GROUP_IDX_START; index <= GROUP_IDX_END; index++) {
207 Elm_Object_Item* groupItem =
208 elm_genlist_item_append(genlist,
211 new AdvancedSettingsGroupData(
212 m_groupMenuMap[index])),
214 ELM_GENLIST_ITEM_NONE,
217 elm_genlist_item_select_mode_set(groupItem,
218 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
220 if (index == GROUP_IDX_SECURITY_SETTINGS) {
221 // create Security Settings menu
222 loadSecuritySettingsMenu(genlist);
223 } else if (index == GROUP_IDX_DEVELOPER_OPTIONS) {
224 // create developer Options menu
225 loadDeveloperOptionsMenu(genlist);
227 LogError("Wrong index");
230 elm_naviframe_item_push(m_naviframe,
231 TEXT_NAVIFRAME_TITLE,
240 void AdvancedView::loadSecuritySettingsMenu(Evas_Object* genlist)
242 for (int index = SECURITY_SETTINGS_IDX_START; index <= SECURITY_SETTINGS_IDX_END; index++) {
243 if (index == SECURITY_SETTINGS_IDX_EXCEPTIONS_SETTINGS) {
244 // create exceptions security settings menu
245 static Elm_Genlist_Item_Class itcSecurityExceptionsSettings = {0,};
246 itcSecurityExceptionsSettings.item_style =
247 ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT;
248 itcSecurityExceptionsSettings.func.text_get = getSecurityExceptionsSettingsText;
249 itcSecurityExceptionsSettings.func.content_get = NULL;
250 itcSecurityExceptionsSettings.func.state_get = NULL;
251 itcSecurityExceptionsSettings.func.del = NULL;
252 elm_genlist_item_append(genlist,
253 &itcSecurityExceptionsSettings,
254 static_cast<void*>(this),
256 ELM_GENLIST_ITEM_NONE,
257 securityExceptionsSettingsSelectedCallback,
262 static Elm_Genlist_Item_Class itcSecuritySettings = {0,};
263 itcSecuritySettings.item_style =
264 ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT_1ICON_6;
265 itcSecuritySettings.func.text_get = getSettingText;
266 itcSecuritySettings.func.content_get = getSettingContent;
267 itcSecuritySettings.func.state_get = NULL;
268 itcSecuritySettings.func.del = delSettingData;
270 elm_genlist_item_append(genlist,
271 &itcSecuritySettings,
274 m_appID, index, m_menuMap[index])),
276 ELM_GENLIST_ITEM_NONE,
277 settingSelectedCallback,
283 void AdvancedView::loadDeveloperOptionsMenu(Evas_Object* genlist)
285 static Elm_Genlist_Item_Class itcDeveloperOptions = {0,};
286 itcDeveloperOptions.item_style =
287 ELM_GENLIST_ITEM_CLASS_STYLE_1TEXT_1ICON_6;
288 itcDeveloperOptions.func.text_get = getSettingText;
289 itcDeveloperOptions.func.content_get = getSettingContent;
290 itcDeveloperOptions.func.state_get = NULL;
291 itcDeveloperOptions.func.del = delSettingData;
293 for (int index = DEVELOPER_OPTIONS_IDX_START; index <= DEVELOPER_OPTIONS_IDX_END; index++) {
294 elm_genlist_item_append(genlist,
295 &itcDeveloperOptions,
298 m_appID, index, m_menuMap[index])),
300 ELM_GENLIST_ITEM_NONE,
301 settingSelectedCallback,
306 SettingData::SettingData(int appID, int index, std::string menuText) :
307 m_index(static_cast<MenuIndex>(index)),
310 m_dao.Reset(new WrtDB::WidgetDAO(appID));
313 bool SettingData::isEnabled()
315 using namespace WrtDB;
317 if (m_index == SECURITY_SETTINGS_IDX_SECURITY_POPUP_USAGE) {
318 key = VconfConfig::GetVconfKeyPopupUsage(m_dao->getPkgName());
319 } else if (m_index == SECURITY_SETTINGS_IDX_GEOLOCATION_USAGE) {
320 key = VconfConfig::GetVconfKeyGeolocationUsage(m_dao->getPkgName());
321 } else if (m_index == SECURITY_SETTINGS_IDX_WEB_NOTIFICATION_USAGE) {
322 key = VconfConfig::GetVconfKeyWebNotificationUsage(
323 m_dao->getPkgName());
324 } else if (m_index == SECURITY_SETTINGS_IDX_WEB_DATABASE_USAGE) {
325 key = VconfConfig::GetVconfKeyWebDatabaseUsage(m_dao->getPkgName());
326 } else if (m_index == SECURITY_SETTINGS_IDX_FILE_SYSTEM_USAGE) {
327 key = VconfConfig::GetVconfKeyFilesystemUsage(m_dao->getPkgName());
328 } else if (m_index == DEVELOPER_OPTIONS_IDX_MEMORY_SAVING_MODE) {
329 key = VconfConfig::GetVconfKeyMemorySavingMode(m_dao->getPkgName());
331 Assert("Wrong menu index");
335 vconf_get_int(key.c_str(), &ret);
336 if (static_cast<SettingsType>(ret) == SETTINGS_TYPE_ON) {
338 } else if (static_cast<SettingsType>(ret) == SETTINGS_TYPE_OFF) {
342 Assert("Unsupported value");
343 // For preventing compile warning, even this code isn't necessary.
347 void SettingData::saveChange(bool state)
349 using namespace WrtDB;
350 SettingsType result = state ? SETTINGS_TYPE_ON : SETTINGS_TYPE_OFF;
353 if (m_index == SECURITY_SETTINGS_IDX_SECURITY_POPUP_USAGE) {
354 key = VconfConfig::GetVconfKeyPopupUsage(m_dao->getPkgName());
355 } else if (m_index == SECURITY_SETTINGS_IDX_GEOLOCATION_USAGE) {
356 key = VconfConfig::GetVconfKeyGeolocationUsage(m_dao->getPkgName());
357 } else if (m_index == SECURITY_SETTINGS_IDX_WEB_NOTIFICATION_USAGE) {
358 key = VconfConfig::GetVconfKeyWebNotificationUsage(
359 m_dao->getPkgName());
360 } else if (m_index == SECURITY_SETTINGS_IDX_WEB_DATABASE_USAGE) {
361 key = VconfConfig::GetVconfKeyWebDatabaseUsage(m_dao->getPkgName());
362 } else if (m_index == SECURITY_SETTINGS_IDX_FILE_SYSTEM_USAGE) {
363 key = VconfConfig::GetVconfKeyFilesystemUsage(m_dao->getPkgName());
364 } else if (m_index == DEVELOPER_OPTIONS_IDX_MEMORY_SAVING_MODE) {
365 key = VconfConfig::GetVconfKeyMemorySavingMode(m_dao->getPkgName());
367 Assert("Wrong menu index");
369 vconf_set_int(key.c_str(), static_cast<int>(result));
372 } /* WebAppDetailSetting */