merge with master
[platform/framework/web/wrt.git] / src / view / common / view_logic_certificate_support.cpp
1 /*\r
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved\r
3  *\r
4  *    Licensed under the Apache License, Version 2.0 (the "License");\r
5  *    you may not use this file except in compliance with the License.\r
6  *    You may obtain a copy of the License at\r
7  *\r
8  *        http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  *    Unless required by applicable law or agreed to in writing, software\r
11  *    distributed under the License is distributed on an "AS IS" BASIS,\r
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  *    See the License for the specific language governing permissions and\r
14  *    limitations under the License.\r
15  */\r
16 /**\r
17  * @file    view_logic_certificate_origin_support.cpp\r
18  * @author  Leerang Song (leerang.song@samsung.com)\r
19  * @version 1.0\r
20  * @brief   Support certificate dao\r
21  */\r
22 \r
23 #include "view_logic_certificate_support.h"\r
24 \r
25 #include <memory>\r
26 #include <Evas.h>\r
27 #include <Elementary.h>\r
28 #include <vconf.h>\r
29 #include <dpl/log/log.h>\r
30 #include <dpl/assert.h>\r
31 #include <dpl/wrt-dao-ro/common_dao_types.h>\r
32 #include <dpl/wrt-dao-ro/vconf_config.h>\r
33 #include <wrt-commons/certificate-dao/certificate_dao.h>\r
34 #include <widget_model.h>\r
35 \r
36 namespace ViewModule {\r
37 namespace {\r
38 const char* const DAEMON_EDJ_PATH = "/usr/share/edje/wrt/Daemon.edj";\r
39 }\r
40 \r
41 class CertificateSupportImplementation\r
42 {\r
43   private:\r
44     WidgetModel* m_model;\r
45     CertificateDB::CertificateDAOPtr m_certificateDAO;\r
46 \r
47   public:\r
48     CertificateSupportImplementation(WidgetModel* widgetModel) :\r
49         m_model(NULL)\r
50     {\r
51         Assert(widgetModel);\r
52         m_model = widgetModel;\r
53     }\r
54 \r
55     ~CertificateSupportImplementation()\r
56     {}\r
57 \r
58     CertificateDB::CertificateDAO* getCertificateDAO(void)\r
59     {\r
60         Assert(m_model);\r
61         if (!m_certificateDAO) {\r
62             LogDebug("initialize CertificateDAO");\r
63             m_certificateDAO =\r
64                 CertificateDB::CertificateDAOPtr(\r
65                     new CertificateDB::CertificateDAO(m_model->TzPkgId.\r
66                                                                 Get()));\r
67             // initialize certificate result data. Remove allow, deny for\r
68             m_certificateDAO->removeCertificateData(\r
69                 CertificateDB::RESULT_ALLOW_ONCE);\r
70             m_certificateDAO->removeCertificateData(\r
71                 CertificateDB::RESULT_DENY_ONCE);\r
72         }\r
73         return m_certificateDAO.get();\r
74     }\r
75 };\r
76 \r
77 CertificateSupport::CertificateSupport(WidgetModel* widgetModel) :\r
78     m_impl(new CertificateSupportImplementation(widgetModel))\r
79 {}\r
80 \r
81 CertificateSupport::~CertificateSupport()\r
82 {}\r
83 \r
84 CertificateDB::CertificateDAO* CertificateSupport::\r
85     getCertificateDAO(void)\r
86 {\r
87     return m_impl->getCertificateDAO();\r
88 }\r
89 \r
90 Evas_Object* CertificateSupportUtil::createPopup(\r
91     Evas_Object* window,\r
92     const char* bodyText,\r
93     const char* checkText,\r
94     Evas_Smart_Cb\r
95     buttonCallback,\r
96     void* data)\r
97 {\r
98     LogDebug("createPopup");\r
99     Evas_Object* popup = elm_popup_add(window);\r
100 \r
101     Evas_Object* label = elm_label_add(popup);\r
102     elm_object_style_set(label, "popup/default");\r
103     elm_label_line_wrap_set(label, ELM_WRAP_MIXED);\r
104     elm_object_text_set(label, bodyText);\r
105     evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);\r
106     evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
107     evas_object_show(label);\r
108 \r
109     Evas_Object* layout = elm_layout_add(popup);\r
110     elm_layout_file_set(layout, DAEMON_EDJ_PATH, "popupWithCheck");\r
111     evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
112 \r
113     Evas_Object* check = elm_check_add(popup);\r
114     evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
115     evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
116     evas_object_show(check);\r
117 \r
118     elm_object_part_text_set(layout, "elm.text", checkText);\r
119     elm_object_part_content_set(layout, "elm.swallow.content", label);\r
120     elm_object_part_content_set(layout, "elm.swallow.end", check);\r
121 \r
122     evas_object_show(layout);\r
123     elm_object_content_set(popup, layout);\r
124     Evas_Object* btn1 = elm_button_add(popup);\r
125     elm_object_text_set(btn1, "YES");\r
126     elm_object_part_content_set(popup, "button1", btn1);\r
127     evas_object_smart_callback_add(btn1, "clicked", buttonCallback, data);\r
128     Evas_Object* btn2 = elm_button_add(popup);\r
129     elm_object_text_set(btn2, "NO");\r
130     elm_object_part_content_set(popup, "button2", btn2);\r
131     evas_object_smart_callback_add(btn2, "clicked", buttonCallback, data);\r
132     return popup;\r
133 }\r
134 \r
135 Evas_Object* CertificateSupportUtil::getPopup(Evas_Object* button)\r
136 {\r
137     Assert(button);\r
138 \r
139     Evas_Object* popup = button;\r
140     while (strcmp(elm_object_widget_type_get(popup), "elm_popup")) {\r
141         popup = elm_object_parent_widget_get(popup);\r
142         if (!popup) {\r
143             return NULL;\r
144         }\r
145     }\r
146     return popup;\r
147 }\r
148 \r
149 Evas_Object* CertificateSupportUtil::getCheck(Evas_Object* popup)\r
150 {\r
151     Assert(popup);\r
152     if (strcmp(elm_object_widget_type_get(popup), "elm_popup")) {\r
153         return NULL;\r
154     }\r
155     Evas_Object* check = elm_object_part_content_get(\r
156             elm_object_content_get(popup),\r
157             "elm.swallow.end");\r
158     return check;\r
159 }\r
160 \r
161 CertificateDB::Result CertificateSupportUtil::getResult(\r
162     Evas_Object* button)\r
163 {\r
164     using namespace CertificateDB;\r
165 \r
166     Assert(button);\r
167     // get popup evas_object\r
168     Evas_Object* popup = getPopup(button);\r
169     if (popup == NULL) {\r
170         return RESULT_UNKNOWN;\r
171     }\r
172     bool allow = !strcmp("YES", elm_object_text_get(button));\r
173 \r
174     // get check evas_object\r
175     Evas_Object* check = getCheck(popup);\r
176     if (check == NULL) {\r
177         return RESULT_UNKNOWN;\r
178     }\r
179     if (allow) {\r
180         return elm_check_state_get(check) ? RESULT_ALLOW_ALWAYS :\r
181                RESULT_ALLOW_ONCE;\r
182     } else {\r
183         return elm_check_state_get(check) ? RESULT_DENY_ALWAYS :\r
184                RESULT_DENY_ONCE;\r
185     }\r
186 }\r
187 } // namespace ViewModule\r