2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.1 (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.
18 /*@file: IntAddressbar
19 *@brief: This class defines common behaviour of Addressbar control.
22 #include "IntAddressbar.h"
23 #include "IntCommonLib.h"
25 #include "IntMultipleWindowPresentationModel.h"
26 #include "IntSettingPresentationModel.h"
27 #include "IntMultipleWindowPresentationModel.h"
29 using namespace Tizen::App;
30 using namespace Tizen::Base;
31 using namespace Tizen::Graphics;
32 using namespace Tizen::System;
33 using namespace Tizen::Ui;
34 using namespace Tizen::Ui::Controls;
36 static const wchar_t* IDB_SEARCH_INPUT_FIELD_BG = L"I01_toolbar_input_field.#.png";
37 static const wchar_t* IDB_TITLE_PROGRESS_BAR_BG = L"I01_title_progress_bar_bg.png";
38 static const wchar_t* IDB_TITLE_PROGRESS_BAR = L"I01_title_progress_bar.png";
39 static const wchar_t* IDB_ICON_PRIVATE = L"I01_icon_private.png";
43 const int Addressbar::IDA_STOP_BTN_CLICKED = 103;
44 const int Addressbar::IDA_GO_BACK = 104;
45 const int Addressbar::IDA_GO_FORWARD = 105;
46 const int Addressbar::IDA_CANCEL = 106;
47 const int Addressbar::IDA_CLEAR_URL = 107;
49 Addressbar::Addressbar(void)
51 //__currentAddMode = ADDRESSBAR_MODE_LOADING_COMPLETE;
53 // __editTextUrl = L"";
54 __isLoadingData = false;
55 __isLoadingCompleted = false;
56 __progressPercentage = 0;
57 __pAddressbarBg = null;
59 __pFavIcon = FaviconManager::GetInstance()->GetDefaultFaviconN();
60 __pFaviconLabel = null;
61 __pLabelPrivateOn = null;
63 __pPrivateIconLabel = null;
64 __pProgressbarLabel = null;
65 __pPrivateIconLabel = null ;
67 __pSearchLabel = null;
68 __pAddressbarUrlField = null;
69 __pToolBarLabel = null;
70 __pAddressbarURLLabel = null;
71 __pAddressBackBtn = null;
72 __isClipboardOpen = false;
73 __isKeyboardConnected = false;
74 __isKeyPadOpened = false;
75 __isAppBackGround = false;
78 Addressbar::~Addressbar(void)
80 if (__pFavIcon != null)
88 Addressbar::OnTerminating(void)
90 DeviceManager::RemoveDeviceEventListener(DEVICE_TYPE_USB_CLIENT, *this);
95 Addressbar::Initialize(const Rectangle& rect)
99 AppLogDebug("Addressbar::Initialize entered");
100 //Construct the base first
101 r = Construct(L"IDL_ADDRESSBAR");
103 //Add background label
104 Label* pBgLabel = static_cast<Label*> (GetControl(L"IDC_BG_LABEL",true));
105 if (pBgLabel == NULL)
107 AppLogDebug("Control not found returning E_INVALID_KEY");
108 return E_INVALID_KEY;
111 //Add inner panel for border
112 __pBgPanel = static_cast<Panel*> (GetControl(L"IDC_BG_PANEL",true));
113 if (__pBgPanel == NULL)
115 AppLogDebug("Control not found returning E_INVALID_KEY");
116 return E_INVALID_KEY;
119 __pAddressbarBg = static_cast<Label*> (GetControl(L"IDC_ADDRESSBAR_BG_LABEL",true));
120 if (__pAddressbarBg == NULL)
122 AppLogDebug("Control not found returning E_INVALID_KEY");
123 return E_INVALID_KEY;
125 __pBgPanel->SetBackgroundColor(CUSTOM_COLOR_TRANSPARENT);
126 Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_SEARCH_INPUT_FIELD_BG, __pAddressbarBg->GetWidth(), __pAddressbarBg->GetHeight());
129 __pAddressbarBg->SetBackgroundBitmap(*pBitmap);
133 __pClearBtn = static_cast<Button*> (GetControl(L"IDC_CLEAR_BUTTON",true));
134 if (__pClearBtn == NULL)
136 AppLogDebug("Control not found returning E_INVALID_KEY");
137 return E_INVALID_KEY;
139 __pClearBtn->SetActionId(IDA_CLEAR_URL);
140 __pClearBtn->AddActionEventListener(*this);
141 __pClearBtn->SetShowState(true);
142 __pClearBtn->SetFocusable(true);
144 //Add the editfield for url
145 __pAddressbarUrlField = static_cast<EditField*> (GetControl(L"IDC_URL_EDITFIELD",true));
146 if (__pAddressbarUrlField == NULL)
148 AppLogDebug("Control not found returning E_INVALID_KEY");
149 return E_INVALID_KEY;
152 __pAddressbarUrlField->SetOverlayKeypadCommandButtonVisible(false);
153 __pAddressbarUrlField->SetKeypadAction(KEYPAD_ACTION_GO);
154 __pAddressbarUrlField->AddFocusEventListener(*this);
155 __pAddressbarUrlField->AddTextEventListener(*this);
156 if(__pAddressbarUrlField->GetTextLength() == 0)
158 __pAddressbarUrlField->SetKeypadActionEnabled(false);
162 __pAddressbarUrlField->SetKeypadActionEnabled(true);
165 __pToolBarLabel = static_cast<Label*> (GetControl(L"IDC_TOOLBAR_LABEL",true));
166 if (__pToolBarLabel == NULL)
168 AppLogDebug("Control not found returning E_INVALID_KEY");
169 return E_INVALID_KEY;
171 __pToolBarLabel->SetShowState(true);
173 __pAddressbarURLLabel = static_cast<Label*> (GetControl(L"IDC_URL_LABEL",true));
174 if (__pAddressbarURLLabel == NULL)
176 AppLogDebug("__pURLLabel Control not found returning E_INVALID_KEY");
177 return E_INVALID_KEY;
179 __pAddressbarURLLabel->SetShowState(true);
181 __pAddressBackBtn = static_cast<Button*> (GetControl(L"IDC_ADDRESS_BACK_BUTTON",true));
182 if (__pAddressBackBtn == NULL)
184 AppLogDebug("__pAddressBackBtn Control not found returning E_INVALID_KEY");
185 return E_INVALID_KEY;
187 __pAddressBackBtn->SetActionId(IDA_CANCEL);
188 __pAddressBackBtn->AddActionEventListener(*this);
189 __pAddressBackBtn->SetShowState(true);
190 __pAddressBackBtn->SetFocusable(true);
191 //IDC_ADDRESS_BACK_BUTTON
193 // Added to get the favorite url if not set then address bar is about blank
195 if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0)
197 __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL"));
199 else if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_BLANK_PAGE")) == 0)
201 __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_BLANK_PAGE"));
205 //__pUrlField->SetText(SettingPresentationModel::GetInstance()->GetFavoriteURL());
206 __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL"));
208 __pAddressbarUrlField->AddKeypadEventListener(*this);
210 r = DeviceManager::AddDeviceEventListener(DEVICE_TYPE_USB_CLIENT,*this);
211 AppLog("1234:: DeviceManager::AddDeviceEventListener result %s",GetErrorMessage(r));
212 AppLogDebug("Addressbar::Initialize exit");
217 Addressbar::UpdateProgressBitmap(void)
219 result r = E_SUCCESS;
220 if (__pProgressbarLabel == null)
222 int w = __pProgressbarLabel->GetWidth();
223 int h = __pProgressbarLabel->GetHeight();
225 int progressWidth = 0;
226 Bitmap* pRetBitmap = null;
228 if (__progressPercentage == 0 || __progressPercentage == 100)
230 __pProgressbarLabel->SetShowState(false);
231 __pProgressbarLabel->Invalidate(false);
236 __pProgressbarLabel->SetShowState(true);
237 __pProgressbarLabel->Invalidate(false);
240 r = canvas.Construct(Rectangle(0, 0, w, h));
244 AppLogException("Canvas construction failed with %s", GetErrorMessage(r));
249 Bitmap *pBgBmp = AppResource::GetInstance()->GetBitmapN(IDB_TITLE_PROGRESS_BAR_BG);
253 pBgBmp->Scale(Dimension(w, h));
254 canvas.DrawBitmap(Point(0,0), *pBgBmp);
258 progressWidth = (double) (w) * __progressPercentage / 100;
259 AppLogDebug("progressWidth: %d", progressWidth);
260 Bitmap *pProgressBmp = AppResource::GetInstance()->GetBitmapN(IDB_TITLE_PROGRESS_BAR);
262 if (pProgressBmp != null)
264 pProgressBmp->Scale(Dimension(progressWidth, h));
265 canvas.DrawBitmap(Point(0,0), *pProgressBmp);
269 pRetBitmap = new (std::nothrow) Bitmap();
271 if (pRetBitmap == null)
273 AppLogException("Bitmap creation failed with %s", GetErrorMessage(r));
277 pRetBitmap->Construct(canvas, canvas.GetBounds());
279 if (__pProgressbarLabel != null && pRetBitmap != null)
281 __pProgressbarLabel->SetBackgroundBitmap(*pRetBitmap);
282 __pProgressbarLabel->Invalidate(false);
286 if (pRetBitmap != null)
295 Addressbar::ResetGuideText(void)
297 AppLog("Addressbar::ResetGuideText called");
299 if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0)
301 __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL"));
303 else if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_BLANK_PAGE")) == 0)
305 __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_BLANK_PAGE"));
309 //__pUrlField->SetText(SettingPresentationModel::GetInstance()->GetFavoriteURL());
310 __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL"));
312 __pAddressbarUrlField->Invalidate(true);
316 Addressbar::SetUrl(const String& url)
319 String updatedDisplayUrl;
320 updatedDisplayUrl.Clear();
322 if (__pAddressbarUrlField != NULL)
324 String removedHttpUrl = RemoveHttpTextFromDisplayURL();
325 if (removedHttpUrl.IsEmpty() == false)
327 __pAddressbarUrlField->SetText(removedHttpUrl);
331 __pAddressbarUrlField->SetText(__displayUrl);
334 __pAddressbarUrlField->Invalidate(false);
335 __pAddressbarUrlField->SetCursorPosition(__pAddressbarUrlField->GetTextLength());
340 Addressbar::GetUrl(void)
346 Addressbar::SetFaviconBitmap(const Tizen::Graphics::Bitmap& favicon)
349 String url =__pAddressbarUrlField->GetText();
350 String secureSiteText = "https://";
352 flag = url.StartsWith(secureSiteText,0);
354 if (__pFavIcon != null)
359 __pFavIcon = new(std::nothrow) Bitmap();
360 __pFavIcon->Construct(favicon,Rectangle(0,0,favicon.GetWidth(),favicon.GetHeight()));
363 void Addressbar::SaveAddressbarEditText()
365 // __editTextUrl = __pAddressbarUrlField->GetText();
369 Addressbar::UpdateFaviconBitmap(bool isPrivateOn)
372 String url =__pAddressbarUrlField->GetText();
373 String secureSiteText = "https://";
375 flag = url.StartsWith(secureSiteText,0);
377 __pAddressbarBg->Invalidate(true);
381 Addressbar::SetForwardButtonEnabled(bool isEnabled)
386 Addressbar::SetBackButtonEnabled(bool isEnabled)
391 Addressbar::SetAddressbarEventListener(IAddressbarEventListener* plistener)
393 __pListener = plistener;
397 Addressbar::UpdateProgress(int percentage)
399 __progressPercentage = percentage;
400 if (percentage == 0 || percentage == 100)
402 __isLoadingData = false;
403 if (percentage == 100)
405 __isLoadingCompleted = true;
406 __progressPercentage = 0;
410 __isLoadingCompleted = false;
415 __isLoadingData = true;
417 UpdateProgressBitmap();
421 Addressbar::GetProgress(void)
423 return __progressPercentage;
427 Addressbar::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
429 AppLogDebug("Addressbar::OnActionPerformed action %d",actionId);
435 __isAppBackGround = false;
436 // __pAddressbarUrlField->HideKeypad();
437 __pListener->OnAddressCancelledClicked(*this);
438 //SetAddressbarMode(ADDRESSBAR_MODE_LOADING_COMPLETE);
444 if (__pAddressbarUrlField->GetText().IsEmpty() == false)
446 //__displayUrl = __pUrlField->GetText();
447 __pAddressbarUrlField->Clear();
448 __pAddressbarUrlField->SetKeypadActionEnabled(false);
449 __pAddressbarUrlField->Invalidate(true);
459 Addressbar::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
461 AppLog("XYZ::Addressbar::OnKeypadActionPerformed keypadAction %d",keypadAction);
462 switch (keypadAction)
464 case KEYPAD_ACTION_GO:
465 case KEYPAD_ACTION_ENTER:
466 case KEYPAD_ACTION_SEND:
468 if (__pAddressbarUrlField->GetText().IsEmpty() == false)
470 //SetAddressbarMode(ADDRESSBAR_MODE_LOADING);
471 __displayUrl = __pAddressbarUrlField->GetText();
473 __isLoadingCompleted = false;
474 __isLoadingData = true;
475 __progressPercentage = 0;
476 __pAddressbarUrlField->HideKeypad();
478 if (__pListener != NULL)
480 __pListener->OnUrlSubmitted(*this);
483 //UpdateProgressBitmap();
494 Addressbar::OnKeypadClosed(Tizen::Ui::Control& source)
496 AppLog("XYZ::Addressbar::OnKeypadClosed");
498 __isKeyPadOpened = false;
500 if (__isKeyboardConnected == true)
504 if (__isClipboardOpen == true)
506 __isClipboardOpen = false;
507 __pListener->OnClipboardClosed(*this);
512 // if(__pAddressbarUrlField)
514 // String removedHttpUrl = RemoveHttpTextFromDisplayURL();
515 // if (removedHttpUrl.IsEmpty() == false)
517 // __pAddressbarUrlField->SetText(removedHttpUrl);
521 // __pAddressbarUrlField->SetText(__displayUrl);
524 // __editTextUrl = L"";
525 if(__pListener != null)
527 __pListener->OnAddressBarKeypadClosed(*this,true);
532 Addressbar::OnKeypadOpened(Tizen::Ui::Control& source)
534 AppLog("XYZ::Addressbar::OnKeypadOpened");
535 AppLog("Addressbar::OnKeypadOpened %d",Clipboard::GetInstance()->IsPopupVisible());
537 __isKeyPadOpened = true;
539 __isClipboardOpen = Clipboard::GetInstance()->IsPopupVisible();
541 if(__pListener != null)
543 __pListener->OnAddressBarKeypadOpened(*this);
548 Addressbar::OnKeypadWillOpen(Tizen::Ui::Control& source)
550 AppLog("XYZ::Addressbar::OnKeypadWillOpen");
555 Addressbar::OnKeypadBoundsChanged(Tizen::Ui::Control &source)
557 AppLog("XYZ::KeypadBoundsChanged");
559 if(__pListener != null)
561 __pListener->OnAddressBarKeypadBoundsChanged(*this);
566 Addressbar::OrientationChanged( int& width)
569 __pBgPanel->SetBounds(__pBgPanel->GetX(),__pBgPanel->GetY(), width - __pAddressBackBtn->GetWidth() - gap -__pBgPanel->GetX() ,__pBgPanel->GetHeight());
570 __pAddressBackBtn->SetBounds(width - __pAddressBackBtn->GetWidth() - 6,__pAddressBackBtn->GetY(),__pAddressBackBtn->GetWidth(),__pAddressBackBtn->GetHeight());
571 __pClearBtn->SetBounds(__pBgPanel->GetWidth() - __pClearBtn->GetWidth() ,__pClearBtn->GetY(),__pClearBtn->GetWidth(),__pClearBtn->GetHeight());
573 Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_SEARCH_INPUT_FIELD_BG, __pAddressbarBg->GetWidth(), __pAddressbarBg->GetHeight());
576 __pAddressbarBg->SetBackgroundBitmap(*pBitmap);
584 Addressbar::RemoveHttpTextFromDisplayURL(void)
586 bool isHttpText = __displayUrl.Contains(L"http://");
587 String updatedDisplayUrl;
588 updatedDisplayUrl.Clear();
590 if (isHttpText == true)
592 __displayUrl.SubString(7,updatedDisplayUrl);
594 return updatedDisplayUrl;
598 Addressbar::GetLockedImageN(void)
600 Bitmap* pIconImage = null;
602 AppResource* pAppResource = Application::GetInstance()->GetAppResource();
605 pIconImage = pAppResource->GetBitmapN(IDB_ICON_PRIVATE);
608 Bitmap* pLockImage = new (std::nothrow) Bitmap();
610 Canvas* pCanvas = new (std::nothrow) Canvas();
611 pCanvas->Construct(Rectangle(0,0,__pFaviconLabel->GetWidth(),__pFaviconLabel->GetHeight()));
613 if(__pFavIcon != null)
615 pCanvas->DrawBitmap(Rectangle(0,0,__pFaviconLabel->GetWidth(),__pFaviconLabel->GetHeight()),*__pFavIcon);
617 if(pIconImage != null)
619 pCanvas->DrawBitmap(Rectangle(__pFaviconLabel->GetWidth()/2,__pFaviconLabel->GetHeight()/2,__pFaviconLabel->GetWidth()/2,__pFaviconLabel->GetHeight()/2),*pIconImage);
621 pLockImage->Construct(*pCanvas,Rectangle(0,0,__pFaviconLabel->GetWidth(),__pFaviconLabel->GetHeight()));
628 Addressbar::OnFocusGained(const Control& source)
630 AppLog("XYZ::Addressbar::OnFocusGained");
631 if(__pAddressbarUrlField && __isAppBackGround == false)
633 String removedHttpUrl = RemoveHttpTextFromDisplayURL();
634 if (removedHttpUrl.IsEmpty() == false)
636 __pAddressbarUrlField->SetText(removedHttpUrl);
640 __pAddressbarUrlField->SetText(__displayUrl);
644 if(__pAddressbarUrlField != null)
646 __pAddressbarUrlField->SetCursorPosition(__pAddressbarUrlField->GetTextLength());
647 if(__pAddressbarUrlField->GetTextLength() == 0)
649 __pAddressbarUrlField->SetKeypadActionEnabled(false);
653 __pAddressbarUrlField->SetKeypadActionEnabled(true);
656 if (__pListener != null)
658 __pListener->OnAddressBarFocusGained(*this);
660 __isAppBackGround = false;
664 Addressbar::OnFocusLost(const Tizen::Ui::Control& source)
666 AppLog("XYZ::Addressbar::OnFocusLost");
667 if(GetShowState() == true)
668 __isAppBackGround = true;
670 // __editTextUrl = L"";
671 if(__pListener != null)
673 __pListener->OnAddressBarFocusLost(*this, __isKeyPadOpened);
678 Addressbar::OnTextValueChanged(const Control& source)
680 if(__pAddressbarUrlField != null)
682 if(__pAddressbarUrlField->GetTextLength() == 0)
684 __pAddressbarUrlField->SetKeypadActionEnabled(false);
688 __pAddressbarUrlField->SetKeypadActionEnabled(true);
694 Addressbar::OnDeviceStateChanged(DeviceType deviceType, const String &state)
696 AppLog("1234:: Addressbar::OnDeviceStateChanged %ls %d",state.GetPointer(),(int)deviceType);
697 if(deviceType == DEVICE_TYPE_KEYBOARD && state.Equals(L"Closed",true) == 0)
699 __isKeyboardConnected = true;
703 Addressbar::SetAddressbarURLFocus()
705 AppLog("Addressbar::SetAddressbarURLFocus");
706 result r = __pAddressbarUrlField->SetFocus();
707 AppLog("Addressbar::SetAddressbarURLFocus result %s",GetErrorMessage(r));
711 Addressbar::GetAddressbarURL()
713 return __pAddressbarUrlField->GetText();
717 Addressbar::HasCurrentFocus()
719 return __pAddressbarUrlField->HasFocus();
723 Addressbar::HideKeypad()
725 __pAddressbarUrlField->HideKeypad();
729 Addressbar::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs)
731 if (requestId == BACK_GROUND_APP_EVENT)
733 __isAppBackGround = true;
735 else if(requestId == FORE_GROUND_APP_EVENT)
737 __isAppBackGround = false;