Merge "Popup modifications fixing to portrait sizes" into tizen_2.1
[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 <FUiLayout.h>
32 #include <FUiVerticalBoxLayout.h>
33 #include <FWebCtrlAuthenticationChallenge.h>
34 #include <FSys_SystemResource.h>
35 #include <FSys_VibratorImpl.h>
36 #include <FUi_ControlManager.h>
37 #include <FUi_ResourceManager.h>
38 #include "FWebCtrl_WebImpl.h"
39 #include "FWebCtrl_AuthConfirmPopup.h"
40
41
42 using namespace Tizen::Base;
43 using namespace Tizen::Base::Collection;
44 using namespace Tizen::Graphics;
45 using namespace Tizen::System;
46 using namespace Tizen::Ui;
47 using namespace Tizen::Ui::Controls;
48
49
50 static const int AUTH_POPUP_TMP_LABLE_HEIGHT = 10;
51
52
53 namespace Tizen { namespace Web { namespace Controls
54 {
55
56
57 _AuthConfirmPopup::_AuthConfirmPopup(void)
58         : __pIdEditField(null)
59         , __pPwdEditField(null)
60         , __pAuthHandler(null)
61 {
62 }
63
64
65 _AuthConfirmPopup::~_AuthConfirmPopup(void)
66 {
67 }
68
69
70 // Authentication popup
71 result
72 _AuthConfirmPopup::Construct(const String& host, const String& realm, AuthenticationChallenge* pAuth)
73 {
74         SysTryReturnResult(NID_WEB_CTRL, pAuth != null, E_INVALID_ARG, "invalid argument(s) is used. The AuthenticationChallenge is null.");
75
76         __pAuthHandler = pAuth;
77
78         _SystemResource* pSysResource = _SystemResource::GetInstance();
79         SysAssertf(pSysResource != null, "Failed to get _SystemResource instance");
80
81         result r = E_SUCCESS;
82         _WebPopupData* pPopupData = _WebPopup::GetPopupData();
83         SysTryReturn(NID_WEB_CTRL, pPopupData, r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r));
84
85         Rectangle rect(0, 0, 0, 0);
86         rect.width = pPopupData->popupDim.width;
87         rect.height = (5*pPopupData->spacePad) + (pPopupData->editDim.height*2) + pPopupData->btnDim.height + 2*pPopupData->labelDim.height;
88         r = _WebPopup::Construct(true, Dimension(rect.width, rect.height));
89         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
90
91         SetTitleText("Authentication Required");
92
93         //host realm label
94         rect.height = 2*pPopupData->labelDim.height;
95
96         std::unique_ptr<Label> pLabel(new (std::nothrow) Label());
97         SysTryReturnResult(NID_WEB_CTRL, pLabel.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
98
99         String hostRealm(L"A username and password are being requested by ");
100         hostRealm.Append(host);
101         hostRealm.Append(L". The site says: \"");
102         hostRealm.Append(realm);
103         hostRealm.Append(L"\"");
104         r = pLabel->Construct(rect, hostRealm);
105         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
106
107         pLabel->SetTextConfig(pPopupData->labelFontSize, LABEL_TEXT_STYLE_NORMAL);
108
109         r = AddControl(*pLabel);
110         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
111
112         Label* pHostLabel = pLabel.release();
113
114         // Id Edit Field
115         rect.x = 0;
116         rect.y = 0;
117         rect.height = pPopupData->editDim.height;
118         rect.width = pPopupData->labelDim.width;
119
120         std::unique_ptr<EditField> pIdEditField(new (std::nothrow) EditField());
121         SysTryReturnResult(NID_WEB_CTRL, pIdEditField.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
122
123         r = pIdEditField->Construct(rect, EDIT_FIELD_STYLE_NORMAL);
124         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
125
126         pIdEditField->SetGuideText(L"User name");
127         pIdEditField->SetGuideTextColor(Color::GetColor(COLOR_ID_GREY));
128         pIdEditField->SetTextSize(35);;
129
130         r = AddControl(*pIdEditField);
131         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
132
133         __pIdEditField = pIdEditField.release();
134
135         std::unique_ptr<EditField> pPwdEditField(new (std::nothrow) EditField());
136         SysTryReturnResult(NID_WEB_CTRL, pPwdEditField.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
137
138         r = pPwdEditField->Construct(rect, EDIT_FIELD_STYLE_PASSWORD);
139         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
140
141         pPwdEditField->SetGuideText(L"Password");
142         pPwdEditField->SetGuideTextColor(Color::GetColor(COLOR_ID_GREY));
143         pPwdEditField->SetTextSize(35);;
144
145         r = AddControl(*pPwdEditField);
146         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
147
148         __pPwdEditField = pPwdEditField.release();
149         __pIdEditField->SetFocus();
150
151         Panel* pButtonPanel = CreateAndAddPanel();
152         SysTryReturn(NID_WEB_CTRL, pButtonPanel, r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r));
153
154         //Add Buttons
155         ArrayList idList;
156         r = idList.Construct();
157         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
158         idList.Add(*(new Integer(ID_BUTTON_AUTH_PROCESS)));
159         idList.Add(*(new Integer(ID_BUTTON_AUTH_CANCEL)));
160
161         ArrayList titleList;
162         r = titleList.Construct();
163         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
164         titleList.Add(*(new String(pSysResource->GetString("sys_string", "IDS_COM_SK_OK"))));
165         titleList.Add(*(new String(pSysResource->GetString("sys_string", "IDS_COM_POP_CANCEL"))));
166
167         r = CreateAndAddButtons(idList, titleList, pButtonPanel);
168         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
169
170         std::unique_ptr<VerticalBoxLayout> pLayout(dynamic_cast< VerticalBoxLayout* >(GetLayoutN()));
171         SysTryReturn(NID_WEB_CTRL, pLayout.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
172
173         pLayout->SetHorizontalAlignment(*pHostLabel, LAYOUT_HORIZONTAL_ALIGN_CENTER);
174         pLayout->SetHorizontalAlignment(*__pIdEditField, LAYOUT_HORIZONTAL_ALIGN_CENTER);
175         pLayout->SetHorizontalAlignment(*__pPwdEditField, LAYOUT_HORIZONTAL_ALIGN_CENTER);
176         pLayout->SetHorizontalAlignment(*pButtonPanel, LAYOUT_HORIZONTAL_ALIGN_CENTER);
177
178         pLayout->SetSpacing(*__pPwdEditField, pPopupData->spacePad);
179         pLayout->SetSpacing(*pButtonPanel, pPopupData->spacePad);
180
181         return E_SUCCESS;
182 }
183
184
185 void
186 _AuthConfirmPopup::OnActionPerformed(const Control& source, int actionId)
187 {
188         result r = E_SUCCESS;
189
190         switch (actionId)
191         {
192         case ID_BUTTON_AUTH_PROCESS:
193                 __pAuthHandler->Process(__pIdEditField->GetText(), __pPwdEditField->GetText());
194                 break;
195
196         case ID_BUTTON_AUTH_CANCEL:
197                 __pAuthHandler->Cancel();
198                 break;
199
200         default:
201                 break;
202         }
203
204         r = HidePopup();
205         SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
206 }
207
208
209 }}} // Tizen::Web::Controls