diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgnotifications/msgnotificationdialogplugin/src/msgnotificationdialogwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgnotifications/msgnotificationdialogplugin/src/msgnotificationdialogwidget.cpp Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,255 @@ +/* + * 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 "convergedmessage.h" + +#include "msgnotificationdialogpluginkeys.h" +#include "msgnotificationdialogwidget.h" + +const int NoError = 0; +const int ParameterError = 10000; + + +//---------------------------------------------------------------- + +class ServiceRequestSenderTask : public QRunnable + { +public: + ServiceRequestSenderTask(qint64 conversationId):mConvId(conversationId) {} + + void run() + { + XQServiceRequest snd( + "com.nokia.services.hbserviceprovider.conversationview", + "open(qint64)",false); + snd << mConvId; + bool res=snd.send(); + } + + ~ServiceRequestSenderTask() + { + } + + private: + qint64 mConvId; + }; + +// ------------------------------------------------------------------------ + + + +// ---------------------------------------------------------------------------- +// 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); + + int messageType = parameters.value(KMessageTypeKey).toInt(); + if( messageType == ECsSMS) + { + HbIcon icon(":/sms.svg"); + setIcon(icon); + setText(parameters.value(KMessageBodyKey).toString()); + } + else if(messageType == ECsMMS) + { + HbIcon icon(":/mms.svg"); + setIcon(icon); + setText(parameters.value(KMessageSubjectKey).toString()); + } + else if(messageType == ECsRingingTone) + { + HbIcon icon(":/ringingtone.svg"); + setIcon(icon); + setText(parameters.value(KMessageBodyKey).toString()); + } + else + { + HbIcon icon(":/sms.svg"); // show default for other message types + setIcon(icon); + setText(parameters.value(KMessageBodyKey).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)); +} + +// ---------------------------------------------------------------------------- +// MsgNotificationDialogWidget::prepareDisplayName +// @see msgnotificationdialogwidget.h +// ---------------------------------------------------------------------------- +void MsgNotificationDialogWidget::prepareDisplayName( + const QVariantMap ¶meters) +{ + //Set the Contact Name/Number + QString firstName = parameters.value(KFirstNameKey).toString(); + QString lastName = parameters.value(KLastNameKey).toString(); + QString contactAddress = parameters.value(KContactAddressKey).toString(); + QString nickName = parameters.value(KNickNameKey).toString(); + + QString displayName; + + if (!nickName.isEmpty()) + { + displayName.append(nickName); + } + else if ( firstName.isEmpty() && lastName.isEmpty()) + { + displayName.append(contactAddress); + } + else if (lastName.isEmpty() && !firstName.isEmpty()) + { + displayName.append(firstName); + } + else if (firstName.isEmpty() && !lastName.isEmpty()) + { + displayName.append(lastName); + } + else + { + // If both first Name and last name are present + displayName.append(firstName); + displayName.append(" "); + displayName.append(lastName); + } + + // set the display name + setTitle(displayName); +}