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 "exceptionsview.h"
22 #include <Elementary.h>
24 #include <dpl/foreach.h>
25 #include <dpl/assert.h>
26 #include <dpl/string.h>
27 #include <dpl/wrt-dao-ro/widget_dao_read_only.h>
28 #include <wrt-commons/security-origin-dao/security_origin_dao.h>
30 //#include <ui-gadget.h>
33 namespace WebAppDetailSetting {
37 const char* const ELM_PART_TEXT_1 = "elm.text.1";
38 const char* const ELM_PART_TEXT_2 = "elm.text.2";
39 const char* const ELM_PART_TEXT_3 = "elm.text.3";
40 const char* const ELM_PART_DEFAULT = "default";
41 const char* const ELM_PART_BUTTON1 = "button1";
42 const char* const ELM_PART_BUTTON2 = "button2";
43 const char* const ELM_WIDGET_TYPE_POPUP = "elm_popup";
44 const char* const ELM_GENLIST_ITEM_CLASS_STYLE_DEFAULT = "default";
45 const char* const ELM_GENLIST_ITEM_CLASS_STYLE_3TEXT_1ICON = "3text.1icon";
46 const char* const EVAS_SMART_CALLBACK_CLICKED = "clicked";
48 std::vector<std::string> featureText =
49 {"Geolocation", "Web Notification", "Web database", "FileSystem API"};
50 std::vector<std::string> resultText = {"Allow", "Deny"};
51 const unsigned int INDEX_TEXT_ALLOW = 0;
52 const unsigned int INDEX_TEXT_DENY = 1;
53 const char* const SCHEME_FILE = "file";
54 const char* const TEXT_LOCAL = "local";
55 const char* const TEXT_EMPTY = "No exceptions data";
56 const char* const TEXT_POPUP_CONTENT = "Do you want to remove data?";
57 const char* const TEXT_POPUP_L_BUTTON = "YES";
58 const char* const TEXT_POPUP_R_BUTTON = "NO";
59 const char* const TEXT_NAVIFRAME_TITLE = "Exceptions Settings";
63 ExceptionsView::ExceptionsView(Evas_Object* navi, DPL::String appID) :
66 WrtDB::WidgetDAOReadOnly dao(appID);
67 WrtDB::TizenPkgId pkgName = dao.getTizenPkgId();
69 SecurityOriginDB::SecurityOriginDAOPtr(
70 new SecurityOriginDB::SecurityOriginDAO(pkgName));
73 ExceptionsView::~ExceptionsView(void)
77 bool ExceptionsView::loadView(void)
79 using namespace SecurityOriginDB;
82 Evas_Object* genlist = NULL;
83 genlist = elm_genlist_add(m_naviframe);
85 SecurityOriginDB::SecurityOriginDataList securityOriginDataList =
86 m_securityOriginDao->getSecurityOriginDataList();
88 if (securityOriginDataList.empty()) {
89 loadEmptyView(genlist);
91 loadExceptionsSettingsView(genlist, securityOriginDataList);
94 elm_naviframe_item_push(m_naviframe,
104 void ExceptionsView::loadEmptyView(Evas_Object* genlist)
106 using namespace SecurityOriginDB;
109 elm_genlist_block_count_set(genlist, 1);
111 // create Security Settings menu
112 static Elm_Genlist_Item_Class itcData = {0,};
113 itcData.item_style = ELM_GENLIST_ITEM_CLASS_STYLE_DEFAULT;
114 itcData.func.text_get = getEmptyTextCallback;
115 itcData.func.content_get = NULL;
116 itcData.func.state_get = NULL;
117 itcData.func.del = NULL;
119 Elm_Object_Item* emptyItem =
120 elm_genlist_item_append(genlist,
124 ELM_GENLIST_ITEM_NONE,
127 elm_genlist_item_select_mode_set(emptyItem,
128 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
131 void ExceptionsView::loadExceptionsSettingsView(
132 Evas_Object* genlist,
133 SecurityOriginDB::SecurityOriginDataList securityOriginDataList)
135 using namespace SecurityOriginDB;
138 elm_genlist_block_count_set(genlist, securityOriginDataList.size());
139 // create Security Settings menu
140 static Elm_Genlist_Item_Class itcExceptionsSettings = {0,};
141 FOREACH(it, securityOriginDataList) {
142 itcExceptionsSettings.item_style =
143 ELM_GENLIST_ITEM_CLASS_STYLE_3TEXT_1ICON;
144 itcExceptionsSettings.func.text_get = getTextCallback;
145 itcExceptionsSettings.func.content_get = NULL;
146 itcExceptionsSettings.func.state_get = NULL;
147 itcExceptionsSettings.func.del = delCallback;
149 ExceptionsSettingsData* data =
150 new ExceptionsSettingsData(m_securityOriginDao.get(),
152 Elm_Object_Item *objectItem;
153 objectItem = elm_genlist_item_append(genlist,
154 &itcExceptionsSettings,
155 static_cast<void*>(data),
157 ELM_GENLIST_ITEM_NONE,
160 if (m_securityOriginDao->isReadOnly(*(*it))) {
161 elm_object_item_disabled_set(objectItem, EINA_TRUE);
166 char* ExceptionsView::getEmptyTextCallback(
168 Evas_Object* /*obj*/,
169 const char* /*part*/)
171 return strdup(TEXT_EMPTY);
174 char* ExceptionsView::getTextCallback(
179 using namespace SecurityOriginDB;
181 ExceptionsSettingsData* settingsData =
182 static_cast<ExceptionsSettingsData*>(data);
184 std::string partStr = part;
186 if (partStr == ELM_PART_TEXT_1) {
187 // display feature text
189 featureText[settingsData->m_originData.feature].c_str());
190 } else if (partStr == ELM_PART_TEXT_2) {
192 if (DPL::ToUTF8String(settingsData->m_originData.origin.scheme) ==
195 // in case of file scheme, display "local"
196 return strdup(TEXT_LOCAL);
200 settingsData->m_originData.origin.host).c_str());
202 } else if (partStr == ELM_PART_TEXT_3) {
203 // display result text
205 settingsData->m_originDao->getResult(
206 settingsData->m_originData);
207 if (result == RESULT_ALLOW_ALWAYS) {
208 return strdup(resultText[INDEX_TEXT_ALLOW].c_str());
209 } else if (result == RESULT_DENY_ALWAYS) {
210 return strdup(resultText[INDEX_TEXT_DENY].c_str());
219 void ExceptionsView::delCallback(void* data, Evas_Object* /*obj*/)
222 ExceptionsSettingsData* exceptionsSettingsData =
223 static_cast<ExceptionsSettingsData*>(data);
224 delete exceptionsSettingsData;
227 void ExceptionsView::selectedCallback(
233 Elm_Object_Item* item = static_cast<Elm_Object_Item*>(eventInfo);
234 elm_genlist_item_selected_set(item, EINA_FALSE);
237 Evas_Object* topObject = elm_object_top_widget_get(obj);
239 Evas_Object* popup = elm_popup_add(topObject);
243 evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
244 evas_object_size_hint_weight_set(popup,
247 elm_object_part_text_set(popup, ELM_PART_DEFAULT, TEXT_POPUP_CONTENT);
249 Evas_Object* lButton = elm_button_add(popup);
250 elm_object_text_set(lButton, TEXT_POPUP_L_BUTTON);
251 evas_object_smart_callback_add(lButton,
252 EVAS_SMART_CALLBACK_CLICKED,
254 static_cast<void*>(item));
255 elm_object_part_content_set(popup, ELM_PART_BUTTON1, lButton);
256 evas_object_show(lButton);
258 Evas_Object* rButton = elm_button_add(popup);
259 elm_object_text_set(rButton, TEXT_POPUP_R_BUTTON);
260 evas_object_smart_callback_add(rButton,
261 EVAS_SMART_CALLBACK_CLICKED,
263 static_cast<void*>(popup));
264 elm_object_part_content_set(popup, ELM_PART_BUTTON2, rButton);
265 evas_object_show(rButton);
266 evas_object_show(popup);
269 void ExceptionsView::removeItemCallback(
275 Elm_Object_Item* item = static_cast<Elm_Object_Item*>(data);
276 ExceptionsSettingsData* settingsData =
277 static_cast<ExceptionsSettingsData*>(elm_object_item_data_get(item));
278 Assert(settingsData);
280 // remove data in the security origin dao
281 settingsData ->m_originDao->removeSecurityOriginData(
282 settingsData->m_originData);
284 // remove item in the genlist
285 elm_object_item_del(item);
288 Evas_Object* popup = obj;
289 const char* type = elm_object_widget_type_get(popup);
290 while (type != NULL && strcmp(type, ELM_WIDGET_TYPE_POPUP)) {
291 popup = elm_object_parent_widget_get(popup);
292 type = elm_object_widget_type_get(popup);
294 evas_object_del(popup);
297 void ExceptionsView::closePopupCallback(
299 Evas_Object* /*obj*/,
303 evas_object_del(static_cast<Evas_Object*>(data));
305 } /* WebAppDetailSetting */