diff -r fa1df4b99609 -r ebe688cedc25 messagingapp/msgnotifications/msgnotificationdialogplugin/src/msgnotificationdialogwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgnotifications/msgnotificationdialogplugin/src/msgnotificationdialogwidget.cpp Tue Aug 31 15:11:31 2010 +0300 @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2009 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: Widget class for Notificaiton Dialog Plugin + * + */ +#include +#include +#include "debugtraces.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "convergedmessage.h" + +#include "msgnotificationdialogpluginkeys.h" +#include "msgnotificationdialogwidget.h" + +const int NoError = 0; +const int ParameterError = 10000; + +static const char NEW_MSG_ICON[] = "qtg_large_new_message"; + +// ---------------------------------------------------------------------------- +// ServiceRequestSenderTask::ServiceRequestSenderTask +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +ServiceRequestSenderTask::ServiceRequestSenderTask(qint64 conversationId): +mConvId(conversationId) + { + } + +// ---------------------------------------------------------------------------- +// ServiceRequestSenderTask::~ServiceRequestSenderTask +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +ServiceRequestSenderTask::~ServiceRequestSenderTask() + { + } + +// ---------------------------------------------------------------------------- +// ServiceRequestSenderTask::run +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +void ServiceRequestSenderTask::run() + { + QList args; + QString serviceName("com.nokia.services.hbserviceprovider"); + QString operation("open(qint64)"); + XQAiwRequest* request; + XQApplicationManager appManager; + request = appManager.create(serviceName, "conversationview", operation, false); // not embedded + if ( request == NULL ) + { + return; + } + args << QVariant(mConvId); + request->setArguments(args); + request->send(); + delete request; + } + + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::MsgNotificationDialogWidget +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +MsgNotificationDialogWidget::MsgNotificationDialogWidget( + const QVariantMap ¶meters) +: HbNotificationDialog(), +mLastError(NoError), +mShowEventReceived(false), +mConversationId(-1) +{ + constructDialog(parameters); +} + + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::setDeviceDialogParameters +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +bool MsgNotificationDialogWidget::setDeviceDialogParameters( + const QVariantMap ¶meters) +{ + return constructDialog(parameters); +} + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::constructDialog +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +bool MsgNotificationDialogWidget::constructDialog( + const QVariantMap ¶meters) + { + // Set parameters + mLastError = NoError; + + // if conversation id is not proper return false + mConversationId = parameters.value(KConversationIdKey).toLongLong(); + if( mConversationId <= 0) + { + mLastError = ParameterError; + return false; + } + + prepareDisplayName(parameters); + + setIcon(HbIcon(NEW_MSG_ICON)); + + int messageType = parameters.value(KMessageTypeKey).toInt(); + if( messageType == ECsSMS) + { + QString messageBody; + messageBody = parameters.value(KMessageBodyKey).toString(); + messageBody.replace(QChar::ParagraphSeparator, QChar::LineSeparator); + messageBody.replace('\r', QChar::LineSeparator); + setText(messageBody); + } + else + { + // No special handling required for other message types. + // Subject & Body text are both set to description in msgnotifier. + setText(parameters.value(KMessageSubjectKey).toString()); + } + + // enable touch activation and connect to slot + enableTouchActivation(true); + connect(this, SIGNAL(activated()), this, SLOT(widgetActivated())); + + // set the standard timeout value, that is used by default notificaitons dialogs + setTimeout(HbPopup::StandardTimeout); + + return true; +} + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::deviceDialogError +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +int MsgNotificationDialogWidget::deviceDialogError() const +{ + // Get error + return mLastError; +} + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::closeDeviceDialog +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +void MsgNotificationDialogWidget::closeDeviceDialog(bool byClient) +{ + // Close device dialog + Q_UNUSED(byClient); + close(); + // If show event has been received, close is signalled from hide event. If not, + // hide event does not come and close is signalled from here. + if (!mShowEventReceived) { + emit deviceDialogClosed(); + } + +} + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::deviceDialogWidget +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +HbDialog *MsgNotificationDialogWidget::deviceDialogWidget() const +{ + // Return display widget + return const_cast(this); +} + + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::hideEvent +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +void MsgNotificationDialogWidget::hideEvent(QHideEvent *event) +{ + HbNotificationDialog::hideEvent(event); + emit deviceDialogClosed(); +} + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::showEvent +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +void MsgNotificationDialogWidget::showEvent(QShowEvent *event) +{ + HbNotificationDialog::showEvent(event); + mShowEventReceived = true; +} + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::widgetActivated +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +void MsgNotificationDialogWidget::widgetActivated() +{ +QThreadPool::globalInstance()->start( + new ServiceRequestSenderTask(mConversationId)); + enableTouchActivation(false); +} + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::prepareDisplayName +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +void MsgNotificationDialogWidget::prepareDisplayName( + const QVariantMap ¶meters) +{ + //Set the Contact Name/Number + QString displayName = parameters.value(KDisplayNameKey).toString(); + QString contactAddress = parameters.value(KContactAddressKey).toString(); + + if (displayName.isEmpty()) + { + setTitle(contactAddress); + } + else + { + setTitle(displayName); + } +}