* @file FWebCtrl_UserConfirmPopup.cpp
* @brief The file contains the definition of _UserConfirmPopup class.
*/
+#include <EWebKit2.h>
#include <FAppApp.h>
#include <FBaseColArrayList.h>
#include <FBaseSysLog.h>
#include <FBaseUtilUri.h>
#include <FGrpDimension.h>
+#include <FGrpFont.h>
#include <FGrpRectangle.h>
#include <FIoDbEnumerator.h>
#include <FIoDbStatement.h>
#include <FUiCtrlButton.h>
#include <FUiCtrlLabel.h>
#include <FUiCtrlPanel.h>
+#include <FUiCtrlScrollPanel.h>
+#include <FUiKeyEventInfo.h>
#include <FUiLayout.h>
#include <FUiVerticalBoxLayout.h>
+#include <FGrp_TextTextObject.h>
+#include <FGrp_TextTextSimple.h>
#include <FIo_DatabaseImpl.h>
#include <FSys_SystemResource.h>
#include <FUi_ControlManager.h>
#include <FUi_ResourceManager.h>
-#include "FWebCtrl_EflWebkit.h"
+#include "FWebCtrl_WebManager.h"
#include "FWebCtrl_UserConfirmPopup.h"
#include "FWebCtrl_Utility.h"
#include "FWebCtrl_WebImpl.h"
using namespace Tizen::Base::Collection;
using namespace Tizen::Base::Utility;
using namespace Tizen::Graphics;
+using namespace Tizen::Graphics::_Text;
using namespace Tizen::Io;
using namespace Tizen::Security::Cert;
using namespace Tizen::System;
{
+static const int TEXT_SIZE_ADJUST = 1;
+
+
_UserConfirmPopup::_UserConfirmPopup(void)
: __pUserPolicyData(null)
, __userConfirmMode(USER_CONFIRM_USERMEDIA)
, __pCheckButton(null)
+ , __isUserActionNeeded(false)
, __sync(false)
+ , __pImpl(null)
{
}
_UserConfirmPopup::~_UserConfirmPopup(void)
{
+ if (__isUserActionNeeded == true)
+ {
+ HandleUserAction(EINA_FALSE);
+ __isUserActionNeeded = false;
+ }
}
result
-_UserConfirmPopup::Construct(_UserConfirmMode userConfirmMode, void* pEventInfo, bool sync, String msg)
+_UserConfirmPopup::Construct(_UserConfirmMode userConfirmMode, void* pEventInfo, Tizen::Web::Controls::_WebImpl* pImpl, bool sync, String msg)
{
result r = E_SUCCESS;
SysTryReturnResult(NID_WEB_CTRL, pEventInfo, E_INVALID_ARG, "Invalid argument(s) is used. pPolicy is null.");
__userConfirmMode = userConfirmMode;
__sync = sync;
+ __isUserActionNeeded = true;
+
bool hasTitle = true;
- int popupMaxHeight = 2*pPopupData->labelDim.height + pPopupData->btnDim.height + 2*pPopupData->sideMargin;
+ int popupMaxHeight = 2*pPopupData->labelDim.height + pPopupData->panelHeight;
+
+ __pImpl = pImpl;
+ SysAssertf(__pImpl != null, "Failed to get _WebImpl");
if (__userConfirmMode == USER_CONFIRM_GEOLOCATION)
{
if (__userConfirmMode == USER_SCRIPT_ALERT)
{
- popupMaxHeight -= 2*pPopupData->sideMargin;
hasTitle = false;
}
if (userConfirmMode != USER_SCRIPT_ALERT)
{
- SetTitleText(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_HEADER_SECURITY_WARNING"));
+ SetTitleText(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_HEADER_SECURITY_WARNING_ABB"));
}
- Rectangle rect(0, 0, 0, 0);
-
- //label
- rect.height = 2*pPopupData->labelDim.height;
- rect.width = pPopupData->labelDim.width;
-
- std::unique_ptr<Label> pLabel(new (std::nothrow) Label());
- SysTryReturnResult(NID_WEB_CTRL, pLabel.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
-
String message = L"";
if (userConfirmMode >= USER_SCRIPT_ALERT && userConfirmMode <= USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED)
{
{
message = GetMessageFromPolicy();
}
+
+ Rectangle rect(0, 0, 0, 0);
+
+ //label
+ rect.height = 2*pPopupData->labelDim.height;
+ rect.width = pPopupData->labelDim.width;
+
+ //With the font of label and width of label, required height is calculated
+ // using textobject. TEXT_SIZE_ADJUST is used to increase font size and get bigger height
+ // as the accurate height is not fitting text in some cases.
+ Font font;
+ r = font.Construct(FONT_STYLE_PLAIN, pPopupData->labelFontSize + TEXT_SIZE_ADJUST);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ std::unique_ptr<TextObject> pTextObject(new (std::nothrow) TextObject());
+ SysTryReturnResult(NID_WEB_CTRL, pTextObject.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
+
+ r = pTextObject->Construct();
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ std::unique_ptr<TextSimple> pSimpleText(new (std::nothrow) TextSimple(message.GetPointer(), message.GetLength(), TEXT_ELEMENT_SOURCE_TYPE_EXTERNAL, &font));
+ SysTryReturnResult(NID_WEB_CTRL, pSimpleText.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
+
+ r = pTextObject->AppendElement(*pSimpleText);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ pSimpleText.release();
+
+ r = pTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_WORD);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = pTextObject->SetBounds(rect);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = pTextObject->SetFont(&font, 0, message.GetLength());
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = pTextObject->Compose();
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ int labelHeight = pTextObject->GetTotalHeight();
+
+ std::unique_ptr<Label> pLabel(new (std::nothrow) Label());
+ SysTryReturnResult(NID_WEB_CTRL, pLabel.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
+
r = pLabel->Construct(rect, message);
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
pLabel->SetTextConfig(pPopupData->labelFontSize, LABEL_TEXT_STYLE_NORMAL);
- r = AddControl(*pLabel);
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+ Control* pInfoLabel = null;
+
+ if (rect.height < labelHeight)
+ {
+ //message text is bigger than label, scroll is created to accomodate it.
+ std::unique_ptr<ScrollPanel> pScrollPanel(new (std::nothrow) ScrollPanel());
+ SysTryReturnResult(NID_WEB_CTRL, pScrollPanel.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
+
+ r = pScrollPanel->Construct(rect);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = AddControl(*pScrollPanel);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ ScrollPanel* pSPanel = pScrollPanel.release();
+
+ r = pLabel->SetSize(Dimension(rect.width, labelHeight));
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = pSPanel->AddControl(*pLabel);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ pLabel.release();
+ pInfoLabel = pSPanel;
+ }
+ else
+ {
+ r = AddControl(*pLabel);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ pInfoLabel = pLabel.release();
+ }
- Label* pInfoLabel = pLabel.release();
//checkbutton
if (__userConfirmMode == USER_CONFIRM_GEOLOCATION)
{
r = titleList.Construct();
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
- idList.Add(*(new Integer(ID_BUTTON_USER_ALLOW)));
if (userConfirmMode == USER_SCRIPT_ALERT)
{
+ idList.Add(*(new Integer(ID_BUTTON_USER_ALLOW)));
titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON_OK"))));
}
+ else if (userConfirmMode == USER_BEFORE_UNLOAD_CONFIRM)
+ {
+ idList.Add(*(new Integer(ID_BUTTON_USER_CANCEL)));
+ idList.Add(*(new Integer(ID_BUTTON_USER_ALLOW)));
+ titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON_LEAVE"))));
+ titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON_STAY"))));
+ }
else
{
idList.Add(*(new Integer(ID_BUTTON_USER_CANCEL)));
- titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_OPT_ALLOW"))));
- titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_OPT_CANCEL"))));
+ idList.Add(*(new Integer(ID_BUTTON_USER_ALLOW)));
+ titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON_CANCEL_ABB"))));
+ titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON_CONTINUE_ABB"))));
}
r = CreateAndAddButtons(idList, titleList, pButtonPanel);
{
pLayout->SetHorizontalAlignment(*__pCheckButton, LAYOUT_HORIZONTAL_ALIGN_CENTER);
}
- pLayout->SetHorizontalAlignment(*pButtonPanel, LAYOUT_HORIZONTAL_ALIGN_CENTER);
-
- if ( __userConfirmMode != USER_SCRIPT_ALERT )
- {
- pLayout->SetSpacing(*pButtonPanel, 2*pPopupData->sideMargin);
- }
+ SetPropagatedKeyEventListener(this);
return E_SUCCESS;
}
{
case USER_CONFIRM_USERMEDIA:
{
- GetOwner()->SendUserEvent(ID_USER_CONFIRM_USERMEDIA_CLOSE, null);
+ __pImpl->SendUserEvent(ID_USER_CONFIRM_USERMEDIA_CLOSE, null);
break;
}
case USER_CONFIRM_GEOLOCATION:
{
- GetOwner()->SendUserEvent(ID_USER_CONFIRM_GEOLOCATION_CLOSE, null);
+ __pImpl->SendUserEvent(ID_USER_CONFIRM_GEOLOCATION_CLOSE, null);
break;
}
case USER_CONFIRM_NOTIFICATION:
{
- GetOwner()->SendUserEvent(ID_USER_CONFIRM_NOTIFICATION_CLOSE, null);
+ __pImpl->SendUserEvent(ID_USER_CONFIRM_NOTIFICATION_CLOSE, null);
break;
}
case USER_SCRIPT_ALERT:
{
- GetOwner()->SendUserEvent(ID_USER_SCRIPT_ALERT_CLOSE, null);
+ __pImpl->SendUserEvent(ID_USER_SCRIPT_ALERT_CLOSE, null);
+ break;
+ }
+ case USER_SCRIPT_CONFIRM:
+ {
+ __pImpl->SendUserEvent(ID_USER_SCRIPT_CONFIRM_CLOSE, null);
+ break;
+ }
+ case USER_BEFORE_UNLOAD_CONFIRM:
+ {
+ __pImpl->SendUserEvent(ID_USER_BEFORE_UNLOAD_CONFIRM_CLOSE, null);
break;
}
default:
ewk_view_javascript_alert_reply(pView);
break;
}
+ case USER_SCRIPT_CONFIRM:
+ {
+ Evas_Object* pView = reinterpret_cast< Evas_Object* >(__pUserPolicyData);
+ ewk_view_javascript_confirm_reply(pView, allow);
+ break;
+ }
+ case USER_BEFORE_UNLOAD_CONFIRM:
+ {
+ Evas_Object* pView = reinterpret_cast< Evas_Object* >(__pUserPolicyData);
+ ewk_view_before_unload_confirm_panel_reply(pView, !allow);
+ break;
+ }
case USER_CONFIRM_APP_CACHE:
{
Evas_Object *pObj = reinterpret_cast< Evas_Object* >(__pUserPolicyData);
default:
SysAssert(false);
}
+ __isUserActionNeeded = false;
}
}
}
+bool
+_UserConfirmPopup::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+ return false;
+}
+
+bool
+_UserConfirmPopup::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+ result r = E_SUCCESS;
+ if ((keyEventInfo.GetKeyCode() == KEY_ESC || keyEventInfo.GetKeyCode() == KEY_BACK) && source.GetShowState() == true)
+ {
+ HandleUserAction(EINA_FALSE);
+ r = HidePopup();
+
+ if (IsFailed(r))
+ {
+ SysLogException(NID_WEB_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+
+ switch (__userConfirmMode)
+ {
+ case USER_CONFIRM_USERMEDIA:
+ {
+ __pImpl->SendUserEvent(ID_USER_CONFIRM_USERMEDIA_CLOSE, null);
+ break;
+ }
+ case USER_CONFIRM_GEOLOCATION:
+ {
+ __pImpl->SendUserEvent(ID_USER_CONFIRM_GEOLOCATION_CLOSE, null);
+ break;
+ }
+ case USER_CONFIRM_NOTIFICATION:
+ {
+ __pImpl->SendUserEvent(ID_USER_CONFIRM_NOTIFICATION_CLOSE, null);
+ break;
+ }
+ case USER_SCRIPT_ALERT:
+ {
+ __pImpl->SendUserEvent(ID_USER_SCRIPT_ALERT_CLOSE, null);
+ break;
+ }
+ case USER_SCRIPT_CONFIRM:
+ {
+ __pImpl->SendUserEvent(ID_USER_SCRIPT_CONFIRM_CLOSE, null);
+ break;
+ }
+ case USER_BEFORE_UNLOAD_CONFIRM:
+ {
+ __pImpl->SendUserEvent(ID_USER_BEFORE_UNLOAD_CONFIRM_CLOSE, null);
+ break;
+ }
+ case USER_PROTOCOL_HANDLER:
+ case USER_CONTENT_HANDLER:
+ case USER_CONFIRM_APP_CACHE:
+ case USER_CONFIRM_DB_QUOTA_EXCEDED:
+ case USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED:
+ case USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED:
+ break;
+ default:
+ SysAssert(false);
+ }
+ }
+ return false;
+}
+
+bool
+_UserConfirmPopup::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+ return false;
+}
+
+bool
+_UserConfirmPopup::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+ return false;
+}
+
+bool
+_UserConfirmPopup::TranslateKeyEventInfo(Control& source, KeyEventInfo& keyEventInfo)
+{
+ return false;
+}
+
}}} // Tizen::Web::Controls