add patch
[framework/osp/web.git] / src / controls / FWebCtrl_AuthConfirmPopup.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file                FWebCtrl_AuthConfirmPopup.cpp
20  * @brief               The file contains the definition of _AuthConfirmPopup class.
21  */
22 #include <FBaseColArrayList.h>
23 #include <FBaseSysLog.h>
24 #include <FGrpDimension.h>
25 #include <FGrpRectangle.h>
26 #include <FSysVibrator.h>
27 #include <FUiCtrlButton.h>
28 #include <FUiCtrlEditField.h>
29 #include <FUiCtrlLabel.h>
30 #include <FUiCtrlPanel.h>
31 #include <FUiKeyEventInfo.h>
32 #include <FUiLayout.h>
33 #include <FUiVerticalBoxLayout.h>
34 #include <FWebCtrlAuthenticationChallenge.h>
35 #include <FSys_SystemResource.h>
36 #include <FSys_VibratorImpl.h>
37 #include <FUi_ControlManager.h>
38 #include <FUi_ResourceManager.h>
39 #include "FWebCtrl_AuthConfirmPopup.h"
40 #include "FWebCtrl_WebImpl.h"
41
42
43 using namespace Tizen::Base;
44 using namespace Tizen::Base::Collection;
45 using namespace Tizen::Graphics;
46 using namespace Tizen::System;
47 using namespace Tizen::Ui;
48 using namespace Tizen::Ui::Controls;
49
50
51 namespace Tizen { namespace Web { namespace Controls
52 {
53
54
55 static const int EDIT_TEXT_SIZE = 35;
56
57
58 _AuthConfirmPopup::_AuthConfirmPopup(void)
59         : __pIdEditField(null)
60         , __pPwdEditField(null)
61         , __pAuthHandler(null)
62 {
63 }
64
65
66 _AuthConfirmPopup::~_AuthConfirmPopup(void)
67 {
68         if (IsModalPopup())
69         {
70                 __pAuthHandler->Cancel();
71         }
72 }
73
74
75 // Authentication popup
76 result
77 _AuthConfirmPopup::Construct(const String& host, const String& realm, AuthenticationChallenge* pAuth)
78 {
79         SysTryReturnResult(NID_WEB_CTRL, pAuth != null, E_INVALID_ARG, "invalid argument(s) is used. The AuthenticationChallenge is null.");
80
81         __pAuthHandler = pAuth;
82
83         _SystemResource* pSysResource = _SystemResource::GetInstance();
84         SysAssertf(pSysResource != null, "Failed to get _SystemResource instance");
85
86         result r = E_SUCCESS;
87         _WebPopupData* pPopupData = _WebPopup::GetPopupData();
88         SysTryReturn(NID_WEB_CTRL, pPopupData, r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r));
89
90         Rectangle rect(0, 0, 0, 0);
91         rect.width = pPopupData->popupDim.width;
92         rect.height = (2*pPopupData->spacePad) + (pPopupData->editDim.height*2) + pPopupData->btnDim.height + (2*pPopupData->labelDim.height);
93         r = _WebPopup::Construct(true, Dimension(rect.width, rect.height));
94         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
95
96         SetTitleText(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_HEADER_ENTER_CREDENTIALS_ABB"));
97
98         //host realm label
99         rect.height = 2*pPopupData->labelDim.height;
100
101         std::unique_ptr<Label> pLabel(new (std::nothrow) Label());
102         SysTryReturnResult(NID_WEB_CTRL, pLabel.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
103
104         String hostRealm(host);
105         hostRealm.Append(L": \n ");
106         hostRealm.Append(realm);
107         hostRealm.Append(L"\"");
108         r = pLabel->Construct(rect, hostRealm);
109         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
110
111         pLabel->SetTextConfig(pPopupData->labelFontSize, LABEL_TEXT_STYLE_NORMAL);
112
113         r = AddControl(*pLabel);
114         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
115
116         Label* pHostLabel = pLabel.release();
117
118         // Id Edit Field
119         rect.x = 0;
120         rect.y = 0;
121         rect.height = pPopupData->editDim.height;
122         rect.width = pPopupData->labelDim.width;
123
124         std::unique_ptr<EditField> pIdEditField(new (std::nothrow) EditField());
125         SysTryReturnResult(NID_WEB_CTRL, pIdEditField.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
126
127         r = pIdEditField->Construct(rect, EDIT_FIELD_STYLE_NORMAL);
128         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
129
130         pIdEditField->SetGuideText(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_WIFI_BODY_ENTER_YOUR_ID"));
131         pIdEditField->SetGuideTextColor(Color::GetColor(COLOR_ID_GREY));
132         pIdEditField->SetTextSize(EDIT_TEXT_SIZE);;
133
134         r = AddControl(*pIdEditField);
135         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
136
137         __pIdEditField = pIdEditField.release();
138
139         std::unique_ptr<EditField> pPwdEditField(new (std::nothrow) EditField());
140         SysTryReturnResult(NID_WEB_CTRL, pPwdEditField.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
141
142         r = pPwdEditField->Construct(rect, EDIT_FIELD_STYLE_PASSWORD);
143         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
144
145         pPwdEditField->SetGuideText(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_ENTER_YOUR_PASSWORD_ABB"));
146         pPwdEditField->SetGuideTextColor(Color::GetColor(COLOR_ID_GREY));
147         pPwdEditField->SetTextSize(EDIT_TEXT_SIZE);;
148
149         r = AddControl(*pPwdEditField);
150         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
151
152         __pPwdEditField = pPwdEditField.release();
153         __pIdEditField->SetFocus();
154
155         Panel* pButtonPanel = CreateAndAddPanel();
156         SysTryReturn(NID_WEB_CTRL, pButtonPanel, r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r));
157
158         //Add Buttons
159         ArrayList idList;
160         r = idList.Construct();
161         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
162         idList.Add(*(new Integer(ID_BUTTON_AUTH_CANCEL)));
163         idList.Add(*(new Integer(ID_BUTTON_AUTH_PROCESS)));
164
165         ArrayList titleList;
166         r = titleList.Construct();
167         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
168         titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON_CANCEL_ABB"))));
169         titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON_CONTINUE_ABB"))));
170
171         r = CreateAndAddButtons(idList, titleList, pButtonPanel);
172         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
173
174         std::unique_ptr<VerticalBoxLayout> pLayout(dynamic_cast< VerticalBoxLayout* >(GetLayoutN()));
175         SysTryReturn(NID_WEB_CTRL, pLayout.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
176
177         pLayout->SetHorizontalAlignment(*pHostLabel, LAYOUT_HORIZONTAL_ALIGN_CENTER);
178         pLayout->SetHorizontalAlignment(*__pIdEditField, LAYOUT_HORIZONTAL_ALIGN_CENTER);
179         pLayout->SetHorizontalAlignment(*__pPwdEditField, LAYOUT_HORIZONTAL_ALIGN_CENTER);
180         pLayout->SetHorizontalAlignment(*pButtonPanel, LAYOUT_HORIZONTAL_ALIGN_CENTER);
181
182         pLayout->SetSpacing(*__pPwdEditField, pPopupData->spacePad);
183         pLayout->SetSpacing(*pButtonPanel, pPopupData->spacePad);
184
185         SetPropagatedKeyEventListener(this);
186
187         return E_SUCCESS;
188 }
189
190
191 void
192 _AuthConfirmPopup::OnActionPerformed(const Control& source, int actionId)
193 {
194         result r = E_SUCCESS;
195
196         switch (actionId)
197         {
198         case ID_BUTTON_AUTH_PROCESS:
199                 __pAuthHandler->Process(__pIdEditField->GetText(), __pPwdEditField->GetText());
200                 break;
201
202         case ID_BUTTON_AUTH_CANCEL:
203                 __pAuthHandler->Cancel();
204                 break;
205
206         default:
207                 break;
208         }
209
210         r = HidePopup();
211         SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
212 }
213
214 bool
215 _AuthConfirmPopup::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
216 {
217         return false;
218 }
219
220 bool
221 _AuthConfirmPopup::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
222 {
223         result r = E_SUCCESS;
224         if ((keyEventInfo.GetKeyCode() == KEY_ESC || keyEventInfo.GetKeyCode() == KEY_BACK) && source.GetShowState() == true)
225         {
226                 __pAuthHandler->Cancel();
227                 r = HidePopup();
228                 if (IsFailed(r))
229                 {
230                         SysLogException(NID_WEB_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
231                 }
232         }
233
234         return false;
235 }
236
237 bool
238 _AuthConfirmPopup::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
239 {
240         return false;
241 }
242
243 bool
244 _AuthConfirmPopup::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
245 {
246         return false;
247 }
248
249 bool
250 _AuthConfirmPopup::TranslateKeyEventInfo(Control& source, KeyEventInfo& keyEventInfo)
251 {
252         return false;
253 }
254
255
256 }}} // Tizen::Web::Controls