diff -r 085438c28042 -r 1c556dee8eb1 policymanagement/policyengine/policyengineui/src/PolicyEngineUI.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/policymanagement/policyengine/policyengineui/src/PolicyEngineUI.cpp Fri Aug 06 18:29:23 2010 +0530 @@ -0,0 +1,446 @@ +/* +* Copyright (c) 2000 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation of policymanagement components +* +*/ + +#include "PolicyEngineUI.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Logger.h" + +const int KMaxTries = 4; +const int KMaxCodeLength = 4; + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::PolicyEngineUI() +// ----------------------------------------------------------------------------- +PolicyEngineUI::PolicyEngineUI(const QVariantMap& parameters) + { + estbTrustCount = KMaxTries; + DisplayNotificationDialog(parameters); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::~PolicyEngineUI() +// ----------------------------------------------------------------------------- +PolicyEngineUI::~PolicyEngineUI() + { + + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::DisplayNotificationDialog() +// Read the parameters sent from client +// ----------------------------------------------------------------------------- +void PolicyEngineUI::DisplayNotificationDialog(const QVariantMap& parameters) + { + LOGSTRING( "+ DisplayNotificationDialog +" ); + QVariantMap::const_iterator i = parameters.constBegin(); + + while (i != parameters.constEnd()) + { + if (i.key().toAscii() == "serverdisplayname") + { + iServerName = i.value().toString(); + } + else if (i.key().toAscii() == "fingerprint") + { + iFingerprint = i.value().toString(); + } + ++i; + } + + TBuf<50> server(iServerName.utf16()); + TBuf<10> buffer(iFingerprint.utf16()); + + LOGSTRING2( "serverdisplayname %S", &server ); + LOGSTRING2( "fingerprint %S", &buffer ); + + ShowInputDialog(); + LOGSTRING( "- DisplayNotificationDialog -" ); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::ShowInputDialog() +// Show the accept control dialog +// ----------------------------------------------------------------------------- +void PolicyEngineUI::ShowInputDialog() + { + LOGSTRING( "+ ShowInputDialog +" ); + HbDocumentLoader loader; + bool ok = false; + loader.load(":/xml/dialog.docml", &ok); + if (!ok) + { + return; + } + + HbDialog *dialog1 = + qobject_cast (loader.findWidget("dialog")); + + //set heading content + HbLabel *contentheading = qobject_cast (loader.findWidget( + "qtl_dialog_pri_heading")); + QString heading(hbTrId("txt_device_update_title_security_information")); + contentheading->setPlainText(heading); + + //set body content + HbLabel *contentbody = qobject_cast (loader.findWidget( + "qtl_dialog_pri5")); + + QString body( + (hbTrId("txt_device_update_info_1_server_wants_to_contro").arg( + iServerName))); + contentbody->setTextWrapping(Hb::TextWordWrap); + contentbody->setPlainText(body); + + HbAction *primaryAction = qobject_cast ( + dialog1->actions().at(0)); + HbAction *secondaryAction = qobject_cast ( + dialog1->actions().at(1)); + + //set dialog properties + dialog1->setTimeout(HbPopup::NoTimeout); + dialog1->setDismissPolicy(HbPopup::NoDismiss); + + QObject::connect(primaryAction, SIGNAL(triggered()), this, + SLOT(onOKSelected())); + QObject::connect(secondaryAction, SIGNAL(triggered()), this, + SLOT(onCancelSelected())); + + if (dialog1) + dialog1->show(); + + LOGSTRING( "- ShowInputDialog -" ); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::onOKSelected() +// Show the user input dialog once control is accepted +// ----------------------------------------------------------------------------- +void PolicyEngineUI::onOKSelected() + { + + LOGSTRING( "+ onOKSelected +" ); + + HbDocumentLoader loader; + bool ok = false; + loader.load(":/xml/InputDialog.docml", &ok); + if (!ok) + { + return; + } + + mdialog = qobject_cast (loader.findWidget("dialog")); + + //set heading content + HbLabel *contentheading = qobject_cast (loader.findWidget( + "qtl_dialog_pri_heading")); + QString heading(hbTrId("txt_device_update_title_security_information")); + contentheading->setPlainText(heading); + + //set label + HbLabel *contentlabel = qobject_cast (loader.findWidget( + "HeadingLabel")); + contentlabel->setTextWrapping(Hb::TextWordWrap); + QString label( + (hbTrId("txt_device_update_info_enter_first_4_characters_of").arg( + iServerName))); + contentlabel ->setPlainText(label); + + //set length for editline + mContentEdit = qobject_cast (loader.findWidget("InputLine")); + mContentEdit->setMaxLength(KMaxCodeLength); + + //set dialog properties + mdialog->setTimeout(HbPopup::NoTimeout); + mdialog->setDismissPolicy(HbPopup::NoDismiss); + + HbAction* primaryAction = (HbAction*) (mdialog->actions().at(0)); + HbAction *secondaryAction = (HbAction*) (mdialog->actions().at(1)); + primaryAction->setEnabled(false); + + QObject::connect(primaryAction, SIGNAL(triggered()), this, + SLOT(establishTrust())); + QObject::connect(secondaryAction, SIGNAL(triggered()), this, + SLOT(cancelTrust())); + QObject::connect(mContentEdit, SIGNAL(contentsChanged()), this, + SLOT(codeTextChanged())); + + if (mdialog) + mdialog->show(); + + LOGSTRING( "- onOKSelected -" ); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::onCancelSelected() +// ----------------------------------------------------------------------------- +void PolicyEngineUI::onCancelSelected() + { + LOGSTRING( "+ onCancelSelected +" ); + + QVariantMap result; + + result.insert("keyResponse", -1); + emit + deviceDialogData(result); + + emit + deviceDialogClosed(); + + LOGSTRING( "- onCancelSelected -" ); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::onTrustCreation() +// ----------------------------------------------------------------------------- +void PolicyEngineUI::onTrustCreation() + { + LOGSTRING( "+ onTrustCreation +" ); + QVariantMap result; + + result.insert("keyResponse", 0); + emit + deviceDialogData(result); + + emit + deviceDialogClosed(); + + LOGSTRING( "- onTrustCreation -" ); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::establishTrust() +// ----------------------------------------------------------------------------- +void PolicyEngineUI::establishTrust() + { + LOGSTRING( "+ establishTrust +" ); + bool retVal; // return value from code verification API. + estbTrustCount--; + retVal = verifyFingerPrint(); + + if (retVal) + { + LOGSTRING( "Trust Created" ); + //Reset the counter. + estbTrustCount = 0; + onTrustCreation(); + + } + else + { + //check the number of tries. + if (estbTrustCount == 0) + { + //Access denied. + LOGSTRING( "Access Denied" ); + HbMessageBox *msgBox = new HbMessageBox(); + msgBox->setHeadingWidget(new HbLabel(hbTrId( + "txt_device_update_title_security_information"))); + + msgBox->setText(hbTrId( + "txt_device_update_info_security_info_access_denied")); + msgBox->setTimeout(HbDialog::NoTimeout); + msgBox->setDismissPolicy(HbDialog::NoDismiss); + + HbAction *action = (HbAction*) (msgBox->actions().at(0)); + QObject::connect(action, SIGNAL(triggered()), this, + SLOT(onCancelSelected())); + + msgBox->show(); + } + else + { + LOGSTRING2( "tries left %i", estbTrustCount ); + //Code didnot match. + HbDocumentLoader loader; + bool ok = false; + loader.load(":/xml/InputDialog.docml", &ok); + if (!ok) + { + return; + } + + mdialog = qobject_cast (loader.findWidget("dialog")); + + //set heading content + HbLabel *contentheading = qobject_cast ( + loader.findWidget("qtl_dialog_pri_heading")); + contentheading->setTextWrapping(Hb::TextWordWrap); + QString heading(hbTrId( + "txt_device_update_title_security_information")); + contentheading->setPlainText(heading); + + //set label + HbLabel *contentlabel = qobject_cast ( + loader.findWidget("HeadingLabel")); + QString + label( + (hbTrId( + "txt_device_update_info_security_information_did_no").arg( + estbTrustCount))); + + contentlabel->setTextWrapping(Hb::TextWordWrap); + contentlabel->setPlainText(label); + + mContentEdit = qobject_cast (loader.findWidget( + "InputLine")); + mContentEdit->setMaxLength(KMaxCodeLength); + + mdialog->setTimeout(HbPopup::NoTimeout); + mdialog->setDismissPolicy(HbPopup::NoDismiss); + + HbAction* primaryAction = qobject_cast ( + mdialog->actions().at(0)); + HbAction *secondaryAction = qobject_cast ( + mdialog->actions().at(1)); + primaryAction->setEnabled(false); + + QObject::connect(primaryAction, SIGNAL(triggered()), this, + SLOT(establishTrust())); + QObject::connect(secondaryAction, SIGNAL(triggered()), this, + SLOT(cancelTrust())); + QObject::connect(mContentEdit, SIGNAL(contentsChanged()), this, + SLOT(codeTextChanged())); + + if (mdialog) + mdialog->show(); + } + } + LOGSTRING( "- establishTrust -" ); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::cancelTrust() +// ----------------------------------------------------------------------------- +void PolicyEngineUI::cancelTrust() + { + LOGSTRING( "+ cancelTrust +" ); + //Reset the counter. + estbTrustCount = 0; + + QVariantMap result; + result.insert("keyResponse", -1); + emit + deviceDialogData(result); + + emit + deviceDialogClosed(); + LOGSTRING( "- cancelTrust -" ); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::setDeviceDialogParameters() +// ----------------------------------------------------------------------------- +bool PolicyEngineUI::setDeviceDialogParameters(const QVariantMap ¶meters) + { + Q_UNUSED(parameters); + LOGSTRING( "+ setDeviceDialogParameters +" ); + return true; + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::deviceDialogError() +// Get error +// ----------------------------------------------------------------------------- +int PolicyEngineUI::deviceDialogError() const + { + LOGSTRING( "+ deviceDialogError +" ); + return 0; + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::PolicyEngineUI() +// Close device dialog +// ----------------------------------------------------------------------------- +void PolicyEngineUI::closeDeviceDialog(bool byClient) + { + Q_UNUSED(byClient); + LOGSTRING( "+ closeDeviceDialog +" ); + close(); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::PolicyEngineUI() +// Return display widget +// ----------------------------------------------------------------------------- +HbDialog *PolicyEngineUI::deviceDialogWidget() const + { + LOGSTRING( "+ deviceDialogWidget +" ); + return const_cast (this); + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::PolicyEngineUI() +// Verify the user entered code +// ----------------------------------------------------------------------------- +bool PolicyEngineUI::verifyFingerPrint() + { + LOGSTRING( "+ verifyFingerPrint +" ); + + QString enteredCode = mContentEdit->text(); + TBuf<10> buffer(enteredCode.utf16()); + + LOGSTRING2( "User entered code %i", &buffer); + LOGSTRING2( "User entered code %S", &buffer); + + if (enteredCode.compare(iFingerprint, Qt::CaseInsensitive) == 0) + { + LOGSTRING( "+ fingerprint MATCH !!!! +" ); + return true; + } + else + { + LOGSTRING( "+ fingerprint DOESNOT MATCH +" ); + return false; + } + } + + +// ----------------------------------------------------------------------------- +// PolicyEngineUI::codeTextChanged() +// checks the entered text length and enables the OK option accordingly. +// ----------------------------------------------------------------------------- +void PolicyEngineUI::codeTextChanged() + { + QString str = mContentEdit->text(); + + if (str.length() >= KMaxCodeLength) + mdialog->actions().at(0)->setEnabled(true); + else + mdialog->actions().at(0)->setEnabled(false); + }