merge with master
[apps/osp/Internet.git] / src / IntEditHomePageForm.cpp
1 //\r
2 \r
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.\r
4 //\r
5 // Licensed under the Flora License, Version 1.0 (the License);\r
6 // you may not use this file except in compliance with the License.\r
7 // You may obtain a copy of the License at\r
8 //\r
9 //     http://floralicense.org/license/\r
10 //\r
11 // Unless required by applicable law or agreed to in writing, software\r
12 // distributed under the License is distributed on an AS IS BASIS,\r
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14 // See the License for the specific language governing permissions and\r
15 // limitations under the License.\r
16 //\r
17 \r
18 //!Internet EditHomePageForm class\r
19 /*@file:  EditHomePageForm.h\r
20  *@brief: Allow user to set any page as Home page.\r
21  *\r
22  */\r
23 \r
24 #include <FAppUiApp.h>\r
25 #include <FUi.h>\r
26 \r
27 #include "IntBookmarkData.h"\r
28 #include "IntCommonLib.h"\r
29 #include "IntEditHomePageForm.h"\r
30 #include "IntMultipleWindowPresentationModel.h"\r
31 #include "IntSceneRegister.h"\r
32 #include "IntSettingPresentationModel.h"\r
33 \r
34 \r
35 using namespace Tizen::App;\r
36 using namespace Tizen::Base;\r
37 using namespace Tizen::Base::Collection;\r
38 using namespace Tizen::Base::Utility;\r
39 using namespace Tizen::Graphics;\r
40 using namespace Tizen::Ui;\r
41 using namespace Tizen::Ui::Controls;\r
42 using namespace Tizen::Ui::Scenes;\r
43 \r
44 const int EditHomePageForm::IDA_BUTTON_DONE = 101;\r
45 const int EditHomePageForm::IDA_BUTTON_CANCEL = 102;\r
46 \r
47 EditHomePageForm::EditHomePageForm(void)\r
48 :__pUrlEditField(null)\r
49 , __pMsgBox(null)\r
50 , __modalMsgBoxResult(0)\r
51 {\r
52 \r
53 }\r
54 \r
55 EditHomePageForm::~EditHomePageForm(void)\r
56 {\r
57 \r
58 }\r
59 \r
60 bool\r
61 EditHomePageForm::Initialize(void)\r
62 {\r
63         Construct(L"IDL_EDIT_HOME_PAGE");\r
64         SetOrientation(ORIENTATION_AUTOMATIC);\r
65         return true;\r
66 }\r
67 \r
68 result\r
69 EditHomePageForm::OnInitializing(void)\r
70 {\r
71         result r = E_SUCCESS;\r
72         SetFormBackEventListener(this);\r
73         SceneManager* pSceneManager = SceneManager::GetInstance();\r
74         AppAssert(pSceneManager);\r
75         pSceneManager->AddSceneEventListener(IDSCN_EDIT_HOMEPAGE_VIEW, *this);\r
76 \r
77         GetHeader()->AddActionEventListener(*this);\r
78 \r
79         __pUrlEditField = static_cast<EditField*>(GetControl(L"IDC_EDITFIELD"));\r
80         if (__pUrlEditField != null)\r
81         {\r
82                 __pUrlEditField->AddTextEventListener(*this);\r
83                 __pUrlEditField->SetOverlayKeypadCommandButtonVisible(false);\r
84         }\r
85         return r;\r
86 }\r
87 \r
88 result\r
89 EditHomePageForm::OnTerminating(void)\r
90 {\r
91         result r = E_SUCCESS;\r
92         return r;\r
93 }\r
94 \r
95 void\r
96 EditHomePageForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)\r
97 {\r
98         if (__pUrlEditField != null)\r
99         {\r
100                 String favURL = SettingPresentationModel::GetInstance()->GetFavoriteUrl();\r
101                 AppLogDebug("EditHomePageForm::OnSceneActivatedN favURL %ls",favURL.GetPointer());\r
102                 __pUrlEditField->SetText(SettingPresentationModel::GetInstance()->GetFavoriteUrl());\r
103                 __pUrlEditField->SetFocus();\r
104                 __pUrlEditField->SetCursorPosition(__pUrlEditField->GetTextLength());\r
105                 __pUrlEditField->ShowKeypad();\r
106                 __pUrlEditField->Invalidate(true);\r
107         }\r
108 \r
109         Invalidate(true);\r
110 \r
111         return;\r
112 }\r
113 \r
114 void\r
115 EditHomePageForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)\r
116 {\r
117 \r
118 }\r
119 \r
120 void\r
121 EditHomePageForm::OnFormBackRequested(Form& source)\r
122 {\r
123 \r
124 }\r
125 \r
126 void\r
127 EditHomePageForm::OnActionPerformed(const Control& source, int actionId)\r
128 {\r
129         ArrayList* pArgList = null;\r
130         pArgList = new(std::nothrow) ArrayList();\r
131         switch(actionId)\r
132         {\r
133         case IDA_BUTTON_DONE:\r
134         {\r
135                 pArgList->Add(*new(std::nothrow) String(CommonUtil::GetString(L"IDS_BR_SK_DONE")));\r
136                 String urlText = __pUrlEditField->GetText();\r
137                 urlText.Trim();\r
138                 AppLogDebug("set url text is %ls",urlText.GetPointer());\r
139 \r
140                 bool ret = false;\r
141                 bool flag = false;\r
142                 String firstPattern(L"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)");\r
143                 String secondPattern(L"^[A-Za-z0-9\.\+-:#@%/;$~?]+\\.[A-Za-z0-9\+-=:#@%/;$~()_?\\\.&]{2,}$");   // URL of type  abc.com (i.e without protocol in front of it)\r
144                 RegularExpression firstRegex;\r
145                 RegularExpression secondRegex;\r
146 \r
147                 firstRegex.Construct(firstPattern, REGEX_CASELESS);\r
148                 secondRegex.Construct(secondPattern, REGEX_CASELESS);\r
149 \r
150                 Uri uri;\r
151                 uri.SetUri(urlText);\r
152                 urlText = uri.GetEncodedString();\r
153 \r
154                 // Match\r
155                 ret = firstRegex.Match(urlText, false); // This returns true value\r
156                 flag = secondRegex.Match(urlText, false);  // Checks whether URL typed is of type  abc.com (i.e without protocol in front of it)\r
157 \r
158 \r
159                 if (ret == true)\r
160                 {\r
161                         //valid Url\r
162                         SettingPresentationModel::GetInstance()->SetHomepage(urlText);\r
163                         SettingPresentationModel::GetInstance()->SetFavoriteValue(urlText);\r
164                         result r = SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(), pArgList);\r
165                         TryCatch(!IsFailed(r), "EditHomePageForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r));\r
166                 }\r
167                 else\r
168                 {\r
169                         if (flag == true)\r
170                         {\r
171                                 String validUrl;\r
172                                 validUrl = L"http://";\r
173                                 validUrl.Append(urlText);\r
174                                 // save Url\r
175                                 SettingPresentationModel::GetInstance()->SetHomepage(validUrl);\r
176                                 SettingPresentationModel::GetInstance()->SetFavoriteValue(validUrl);\r
177                                 result r = SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(), pArgList);\r
178                                 TryCatch(!IsFailed(r), "EditHomePageForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r));\r
179                         }\r
180                         else\r
181                         {\r
182                                 // show pop up , not a valid URL\r
183                                 String msg = CommonUtil::GetString(L"IDS_BR_POP_INVALIDADDRESS");\r
184                                 CreateMessage(msg);\r
185                         }\r
186                 }\r
187 \r
188                 break;\r
189         }\r
190         case IDA_BUTTON_CANCEL:\r
191         {\r
192                 pArgList->Add(*new(std::nothrow) String(CommonUtil::GetString(L"IDS_BR_SK_CANCEL")));\r
193                 result r = SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(), pArgList);\r
194                 TryCatch(!IsFailed(r), "EditHomePageForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r));\r
195                 break;\r
196         }\r
197         default:\r
198                 break;\r
199         }\r
200 \r
201         CATCH:\r
202         pArgList->RemoveAll(true);\r
203         delete pArgList;\r
204         return;\r
205 }\r
206 \r
207 void\r
208 EditHomePageForm::OnTextValueChanged(const Control& source)\r
209 {\r
210         String title ;\r
211         Header* pHeader = GetHeader();\r
212 \r
213         if (pHeader == NULL)\r
214         {\r
215                 return;\r
216         }\r
217 \r
218         if (__pUrlEditField == NULL)\r
219         {\r
220                 return;\r
221         }\r
222 \r
223         title = __pUrlEditField->GetText();\r
224         title.Trim();\r
225 \r
226         // To disable done button when folder title edit-field is empty\r
227         if (__pUrlEditField && title.IsEmpty() == true)\r
228         {\r
229                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);\r
230         }\r
231         else\r
232         {\r
233                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, true);\r
234         }\r
235         pHeader->Invalidate(true);\r
236         return;\r
237 }\r
238 \r
239 void\r
240 EditHomePageForm::OnTextValueChangeCanceled(const Control& source)\r
241 {\r
242         return;\r
243 }\r
244 \r
245 void\r
246 EditHomePageForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus)\r
247 {\r
248         return;\r
249 }\r
250 \r
251 void\r
252 EditHomePageForm::CreateMessage(String& message)\r
253 {\r
254 \r
255         if (__pMsgBox != null)\r
256         {\r
257                 delete __pMsgBox;\r
258                 __pMsgBox = null;\r
259                 __modalMsgBoxResult = 0;\r
260         }\r
261 \r
262         __pMsgBox = new(std::nothrow) MessageBox;\r
263         if (__pMsgBox != null)\r
264         {\r
265                 __pMsgBox->Construct(L"", message, MSGBOX_STYLE_OK, 3000);\r
266         }\r
267 \r
268         if (__pMsgBox != null)\r
269         {\r
270                 __pMsgBox->ShowAndWait(__modalMsgBoxResult);\r
271                 if (__modalMsgBoxResult == MSGBOX_RESULT_OK)\r
272                 {\r
273                         if (__pMsgBox != null)\r
274                         {\r
275                                 delete __pMsgBox;\r
276                                 __pMsgBox = null;\r
277                         }\r
278                 }\r
279                 __modalMsgBoxResult = 0;\r
280         }\r
281 \r
282         return;\r
283 }\r