# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1284701252 -10800 # Node ID 7cc7d74059f95a47b5c2fe7b2694b023aeca04af # Parent ae724a111993279cafde8a40ddeeea5b4a76a53e Revision: 201035 Kit: 201037 diff -r ae724a111993 -r 7cc7d74059f9 contacts_info/contacts_metadata/contacts_metadata.mrp --- a/contacts_info/contacts_metadata/contacts_metadata.mrp Thu Sep 02 20:16:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -component contacts_metadata -source \sf\app\contacts\contacts_info\contacts_metadata -source \sf\app\contacts\package_definition.xml -source \sf\app\contacts\distribution.policy.s60 -notes_source \component_defs\release.src -ipr T diff -r ae724a111993 -r 7cc7d74059f9 contacts_plat/contacts_ui_api/inc/cntuids.h --- a/contacts_plat/contacts_ui_api/inc/cntuids.h Thu Sep 02 20:16:15 2010 +0300 +++ b/contacts_plat/contacts_ui_api/inc/cntuids.h Fri Sep 17 08:27:32 2010 +0300 @@ -49,7 +49,8 @@ // name list row enumerations enum CntNameListRowSetting { CntOneRowNameOnly = 0x0, - CntTwoRowsNameAndPhoneNumber = 0x1 + CntTwoRowsNameAndPhoneNumber = 0x1, + CntTwoRowsStatusUpdate = 0x2 }; diff -r ae724a111993 -r 7cc7d74059f9 contacts_plat/contacts_ui_extensions_api/inc/cntviewsupplier.h --- a/contacts_plat/contacts_ui_extensions_api/inc/cntviewsupplier.h Thu Sep 02 20:16:15 2010 +0300 +++ b/contacts_plat/contacts_ui_extensions_api/inc/cntviewsupplier.h Fri Sep 17 08:27:32 2010 +0300 @@ -50,6 +50,16 @@ */ virtual CntAbstractView* viewAt( int aIndex ) = 0; + /** + * Sets the view id base value for supplier. + * The supplier method viewIdAt should return view ids in range + * from aViewIdBase to aViewIdBase + viewCount. + * + * @param int, action index + * @return QString, process name + */ + virtual void setViewIdBase( int aViewIdBase ) = 0; + protected: // prevent deleting by client virtual ~CntViewSupplier() {} diff -r ae724a111993 -r 7cc7d74059f9 contactwidgethsplugin/contactwidgeths/inc/commlauncherwidget.h --- a/contactwidgethsplugin/contactwidgeths/inc/commlauncherwidget.h Thu Sep 02 20:16:15 2010 +0300 +++ b/contactwidgethsplugin/contactwidgeths/inc/commlauncherwidget.h Fri Sep 17 08:27:32 2010 +0300 @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include "contactwidgetplugin_global.h" @@ -52,8 +54,11 @@ QRectF& sceneRect, QRectF& launcherRect); void selectAppearEffect(QPointF FriendPos, QPointF LauncherPos); + bool isPendingRequest(); + signals: void launcherClosed(); + void requestCompleted(); protected: void keyPressEvent(QKeyEvent *event); @@ -68,10 +73,11 @@ void makeCall(); void sendMessage(); - // EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE PLATFORM DOES NOT SUPPORT IT! - //void sendEmail(); + void sendEmail(); void openPhonebook(); + void handleRequestOk(const QVariant& value); + int commLauncherWidth(); private: @@ -80,8 +86,11 @@ QGraphicsLinearLayout *mLayout; int mButtonCount; + + XQAiwRequest *mRequest; + QContactAction* mCommLauncherAction; HbPushButton *mCallButton; HbPushButton *mSendMsgButton; @@ -91,6 +100,10 @@ XQApplicationManager *mApplicationManager; QString mAppearEffect; + QObjectCleanupHandler mCleanupHandler; + + bool mPendingRequest; + CONTACTWIDGET_TEST_FRIEND_CLASS(TestContactWidget) }; diff -r ae724a111993 -r 7cc7d74059f9 contactwidgethsplugin/contactwidgeths/inc/contactwidgeths.h --- a/contactwidgethsplugin/contactwidgeths/inc/contactwidgeths.h Thu Sep 02 20:16:15 2010 +0300 +++ b/contactwidgethsplugin/contactwidgeths/inc/contactwidgeths.h Fri Sep 17 08:27:32 2010 +0300 @@ -26,7 +26,8 @@ #include #include #include - +#include +#include #include "contactwidgetplugin_global.h" #include "commlauncherwidget.h" @@ -89,6 +90,7 @@ void onContactsRemoved( const QList &contactIds ); void thumbnailReady(QPixmap, void*, int, int); void loadNormalLayout(); + void onRequestComplete(); private: void createUI(); @@ -117,11 +119,15 @@ CommLauncherWidget *mLauncher; HbFrameDrawer *mWidgetFrameDrawer; HbFrameDrawer *mShareFrameDrawer; + QScopedPointer mAvatarIcon; + // Contact QContact mContact; QContactLocalId mContactLocalId; QString mContactImageFileName; - QContactAvatar* mAvatar; + // need to use scopepointer as QObjectCleanupHandler is not accepting + // it as a parameter + QScopedPointer mAvatar; bool mContactHasAvatarDetail; // Contact manager QContactManager *mContactManager; @@ -129,11 +135,15 @@ XQAiwRequest *mContactSelectRequest; HbMainWindow *mMainWindow; - ThumbnailManager *mThumbnailManager; + QScopedPointer mThumbnailManager; QPixmap mThumbnailPixmap; // When true, thumbnail generating is in progress bool mThumbnailInProgress; - HbTranslator* mTranslator; + QScopedPointer mTranslator; + + QObjectCleanupHandler mCleanupHandler; + + bool mPendingExit; CONTACTWIDGET_TEST_FRIEND_CLASS(TestContactWidget) diff -r ae724a111993 -r 7cc7d74059f9 contactwidgethsplugin/contactwidgeths/resource/commlauncherbuttons.css --- a/contactwidgethsplugin/contactwidgeths/resource/commlauncherbuttons.css Thu Sep 02 20:16:15 2010 +0300 +++ b/contactwidgethsplugin/contactwidgeths/resource/commlauncherbuttons.css Fri Sep 17 08:27:32 2010 +0300 @@ -1,23 +1,74 @@ -HbPushButton + +HbPushButton#callApp { fixed-width: 9.0un; fixed-height: 9.0un; } -HbPushButton::icon +HbPushButton#callApp::icon { fixed-width: 8.0un; fixed-height: 8.0un; } -HbPushButtonSpacer +HbPushButton#callApp::Spacer +{ + fixed-width: 0.0un; + fixed-height: 0.0un; +} + +HbPushButton#msgApp +{ + fixed-width: 9.0un; + fixed-height: 9.0un; +} + +HbPushButton#msgApp::icon +{ + fixed-width: 8.0un; + fixed-height: 8.0un; +} + +HbPushButton#msgApp::Spacer { fixed-width: 0.0un; fixed-height: 0.0un; } +HbPushButton#emailApp +{ + fixed-width: 9.0un; + fixed-height: 9.0un; +} +HbPushButton#emailApp::icon +{ + fixed-width: 8.0un; + fixed-height: 8.0un; +} + +HbPushButton#emailApp::Spacer +{ + fixed-width: 0.0un; + fixed-height: 0.0un; +} +HbPushButton#phoneApp +{ + fixed-width: 9.0un; + fixed-height: 9.0un; +} +HbPushButton#phoneApp::icon +{ + fixed-width: 8.0un; + fixed-height: 8.0un; +} + +HbPushButton#phoneApp::Spacer +{ + fixed-width: 0.0un; + fixed-height: 0.0un; +} diff -r ae724a111993 -r 7cc7d74059f9 contactwidgethsplugin/contactwidgeths/src/commlauncherwidget.cpp --- a/contactwidgethsplugin/contactwidgeths/src/commlauncherwidget.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/contactwidgethsplugin/contactwidgeths/src/commlauncherwidget.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -23,7 +23,7 @@ #include #include #include - +#include #include "commlauncherwidget.h" // ContactManager backend @@ -39,13 +39,20 @@ const QString messageButtonName = "ButtonMessage"; const QString mycardButtonName = "ButtonMycard"; -const QString appearTL = "appear_tl"; -const QString appearTR = "appear_tr"; -const QString appearBL = "appear_bl"; -const QString appearBR = "appear_br"; +const QString appearEffectName = "appear"; const int commLauncherMargin = 120; // heights of titlebar & comm.launcher +// TODO: THESE STRINGS ARE IN W32 SDK. THESE DEFINITIONS CAN BE REMOVED +// WHEN EVERYBODY ARE USING IT OR LATER VERSION +#ifndef XQOP_CONTACTS_VIEW_CONTACT_CARD +#define XQOP_CONTACTS_VIEW_CONTACT_CARD QLatin1String("openContactCard(int)") +#endif +#ifndef XQI_CONTACTS_VIEW +#define XQI_CONTACTS_VIEW QLatin1String("com.nokia.symbian.IContactsView") +#endif + + /*! \class CommLauncherWidget */ @@ -62,7 +69,9 @@ mSendMsgButton(0), mEmailButton(0), mPhonebookButton(0), - mApplicationManager(0) + mApplicationManager(0), + mCommLauncherAction(0), + mPendingRequest(false) { HbStyleLoader::registerFilePath(":/commlauncherbuttons.css"); @@ -81,30 +90,37 @@ horizontalMargin, 2*verticalMargin); // create document loader - HbDocumentLoader *documentLoader = new HbDocumentLoader(); + QScopedPointer documentLoader ( new HbDocumentLoader() ); bool result = false; documentLoader->load(commLauncherDocml, &result); ASSERT(result); // create buttons const QString callIconName = "qtg_large_active_call"; - mCallButton = createButton(callIconName, callButtonName, documentLoader); + mCallButton = createButton(callIconName, callButtonName, documentLoader.data()); + HbStyle::setItemName(mCallButton, "callApp"); + mCallButton->setObjectName("callApp"); connect(mCallButton, SIGNAL(clicked()), this, SLOT(makeCall())); const QString messagingIconName = "qtg_large_message"; - mSendMsgButton = createButton(messagingIconName, messageButtonName, documentLoader); + mSendMsgButton = createButton(messagingIconName, messageButtonName, documentLoader.data()); + HbStyle::setItemName(mSendMsgButton, "msgApp"); + mSendMsgButton->setObjectName("msgApp"); connect(mSendMsgButton, SIGNAL(clicked()), this, SLOT(sendMessage())); const QString emailIconName = "qtg_large_email"; - mEmailButton = createButton(emailIconName, emailButtonName, documentLoader); - // EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE PLATFORM DOES NOT SUPPORT IT! - //connect(mEmailButton, SIGNAL(clicked()), this, SLOT(sendEmail())); + mEmailButton = createButton(emailIconName, emailButtonName, documentLoader.data()); + HbStyle::setItemName(mEmailButton, "emailApp"); + mEmailButton->setObjectName("emailApp"); + connect(mEmailButton, SIGNAL(clicked()), this, SLOT(sendEmail())); const QString phonebookIconName = "qtg_large_mycard"; - mPhonebookButton = createButton(phonebookIconName, mycardButtonName, documentLoader); + mPhonebookButton = createButton(phonebookIconName, mycardButtonName, documentLoader.data()); + HbStyle::setItemName(mPhonebookButton, "phoneApp"); + mPhonebookButton->setObjectName("phoneApp"); connect(mPhonebookButton, SIGNAL(clicked()), this, SLOT(openPhonebook())); - delete documentLoader; + } /*! @@ -113,11 +129,6 @@ CommLauncherWidget::~CommLauncherWidget() { // Deleting request cancels all pending requests - if (mRequest) { - delete mRequest; - mRequest = NULL; - } - } /*! @@ -182,8 +193,7 @@ } // Create email button, if email count exists - // EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE PLATFORM DOES NOT SUPPORT IT! - /*QList emailActionDescriptors = + QList emailActionDescriptors = QContactAction::actionDescriptors("email", cmBackend); if (emailActionDescriptors.count() > 0) { QList emailList = mContact->details(); @@ -200,16 +210,12 @@ } else { qDebug() << "Email button not created"; } - */ + mLayout->addItem(mPhonebookButton); mButtonCount++; - // add Effects - HbEffect::add(this, QString(":/friend_expand_tl.fxml"), appearTL); - HbEffect::add(this, QString(":/friend_expand_tr.fxml"), appearTR); - HbEffect::add(this, QString(":/friend_expand_bl.fxml"), appearBL); - HbEffect::add(this, QString(":/friend_expand_br.fxml"), appearBR); + // Set the disappear effect. HbEffect::add(this, QString(":/friend_minimize.fxml"), "disappear"); setLayout(mLayout); @@ -220,7 +226,7 @@ */ void CommLauncherWidget::popupAboutToShow() { - HbEffect::start(this, mAppearEffect); + // no implementation } /* @@ -241,18 +247,26 @@ left = false; } + // Remove the previous appear effect. + if (!mAppearEffect.isEmpty()) { + HbEffect::remove(this, mAppearEffect, appearEffectName); + } + + // Define the new appear effect and set it as active appear effect. if (top && left) { - mAppearEffect = appearTL; + mAppearEffect = ":/friend_expand_tl.fxml"; } else if (top && !left) { - mAppearEffect = appearTR; + mAppearEffect = ":/friend_expand_tr.fxml"; } else if (!top && left) { - mAppearEffect = appearBL; + mAppearEffect = ":/friend_expand_bl.fxml"; } else { - mAppearEffect = appearBR; + mAppearEffect = ":/friend_expand_br.fxml"; } + HbEffect::add(this, mAppearEffect, appearEffectName); + qDebug() << "---------------top " << top << "--- left " << left << " " << mAppearEffect; } @@ -261,7 +275,6 @@ */ void CommLauncherWidget::popupAboutToClose() { - HbEffect::start(this, "disappear"); emit launcherClosed(); } @@ -274,8 +287,10 @@ HbPushButton *button = 0; button = qobject_cast (documentLoader->findWidget(buttonName)); + if (button) { - button->setIcon(HbIcon(iconName)); + mCleanupHandler.add(button); + button->setIcon(HbIcon(iconName)); } return button; @@ -351,10 +366,14 @@ //if preferred is not set select the first number phoneNumber = mContact->detail(); } - // invoke action - QContactAction *callAction = QContactAction::action(callActionDescriptors.at(0)); + // invoke action yasir memory leak + + if(mCommLauncherAction) + delete mCommLauncherAction; + mCommLauncherAction = QContactAction::action(callActionDescriptors.at(0)); + mCleanupHandler.add(mCommLauncherAction); if (!phoneNumber.isEmpty()) { - callAction->invokeAction(*mContact, phoneNumber); + mCommLauncherAction->invokeAction(*mContact, phoneNumber); qDebug() << "call to number " << phoneNumber.number(); } @@ -385,9 +404,13 @@ messageNumber = mContact->detail(); } // invoke action - QContactAction *messageAction = QContactAction::action(messageActionDescriptors.at(0)); + if(mCommLauncherAction) + delete mCommLauncherAction; + mCommLauncherAction = QContactAction::action(messageActionDescriptors.at(0)); + mCleanupHandler.add(mCommLauncherAction); + if (!messageNumber.isEmpty()) { - messageAction->invokeAction(*mContact, messageNumber); + mCommLauncherAction->invokeAction(*mContact, messageNumber); qDebug() << "send to number " << messageNumber.number(); } @@ -401,20 +424,21 @@ /*! Sends an email to contact. */ -// EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE WK20 PLATFORM DOES NOT SUPPORT IT! -/* void CommLauncherWidget::sendEmail() { QList emailActionDescriptors = QContactAction::actionDescriptors("email", cmBackend); - if (emailActionDescriptors.count() > 0) { - QContactAction *emailAction = QContactAction::action(emailActionDescriptors.at(0)); + if (emailActionDescriptors.count() > 0) { + if(mCommLauncherAction) + delete mCommLauncherAction; + mCommLauncherAction = QContactAction::action(emailActionDescriptors.at(0)); + mCleanupHandler.add(mCommLauncherAction); //TODO: implement QList emailList = mContact->details(); if (emailList.count() > 0) { - emailAction->invokeAction(*mContact, emailList.at(0)); + mCommLauncherAction->invokeAction(*mContact, emailList.at(0)); QString emailAddress = emailList.at(0).emailAddress(); qDebug() << "send to email " << emailAddress; @@ -443,6 +467,7 @@ mRequest = mApplicationManager->create("com.nokia.symbian.IMessage", "Send", "send(QVariant)", false); + mCleanupHandler.add(mRequest); if (mRequest) { mRequest->setSynchronous(false); QList arguments; @@ -458,7 +483,23 @@ close(); } + +/*! + SLOT for handle end of assync request. */ +void CommLauncherWidget::handleRequestOk(const QVariant& /*value*/) +{ + mPendingRequest = false; + emit requestCompleted(); +} + +/*! + Return true if any pending request is in progress (at the moment phone book my cart is open). +*/ +bool CommLauncherWidget::isPendingRequest() +{ + return mPendingRequest; +} /*! Opens contact card from phonebook to contact. @@ -470,15 +511,21 @@ delete mRequest; mRequest = NULL; } - mRequest = mApplicationManager->create("com.nokia.services.phonebookservices", - "Fetch", "open(int)", false); + mRequest = mApplicationManager->create(XQI_CONTACTS_VIEW, + XQOP_CONTACTS_VIEW_CONTACT_CARD, + false); + mCleanupHandler.add(mRequest); if (mRequest) { - mRequest->setSynchronous(false); + mPendingRequest = true; + connect(mRequest, SIGNAL(requestOk(const QVariant&)), + this, SLOT(handleRequestOk(const QVariant&))); + mRequest->setSynchronous(false); QList arguments; arguments.append(QVariant(mContact->localId())); mRequest->setArguments(arguments); bool result = mRequest->send(); if (!result) { + mPendingRequest = false; qDebug() << "Sending request failed: " << mRequest->lastErrorMessage(); } } else { @@ -498,22 +545,17 @@ delete mRequest; mRequest = NULL; } - mRequest = mApplicationManager->create("com.nokia.services.phonebookservices", - "Fetch", "editCreateNew(QString,QString)", false); + + // Launching the phonebook to main view + mRequest = mApplicationManager->create("com.nokia.services.phonebookappservices", + "Launch", "launch()", false); + mCleanupHandler.add(mRequest); if (mRequest) { - QList arguments; - QString type = QContactPhoneNumber::DefinitionName; - arguments.append(QVariant( type )); - arguments.append(QVariant( "" )); - mRequest->setArguments(arguments); - - bool result = mRequest->send(); - if (!result) { - qDebug() << "Sending request failed: " << mRequest->lastErrorMessage(); + QVariant retValue(-1); + bool result = mRequest->send(retValue); + if (!result) { + qDebug() << "Sending request failed: " << mRequest->lastErrorMessage(); } - - } else { - qDebug() << "Creating service request failed"; } } diff -r ae724a111993 -r 7cc7d74059f9 contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp --- a/contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -31,7 +31,7 @@ #include #include #include - +#include #include #include @@ -55,6 +55,18 @@ // Docml file const QString contactWidgetDocml = ":/commlauncherwidget.docml"; + +// TODO: THESE STRINGS ARE IN W32 SDK. THESE DEFINITIONS CAN BE REMOVED +// WHEN EVERYBODY ARE USING IT OR LATER VERSION +#ifndef XQI_CONTACTS_FETCH +#define XQI_CONTACTS_FETCH QLatin1String("com.nokia.symbian.IContactsFetch") +#endif +#ifndef XQOP_CONTACTS_FETCH_SINGLE +#define XQOP_CONTACTS_FETCH_SINGLE QLatin1String("singleFetch(QString,QString)") +#endif + + + /*! \class ContactWidgetHs */ @@ -76,13 +88,14 @@ mAppManager(0), mContactSelectRequest(0), mMainWindow(0), - mThumbnailManager(0), + mThumbnailManager(new ThumbnailManager(this)), mThumbnailPixmap(QPixmap()), mThumbnailInProgress(false), - mTranslator(0) + mTranslator(new HbTranslator(translationsPath, translationsFile)), + mAvatarIcon(0), + mPendingExit(false) { - // Localization file loading - mTranslator = new HbTranslator(translationsPath, translationsFile); + // Localization file loading mTranslator->loadCommon(); // UI creation done in onInitialize() @@ -95,39 +108,36 @@ // avatar icon item has to be created without parent else the drawing goes wrong mAvatarIconItem = new HbIconItem(); - - //Create Communication launcher + mCleanupHandler.add(mAvatarIconItem); + //Create Communication launchernew //Has to be created without parent, otherwise timout, dismissPolicy and modality have no effect mLauncher = new CommLauncherWidget(); + mCleanupHandler.add(mLauncher); mLauncher->setTimeout(0); mLauncher->setDismissPolicy(HbPopup::TapAnywhere); mLauncher->setBackgroundFaded(false); mLauncher->setModal(false); mLauncher->hide(); // USE CONNECT WHEN THE LATCHED GRAPHICS IS IN THE PLATFORM - //connect(mLauncher, SIGNAL(launcherClosed()), - // this, SLOT(loadNormalLayout())); - - mAppManager = new XQApplicationManager(); + connect(mLauncher, SIGNAL(launcherClosed()), + this, SLOT(loadNormalLayout())); + connect(mLauncher, SIGNAL(requestCompleted()), + this, SLOT(onRequestComplete())); + mAppManager = new XQApplicationManager(); ASSERT(mAppManager); + mCleanupHandler.add(mAppManager); mLauncher->setApplicationManager(*mAppManager); - // Thumbnail manager so we can handle large size images as contact avatars - mThumbnailManager = new ThumbnailManager(this); + // Thumbnail manager so we can handle large size images as contact avatars mThumbnailManager->setMode(ThumbnailManager::Default); mThumbnailManager->setQualityPreference(ThumbnailManager::OptimizeForQuality); mThumbnailManager->setThumbnailSize(ThumbnailManager::ThumbnailMedium ); - connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)), + connect(mThumbnailManager.data(), SIGNAL(thumbnailReady(QPixmap, void*, int, int)), this, SLOT(thumbnailReady(QPixmap, void*, int, int))); - mWidgetFrameDrawer = new HbFrameDrawer(normalFrameName, - HbFrameDrawer::NinePieces); - ASSERT(mWidgetFrameDrawer); - - mShareFrameDrawer = new HbFrameDrawer(normalFrameName, - HbFrameDrawer::NinePieces); - ASSERT(mShareFrameDrawer); + + } /*! @@ -135,37 +145,17 @@ */ ContactWidgetHs::~ContactWidgetHs() { - if (mLauncher) - { - delete mLauncher; - } - if (mContactManager) - { - delete mContactManager; - } - if (mAppManager) - { - delete mAppManager; - } - if (mAvatar) - { - delete mAvatar; - } - - // Deleting request cancels all pending requests - if (mContactSelectRequest) - { - delete mContactSelectRequest; - } - - if (mThumbnailManager) - { - delete mThumbnailManager; - } - if (mTranslator) - { - delete mTranslator; - } + +} + +/*! + Slot for handle request complete + if pending exit was set , do it. +*/ +void ContactWidgetHs::onRequestComplete() +{ + if (mPendingExit) + emit finished(); } /*! @@ -238,13 +228,13 @@ bool ContactWidgetHs::setContactImage(QPixmap& inputPixmap) { bool ret = false; - - HbFrameDrawer *avatarDrawer = new HbFrameDrawer("qtg_fr_hsshortcut_normal", HbFrameDrawer::NinePieces); - ASSERT(avatarDrawer); - // Try to load the image first, because setFrameGraphicsName() returns void. - //,,mContactImageFileName = imageFile; - + QScopedPointer avatarDrawer( new HbFrameDrawer(defaultAvatar, + HbFrameDrawer::NinePieces)); + //TODO: do check other way + // This assert must be commented because QScopedPointer not support it this way + //ASSERT(avatarDrawer.isNull()); + ret=true; qDebug() << "setContactImage av 0, inputsize " << inputPixmap.width() << "x" << inputPixmap.height(); @@ -256,8 +246,7 @@ avatarPixmap.fill(QColor(0, 0, 0, 0)); //transparent background qDebug() << "setContactImage av 1"; //,, - QPainter painter(&avatarPixmap); - QStyleOptionGraphicsItem *item = new QStyleOptionGraphicsItem; + QPainter painter(&avatarPixmap); avatarDrawer->paint(&painter, QRectF(0, 0, contactIconSize, contactIconSize)); painter.end(); qDebug() << "setContactImage av 2"; //,, @@ -289,16 +278,17 @@ } } - HbIcon *avatarIcon = new HbIcon(QIcon(avatarPixmap)); - - mAvatarIconItem->setIcon(*avatarIcon); + + mAvatarIcon.reset(new HbIcon(QIcon(avatarPixmap))); + + mAvatarIconItem->setIcon(*mAvatarIcon.data()); mAvatarIconItem->setSize(QSize(contactIconSize, contactIconSize)); mAvatarIconItem->setAspectRatioMode(Qt::KeepAspectRatio); // Then display the new image update(); qDebug() << "setContactImage av 3"; //,, - + return ret; } @@ -308,10 +298,12 @@ bool ContactWidgetHs::setContactImage(const QString &imageFile) { bool ret = false; - - HbFrameDrawer *avatarDrawer = new HbFrameDrawer("qtg_fr_hsshortcut_normal", HbFrameDrawer::NinePieces); - ASSERT(avatarDrawer); - + QScopedPointer avatarDrawer( new HbFrameDrawer(defaultAvatar, + HbFrameDrawer::NinePieces)); + //TODO: do check other way + //This assert must be commented because QScopedPointer not support it this way + //ASSERT(avatarDrawer.isNull()); + // Try to load the image first, because setFrameGraphicsName() returns void. mContactImageFileName = imageFile; qDebug() << "setContactImage ok " << imageFile; @@ -331,24 +323,28 @@ avatarPixmap.fill(QColor(0, 0, 0, 0)); //transparent background QPainter painter(&avatarPixmap); - QStyleOptionGraphicsItem *item = new QStyleOptionGraphicsItem; + avatarDrawer->paint(&painter, QRectF(0, 0, contactIconSize, contactIconSize)); painter.end(); - HbIcon *avatarIcon = new HbIcon(QIcon(avatarPixmap)); + + + mAvatarIcon.reset(new HbIcon(QIcon(avatarPixmap))); // Add badge if needed if (imageFile == addContactAvatar) { HbIcon addIcon(addContactAvatar); - QSizeF avatarSize = avatarIcon->size(); + QSizeF avatarSize = mAvatarIcon->size(); addIcon.setSize(QSize(avatarSize.width()/2, avatarSize.height()/2)); - avatarIcon->addBadge(Qt::AlignTop | Qt::AlignRight, addIcon, 1); + mAvatarIcon->addBadge(Qt::AlignTop | Qt::AlignRight, addIcon, 1); } - mAvatarIconItem->setIcon(*avatarIcon); + mAvatarIconItem->setIcon(*mAvatarIcon.data()); // Then display the new image update(); + + return ret; } @@ -376,8 +372,20 @@ const int textRow = 2; const int rows = 4; // 4 using 2 margins + setContentsMargins(0, 0, 0, 0); + QGraphicsGridLayout *layout = new QGraphicsGridLayout(this); + mWidgetFrameDrawer = new HbFrameDrawer(normalFrameName, + HbFrameDrawer::NinePieces); + ASSERT(mWidgetFrameDrawer); + + mShareFrameDrawer = new HbFrameDrawer(normalFrameName, + HbFrameDrawer::NinePieces); + ASSERT(mShareFrameDrawer); + + + // Widget frame qreal corner = 1.5 * unit; // from shortcut widget layout spec: 1.5un mWidgetFrameDrawer->setBorderWidths(corner, corner); @@ -426,14 +434,20 @@ layout->setRowFixedHeight(textRow, fontSpec.textHeight()); layout->setRowFixedHeight(textRow+1, widgetMargin); + layout->setHorizontalSpacing(0.5); + layout->setVerticalSpacing(1.5); + layout->setContentsMargins(0, 0, 0, 0); setLayout(layout); // Widget size - qreal sizeX = widgetMargin * 2 * unit; //margins from layout spec - qreal sizeY = widgetMargin * 3 * unit; //margins from layout spec + qreal sizeX = widgetMargin * 2; // margins from layout spec + sizeX += contactIconSize; + sizeX += 1; // 2*0.5 horizontal spacing + qreal sizeY = widgetMargin * 2; // margins from layout spec + sizeY += contactIconSize; sizeY += fontSpec.textHeight(); - sizeY += contactIconSize; - sizeX += contactIconSize; + sizeY += 5; // 3*0.5 vertical spacing, 5 because 4.5 broke snaping + qDebug() << "widget sizex, sizey, unit, rows " << sizeX << sizeY << unit << rows; @@ -444,10 +458,11 @@ QString ContactWidgetHs::getContactDisplayName(QContact& contact) { - QString name = mContactManager->synthesizedDisplayLabel(contact); - if (name.isEmpty()) { - name = hbTrId("txt_friend_widget_contact_unnamed"); - } + QString name = mContactManager->synthesizedContactDisplayLabel(contact); + if (name.isEmpty()) + { + name = hbTrId("txt_friend_widget_contact_unnamed"); + } return name; } @@ -457,7 +472,7 @@ */ void ContactWidgetHs::mousePressEvent(QGraphicsSceneMouseEvent *event) { - Q_UNUSED(event); + Q_UNUSED(event); } /*! @@ -492,11 +507,12 @@ } } } else if (!mLauncher->isVisible()) { + // Change the frame layout + loadLayout(latchedFrameName, latchedTextColor); + // create and show CommunicationsLauncher createLauncherWithPosition(); mLauncher->show(); - // USE LOADLAYOUT-FUNCTION WHEN THE LATCHED GRAPHICS IS IN THE PLATFORM - //loadLayout(latchedFrameName, latchedTextColor); mLauncherRect = mLauncher->boundingRect(); qDebug() << "after exec rect() " << mLauncherRect; @@ -528,9 +544,10 @@ for (int i=0; iimageUrl().toString(); //,,remove this once tn is working mThumbnailInProgress = true; @@ -576,6 +593,7 @@ } qDebug() << "createContactManager() backend " << sBackend; mContactManager = new QContactManager(sBackend); + mCleanupHandler.add(mContactManager); if (mContactManager->error()) { qDebug() << "cm can't connect to backend " << sBackend; } else { // connect contact change observation @@ -690,19 +708,15 @@ qDebug() << "- launchSingleContactSelecting() starts"; //,, mContactLocalId = unUsedContactId; - /* TODO! THIS SERVICE WILL BE RENAMED TO com.nokia.services.phonebook.Services */ - mContactSelectRequest = mAppManager->create( - "com.nokia.services.phonebookservices", - "Fetch", - "Dofetch(QString,QString,QString,QString)", - false); + mContactSelectRequest = mAppManager->create(XQI_CONTACTS_FETCH, + XQOP_CONTACTS_FETCH_SINGLE, + false); + mCleanupHandler.add(mContactSelectRequest); connect(mContactSelectRequest, SIGNAL(requestOk(QVariant)), this, SLOT(onContactSelectCompleted(QVariant))); QList args; args << hbTrId("txt_friend_widget_title_select_contact"); args << KCntActionAll; - args << KCntFilterDisplayAll; - args << KCntSingleSelectionMode; mContactSelectRequest->setArguments(args); qDebug() << "---- setArgs done ---------------------"; //,,28.5. @@ -800,15 +814,18 @@ mAvatarIconItem->deleteLater(); mContactNameLabel->deleteLater(); - mAppManager->deleteLater(); - mLauncher->deleteLater(); + mContactLocalId = unUsedContactId; - delete mAvatar; + mContactHasAvatarDetail = false; - mContactManager->deleteLater(); - mThumbnailManager->deleteLater(); + - emit finished(); + if (!mLauncher->isPendingRequest()){ + emit finished(); + } + else { + mPendingExit = true; + } break; } } @@ -862,10 +879,10 @@ void ContactWidgetHs::loadLayout(const QString frameName, const QString textColor) { mWidgetFrameDrawer->setFrameGraphicsName(frameName); - mWidgetFrameDrawer->themeChanged(); +// mWidgetFrameDrawer->themeChanged(); mShareFrameDrawer->setFrameGraphicsName(frameName); - mShareFrameDrawer->themeChanged(); +// mShareFrameDrawer->themeChanged(); QColor color = HbColorScheme::color(textColor); mContactNameLabel->setTextColor(color); diff -r ae724a111993 -r 7cc7d74059f9 contactwidgethsplugin/contactwidgethsplugin.pro --- a/contactwidgethsplugin/contactwidgethsplugin.pro Thu Sep 02 20:16:15 2010 +0300 +++ b/contactwidgethsplugin/contactwidgethsplugin.pro Fri Sep 17 08:27:32 2010 +0300 @@ -57,9 +57,22 @@ # xml files for emulator, sisx and hw rom BLD_INF_RULES.prj_exports += "./resource/contactwidgethsplugin.xml z:$$PLUGIN_SUBDIR/contactwidgethsplugin.xml" + BLD_INF_RULES.prj_exports += "./resource/qtg_large_friend.svg z:$$PLUGIN_SUBDIR/qtg_large_friend.svg" + # copy iby file BLD_INF_RULES.prj_exports += "./rom/contactwidgeths.iby CORE_APP_LAYER_IBY_EXPORT_PATH(contactwidgeths.iby)" BLD_INF_RULES.prj_exports += "./rom/contactwidgeths_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(contactwidgeths_resources.iby)" + + + contactwidgethsplugin_buildstubsis_extension = \ + "$${LITERAL_HASH}ifdef MARM" \ + " START EXTENSION app-services/buildstubsis" \ + " OPTION SRCDIR ." \ + " OPTION SISNAME contactwidgethsplugin_stub" \ + " END" \ + "$${LITERAL_HASH}endif" + + BLD_INF_RULES.prj_extensions += contactwidgethsplugin_buildstubsis_extension } symbian { @@ -67,6 +80,21 @@ ICON = qtg_large_friend.svg # themable icon for application library SKINICON = qtg_large_friend -} + + DESTDIR = /private/20022F35/import/widgetregistry/2002C353 + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + # plugins.path = $${DESTDIR} + # plugins.sources = $${TARGET}.dll + + widgetResources.path = $${DESTDIR} + widgetResources.sources += resource/$${TARGET}.xml + widgetResources.sources += resource/$${TARGET}.manifest + widgetResources.sources += resource/qtg_large_friend.svg + widgetResources.sources += resource/qtg_graf_hswidget_preview_contact.svg + # widgetResources.sources += resource/$${TARGET}.svg + + DEPLOYMENT += plugins \ + widgetResources +} include(contactwidgethsplugin.pri) diff -r ae724a111993 -r 7cc7d74059f9 contactwidgethsplugin/resource/contactwidgethsplugin.manifest --- a/contactwidgethsplugin/resource/contactwidgethsplugin.manifest Thu Sep 02 20:16:15 2010 +0300 +++ b/contactwidgethsplugin/resource/contactwidgethsplugin.manifest Fri Sep 17 08:27:32 2010 +0300 @@ -3,7 +3,8 @@ contactwidgethsplugin txt_long_caption_friend txt_friend_widget_dblist_friend_widget_val_quickly - qtg_large_friend + qtg_large_friend.svg + qtg_graf_hswidget_preview_contact.svg false contactwidgethsplugin.xml contactwidgethsplugin diff -r ae724a111993 -r 7cc7d74059f9 contactwidgethsplugin/rom/contactwidgeths.iby --- a/contactwidgethsplugin/rom/contactwidgeths.iby Thu Sep 02 20:16:15 2010 +0300 +++ b/contactwidgethsplugin/rom/contactwidgeths.iby Fri Sep 17 08:27:32 2010 +0300 @@ -26,7 +26,7 @@ data=ZPRIVATE\20022f35\import\widgetregistry\2002C353\contactwidgethsplugin.xml private\20022f35\import\widgetregistry\2002C353\contactwidgethsplugin.xml data=ZPRIVATE\20022f35\import\widgetregistry\2002C353\qtg_large_friend.svg private\20022f35\import\widgetregistry\2002C353\qtg_large_friend.svg +data=ZPRIVATE\20022f35\import\widgetregistry\2002C353\qtg_graf_hswidget_preview_contact.svg private\20022f35\import\widgetregistry\2002C353\qtg_graf_hswidget_preview_contact.svg -data=DATAZ_\APP_RESOURCE_DIR\contactwidgethsplugin.rsc APP_RESOURCE_DIR\contactwidgethsplugin.rsc - +data=ZSYSTEM\Install\contactwidgethsplugin_stub.sis \system\install\contactwidgethsplugin_stub.sis #endif //__CONTACTWIDGETHSPLUGIN_IBY__ diff -r ae724a111993 -r 7cc7d74059f9 inc/cntdebug.h --- a/inc/cntdebug.h Thu Sep 02 20:16:15 2010 +0300 +++ b/inc/cntdebug.h Fri Sep 17 08:27:32 2010 +0300 @@ -23,7 +23,7 @@ #include // qDebug() // #define TRACK_MEMORY_LEAKS -#define TRACES +// #define TRACES // #define TRACE2FILE /*! diff -r ae724a111993 -r 7cc7d74059f9 package_definition.xml --- a/package_definition.xml Thu Sep 02 20:16:15 2010 +0300 +++ b/package_definition.xml Fri Sep 17 08:27:32 2010 +0300 @@ -1,26 +1,93 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r ae724a111993 -r 7cc7d74059f9 package_map.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package_map.xml Fri Sep 17 08:27:32 2010 +0300 @@ -0,0 +1,1 @@ + diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntactions/src/cntaction.cpp --- a/phonebookengines/cntactions/src/cntaction.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntactions/src/cntaction.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -160,28 +160,35 @@ //common code to perform a call, videocall action void CntAction::performNumberAction(const QString &interface, const QString &operation) { + QVariantList args; QVariant retValue; - // XQApplicationManager is not supported by PhoneUI to initiate calls, - // only old approarch using XQServiceRequest can be used. - XQServiceRequest snd(interface, operation); //sync request + delete m_request; + m_request = NULL; + m_request = m_AppManager.create(interface, operation, false); // not embedded + if (!m_request) { + emitResult(GeneralError, retValue); + return; + } //QContactType == TypeGroup if (QContactType::TypeGroup == m_contact.type()) { QContactPhoneNumber conferenceCall = m_contact.detail(); - - snd << conferenceCall.number() << m_contact.localId() << m_contact.displayLabel(); - snd.send(retValue); - emitResult(snd.latestError(), retValue); + args << conferenceCall.number() << m_contact.localId() << m_contact.displayLabel(); + m_request->setArguments(args); + m_request->setSynchronous(true); + m_request->send(retValue); + emitResult(m_request->lastError(), retValue); } //QContactType == TypeContact //detail exist use it else if (m_detail.definitionName() == QContactPhoneNumber::DefinitionName) { const QContactPhoneNumber &phoneNumber = static_cast(m_detail); - - snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); - snd.send(retValue); - emitResult(snd.latestError(), retValue); + args << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); + m_request->setArguments(args); + m_request->setSynchronous(true); + m_request->send(retValue); + emitResult(m_request->lastError(), retValue); } //QContactType == TypeContact //if no detail, pick preferred @@ -200,9 +207,11 @@ phoneNumber = static_cast(detail); } - snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); - snd.send(retValue); - emitResult(snd.latestError(), retValue); + args << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); + m_request->setArguments(args); + m_request->setSynchronous(true); + m_request->send(retValue); + emitResult(m_request->lastError(), retValue); } //else return an error else { diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntactions/src/cntmessageaction.cpp --- a/phonebookengines/cntactions/src/cntmessageaction.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntactions/src/cntmessageaction.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -76,7 +76,7 @@ if (QContactType::TypeGroup == m_contact.type()) { QString interface("com.nokia.symbian.IMessageSend"); QString operation("send(QVariantMap,QString)"); - m_request = m_AppManager.create(interface, operation, false); // not embedded + m_request = m_AppManager.create(interface, operation, true); // embedded if (m_request==NULL) { emitResult(GeneralError, retValue); return; @@ -104,7 +104,7 @@ else if (m_detail.definitionName() == QContactPhoneNumber::DefinitionName) { QString interface("com.nokia.symbian.IMessageSend"); QString operation("send(QString,qint32,QString)"); - m_request = m_AppManager.create(interface, operation, false); // not embedded + m_request = m_AppManager.create(interface, operation, true); // embedded if (m_request==NULL) { emitResult(GeneralError, retValue); return; diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntlistmodel/inc/cntcache_p.h --- a/phonebookengines/cntlistmodel/inc/cntcache_p.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntlistmodel/inc/cntcache_p.h Fri Sep 17 08:27:32 2010 +0300 @@ -127,7 +127,7 @@ ThumbnailManager* mThumbnailManager; // for fetching icons // maps info providers to their responsibilities - QMap mDataProviders; + QMap mInfoProviders; QMutex mJobMutex; // guards access to the job lists bool mStarted; // true when thread has been started diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntlistmodel/src/cntcache.cpp --- a/phonebookengines/cntlistmodel/src/cntcache.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntlistmodel/src/cntcache.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -92,8 +92,6 @@ qDeleteAll(mIconCache); mIconCache.clear(); - mInstance = NULL; - CNT_EXIT } @@ -651,6 +649,7 @@ { CNT_ENTRY + mInstance = NULL; deleteLater(); CNT_EXIT diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntlistmodel/src/cntcache_p.cpp --- a/phonebookengines/cntlistmodel/src/cntcache_p.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntlistmodel/src/cntcache_p.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -64,8 +64,8 @@ CNT_ENTRY // create static provider plugins - mDataProviders.insert(new CntDefaultInfoProvider(), ContactInfoAllFields); - mDataProviders.insert(new CntPresenceInfoProvider(), ContactInfoIcon2Field); + mInfoProviders.insert(new CntDefaultInfoProvider(), ContactInfoAllFields); + mInfoProviders.insert(new CntPresenceInfoProvider(), ContactInfoIcon2Field); // load dynamic provider plugins QDir pluginsDir(CNT_INFO_PROVIDER_EXTENSION_PLUGIN_DIRECTORY); @@ -80,13 +80,13 @@ if (factory) { CntInfoProvider *provider = factory->infoProvider(); - mDataProviders.insert(provider, provider->supportedFields()); + mInfoProviders.insert(provider, provider->supportedFields()); } } } // connect the providers - QMapIterator i(mDataProviders); + QMapIterator i(mInfoProviders); while (i.hasNext()) { i.next(); connect(static_cast(i.key()), @@ -130,8 +130,8 @@ delete mThumbnailManager; mThumbnailManager = NULL; - qDeleteAll(mDataProviders.keys()); - mDataProviders.clear(); + qDeleteAll(mInfoProviders.keys()); + mInfoProviders.clear(); mJobMutex.unlock(); @@ -339,7 +339,7 @@ QContact contact = mContactManager->contact(contactId, restrictions); // request contact info from providers - QMapIterator i(mDataProviders); + QMapIterator i(mInfoProviders); while (i.hasNext()) { i.next(); if (i.value() != 0) { @@ -388,9 +388,9 @@ // 1) the sender is in the list of providers // 2) exactly one field bit is set in parameter 'field' // 3) the field bit has been assigned to this provider - if (mDataProviders.contains(sender) + if (mInfoProviders.contains(sender) && ((field & (field - 1)) == 0) - && ((field & mDataProviders.value(sender)) != 0)) { + && ((field & mInfoProviders.value(sender)) != 0)) { emit infoFieldUpdated(contactId, field, text); } diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/inc/ut_cntlistmodel.h --- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/inc/ut_cntlistmodel.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/inc/ut_cntlistmodel.h Fri Sep 17 08:27:32 2010 +0300 @@ -34,6 +34,9 @@ private: void contactReady(int start, int end); + QContact createContact(const QString& firstName, const QString& lastName); + void addGroupMember(const QContact& group, const QContact& contact); + void removeGroupMember(const QContact& group, const QContact& contact); private slots: void initTestCase(); @@ -43,7 +46,9 @@ void rowCount(); void contact(); + void contactId(); void indexOfContact(); + void indexOfContactId(); void contactManager(); void setFilter(); void myCard(); @@ -55,6 +60,7 @@ void handleChanged(); void handleRemoved(); void handleMyCardChanged(); + void handleRelationships(); void cleanupTestCase(); diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/main.cpp --- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/main.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/main.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -65,6 +65,7 @@ printf("Press any key...\n"); getchar(); } + return 0; } diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntcache.cpp --- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntcache.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntcache.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -21,6 +21,7 @@ void TestCntCache::initTestCase() { + // get contact manager mContactManager = new QContactManager("symbian"); // start with a clean database @@ -65,15 +66,11 @@ QVERIFY(cache->mContactManager != NULL); QVERIFY(worker->mContactManager != NULL); QVERIFY(worker->mThumbnailManager != NULL); - QVERIFY(!worker->mStarted); - QVERIFY(!worker->mProcessingJobs); - QVERIFY(!worker->mPostponeJobs); - QVERIFY(worker->mDataProviders.count() >= 1); + QVERIFY(worker->mInfoProviders.count() >= 1); // test deletion cache->onShutdown(); - QVERIFY(cache == NULL); - QVERIFY(worker == NULL); + QVERIFY(CntCache::mInstance == NULL); } /* @@ -158,7 +155,7 @@ } QVERIFY(cacheItemCount == 2*2); // two images, both used by two contacts - delete cache; + cache->onShutdown(); } /* diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdefaultinfoprovider.cpp --- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdefaultinfoprovider.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdefaultinfoprovider.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -52,7 +52,8 @@ fields = ContactInfoIcon1Field | ContactInfoTextField; mCntDefaultInfoProvider->requestInfo(c, fields); - QCOMPARE(spy.count(), 0); + QCOMPARE(spy.count(), 2); + spy.clear(); QContactPhoneNumber number; number.setNumber("1234567"); @@ -61,20 +62,26 @@ c.saveDetail(&number); mCntDefaultInfoProvider->requestInfo(c, fields); - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.count(), 2); spy.clear(); c.setPreferredDetail("call", number); + + QContactPhoneNumber number2; + number2.setNumber("7654321"); + number2.setContexts(QContactDetail::ContextWork); + number2.setSubTypes(QContactPhoneNumber::SubTypeMobile); + c.saveDetail(&number2); mCntDefaultInfoProvider->requestInfo(c, fields); - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.count(), 2); spy.clear(); QContactAvatar avatar; c.saveDetail(&avatar); mCntDefaultInfoProvider->requestInfo(c, fields); - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.count(), 2); spy.clear(); avatar.setImageUrl(QUrl("dummyavatar")); diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdisplaytextformatter.cpp --- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdisplaytextformatter.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdisplaytextformatter.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -21,7 +21,7 @@ void TestCntDisplayTextFormatter::testFormatter() { - QColor color = HbColorScheme::color("qtc_lineedit_selected "); + QColor color = HbColorScheme::color("qtc_lineedit_selected"); QColor bg = HbColorScheme::color("qtc_lineedit_marker_normal"); QString foo = QString("foo").arg(bg.name().toUpper()).arg(color.name().toUpper()); diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp --- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -234,6 +234,14 @@ QVERIFY(!c.isEmpty()); } +void TestCntListModel::contactId() +{ + QModelIndex modelIndex = mCntModel->index(1, 0); + QContact c = mCntModel->contact(modelIndex); + + QVERIFY(mCntModel->contactId(modelIndex) == c.localId()); +} + void TestCntListModel::indexOfContact() { QModelIndex modelIndex = mCntModel->index(1, 0); @@ -242,6 +250,14 @@ QVERIFY(mCntModel->indexOfContact(c) == modelIndex); } +void TestCntListModel::indexOfContactId() +{ + QModelIndex modelIndex = mCntModel->index(1, 0); + QContact c = mCntModel->contact(modelIndex); + + QVERIFY(mCntModel->indexOfContactId(c.localId()) == modelIndex); +} + void TestCntListModel::contactManager() { QVERIFY(mManager == &(mCntModel->contactManager())); @@ -278,7 +294,7 @@ QModelIndex modelIndex = mCntModel->indexOfContact(c); QVERIFY(modelIndex.row() < 0); QVERIFY(mCntModel->d->m_filter == unionFilter); - QVERIFY(mCntModel->d->m_sortOrders.count() == 3); + QVERIFY(mCntModel->d->m_sortOrders.count() == 2); } void TestCntListModel::myCard() @@ -455,6 +471,106 @@ QVERIFY(mCntModel->d->m_myCardId == c.localId()); } +void TestCntListModel::handleRelationships() +{ + // remove all contacts + QList ids = mManager->contactIds(); + QMap errorMap; + mManager->removeContacts(ids,&errorMap); + QTest::qWait(1000); + + // create group "myGroup" + QContact group; + group.setType(QContactType::TypeGroup); + QContactName groupName; + groupName.setCustomLabel("myGroup"); + group.saveDetail(&groupName); + mManager->saveContact(&group); + + // create a relationship filter + QContactRelationshipFilter groupFilter; + groupFilter.setRelationshipType(QContactRelationship::HasMember); + groupFilter.setRelatedContactRole(QContactRelationship::First); + groupFilter.setRelatedContactId(group.id()); + + // create new listmodel + CntListModel* groupListModel = new CntListModel(mManager, groupFilter, false); + QVERIFY(groupListModel != NULL); + + QCOMPARE(groupListModel->rowCount(), 0); + + // create contacts + QList contacts; + contacts << createContact("Alfa", "One"); + contacts << createContact("Beta", "Two"); + contacts << createContact("Gamma", "Three"); + QTest::qWait(1000); + QCOMPARE(groupListModel->rowCount(), 0); + + // add contacts to group + foreach (QContact contact, contacts) { + addGroupMember(group, contact); + } + QTest::qWait(1000); + QCOMPARE(groupListModel->rowCount(), 3); + + // remove contact from group + removeGroupMember(group, contacts.at(1)); + QTest::qWait(1000); + QCOMPARE(groupListModel->rowCount(), 2); + + // add and remove empty list + QList emptyList; + emptyList << group.localId(); + mCntModel->handleAddedRelationship(emptyList); + QCOMPARE(groupListModel->rowCount(), 2); + mCntModel->handleRemovedRelationship(emptyList); + QCOMPARE(groupListModel->rowCount(), 2); + + // verify that contact on second row is "Gamma Three" (comes after "Alfa One" + // regardless of sorting type and Beta Two was removed) + QVERIFY(groupListModel->indexOfContact(contacts.at(0)).row() == 0); + QVERIFY(groupListModel->indexOfContact(contacts.at(1)).row() == -1); + QVERIFY(groupListModel->indexOfContact(contacts.at(2)).row() == 1); + + // create a contact and make sure list model count does not change + createContact("Delta", "Four"); + QTest::qWait(1000); + QCOMPARE(groupListModel->rowCount(), 2); + + delete groupListModel; +} + +QContact TestCntListModel::createContact(const QString& firstName, const QString& lastName) +{ + QContact contact; + QContactName name; + name.setFirstName(firstName); + name.setLastName(lastName); + contact.saveDetail(&name); + mManager->saveContact(&contact); + + return contact; +} + +void TestCntListModel::addGroupMember(const QContact& group, const QContact& contact) +{ + QContactRelationship relationship; + relationship.setRelationshipType(QContactRelationship::HasMember); + relationship.setFirst(group.id()); + relationship.setSecond(contact.id()); + mManager->saveRelationship(&relationship); +} + +void TestCntListModel::removeGroupMember(const QContact& group, const QContact& contact) +{ + QContactRelationship relationship; + relationship.setRelationshipType(QContactRelationship::HasMember); + relationship.setFirst(group.id()); + relationship.setSecond(contact.id()); + mManager->removeRelationship(relationship); +} + void TestCntListModel::cleanupTestCase() { mCntModel->d->m_cache->onShutdown(); diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntsimutility/inc/cntsimutility.h --- a/phonebookengines/cntsimutility/inc/cntsimutility.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntsimutility/inc/cntsimutility.h Fri Sep 17 08:27:32 2010 +0300 @@ -89,12 +89,14 @@ bool AdnStorePresent; bool SdnStorePresent; bool FdnStorePresent; + bool OnStorePresent; AvailableStores() { SimPresent = false; AdnStorePresent = false; SdnStorePresent = false; FdnStorePresent = false; + OnStorePresent = false; }; }; diff -r ae724a111993 -r 7cc7d74059f9 phonebookengines/cntsimutility/src/cntsimutility.cpp --- a/phonebookengines/cntsimutility/src/cntsimutility.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookengines/cntsimutility/src/cntsimutility.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -450,6 +450,13 @@ else { availableStores->FdnStorePresent = false; } + + if (m_serviceTable.iServices17To24 & RMobilePhone::KUstMSISDN) { + availableStores->OnStorePresent = true; + } + else { + availableStores->OnStorePresent = false; + } } else if (m_serviceTableType == RMobilePhone::ESIMServiceTable) { //ADN store is always present if SIM card is inserted @@ -468,6 +475,13 @@ else { availableStores->FdnStorePresent = false; } + + if (m_serviceTable.iServices9To16 & RMobilePhone::KSstMSISDN) { + availableStores->OnStorePresent = true; + } + else { + availableStores->OnStorePresent = false; + } } } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/bwins/cnthistorymodelu.def --- a/phonebookui/bwins/cnthistorymodelu.def Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/bwins/cnthistorymodelu.def Fri Sep 17 08:27:32 2010 +0300 @@ -6,12 +6,12 @@ ?doBeginInsertRows@CntHistoryModel@@AAEXABVQModelIndex@@HH@Z @ 5 NONAME ; void CntHistoryModel::doBeginInsertRows(class QModelIndex const &, int, int) ??1CntHistoryModel@@UAE@XZ @ 6 NONAME ; CntHistoryModel::~CntHistoryModel(void) ?doEndRemoveRows@CntHistoryModel@@AAEXXZ @ 7 NONAME ; void CntHistoryModel::doEndRemoveRows(void) - ?qt_metacast@CntHistoryModel@@UAEPAXPBD@Z @ 8 NONAME ; void * CntHistoryModel::qt_metacast(char const *) - ?metaObject@CntHistoryModel@@UBEPBUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const * CntHistoryModel::metaObject(void) const - ?doBeginRemoveRows@CntHistoryModel@@AAEXABVQModelIndex@@HH@Z @ 10 NONAME ; void CntHistoryModel::doBeginRemoveRows(class QModelIndex const &, int, int) - ?qt_metacall@CntHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 11 NONAME ; int CntHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *) - ?staticMetaObject@CntHistoryModel@@2UQMetaObject@@B @ 12 NONAME ; struct QMetaObject const CntHistoryModel::staticMetaObject - ?sort@CntHistoryModel@@UAEXHW4SortOrder@Qt@@@Z @ 13 NONAME ; void CntHistoryModel::sort(int, enum Qt::SortOrder) + ?doBeginResetModel@CntHistoryModel@@AAEXXZ @ 8 NONAME ; void CntHistoryModel::doBeginResetModel(void) + ?qt_metacast@CntHistoryModel@@UAEPAXPBD@Z @ 9 NONAME ; void * CntHistoryModel::qt_metacast(char const *) + ?metaObject@CntHistoryModel@@UBEPBUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const * CntHistoryModel::metaObject(void) const + ?doBeginRemoveRows@CntHistoryModel@@AAEXABVQModelIndex@@HH@Z @ 11 NONAME ; void CntHistoryModel::doBeginRemoveRows(class QModelIndex const &, int, int) + ?qt_metacall@CntHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 12 NONAME ; int CntHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *) + ?staticMetaObject@CntHistoryModel@@2UQMetaObject@@B @ 13 NONAME ; struct QMetaObject const CntHistoryModel::staticMetaObject ?trUtf8@CntHistoryModel@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString CntHistoryModel::trUtf8(char const *, char const *) ?d_func@CntHistoryModel@@ABEPBVCntHistoryModelPrivate@@XZ @ 15 NONAME ; class CntHistoryModelPrivate const * CntHistoryModel::d_func(void) const ?tr@CntHistoryModel@@SA?AVQString@@PBD0H@Z @ 16 NONAME ; class QString CntHistoryModel::tr(char const *, char const *, int) @@ -23,5 +23,6 @@ ?markAllAsSeen@CntHistoryModel@@QAEXXZ @ 22 NONAME ; void CntHistoryModel::markAllAsSeen(void) ??0CntHistoryModel@@QAE@IPAVQContactManager@QtMobility@@PAVQObject@@@Z @ 23 NONAME ; CntHistoryModel::CntHistoryModel(unsigned int, class QtMobility::QContactManager *, class QObject *) ?data@CntHistoryModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 24 NONAME ; class QVariant CntHistoryModel::data(class QModelIndex const &, int) const - ??_ECntHistoryModel@@UAE@I@Z @ 25 NONAME ; CntHistoryModel::~CntHistoryModel(unsigned int) + ?doEndResetModel@CntHistoryModel@@AAEXXZ @ 25 NONAME ; void CntHistoryModel::doEndResetModel(void) + ??_ECntHistoryModel@@UAE@I@Z @ 26 NONAME ; CntHistoryModel::~CntHistoryModel(unsigned int) diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/cnthistorymodel/inc/cnthistorymodel.h --- a/phonebookui/cnthistorymodel/inc/cnthistorymodel.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/cnthistorymodel/inc/cnthistorymodel.h Fri Sep 17 08:27:32 2010 +0300 @@ -56,7 +56,6 @@ public: // from QAbstractTableModel/QAbstractItemModel QVariant data(const QModelIndex& index, int role) const; int rowCount(const QModelIndex& parent = QModelIndex()) const; - void sort(int column = 0, Qt::SortOrder order = Qt::AscendingOrder); public: void clearHistory(); @@ -68,6 +67,8 @@ void doEndInsertRows(); void doBeginRemoveRows(const QModelIndex &parent, int first, int last); void doEndRemoveRows(); + void doBeginResetModel(); + void doEndResetModel(); void doDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); private: diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/cnthistorymodel/src/cnthistorymodel.cpp --- a/phonebookui/cnthistorymodel/src/cnthistorymodel.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/cnthistorymodel/src/cnthistorymodel.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -17,6 +17,7 @@ #include "cnthistorymodel_p.h" #include "cnthistorymodel.h" +#include "cntdebug.h" /*! * Construct a new CntHistoryModel object to communicate @@ -32,14 +33,22 @@ : QAbstractListModel(parent), d_ptr(new CntHistoryModelPrivate(contactId, manager)) { + CNT_ENTRY + Q_D(CntHistoryModel); d->q_ptr = this; + + CNT_EXIT } CntHistoryModel::~CntHistoryModel() { + CNT_ENTRY + Q_D(CntHistoryModel); delete d; + + CNT_EXIT } /*! @@ -69,26 +78,18 @@ } /*! - * Sort list items on the model. - * - * \param column Column to be sorted. It is not used. - * \param order Order to sort the list items. - */ -void CntHistoryModel::sort(int column, Qt::SortOrder order) -{ - Q_D(CntHistoryModel); - d->sort(column, order); -} - -/*! * Clear history from the database. If the history cached * is specific to one contact, only that history is cleared. * */ void CntHistoryModel::clearHistory() -{ - Q_D(CntHistoryModel); +{ + CNT_ENTRY + + Q_D(CntHistoryModel); d->clearHistory(); + + CNT_EXIT } /*! @@ -97,43 +98,91 @@ */ void CntHistoryModel::markAllAsSeen() { + CNT_ENTRY + Q_D(CntHistoryModel); d->markAllAsSeen(); + + CNT_EXIT } /*! * Sort items in the model and refresh the view - * + * + * \param order Order to sort the list items. */ void CntHistoryModel::sortAndRefresh(Qt::SortOrder order) { + CNT_ENTRY_ARGS(order) + Q_D(CntHistoryModel); + + doBeginResetModel(); d->sort(order); - beginInsertRows(QModelIndex(), 0, rowCount()); - endInsertRows(); + doEndResetModel(); + + CNT_EXIT } void CntHistoryModel::doBeginInsertRows(const QModelIndex &parent, int first, int last) { + CNT_ENTRY_ARGS(parent << first << last) + beginInsertRows(parent, first, last); + + CNT_EXIT } -void CntHistoryModel::doEndRemoveRows() +void CntHistoryModel::doEndInsertRows() { - endRemoveRows(); + CNT_ENTRY + + endInsertRows(); + + CNT_EXIT } void CntHistoryModel::doBeginRemoveRows(const QModelIndex &parent, int first, int last) { + CNT_ENTRY_ARGS(parent << first << last) + beginRemoveRows(parent, first, last); + + CNT_EXIT +} + +void CntHistoryModel::doEndRemoveRows() +{ + CNT_ENTRY + + endRemoveRows(); + + CNT_EXIT } -void CntHistoryModel::doEndInsertRows() +void CntHistoryModel::doBeginResetModel() { - endInsertRows(); + CNT_ENTRY + + beginResetModel(); + + CNT_EXIT +} + +void CntHistoryModel::doEndResetModel() +{ + CNT_ENTRY + + endResetModel(); + + CNT_EXIT } void CntHistoryModel::doDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { + CNT_ENTRY_ARGS(topLeft << bottomRight) + emit dataChanged(topLeft, bottomRight); + + CNT_EXIT } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/cnthistorymodel/src/cnthistorymodel_p.cpp --- a/phonebookui/cnthistorymodel/src/cnthistorymodel_p.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/cnthistorymodel/src/cnthistorymodel_p.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -89,12 +89,18 @@ m_initLogs(false), m_extendedLocale(HbExtendedLocale::system()) { + CNT_ENTRY + // Create the model structure and cache history data from the databases initializeModel(); + + CNT_EXIT } CntHistoryModelPrivate::~CntHistoryModelPrivate() { + CNT_ENTRY + if (m_logsModel) { delete m_logsModel; m_logsModel = NULL; @@ -107,6 +113,8 @@ delete m_msgHistory; m_msgHistory = NULL; } + + CNT_EXIT } /*! @@ -119,6 +127,7 @@ */ QVariant CntHistoryModelPrivate::data(const QModelIndex& index, int role) const { + CNT_ENTRY_ARGS(index << role) // Invalid index int row = index.row(); @@ -128,7 +137,7 @@ HItemPointer p = m_List.at(row); if ( p.isNull() ) return QVariant(); - + switch( role ) { case Qt::DisplayRole: @@ -160,6 +169,8 @@ */ QVariant CntHistoryModelPrivate::displayRoleData(const HistoryItem& item) const { + CNT_ENTRY + QStringList list; HbExtendedLocale locale = m_extendedLocale; @@ -172,6 +183,8 @@ list << item.title << item.message << locale.format(item.timeStamp.date(), r_qtn_date_usual); } + CNT_EXIT_ARGS(list) + return QVariant(list); } @@ -183,6 +196,8 @@ */ QVariant CntHistoryModelPrivate::decorationRoleData(const HistoryItem& item) const { + CNT_ENTRY + // Messages if (item.flags & CntMessage) return QVariant(HbIcon(MESSAGE_ICON)); @@ -227,7 +242,7 @@ int id(-1); if ( p.data()->flags & CntMessage ) id = m_msgMap.key(p, -1); - + if (id != -1) return QVariant(id); else @@ -253,10 +268,14 @@ */ void CntHistoryModelPrivate::sort(int /*column*/, Qt::SortOrder order) { + CNT_ENTRY_ARGS(order) + if ( order == Qt::AscendingOrder ) qStableSort(m_List.begin(), m_List.end(), lessThan); else qStableSort(m_List.begin(), m_List.end(), greaterThan); + + CNT_EXIT } /*! @@ -266,11 +285,18 @@ */ void CntHistoryModelPrivate::clearHistory() { + CNT_ENTRY + Q_Q(CntHistoryModel); if ( m_List.isEmpty() ) return; + // Clear all data from the history model. + int count = rowCount(); + + q->doBeginRemoveRows( QModelIndex(), 0, count ); + // Call logs if ( !m_isMyCard && m_logsFilter ) m_logsFilter->clearEvents(); @@ -281,15 +307,14 @@ if (m_msgHistory) m_msgHistory->clearMessages( (int)m_contactId ); - // Clear all data from the history model. - int count = rowCount(); - m_List.clear(); m_msgMap.clear(); m_logsMap.clear(); - q->doBeginRemoveRows( QModelIndex(), 0, count ); + q->doEndRemoveRows(); + + CNT_EXIT } /*! @@ -298,12 +323,16 @@ */ void CntHistoryModelPrivate::markAllAsSeen() { + CNT_ENTRY + if ( m_isMarkedAsSeen ) return; // Messages if (m_msgHistory->markRead( m_contactId )) m_isMarkedAsSeen = true; + + CNT_EXIT } /*! @@ -313,12 +342,18 @@ */ void CntHistoryModelPrivate::initializeModel() { + CNT_ENTRY + initializeLogsModel(); initializeMsgModel(); + + CNT_EXIT } void CntHistoryModelPrivate::initializeMsgModel() { + CNT_ENTRY + if( m_isMyCard ) return; @@ -339,10 +374,14 @@ // Initial fetch of all messages m->getMessages(m_contactId); + + CNT_EXIT } void CntHistoryModelPrivate::initializeLogsModel() { + CNT_ENTRY + //populate model with call events m_logsModel = new LogsModel(LogsModel::LogsFullModel); if (!m_isMyCard) { @@ -377,6 +416,7 @@ this, SLOT(logsDataChanged(const QModelIndex &, const QModelIndex &))); connect(m_AbstractLogsModel, SIGNAL(modelReset()), this, SLOT(handleLogsReset())); + CNT_EXIT } /*! @@ -386,7 +426,7 @@ * \param item Conversation history item */ void CntHistoryModelPrivate::readLogEvent(LogsEvent* event, HistoryItem& item) -{ +{ QString bodyText; QString title; @@ -435,9 +475,18 @@ */ void CntHistoryModelPrivate::logsRowsInserted(const QModelIndex& /*parent*/, int first, int last) { + CNT_ENTRY_ARGS(first << last) + Q_Q(CntHistoryModel); - int oldRowCount = rowCount(); + // Check if this is the first time to receive events + if ( !m_initLogs ) { + q->doBeginResetModel(); + } + else { + q->doBeginInsertRows( QModelIndex(), rowCount(), rowCount() + (last - first) ); + } + QList l; for ( int i = first; i < m_AbstractLogsModel->rowCount() && i <= last; ++i ) { @@ -456,12 +505,14 @@ // and sort the entire list. if ( !m_initLogs ) { sort(); - oldRowCount = 0; m_initLogs = true; + q->doEndResetModel(); + } + else { + q->doEndInsertRows(); } - q->doBeginInsertRows(QModelIndex(), oldRowCount, rowCount()); - q->doEndInsertRows(); + CNT_EXIT } /*! @@ -473,6 +524,8 @@ */ void CntHistoryModelPrivate::logsRowsRemoved(const QModelIndex& /*parent*/, int first, int last) { + CNT_ENTRY_ARGS(first << last) + Q_Q(CntHistoryModel); QList< int > indices; @@ -498,6 +551,8 @@ q->doEndRemoveRows(); } } + + CNT_EXIT } /*! @@ -509,6 +564,8 @@ */ void CntHistoryModelPrivate::logsDataChanged(const QModelIndex& first, const QModelIndex& last) { + CNT_ENTRY_ARGS(first << last) + Q_Q(CntHistoryModel); int f = first.row(); @@ -537,16 +594,22 @@ foreach( QList l, batches ) q->doDataChanged( q->index(l.first(), 0), q->index(l.last(), 0) ); } + + CNT_EXIT } /* - * Clear all call logs after receiving a reset model - * signal from logs model + * Clear all call logs and refetches new call events after + * receiving a reset model signal from logs model */ void CntHistoryModelPrivate::handleLogsReset() { + CNT_ENTRY + Q_Q(CntHistoryModel); + q->doBeginResetModel(); + // Remove all call logs QList values = m_logsMap.values(); foreach(HItemPointer p, values) { @@ -569,8 +632,10 @@ } sort(); - q->doBeginInsertRows(QModelIndex(), 0, rowCount()); - q->doEndInsertRows(); + + q->doEndResetModel(); + + CNT_EXIT } /*! @@ -592,6 +657,8 @@ */ QList< QList > CntHistoryModelPrivate::findIndices( const QList< int >& indices ) { + CNT_ENTRY_ARGS(indices) + QList< QList > sequences; QList currSequence; int prevIndex = indices.at(0) - 1; @@ -616,6 +683,8 @@ sequences.append( currSequence ); } + CNT_EXIT_ARGS(sequences) + return sequences; } @@ -627,6 +696,8 @@ */ void CntHistoryModelPrivate::readMsgEvent(MsgItem& event, HistoryItem& item) { + CNT_ENTRY + // Msg direction if ( event.direction() == MsgItem::MsgDirectionIncoming ) { item.flags |= CntIncoming; @@ -657,6 +728,8 @@ item.timeStamp = event.timeStamp().toLocalTime(); LOG_ITEM(item); + + CNT_EXIT } /*! @@ -668,8 +741,12 @@ */ void CntHistoryModelPrivate::messagesReady(QList& msgs) { + CNT_ENTRY + Q_Q(CntHistoryModel); + q->doBeginResetModel(); + foreach( MsgItem m, msgs ) { // Create a new hst item HItemPointer item(new HistoryItem()); @@ -686,8 +763,9 @@ sort(); - q->doBeginInsertRows(QModelIndex(), 0, rowCount()); - q->doEndInsertRows(); + q->doEndResetModel(); + + CNT_EXIT } /*! @@ -698,9 +776,11 @@ */ void CntHistoryModelPrivate::messageAdded(MsgItem& msg) { + CNT_ENTRY + Q_Q(CntHistoryModel); - int oldRowCount = rowCount(); + q->doBeginInsertRows( QModelIndex(), rowCount(), rowCount() ); // Create a new hst item HItemPointer item(new HistoryItem()); @@ -714,8 +794,9 @@ // Append the hst item to our list m_List.append( item ); - q->doBeginInsertRows( QModelIndex(), oldRowCount, rowCount() ); q->doEndInsertRows(); + + CNT_EXIT } /*! @@ -726,6 +807,8 @@ */ void CntHistoryModelPrivate::messageChanged(MsgItem& msg) { + CNT_ENTRY + Q_Q(CntHistoryModel); // Fetch the hst item that maps to this MsgItem @@ -742,6 +825,8 @@ int pIndex = m_List.indexOf( p ); q->doDataChanged(q->index(pIndex, 0), q->index(pIndex, 0)); + + CNT_EXIT } /*! @@ -752,6 +837,8 @@ */ void CntHistoryModelPrivate::messageDeleted(MsgItem& msg) { + CNT_ENTRY + Q_Q(CntHistoryModel); // Fetch the hst item that maps to this MsgItem @@ -765,8 +852,10 @@ m_msgMap.remove( msg.id() ); int index = m_List.indexOf( p ); if ( index > -1 ) { + q->doBeginRemoveRows(QModelIndex(), index, index); m_List.removeAt( index ); - q->doBeginRemoveRows(QModelIndex(), index, index); q->doEndRemoveRows(); } + + CNT_EXIT } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp --- a/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -39,7 +39,7 @@ void TestCntHistoryModel::testLogsInsertions() { - QSignalSpy spy( model, SIGNAL(rowsInserted(const QModelIndex &, int, int))); + QSignalSpy spy( model, SIGNAL(modelReset())); model->d_ptr->logsRowsInserted(QModelIndex(), 0, 0); QVERIFY(model->rowCount() == 1); @@ -86,7 +86,7 @@ msgs.append(msg2); msgs.append(msg3); - QSignalSpy spy( model, SIGNAL(rowsInserted(const QModelIndex &, int, int))); + QSignalSpy spy( model, SIGNAL(modelReset())); model->d_ptr->messagesReady(msgs); QVERIFY(model->rowCount() == 3); @@ -223,6 +223,10 @@ var = modelIndex.data(Qt::BackgroundRole); QVERIFY(var.type() > (QVariant::UserType - 1)); + // ConversationRole + var = modelIndex.data(CntConverstaionIdRole); + QVERIFY(var.type() == QVariant::Int); + // Invalid role var = modelIndex.data(-10); QVERIFY(var.type() == QVariant::Invalid); @@ -271,7 +275,7 @@ } // Sort ascending - QSignalSpy spy( model, SIGNAL( rowsInserted(const QModelIndex &, int, int))); + QSignalSpy spy( model, SIGNAL(modelReset())); model->sortAndRefresh(Qt::AscendingOrder); QVERIFY(spy.count() == 1); @@ -282,7 +286,7 @@ } // Sort descending - QSignalSpy spy1( model, SIGNAL( rowsInserted(const QModelIndex &, int, int))); + QSignalSpy spy1( model, SIGNAL( modelReset())); model->sortAndRefresh(Qt::DescendingOrder); QVERIFY(spy1.count() == 1); @@ -307,6 +311,11 @@ QSignalSpy spy1( model, SIGNAL( rowsRemoved(const QModelIndex &, int, int))); model->clearHistory(); QVERIFY(spy1.count() == 0); + + // test reset + QSignalSpy spy2( model, SIGNAL(modelReset())); + model->d_ptr->handleLogsReset(); + QVERIFY(spy2.count() == 1); } void TestCntHistoryModel::testMarkSeen() diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.pro --- a/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.pro Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.pro Fri Sep 17 08:27:32 2010 +0300 @@ -20,11 +20,14 @@ QT += testlib xml core CONFIG += qtestlib hb -DEFINES += PBK_UNIT_TEST \ - CNTHISTORYMODEL_NO_EXPORT +DEFINES += QT_NO_DEBUG_OUTPUT +DEFINES += QT_NO_WARNING_OUTPUT +DEFINES += PBK_UNIT_TEST +DEFINES += CNTHISTORYMODEL_NO_EXPORT DEPENDPATH += . INCLUDEPATH += . +INCLUDEPATH += ../../../../inc INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/eabi/cnthistorymodelu.def --- a/phonebookui/eabi/cnthistorymodelu.def Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/eabi/cnthistorymodelu.def Fri Sep 17 08:27:32 2010 +0300 @@ -7,19 +7,20 @@ _ZN15CntHistoryModel14sortAndRefreshEN2Qt9SortOrderE @ 6 NONAME _ZN15CntHistoryModel15doEndInsertRowsEv @ 7 NONAME _ZN15CntHistoryModel15doEndRemoveRowsEv @ 8 NONAME - _ZN15CntHistoryModel16staticMetaObjectE @ 9 NONAME DATA 16 - _ZN15CntHistoryModel17doBeginInsertRowsERK11QModelIndexii @ 10 NONAME - _ZN15CntHistoryModel17doBeginRemoveRowsERK11QModelIndexii @ 11 NONAME - _ZN15CntHistoryModel19getStaticMetaObjectEv @ 12 NONAME - _ZN15CntHistoryModel4sortEiN2Qt9SortOrderE @ 13 NONAME - _ZN15CntHistoryModelC1EjPN10QtMobility15QContactManagerEP7QObject @ 14 NONAME - _ZN15CntHistoryModelC2EjPN10QtMobility15QContactManagerEP7QObject @ 15 NONAME - _ZN15CntHistoryModelD0Ev @ 16 NONAME - _ZN15CntHistoryModelD1Ev @ 17 NONAME - _ZN15CntHistoryModelD2Ev @ 18 NONAME - _ZNK15CntHistoryModel10metaObjectEv @ 19 NONAME - _ZNK15CntHistoryModel4dataERK11QModelIndexi @ 20 NONAME - _ZNK15CntHistoryModel8rowCountERK11QModelIndex @ 21 NONAME - _ZTI15CntHistoryModel @ 22 NONAME - _ZTV15CntHistoryModel @ 23 NONAME + _ZN15CntHistoryModel15doEndResetModelEv @ 9 NONAME + _ZN15CntHistoryModel16staticMetaObjectE @ 10 NONAME DATA 16 + _ZN15CntHistoryModel17doBeginInsertRowsERK11QModelIndexii @ 11 NONAME + _ZN15CntHistoryModel17doBeginRemoveRowsERK11QModelIndexii @ 12 NONAME + _ZN15CntHistoryModel17doBeginResetModelEv @ 13 NONAME + _ZN15CntHistoryModel19getStaticMetaObjectEv @ 14 NONAME + _ZN15CntHistoryModelC1EjPN10QtMobility15QContactManagerEP7QObject @ 15 NONAME + _ZN15CntHistoryModelC2EjPN10QtMobility15QContactManagerEP7QObject @ 16 NONAME + _ZN15CntHistoryModelD0Ev @ 17 NONAME + _ZN15CntHistoryModelD1Ev @ 18 NONAME + _ZN15CntHistoryModelD2Ev @ 19 NONAME + _ZNK15CntHistoryModel10metaObjectEv @ 20 NONAME + _ZNK15CntHistoryModel4dataERK11QModelIndexi @ 21 NONAME + _ZNK15CntHistoryModel8rowCountERK11QModelIndex @ 22 NONAME + _ZTI15CntHistoryModel @ 23 NONAME + _ZTV15CntHistoryModel @ 24 NONAME diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntcollectionlistmodel.h --- a/phonebookui/pbkcommonui/inc/cntcollectionlistmodel.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntcollectionlistmodel.h Fri Sep 17 08:27:32 2010 +0300 @@ -52,7 +52,7 @@ public: // removing and adding groups - void removeGroup(int localId); + bool removeGroup(int localId); void addGroup(int localId); // extension (plugin) group handling @@ -74,10 +74,19 @@ bool validateRowIndex(const int index) const; private slots: - void informationUpdated(int id, const QString& secondRowText, int memberCount); + void informationUpdated(int id, const QString& secondRowText, const QList& members); void onIconReady(const QPixmap& pixmap, void *data, int id, int error); void extensionGroupsReady(); + void handleAdded(const QList& contactIds); + void handleRemoved(const QList& contactIds); + void handleChanged(const QList& contactIds); + void handleAddedRelationship(const QList& contactIds); + void handleRemovedRelationship(const QList& contactIds); + +signals: + void groupCountChanged(); + private: QSharedDataPointer d; CntCollectionListModelWorker *mThread; diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntcollectionlistmodel_p.h --- a/phonebookui/pbkcommonui/inc/cntcollectionlistmodel_p.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntcollectionlistmodel_p.h Fri Sep 17 08:27:32 2010 +0300 @@ -52,6 +52,7 @@ icon = other.icon; secondaryIcon = other.secondaryIcon; memberCount = other.memberCount; + members = other.members; isPlugin = other.isPlugin; id = other.id; return *this; @@ -68,6 +69,7 @@ HbIcon icon; HbIcon secondaryIcon; int memberCount; + QList members; bool isPlugin; bool fetched; int id; diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntcollectionlistmodelworker.h --- a/phonebookui/pbkcommonui/inc/cntcollectionlistmodelworker.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntcollectionlistmodelworker.h Fri Sep 17 08:27:32 2010 +0300 @@ -22,7 +22,7 @@ #include #include -#include +#include QTM_BEGIN_NAMESPACE class QContactManager; @@ -49,7 +49,7 @@ void fetchInformation(int id); signals: - void fetchDone(int id, const QString& secondRowText, int memberCount); + void fetchDone(int id, const QString& secondRowText, const QList& members); private: bool mStarted; diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntcollectionview.h --- a/phonebookui/pbkcommonui/inc/cntcollectionview.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntcollectionview.h Fri Sep 17 08:27:32 2010 +0300 @@ -77,6 +77,8 @@ void deleteGroups(); void handleDeleteGroups(HbAction* action); + void groupCountChanged(); + private: QContactManager* getContactManager(); void saveNewGroup(QContact* aContact); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntcontactcarddatacontainer.h --- a/phonebookui/pbkcommonui/inc/cntcontactcarddatacontainer.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntcontactcarddatacontainer.h Fri Sep 17 08:27:32 2010 +0300 @@ -66,6 +66,8 @@ private: #endif QContact* mContact; + QContactAction* mCallAction; + QContactAction* mMessageAction; QList mDataItemList; int mSeparatorIndex; CntStringMapper mStringMapper; diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntcontactcardheadingitem.h --- a/phonebookui/pbkcommonui/inc/cntcontactcardheadingitem.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntcontactcardheadingitem.h Fri Sep 17 08:27:32 2010 +0300 @@ -44,7 +44,6 @@ Q_PROPERTY( QString first_line_text READ getFirstLineText ) Q_PROPERTY( QString primary_text READ getPrimaryText ) - Q_PROPERTY( QString second_line_text READ getSecondLineText ) Q_PROPERTY( QString secondary_text READ getSecondaryText ) Q_PROPERTY( QString marquee_item READ getTinyMarqueeText ) Q_PROPERTY( HbIcon icon READ getIcon ) @@ -90,7 +89,6 @@ QString getFirstLineText() const { return firstLineText; } QString getPrimaryText() const { return primaryText; } - QString getSecondLineText() const { return secondLineText; } QString getSecondaryText() const { return secondaryText; } QString getTinyMarqueeText() const { return tinyMarqueeText; } @@ -103,7 +101,6 @@ HbIconItem *mSecondaryIcon; HbTextItem *mFirstLineText; HbTextItem *mPrimaryText; - HbTextItem *mSecondLineText; HbTextItem *mSecondaryText; HbMarqueeItem *mMarqueeItem; HbFrameItem *mFrameItem; @@ -111,7 +108,6 @@ QString firstLineText; QString primaryText; - QString secondLineText; QString secondaryText; QString tinyMarqueeText; HbIcon icon; diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntcontactcardview_p.h --- a/phonebookui/pbkcommonui/inc/cntcontactcardview_p.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntcontactcardview_p.h Fri Sep 17 08:27:32 2010 +0300 @@ -135,6 +135,7 @@ void setMaptileLabel( HbLabel*& mapLabel, const HbIcon& icon ); void updateMaptileImage(); HbLabel* loadMaptileLabel( int addressType ); + void populateListItems(); // Presence related function void updateItemPresence(const QString& accountUri, bool online); @@ -162,13 +163,13 @@ void executeDynamicAction(QContact& aContact, QContactDetail aDetail, QContactActionDescriptor aActionDescriptor); bool sendKeyPressed(); void populateHeadingItem(); - void populateListItems(); public: CntAbstractViewManager* mViewManager; // not own HbView* mView; HbScrollArea *mScrollArea; QGraphicsLinearLayout *mContainerLayout; + QGraphicsWidget* mContainerWidget; QContact *mContact; CntContactCardDataContainer *mDataContainer; CntContactCardHeadingItem *mHeadingItem; @@ -197,6 +198,8 @@ CntAbstractEngine* mEngine; QTimer* mProgressTimer; // own QList mDetailPtrs; + int mListPopulationProgress; + bool mStopListPopulation; }; #endif // CNTCOMMLAUNCHERVIEW_H diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntdetaileditor.h --- a/phonebookui/pbkcommonui/inc/cntdetaileditor.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntdetaileditor.h Fri Sep 17 08:27:32 2010 +0300 @@ -32,6 +32,7 @@ class HbAction; class CntEditorFactory; class CntSaveManager; +class HbShrinkingVkbHost; class CntDetailEditor : public QObject, public CntAbstractView @@ -51,6 +52,8 @@ void saveContact(); void contactDeletedFromOtherSource(const QList& contactIds); void showRootView(); + void handleKeypadOpen(); + void handleKeypadClosed(); public: void setViewId( int aId ); @@ -87,6 +90,7 @@ CntViewParameters mArgs; CntSaveManager *mSaveManager; // own CntAbstractEngine* mEngine; // not own + HbShrinkingVkbHost* mVirtualKeyboard; friend class TestCntDetailEditor; }; #endif /* CNTDETAILEDITOR_H_ */ diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cnteditview.h --- a/phonebookui/pbkcommonui/inc/cnteditview.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cnteditview.h Fri Sep 17 08:27:32 2010 +0300 @@ -51,7 +51,9 @@ private: CntEditViewPrivate* const d_ptr; Q_DECLARE_PRIVATE_D(d_ptr, CntEditView) - Q_DISABLE_COPY(CntEditView) + Q_DISABLE_COPY(CntEditView) + + friend class TestCntEditView; }; #endif //CNTEDITVIEW__H // EOF diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntfavourite.h --- a/phonebookui/pbkcommonui/inc/cntfavourite.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntfavourite.h Fri Sep 17 08:27:32 2010 +0300 @@ -38,5 +38,9 @@ static bool isMemberOfFavouriteGroup( QContactManager* aManager, QContact* aContact ); static void addContactToFavouriteGroup( QContactManager* aManager, QContactId& aId ); static void removeContactFromFavouriteGroup( QContactManager* aManager, QContactId& aId ); + +private: + static int mCachedSymbianFavouriteId; }; + #endif /* CNTFAVOURITE_H_ */ diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cnthistoryviewitem.h --- a/phonebookui/pbkcommonui/inc/cnthistoryviewitem.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cnthistoryviewitem.h Fri Sep 17 08:27:32 2010 +0300 @@ -50,7 +50,6 @@ * Overriden method to draw the custom item in the list view */ void updateChildItems(); - bool event(QEvent* e); bool getIncoming() const { return mIncoming; } bool isNewMessage() const { return mNewMessage; } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntkeygrabber.h --- a/phonebookui/pbkcommonui/inc/cntkeygrabber.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntkeygrabber.h Fri Sep 17 08:27:32 2010 +0300 @@ -24,6 +24,7 @@ class HbMainWindow; class XQAiwRequest; +class XqKeyCapture; class QTPBK_EXPORT CntKeyGrabber : public QObject { @@ -40,6 +41,7 @@ private: HbMainWindow *mMainWindow; XQAiwRequest *mRequest; + XqKeyCapture *mKeyCapture; }; diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntmainwindow.h --- a/phonebookui/pbkcommonui/inc/cntmainwindow.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntmainwindow.h Fri Sep 17 08:27:32 2010 +0300 @@ -24,6 +24,7 @@ #include class CntDefaultViewManager; +class XqKeyCapture; class QTPBK_EXPORT CntMainWindow : public HbMainWindow { diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/inc/cntnamesview_p.h --- a/phonebookui/pbkcommonui/inc/cntnamesview_p.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/inc/cntnamesview_p.h Fri Sep 17 08:27:32 2010 +0300 @@ -80,6 +80,7 @@ private slots: void switchOrientation(); + void handleImportContacts( HbAction *aAction ); public: bool isFinderVisible(); @@ -114,12 +115,11 @@ HbAction* mNewContact; QContactLocalId mHandledContactId; HbAction* mMultipleDeleter; - bool mIsDefault; - int mId; QActionGroup* mActionGroup; HbMenu* mMenu; bool mFilterChanged; CntAbstractEngine* mEngine; + static bool mIsFirstTimeUse; // FTU flag }; #endif /* CNTABSTRACTLISTVIEW_H_ */ diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/pbkcommonui.pro --- a/phonebookui/pbkcommonui/pbkcommonui.pro Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/pbkcommonui.pro Fri Sep 17 08:27:32 2010 +0300 @@ -257,7 +257,8 @@ -lcntsimutility \ -lshareui \ -lpresencecacheqt \ - -lxqsettingsmanager + -lxqsettingsmanager \ + -lxqkeycapture # capability TARGET.CAPABILITY = CAP_GENERAL_DLL diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/resources/pbkcommonui.qrc --- a/phonebookui/pbkcommonui/resources/pbkcommonui.qrc Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/resources/pbkcommonui.qrc Fri Sep 17 08:27:32 2010 +0300 @@ -41,5 +41,6 @@ style/cntfetchmarkall.css style/cntfetchmarkall_color.css temp/fetchdialog.css + style/cntselectiondialogmarkwidget_color.css diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.css --- a/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.css Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.css Fri Sep 17 08:27:32 2010 +0300 @@ -1,30 +1,38 @@ -CntContactCardHeadingItem[icon][primary_text][!secondary_text][!marquee_item][!first_line_text][!second_line_text]{ +CntContactCardHeadingItem[primary_text]{ layout:layout_one_row; } -CntContactCardHeadingItem[icon][first_line_text][secondary_text][marquee_item][!primary_text][!second_line_text]{ +CntContactCardHeadingItem[secondary_text][!marquee_item]{ + layout:layout_two_rows_secondary; +} + +CntContactCardHeadingItem[!secondary_text][marquee_item]{ + layout:layout_two_rows_marquee; +} + +CntContactCardHeadingItem[first_line_text][secondary_text][marquee_item]{ layout:layout_three_rows; } -CntContactCardHeadingItem[primary_text][!secondary_text][!marquee_item][!first_line_text][!second_line_text]:landscape{ +CntContactCardHeadingItem[primary_text]:landscape{ layout:layout_one_row-landscape; } -CntContactCardHeadingItem[first_line_text][secondary_text][marquee_item][!primary_text][!second_line_text]:landscape{ - layout:layout_three_rows-landscape; +CntContactCardHeadingItem[secondary_text][!marquee_item]:landscape{ + layout:layout_two_rows_secondary-landscape; } -CntContactCardHeadingItem:landscape{ - layout:layout_two_rows-landscape; +CntContactCardHeadingItem[!secondary_text][marquee_item]:landscape{ + layout:layout_two_rows_marquee-landscape; } -CntContactCardHeadingItem{ - layout:layout_two_rows; +CntContactCardHeadingItem[first_line_text][secondary_text][marquee_item]:landscape{ + layout:layout_three_rows-landscape; } CntContactCardHeadingItem::icon{ fixed-width:var(hb-param-graphic-size-primary-large); - fixed-height:var(hb-param-graphic-size-primary-large); + fixed-height:var(hb-param-graphic-size-primary-large); } CntContactCardHeadingItem::first_line_text{ @@ -39,12 +47,6 @@ text-align:left; } -CntContactCardHeadingItem::second_line_text{ - text-height:var(hb-param-text-height-primary); - font-variant:primary; - text-align:left; -} - CntContactCardHeadingItem::secondary_text{ text-height:var(hb-param-text-height-secondary); font-variant:secondary; @@ -58,8 +60,8 @@ } CntContactCardHeadingItem::secondary_icon{ - fixed-height: var(hb-param-graphic-size-primary-small); - fixed-width: var(hb-param-graphic-size-primary-small); + fixed-height: var(hb-param-graphic-size-secondary); + fixed-width: var(hb-param-graphic-size-secondary); } CntContactCardHeadingItem::background{ diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.widgetml --- a/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.widgetml Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.widgetml Fri Sep 17 08:27:32 2010 +0300 @@ -5,10 +5,10 @@ - - - - + + + + @@ -19,50 +19,49 @@ - - + + - - - - - - + + + + + + + + + + + + + - - + + + + + + + - - + + - - - - - - - - - - - - - - - + + - - + + + - @@ -74,67 +73,27 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + - - + @@ -146,21 +105,66 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - + @@ -169,14 +173,14 @@ - - + + - - + + diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/resources/style/cntfetchmarkall_color.css --- a/phonebookui/pbkcommonui/resources/style/cntfetchmarkall_color.css Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/resources/style/cntfetchmarkall_color.css Fri Sep 17 08:27:32 2010 +0300 @@ -3,4 +3,7 @@ color: var(qtc_viewtitle_normal); } - +CntFetchMarkAll > HbCheckBox::text +{ + color: var(qtc_viewtitle_normal); +} diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/resources/style/cntselectiondialogmarkwidget_color.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/pbkcommonui/resources/style/cntselectiondialogmarkwidget_color.css Fri Sep 17 08:27:32 2010 +0300 @@ -0,0 +1,5 @@ +HbSelectionDialogMarkWidget > HbCheckBox::text +{ + color: var(qtc_viewtitle_normal); +} + diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntaddressmodel.cpp --- a/phonebookui/pbkcommonui/src/cntaddressmodel.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntaddressmodel.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -35,21 +35,25 @@ foreach ( QContactAddress a, mContact->details() ) { QStringList context = a.contexts(); - if ( context.isEmpty() && !mAddress ) // no context - { - mAddress = new QContactAddress( a ); - createAddressItems( address, mAddress ); - } - else if (context.first() == QContactAddress::ContextHome && !mAddressHome ) + QString type = context.isEmpty() ? "" : context.first(); + // Context HOME + if (type == QContactAddress::ContextHome && !mAddressHome ) { mAddressHome = new QContactAddress( a ); createAddressItems( addressHome, mAddressHome ); } - else if (context.first() == QContactAddress::ContextWork && !mAddressWork ) + // Context WORK + else if (type == QContactAddress::ContextWork && !mAddressWork ) { mAddressWork = new QContactAddress( a ); createAddressItems( addressWork, mAddressWork ); } + // Context WHATEVER + else if ( !mAddress ) // no context + { + mAddress = new QContactAddress( a ); + createAddressItems( address, mAddress ); + } } // Check that all items (address, addressHome, addressWork) are created @@ -107,8 +111,7 @@ HbDataFormModelItem* postal = new HbDataFormModelItem( HbDataFormModelItem::TextItem, hbTrId("txt_phob_formlabel_postal_codezip_code")); postal->setContentWidgetData( "text", aAddress->postcode() ); postal->setContentWidgetData( "maxLength", CNT_POSTCODE_MAXLENGTH ); - postal->setContentWidgetData( "preferDigits", true); - + HbDataFormModelItem* city = new HbDataFormModelItem( HbDataFormModelItem::TextItem, hbTrId("txt_phob_formlabel_city")); city->setContentWidgetData( "text", aAddress->locality() ); city->setContentWidgetData( "maxLength", CNT_LOCALITY_MAXLENGTH ); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntcollectionlistmodel.cpp --- a/phonebookui/pbkcommonui/src/cntcollectionlistmodel.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntcollectionlistmodel.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -33,6 +33,16 @@ #include #include +#include + +namespace +{ + bool caseInsensitiveLessThan(const QContact &c1, const QContact &c2) + { + return c1.displayLabel().toLower() < c2.displayLabel().toLower(); + } +} + /*! Constructor */ @@ -54,7 +64,8 @@ QString noMembers = hbTrId("txt_phob_dblist_val_no_members_selected"); mThread = new CntCollectionListModelWorker(unnamed, noFavs, noMembers, order); - connect(mThread, SIGNAL(fetchDone(int, const QString&, int)), this, SLOT(informationUpdated(int, const QString&, int))); + connect(mThread, SIGNAL(fetchDone(int, const QString&, const QList&)), this, + SLOT(informationUpdated(int, const QString&, const QList&))); connect(d->mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void *, int, int)), this, SLOT(onIconReady(QPixmap, void *, int, int))); @@ -94,6 +105,8 @@ */ QVariant CntCollectionListModel::data(const QModelIndex& index, int role) const { + CNT_ENTRY_ARGS(index << role) + int row = index.row(); if ( !validateRowIndex(row) ) @@ -190,20 +203,25 @@ \param localId QContactLocalId of the group that should be removed */ -void CntCollectionListModel::removeGroup(int localId) +bool CntCollectionListModel::removeGroup(int localId) { - CNT_ENTRY + CNT_ENTRY_ARGS(localId) + + bool groupRemoved = false; for (int i = 0;i < rowCount();i++) { if (!d->mList.at(i)->isPlugin && d->mList.at(i)->id == localId) { removeRow(i); + groupRemoved = true; break; } } - CNT_EXIT + CNT_EXIT_ARGS(groupRemoved) + + return groupRemoved; } /*! @@ -214,7 +232,7 @@ */ void CntCollectionListModel::addGroup(int localId) { - CNT_ENTRY + CNT_ENTRY_ARGS(localId) QContactDetailFilter groupFilter; groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType); @@ -312,6 +330,8 @@ */ CntViewParameters CntCollectionListModel::extensionGroupActivated(int row) { + CNT_ENTRY_ARGS(row) + CntViewParameters params; for(int i = 0;i < d->mExtensions.value(row)->groupCount();i++) { @@ -322,6 +342,9 @@ break; } } + + CNT_EXIT_ARGS(params) + return params; } @@ -335,7 +358,7 @@ */ void CntCollectionListModel::extensionGroupLongPressed(int row, const QPointF& coords, CntExtensionGroupCallback* interface) { - CNT_ENTRY + CNT_ENTRY_ARGS(row << coords << interface) for(int i = 0;i < d->mExtensions.value(row)->groupCount();i++) { @@ -358,15 +381,22 @@ */ QModelIndex CntCollectionListModel::indexOfGroup(int localId) { + CNT_ENTRY_ARGS(localId) + + QModelIndex groupIndex; + for (int i = 0;i < d->mList.count();i++) { if (d->mList.at(i)->id == localId && !d->mList.at(i)->isPlugin) { - return index(i); + groupIndex = index(i); + break; } } - return QModelIndex(); + CNT_EXIT_ARGS(groupIndex) + + return groupIndex; } /*! @@ -380,6 +410,13 @@ initializeExtensions(); initializeUserGroups(); + connect(d->mContactManager, SIGNAL(contactsAdded(const QList&)), this, SLOT(handleAdded(const QList&))); + connect(d->mContactManager, SIGNAL(contactsChanged(const QList&)), this, SLOT(handleChanged(const QList&))); + connect(d->mContactManager, SIGNAL(contactsRemoved(const QList&)), this, SLOT(handleRemoved(const QList&))); + connect(d->mContactManager, SIGNAL(relationshipsAdded(const QList&)), this, SLOT(handleAddedRelationship(const QList&))); + connect(d->mContactManager, SIGNAL(relationshipsRemoved(const QList&)), this, SLOT(handleRemovedRelationship(const QList&))); + + CNT_EXIT } @@ -526,6 +563,8 @@ */ QVariant CntCollectionListModel::displayRoleData(const CntCollectionItem& item) const { + CNT_ENTRY + QStringList list; list << item.groupName << item.secondLineText; @@ -539,6 +578,8 @@ list << " "; } + CNT_EXIT + return QVariant(list); } @@ -550,6 +591,8 @@ */ QVariant CntCollectionListModel::decorationRoleData(const CntCollectionItem& item) const { + CNT_ENTRY + QList icons; icons << item.icon; @@ -558,6 +601,8 @@ icons << item.secondaryIcon; } + CNT_EXIT + return QVariant(icons); } @@ -580,9 +625,9 @@ \param secondRowText text to be shown in the second row \param memberCount the amount of members the group has (shown in text-3 in HbListViewItem) */ -void CntCollectionListModel::informationUpdated(int id, const QString& secondRowText, int memberCount) +void CntCollectionListModel::informationUpdated(int id, const QString& secondRowText, const QList& members) { - CNT_ENTRY + CNT_ENTRY_ARGS(id << secondRowText << members) for (int i = 0;i < d->mList.count();i++) { @@ -591,7 +636,8 @@ CollectionItemPointer item = d->mList.at(i); item->secondLineText = secondRowText; - item->memberCount = memberCount; + item->memberCount = members.count(); + item->members = members; int idx = d->mList.indexOf(item); emit dataChanged(index(idx, 0), index(idx, 0)); @@ -614,7 +660,7 @@ */ void CntCollectionListModel::onIconReady(const QPixmap& pixmap, void *data, int id, int error) { - CNT_ENTRY + CNT_ENTRY_ARGS(pixmap << data << id << error) Q_UNUSED(data); @@ -649,6 +695,8 @@ */ void CntCollectionListModel::extensionGroupsReady() { + CNT_ENTRY + CntUiGroupSupplier* groupSupplier = static_cast(sender()); int addedCount = groupSupplier->groupCount(); @@ -693,4 +741,198 @@ endInsertRows(); } + + CNT_EXIT } + +void CntCollectionListModel::handleAdded(const QList& contactIds) +{ + CNT_ENTRY_ARGS(contactIds) + + if (contactIds.count() == 1) + { + QContactFetchHint noRelationshipsFetchHint; + noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships); + + QContact contact = d->mContactManager->contact(contactIds.first(), noRelationshipsFetchHint); + + if (contact.type() == QContactType::TypeGroup) + { + addGroup(contactIds.first()); + emit groupCountChanged(); + } + } + else + { + QList addedGroups; + + foreach (QContactLocalId id, contactIds) + { + QContactFetchHint noRelationshipsFetchHint; + noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships); + + QContact contact = d->mContactManager->contact(id, noRelationshipsFetchHint); + + if (contact.type() == QContactType::TypeGroup) + { + addedGroups << contact; + } + } + + if (addedGroups.count() == 1) + { + addGroup(addedGroups.first().localId()); + emit groupCountChanged(); + } + else if (addedGroups.count() > 1) + { + qSort(addedGroups.begin(), addedGroups.end(), caseInsensitiveLessThan); + + foreach (QContact c, addedGroups) + { + addGroup(c.localId()); + } + emit groupCountChanged(); + } + } + + CNT_EXIT +} + +void CntCollectionListModel::handleRemoved(const QList& contactIds) +{ + CNT_ENTRY_ARGS(contactIds) + + foreach (QContactLocalId id, contactIds) + { + if (removeGroup(id)) + { + emit groupCountChanged(); + } + else + { + for (int i = 0;i < d->mList.count();i++) + { + if (d->mList.at(i)->members.contains(id)) + { + CollectionItemPointer item = d->mList.at(i); + + item->fetched = false; + + int idx = d->mList.indexOf(item); + emit dataChanged(index(idx, 0), index(idx, 0)); + } + } + } + } + + CNT_EXIT +} + +void CntCollectionListModel::handleChanged(const QList& contactIds) +{ + CNT_ENTRY_ARGS(contactIds) + + foreach (QContactLocalId id, contactIds) + { + QContact contact = d->mContactManager->contact(id); + + if (contact.type() == QContactType::TypeGroup) + { + for (int i = 0;i < d->mList.count();i++) + { + if (d->mList.at(i)->id == id && !d->mList.at(i)->isPlugin) + { + CollectionItemPointer item = d->mList.at(i); + + QContactName contactName = contact.detail(); + QString groupName = contactName.customLabel(); + + if (groupName != item->groupName) + { + if (groupName.isNull()) + { + item->groupName = hbTrId("txt_phob_dblist_unnamed"); + } + else + { + item->groupName = groupName; + } + + int idx = d->mList.indexOf(item); + emit dataChanged(index(idx, 0), index(idx, 0)); + } + + break; + } + } + } + else if (contact.type() == QContactType::TypeContact) + { + for (int i = 0;i < d->mList.count();i++) + { + if (d->mList.at(i)->members.contains(id)) + { + CollectionItemPointer item = d->mList.at(i); + + item->fetched = false; + + int idx = d->mList.indexOf(item); + emit dataChanged(index(idx, 0), index(idx, 0)); + } + } + } + } + + CNT_EXIT +} + +void CntCollectionListModel::handleAddedRelationship(const QList& contactIds) +{ + CNT_ENTRY_ARGS(contactIds) + + foreach (QContactLocalId id, contactIds) + { + for (int i = 0;i < d->mList.count();i++) + { + if (d->mList.at(i)->id == id && !d->mList.at(i)->isPlugin) + { + CollectionItemPointer item = d->mList.at(i); + + item->fetched = false; + + int idx = d->mList.indexOf(item); + emit dataChanged(index(idx, 0), index(idx, 0)); + + break; + } + } + } + + CNT_EXIT +} + +void CntCollectionListModel::handleRemovedRelationship(const QList& contactIds) +{ + CNT_ENTRY_ARGS(contactIds) + + foreach (QContactLocalId id, contactIds) + { + for (int i = 0;i < d->mList.count();i++) + { + if (d->mList.at(i)->id == id && !d->mList.at(i)->isPlugin) + { + CollectionItemPointer item = d->mList.at(i); + + item->fetched = false; + + int idx = d->mList.indexOf(item); + emit dataChanged(index(idx, 0), index(idx, 0)); + + break; + } + } + } + + CNT_EXIT +} diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntcollectionlistmodelworker.cpp --- a/phonebookui/pbkcommonui/src/cntcollectionlistmodelworker.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntcollectionlistmodelworker.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -195,7 +195,6 @@ int favoriteGroupId = CntFavourite::favouriteGroupId( mManager ); QString secondLineText; - int memberCount = 0; QContactRelationshipFilter rFilter; rFilter.setRelationshipType(QContactRelationship::HasMember); @@ -228,8 +227,15 @@ // group members and their count QList groupMemberIds = mManager->contactIds(rFilter, sortOrders); + QList groupMemberIdsToInt; if (!groupMemberIds.isEmpty()) { + // first copy all the ids to QList + // (convert unsigned int -> int due to signalling problems with unsigned ints) + for(int i = 0;i < groupMemberIds.count();i++) + { + groupMemberIdsToInt << groupMemberIds.at(i); + } QStringList nameList; for(int i = 0;i < groupMemberIds.count();i++) { @@ -257,7 +263,6 @@ QString names = nameList.join(", ").trimmed(); secondLineText = names; - memberCount = groupMemberIds.count(); } else { @@ -271,7 +276,7 @@ } } - emit fetchDone(id, secondLineText, memberCount); + emit fetchDone(id, secondLineText, groupMemberIdsToInt); CNT_EXIT } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntcollectionview.cpp --- a/phonebookui/pbkcommonui/src/cntcollectionview.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntcollectionview.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -39,6 +39,8 @@ #include #include #include +#include +#include #include #include @@ -75,6 +77,9 @@ qFatal("Unable to read :/xml/contacts_collections.docml"); } + // disable toolbar effects + HbEffect::disable(mView->toolBar()); + //back button mSoftkey = new HbAction(Hb::BackNaviAction, mView); connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView())); @@ -156,6 +161,7 @@ mListView->listItemPrototype()->setGraphicsSize(HbListViewItem::LargeIcon); mListView->listItemPrototype()->setStretchingStyle(HbListViewItem::StretchLandscape); mModel = new CntCollectionListModel( mEngine, this); + connect(mModel, SIGNAL(groupCountChanged()), this, SLOT(groupCountChanged())); mListView->setModel(mModel); CNT_EXIT @@ -343,7 +349,6 @@ mHandledContact->saveDetail(&groupName); getContactManager()->saveContact(mHandledContact); - // Select some contact(s) to add to the group QString groupNameCreated = mHandledContact->displayLabel(); if (groupNameCreated.isEmpty()) { @@ -358,9 +363,6 @@ QList contactIds = getContactManager()->contactIds(gFilter); if (contactIds.isEmpty()) { - mModel->addGroup(mHandledContact->localId()); - mDeleteGroupsAction->setEnabled(true); - notifyNewGroup(); } else @@ -395,19 +397,13 @@ viewParameters.insert(ESelectedGroupContact, var); mViewManager->changeView(viewParameters); } - else - { - mModel->addGroup(mHandledContact->localId()); - mDeleteGroupsAction->setEnabled(true); - } + notifyNewGroup(); } void CntCollectionView::handleCancelGroupMembers() { mSelectedContactsSet.clear(); - mModel->addGroup(mHandledContact->localId()); - mDeleteGroupsAction->setEnabled(true); notifyNewGroup(); } @@ -437,6 +433,7 @@ mModel = NULL; mModel = new CntCollectionListModel(mEngine, this); + connect(mModel, SIGNAL(groupCountChanged()), this, SLOT(groupCountChanged())); mListView->setModel(mModel); } @@ -462,17 +459,6 @@ if (action == HbMessageBox::Delete) { getContactManager()->removeContact(mHandledContact->localId()); - mModel->removeGroup(mHandledContact->localId()); - - // disable delete group(s) button if only favorites group is present - QContactDetailFilter groupFilter; - groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType); - groupFilter.setValue(QLatin1String(QContactType::TypeGroup)); - QList groupContactIds = getContactManager()->contactIds(groupFilter); - if (groupContactIds.count() < 2) - { - mDeleteGroupsAction->setEnabled(false); - } } delete mHandledContact; @@ -495,21 +481,23 @@ if (groupDeletePopup && action == groupDeletePopup->actions().first()) { - QList deletedList = groupDeletePopup->deleteGroup(); - foreach (QContactLocalId id, deletedList) - { - mModel->removeGroup(id); - } - - // disable delete group(s) button if only favorites group is present - QContactDetailFilter groupFilter; - groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType); - groupFilter.setValue(QLatin1String(QContactType::TypeGroup)); - QList groupContactIds = getContactManager()->contactIds(groupFilter); - if (groupContactIds.count() < 2) - { - mDeleteGroupsAction->setEnabled(false); - } + groupDeletePopup->deleteGroup(); + } +} + +void CntCollectionView::groupCountChanged() +{ + QContactDetailFilter groupFilter; + groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType); + groupFilter.setValue(QLatin1String(QContactType::TypeGroup)); + QList groupContactIds = getContactManager()->contactIds(groupFilter); + if (groupContactIds.count() < 2) + { + mDeleteGroupsAction->setEnabled(false); + } + else + { + mDeleteGroupsAction->setEnabled(true); } } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp --- a/phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -55,6 +55,8 @@ Qt::Orientations orientation, QObject *parent) : mContact(NULL), + mCallAction(NULL), + mMessageAction(NULL), mSeparatorIndex(-1), mLocationFeatureEnabled(false), mMaptileInterface(maptile), @@ -62,6 +64,16 @@ mExtensionManager( &aExtensionManager ) { Q_UNUSED(parent); + QList callActionDescriptors = QContactAction::actionDescriptors("call", "symbian"); + if (!callActionDescriptors.isEmpty()) + { + mCallAction = QContactAction::action(callActionDescriptors.first()); + } + QList messageActionDescriptors = QContactAction::actionDescriptors("message", "symbian"); + if (!messageActionDescriptors.isEmpty()) + { + mMessageAction = QContactAction::action(messageActionDescriptors.first()); + } } void CntContactCardDataContainer::setContactData(QContact* contact, bool aMyCard) @@ -88,6 +100,10 @@ CntContactCardDataContainer::~CntContactCardDataContainer() { clearContactData(); + delete mCallAction; + mCallAction = NULL; + delete mMessageAction; + mMessageAction = NULL; } void CntContactCardDataContainer::clearContactData() @@ -286,7 +302,7 @@ } } } - + // This is special action case. Here we query implementations that are generic // to contact, so it's not linked to any detail(usually generic my card actions). for(int j = 0; j < extendedActions.count(); j++) @@ -475,6 +491,11 @@ title = hbTrId("txt_phob_formlabel_address_work"); position = CntContactCardDataItem::EAddressWork; } + else + { + title = hbTrId("txt_phob_formlabel_address"); + position = CntContactCardDataItem::EAddress; + } } CntContactCardDataItem* dataItem = new CntContactCardDataItem(title, position, false); @@ -657,19 +678,16 @@ Returns true if contactDetails contains spesific action. */ bool CntContactCardDataContainer::supportsDetail(const QString &actionName, const QContactDetail &contactDetail) -{ - QList actionDescriptors = QContactAction::actionDescriptors(actionName, "symbian"); - if (actionDescriptors.isEmpty()) - { - return false; +{ + QContactAction* action = NULL; + + if (actionName == "call") { + action = mCallAction; + } else if (actionName == "message") { + action = mMessageAction; } - QContactAction* contactAction = QContactAction::action(actionDescriptors.first()); - bool isSupportDetail = contactAction->isDetailSupported(contactDetail); - - delete contactAction; - - return isSupportDetail; + return (action != NULL && action->isDetailSupported(contactDetail)); } /*! diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntcontactcardheadingitem.cpp --- a/phonebookui/pbkcommonui/src/cntcontactcardheadingitem.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntcontactcardheadingitem.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -43,7 +43,6 @@ mSecondaryIcon(NULL), mFirstLineText(NULL), mPrimaryText(NULL), - mSecondLineText(NULL), mSecondaryText(NULL), mMarqueeItem(NULL), mFrameItem(NULL), @@ -139,26 +138,6 @@ mPrimaryText = 0; } - - if (!secondLineText.isNull()) - { - if (!mSecondLineText) - { - mSecondLineText = new HbTextItem(this); - mSecondLineText->setText(secondLineText); - mSecondLineText->setMaximumLines(1); - style()->setItemName(mSecondLineText, "second_line_text"); - } - } - else - { - if (mSecondLineText) - { - delete mSecondLineText; - } - mSecondLineText = 0; - } - if (!secondaryText.isNull()) { if (!mSecondaryText) @@ -267,9 +246,6 @@ delete mPrimaryText; mPrimaryText = 0; - delete mSecondLineText; - mSecondLineText = 0; - delete mSecondaryText; mSecondaryText = 0; @@ -505,19 +481,19 @@ if (mIsOnline) { secondaryIcon = HbIcon("qtg_small_online"); - createPrimitives(); + recreatePrimitives(); mSecondaryIcon->setIcon(secondaryIcon); } else if (!mIsOnline && mIsFavorite) { secondaryIcon = HbIcon("qtg_small_favorite"); - createPrimitives(); + recreatePrimitives(); mSecondaryIcon->setIcon(secondaryIcon); } else { secondaryIcon.clear(); - createPrimitives(); + recreatePrimitives(); } repolish(); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntcontactcardview_p.cpp --- a/phonebookui/pbkcommonui/src/cntcontactcardview_p.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntcontactcardview_p.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -21,12 +21,12 @@ #include #include #include -#include #include #include #include #include +#include #include #include #include @@ -70,8 +70,15 @@ #include #include -#define CNT_MAPTILE_PROGRESS_TIMER 100 //100 msec -#define CNT_UNKNOWN_MAPTILE_STATUS -1 +#define CNT_MAPTILE_PROGRESS_TIMER 100 // 100 msec +#define CNT_UNKNOWN_MAPTILE_STATUS -1 + +// A few list items (CntInitialPopulation) will be populated before the first view; +// if there are more list items, they will be fetched and added one by one after the +// first view has been shown to the user +static const int CntListPopulationNotInProgress = -1; +static const QEvent::Type ProcessPopulateListEvent = QEvent::User; +static const int CntInitialPopulation = 8; const char *CNT_CONTACTCARDVIEW_XML = ":/xml/contacts_contactcard.docml"; const char *CNT_MAPTILE_INPROGRESS_ICON = "qtg_anim_small_loading_1"; @@ -83,6 +90,7 @@ CntContactCardViewPrivate::CntContactCardViewPrivate(bool isTemporary) : QObject(), mContainerLayout(NULL), + mContainerWidget(NULL), mContact(NULL), mDataContainer(NULL), mAvatar(NULL), @@ -94,7 +102,9 @@ mIsTemporary(isTemporary), mIsExecutingAction(false), mMyCardId(0), - mSaveManager(NULL) + mSaveManager(NULL), + mListPopulationProgress(CntListPopulationNotInProgress), + mStopListPopulation(false) { bool ok; document()->load(CNT_CONTACTCARDVIEW_XML, &ok); @@ -207,7 +217,11 @@ */ void CntContactCardViewPrivate::showPreviousView() { + // stop list population, if it is still in progress + mStopListPopulation = true; + int returnValue = KCntServicesReturnValueContactNotModified; + //save the contact if avatar has been changed. QContact contact = contactManager()->contact(mContact->localId()); if ( contact != *mContact && contactManager()->error() == QContactManager::NoError) @@ -232,6 +246,9 @@ */ void CntContactCardViewPrivate::showRootView() { + // stop list population, if it is still in progress + mStopListPopulation = true; + mViewManager->back( mArgs, true ); } @@ -242,13 +259,12 @@ { CNT_ENTRY mArgs = aArgs; - + mViewManager = &mEngine->viewManager(); mThumbnailManager = &mEngine->thumbnailManager(); connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)), this, SLOT(thumbnailReady(QPixmap, void*, int, int))); - HbMainWindow* window = mView->mainWindow(); if (window) { @@ -257,7 +273,7 @@ setOrientation(window->orientation()); } - + qApp->installEventFilter(this); QContact contact = aArgs.value(ESelectedContact).value(); @@ -267,6 +283,7 @@ mMyCardId = contactManager()->selfContactId(); populateHeadingItem(); + populateListItems(); bool myCard = mContact->localId() == mMyCardId; @@ -314,6 +331,8 @@ void CntContactCardViewPrivate::populateHeadingItem() { + CNT_ENTRY + Q_ASSERT(mHeadingItem != NULL && mContact != NULL); mHeadingItem->setDetails(mContact); @@ -333,16 +352,13 @@ mImageLabel->ungrabGesture(Qt::TapGesture); } - bool online; mInitiialPrecenceData = mPresenceListener->initialPresences(*mContact, online); mHeadingItem->setOnlineStatus(online); - - if (!myCard) - { - bool setAsFavorite( false ); - setAsFavorite = CntFavourite::isMemberOfFavouriteGroup( contactManager(), mContact ); - mHeadingItem->setFavoriteStatus( setAsFavorite ); // if contact is part of favourites group + + if (!myCard) { + bool setAsFavorite = CntFavourite::isMemberOfFavouriteGroup(contactManager(), mContact); + mHeadingItem->setFavoriteStatus(setAsFavorite); // if contact is part of favourites group static_cast(document()->findObject("cnt:setasfavorite"))->setVisible( !setAsFavorite ); static_cast(document()->findObject("cnt:removefromfavorite"))->setVisible( setAsFavorite ); } @@ -367,65 +383,77 @@ break; } } - + + CNT_EXIT } void CntContactCardViewPrivate::populateListItems() { + CNT_ENTRY + Q_ASSERT(mContact != NULL && mScrollArea != NULL); - // data container - if (!mDataContainer) { - mDataContainer = new CntContactCardDataContainer( - mMaptile, - mEngine->extensionManager(), - mView->mainWindow()->orientation() ); - } - - // fill the data container with contact details - mDataContainer->setContactData(mContact); - - // scroll area + container widget - QGraphicsWidget* containerWidget = mScrollArea->contentWidget(); - if (!containerWidget) - { - // initialize - mScrollArea->setScrollDirections(Qt::Vertical); + if (mListPopulationProgress == CntListPopulationNotInProgress) { + mListPopulationProgress = 0; + + if (!mDataContainer) { + mDataContainer = new CntContactCardDataContainer( + mMaptile, + mEngine->extensionManager(), + mView->mainWindow()->orientation()); + } + + // fill the data container with contact details + mDataContainer->setContactData(mContact); - containerWidget = new QGraphicsWidget(); - mScrollArea->setContentWidget(containerWidget); // takes ownership. + // scroll area + container widget + mContainerWidget = mScrollArea->contentWidget(); + if (!mContainerWidget) { + // initialize + mScrollArea->setScrollDirections(Qt::Vertical); + + mContainerWidget = new QGraphicsWidget(); + mScrollArea->setContentWidget(mContainerWidget); // takes ownership. Old widget is deleted + + mContainerLayout = new QGraphicsLinearLayout(Qt::Vertical); + mContainerLayout->setContentsMargins(0, 0, 0, 0); + mContainerLayout->setSpacing(0); + mContainerLayout->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); - mContainerLayout = new QGraphicsLinearLayout(Qt::Vertical); - mContainerLayout->setContentsMargins(0, 0, 0, 0); - mContainerLayout->setSpacing(0); - mContainerLayout->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); - - containerWidget->setLayout(mContainerLayout); // takes ownership. - } else { - // Already initialized - Q_ASSERT(mContainerLayout != NULL); - - // Clear the container - int count = mContainerLayout->count(); - for (int i=0; iremoveAt(i); + mContainerWidget->setLayout(mContainerLayout); // takes ownership. Old layout is deleted + } else { + // Already initialized + Q_ASSERT(mContainerLayout != NULL); + + // Clear the container + int count = mContainerLayout->count(); + for (int i = 0; i < count; i++) { + // do not delete items. They will be deleted automatically + mContainerLayout->removeAt(i); + } } + + // Delete all the detail pointers if any + qDeleteAll(mDetailPtrs); + mDetailPtrs.clear(); } - - // Delete all the detail pointers if any - qDeleteAll(mDetailPtrs); - mDetailPtrs.clear(); - for(int index = 0; index < mDataContainer->itemCount(); index++) - { - CntContactCardDataItem* dataItem = mDataContainer->dataItem(index); + + + do { + if (mListPopulationProgress == mDataContainer->itemCount() || mStopListPopulation) { + // population of the list has completed + mListPopulationProgress = CntListPopulationNotInProgress; + mStopListPopulation = false; + return; + } + + CntContactCardDataItem* dataItem = mDataContainer->dataItem(mListPopulationProgress); int pos = dataItem->position(); - + // communication methods if (pos < CntContactCardDataItem::ESeparator && dataItem->isFocusable()) { - CntContactCardDetailItem* item = new CntContactCardDetailItem(index, containerWidget); + CntContactCardDetailItem* item = new CntContactCardDetailItem(mListPopulationProgress, mContainerWidget); mDetailPtrs.append(item); connect(item, SIGNAL(clicked()), this, SLOT(onItemActivated())); @@ -499,7 +527,7 @@ //other details else { - CntContactCardDetailItem* item = new CntContactCardDetailItem(index, containerWidget, false); + CntContactCardDetailItem* item = new CntContactCardDetailItem(mListPopulationProgress, mContainerWidget, false); mDetailPtrs.append(item); //To check whether maptile status icon is set with the address @@ -540,7 +568,17 @@ mContainerLayout->addItem(item); } } + + ++mListPopulationProgress; + } while (mListPopulationProgress < CntInitialPopulation); + + if (mListPopulationProgress <= CntInitialPopulation) { + QObject::connect(mView->mainWindow(), SIGNAL(viewReady()), this, SLOT(populateListItems())); + } else { + HbApplication::instance()->postEvent(this, new QEvent(ProcessPopulateListEvent)); } + + CNT_EXIT } /* @@ -864,6 +902,13 @@ QContactId id = mContact->id(); CntFavourite::addContactToFavouriteGroup( contactManager(), id ); + QContact c = contactManager()->contact(mContact->localId()); + + delete mContact; + mContact = NULL; + + mContact = new QContact(c); + qobject_cast(document()->findObject("cnt:removefromfavorite"))->setVisible(true); qobject_cast(document()->findObject("cnt:setasfavorite"))->setVisible(false); mHeadingItem->setFavoriteStatus(true); @@ -873,6 +918,13 @@ { QContactId id = mContact->id(); CntFavourite::removeContactFromFavouriteGroup( contactManager(), id ); + + QContact c = contactManager()->contact(mContact->localId()); + + delete mContact; + mContact = NULL; + + mContact = new QContact(c); qobject_cast(document()->findObject("cnt:removefromfavorite"))->setVisible(false); qobject_cast(document()->findObject("cnt:setasfavorite"))->setVisible(true); @@ -1295,6 +1347,31 @@ { tmpContact.removeDetail( &a ); } + + //temproral solution for a contact without name - add an empty name, + //so vcard construction doesn't fail + //TODO: use custom handler again when new QVersitContactExporterDetailHandlerV2 + //(part of QtVersit) is available in the platform + QList names = tmpContact.details(); + if (names.count() > 0) + { + QContactName name = names.at(0); + if (name.firstName().isEmpty() && name.lastName().isEmpty()) + { + //empty first and last names - update with empty string + name.setFirstName(QString("")); + tmpContact.saveDetail(&name); + } + } + else + { + //no name detail - create one + QContactName name; + name.setFirstName(QString("")); + tmpContact.saveDetail(&name); + } //temproral solution for a contact without name - add an empty name, + //so vcard construction doesn't fail - end + list.append( tmpContact ); QString tempDir = QDir::tempPath().append("/tempcntvcard"); @@ -1333,8 +1410,10 @@ vCardPath = QDir::toNativeSeparators(vCardPath); QVersitContactExporter exporter; - CntVCardDetailHandler hanlder; - exporter.setDetailHandler(&hanlder); + //TODO: use custom handler again when new QVersitContactExporterDetailHandlerV2 + //(part of QtVersit) is available in the platform + //CntVCardDetailHandler hanlder; + //exporter.setDetailHandler(&hanlder); // The vCard version needs to be 2.1 due to backward compatiblity when sending if (exporter.exportContacts(list, QVersitDocument::VCard21Type)) { @@ -1357,7 +1436,7 @@ } QStringList l; l << vCardPath; - mShareUi->send(l,false); + mShareUi->send(l, true); } } @@ -1453,6 +1532,11 @@ bool CntContactCardViewPrivate::eventFilter(QObject *obj, QEvent *event) { + if (event->type() == ProcessPopulateListEvent && obj == this) { + populateListItems(); + return true; + } + if (event->type() == QEvent::KeyPress && obj == mView->mainWindow()) { QKeyEvent *keyEvent = static_cast(event); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntdefaultviewfactory.cpp --- a/phonebookui/pbkcommonui/src/cntdefaultviewfactory.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntdefaultviewfactory.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -46,6 +46,7 @@ CntDefaultViewFactory::~CntDefaultViewFactory() { + } CntAbstractView* CntDefaultViewFactory::createView( int aId ) diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntdefaultviewmanager.cpp --- a/phonebookui/pbkcommonui/src/cntdefaultviewmanager.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntdefaultviewmanager.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -40,8 +40,6 @@ CNT_ENTRY mEngine = new CntDefaultEngine( *this ); - setViewFactory( new CntDefaultViewFactory( mEngine->extensionManager()) ); - setViewNavigator( new CntViewNavigator(this) ); int error = -1; mSimUtility = new CntSimUtility(CntSimUtility::AdnStore, error); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntdetaileditor.cpp --- a/phonebookui/pbkcommonui/src/cntdetaileditor.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntdetaileditor.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -51,7 +52,8 @@ mViewManager(NULL), mEditorFactory(NULL), mCancel(NULL), - mSaveManager(NULL) + mSaveManager(NULL), + mVirtualKeyboard(NULL) { bool ok; document()->load(CNT_DETAILEDITOR_XML, &ok); @@ -88,6 +90,8 @@ mEditorFactory = NULL; delete mSaveManager; mSaveManager = NULL; + delete mVirtualKeyboard; + mVirtualKeyboard = NULL; } void CntDetailEditor::setViewId( int aId ) @@ -163,6 +167,11 @@ mDataForm->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded); mDataForm->setScrollingStyle(HbScrollArea::PanWithFollowOn); mDataForm->verticalScrollBar()->setInteractive(true); + + mVirtualKeyboard = new HbShrinkingVkbHost(mView); + + connect(mVirtualKeyboard, SIGNAL(keypadOpened()), this, SLOT(handleKeypadOpen())); + connect(mVirtualKeyboard, SIGNAL(keypadClosed()), this, SLOT(handleKeypadClosed())); } void CntDetailEditor::deactivate() @@ -230,7 +239,7 @@ if (modelItem->contentWidgetData( "preferDigits" ).toBool()) { - edit->setInputMethodHints( Qt::ImhPreferNumbers ); + edit->setInputMethodHints( Qt::ImhPreferNumbers | Qt::ImhNoPredictiveText ); } objName = mDataFormModel->detail().definitionName() + " line edit %1"; @@ -370,4 +379,21 @@ CNT_EXIT } +void CntDetailEditor::handleKeypadOpen() +{ + CNT_ENTRY + + // enable full screen + mView->setContentFullScreen(true); + CNT_EXIT +} + +void CntDetailEditor::handleKeypadClosed() +{ + CNT_ENTRY + // disable full screen + mView->setContentFullScreen(false); + CNT_EXIT +} + // End of File diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cnteditview_p.cpp --- a/phonebookui/pbkcommonui/src/cnteditview_p.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cnteditview_p.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -767,6 +767,7 @@ QContactManager& cm = mEngine->contactManager( SYMBIAN_BACKEND ); connect(&cm, SIGNAL(contactsRemoved(const QList&)), this, SLOT(contactDeletedFromOtherSource(const QList&)), Qt::UniqueConnection); + CNT_EXIT } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp --- a/phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -93,7 +93,7 @@ if ( subtype == QContactOnlineAccount::SubTypeSip ) { - detailItem->addText( hbTrId("txt_phob_formlabel_val_sip") ); + detailItem->addText( hbTrId("txt_phob_formlabel_sip") ); detailItem->addText( number.accountUri() ); list.append( detailItem ); } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cnteditviewlistmodel.cpp --- a/phonebookui/pbkcommonui/src/cnteditviewlistmodel.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cnteditviewlistmodel.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -25,8 +25,9 @@ #include CntEditViewListModel::CntEditViewListModel( QContact& aContact, CntExtensionManager& aMgr ) : -mContact( aContact ), -mManager( aMgr ) +mManager( aMgr ), +mContact( aContact ) + { mLookupTable.insert( EPhonenumber, -1 ); mLookupTable.insert( EEmailAddress, -1 ); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntfavourite.cpp --- a/phonebookui/pbkcommonui/src/cntfavourite.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntfavourite.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -15,69 +15,78 @@ * */ #include "cntfavourite.h" +#include +#include -QContactLocalId CntFavourite::createFavouriteGroup( QContactManager* aManager ) +int CntFavourite::mCachedSymbianFavouriteId = 0; + +QContactLocalId CntFavourite::createFavouriteGroup(QContactManager* aManager) { QContactLocalId favouriteId = CntFavourite::favouriteGroupId(aManager); - if ( favouriteId == 0 ) - { + if (favouriteId == 0) { QContact favouriteGroup; favouriteGroup.setType( QContactType::TypeGroup ); QContactName favouriteGroupName; favouriteGroupName.setCustomLabel( QLatin1String(FavouriteGroupName) ); - favouriteGroup.saveDetail( &favouriteGroupName ); - if ( aManager->saveContact( &favouriteGroup ) ) - { + favouriteGroup.saveDetail(&favouriteGroupName); + if (aManager->saveContact(&favouriteGroup)) { favouriteId = favouriteGroup.localId(); + if (aManager->managerUri() == SYMBIAN_BACKEND) { + mCachedSymbianFavouriteId = favouriteId; + } } } + return favouriteId; } -QContactLocalId CntFavourite::favouriteGroupId( QContactManager* aManager ) +QContactLocalId CntFavourite::favouriteGroupId(QContactManager* aManager) { - QContactLocalId favouriteId( 0 ); + QContactLocalId favouriteId(0); + + if (mCachedSymbianFavouriteId != 0 && aManager->managerUri() == SYMBIAN_BACKEND) { + favouriteId = mCachedSymbianFavouriteId; + } else { + QContactDetailFilter groupFilter; + groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType); + groupFilter.setValue(QString(QLatin1String(QContactType::TypeGroup))); - QContactDetailFilter groupFilter; - groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType); - groupFilter.setValue(QString(QLatin1String(QContactType::TypeGroup))); - - QList groupContactIds = aManager->contactIds( groupFilter ); - - for(int i = 0;i < groupContactIds.count();i++) - { - QContact contact = aManager->contact(groupContactIds.at(i)); - QContactName contactName = contact.detail(); - QString groupName = contactName.customLabel(); - if ( groupName.compare(QLatin1String(FavouriteGroupName)) == 0 ) - { - favouriteId = groupContactIds.at(i); - break; + QList groupContactIds = aManager->contactIds( groupFilter ); + + for (int i = 0; i < groupContactIds.count(); i++) { + QContactFetchHint noRelationshipsFetchHint; + noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships); + QContact contact = aManager->contact(groupContactIds.at(i), noRelationshipsFetchHint); + QContactName contactName = contact.detail(); + QString groupName = contactName.customLabel(); + if (groupName.compare(QLatin1String(FavouriteGroupName)) == 0) { + favouriteId = groupContactIds.at(i); + if (aManager->managerUri() == SYMBIAN_BACKEND) { + mCachedSymbianFavouriteId = favouriteId; + } + break; + } } } - + return favouriteId; } -bool CntFavourite::isMemberOfFavouriteGroup( QContactManager* aManager, QContact* aContact ) +bool CntFavourite::isMemberOfFavouriteGroup(QContactManager* contactManager, QContact* contact) { - bool favouriteGroupContact( false ); - QContactLocalId favouriteId = CntFavourite::favouriteGroupId( aManager ); - if ( favouriteId != 0 ) - { - QContact favoriteGroup = aManager->contact( favouriteId ); - QContactRelationshipFilter rFilter; - rFilter.setRelationshipType( QContactRelationship::HasMember ); - rFilter.setRelatedContactRole( QContactRelationship::First ); - rFilter.setRelatedContactId( favoriteGroup.id() ); - - QList contactsLocalIdList = aManager->contactIds( rFilter ); - favouriteGroupContact = contactsLocalIdList.contains( aContact->localId() ); - } - return favouriteGroupContact; + QContactId favouriteId; + favouriteId.setManagerUri(contactManager->managerUri()); + favouriteId.setLocalId(CntFavourite::favouriteGroupId(contactManager)); + + QContactRelationship favouriteMembership; + favouriteMembership.setFirst(favouriteId); + favouriteMembership.setSecond(contact->id()); + favouriteMembership.setRelationshipType(QContactRelationship::HasMember); + + return contact->relationships().contains(favouriteMembership); } void CntFavourite::addContactToFavouriteGroup( QContactManager* aManager, QContactId& aId) @@ -100,17 +109,17 @@ aManager->saveRelationship( &relationship ); } -void CntFavourite::removeContactFromFavouriteGroup( QContactManager* aManager, QContactId& aId ) +void CntFavourite::removeContactFromFavouriteGroup(QContactManager* aManager, QContactId& aId) { - QContactLocalId favouriteId = CntFavourite::favouriteGroupId( aManager ); - if ( favouriteId != 0 ) - { - QContact favoriteGroup = aManager->contact( favouriteId ); + QContactLocalId favouriteId = CntFavourite::favouriteGroupId(aManager); + if (favouriteId != 0) { + QContact favoriteGroup = aManager->contact(favouriteId); QContactRelationship relationship; - relationship.setRelationshipType( QContactRelationship::HasMember ); - relationship.setFirst( favoriteGroup.id() ); - relationship.setSecond( aId ); + relationship.setRelationshipType(QContactRelationship::HasMember); + relationship.setFirst(favoriteGroup.id()); + relationship.setSecond(aId); aManager->removeRelationship(relationship); } } + // End of File diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntfetchcontactpopup.cpp --- a/phonebookui/pbkcommonui/src/cntfetchcontactpopup.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntfetchcontactpopup.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -99,7 +100,6 @@ { CntFetchContactPopup* popup = new CntFetchContactPopup( aManager ); popup->constructPopupDialog( aTitle, aAction, HbAbstractItemView::MultiSelection ); - return popup; } @@ -157,12 +157,21 @@ void CntFetchContactPopup::handleKeypadOpen() { CNT_ENTRY + HbListViewItem* prototype = mListView->listItemPrototype(); prototype->setTextFormat( Qt::RichText ); + qreal margin; + HbStyle style; + style.parameter("hb-param-margin-gene-popup", margin); + + if (mPopup->mainWindow()->orientation() == Qt::Horizontal) + margin /= 2; + qreal height = mPopup->size().height() - mVirtualKeyboard->keyboardArea().height() - - mSearch->size().height(); + mSearch->size().height() + + margin; // in single selection we don't have the "mark all" option if ( mMarkAll->isVisible() ) @@ -178,6 +187,7 @@ void CntFetchContactPopup::handleKeypadClosed() { CNT_ENTRY + if (mSearch->criteria().isEmpty()) { HbListViewItem* prototype = mListView->listItemPrototype(); @@ -330,7 +340,7 @@ mIdList.clear(); mTitle = aTitle; - mPopup->setAttribute( Qt::WA_DeleteOnClose, true ); + mPopup->setAttribute( Qt::WA_DeleteOnClose, true ); QContactDetailFilter contactsFilter; contactsFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType); @@ -374,8 +384,9 @@ } else { + mMarkAll->setMaxContactCount( mModel->rowCount() ); mMarkAll->setSelectedContactCount( 0 ); - mMarkAll->setMaxContactCount( mModel->rowCount() ); + connect(mSelectionModel, SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)), this, SLOT(contactsSelected(const QItemSelection&, const QItemSelection&)) ); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntfetchmarkall.cpp --- a/phonebookui/pbkcommonui/src/cntfetchmarkall.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntfetchmarkall.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -39,9 +39,9 @@ mCounterLabel = new HbTextItem( this ); mFrame = new HbFrameItem(this); - mFrame->frameDrawer().setFrameGraphicsName("qtg_fr_groupbox_normal"); + mFrame->frameDrawer().setFrameGraphicsName("qtg_fr_groupbox"); mFrame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces); - mFrame->setZValue(-2); + mFrame->setZValue(-5); style()->setItemName(mFrame, "background"); @@ -66,6 +66,12 @@ mCheckBox->setCheckState( Qt::Unchecked ); blockSignals( false ); } + else if (mSelectionCount == mContactCount) + { + blockSignals( true ); + mCheckBox->setCheckState( Qt::Checked ); + blockSignals( false ); + } } CntFetchMarkAll::~CntFetchMarkAll() diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntgroupactionsview.cpp --- a/phonebookui/pbkcommonui/src/cntgroupactionsview.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntgroupactionsview.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -277,32 +277,37 @@ { Q_UNUSED(contact); - if (action.compare("message", Qt::CaseInsensitive) == 0) { + if (action.compare("message", Qt::CaseInsensitive) == 0) + { QContactPhoneNumber phoneNumber = static_cast(detail); mMessageActionParams.insert(phoneNumber.number(),QVariant(contact.displayLabel())); } - else if (action.compare("email", Qt::CaseInsensitive) == 0) { + else if (action.compare("email", Qt::CaseInsensitive) == 0) + { QContactEmailAddress email = static_cast(detail); mEmailActionParams.append(email.emailAddress()); } //actionpopup executed, decrement counter mPopupCount--; - if (mPopupCount==0) { + if (mPopupCount==0) + { QVariantMap map; QVariant params; - if (action.compare("message", Qt::CaseInsensitive) == 0) { + if (action.compare("message", Qt::CaseInsensitive) == 0) + { params.setValue(mMessageActionParams); } - else if (action.compare("email", Qt::CaseInsensitive) == 0) { + else if (action.compare("email", Qt::CaseInsensitive) == 0) + { params.setValue(mEmailActionParams); } map.insert(action,params); - + CntActionLauncher* other = new CntActionLauncher( mEngine->contactManager(SYMBIAN_BACKEND), action); connect(other, SIGNAL(actionExecuted(CntActionLauncher*)), this, SLOT(actionExecuted(CntActionLauncher*))); other->execute(*mGroupContact, QContactDetail(), map); - } + } } bool CntGroupActionsView::eventFilter(QObject *obj, QEvent *event) @@ -354,6 +359,32 @@ { //actionpopup cancelled, decrement counter mPopupCount--; + + if (mPopupCount==0) + { + QVariantMap map; + QVariant params; + QString action; + if (mMessageActionParams.count()) + { + params.setValue(mMessageActionParams); + action = "message"; + } + else if (mEmailActionParams.count()) + { + params.setValue(mEmailActionParams); + action = "email"; + } + else + { + return; + } + map.insert(action,params); + + CntActionLauncher* other = new CntActionLauncher( mEngine->contactManager(SYMBIAN_BACKEND), action); + connect(other, SIGNAL(actionExecuted(CntActionLauncher*)), this, SLOT(actionExecuted(CntActionLauncher*))); + other->execute(*mGroupContact, QContactDetail(), map); + } } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntgroupdeletepopup.cpp --- a/phonebookui/pbkcommonui/src/cntgroupdeletepopup.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntgroupdeletepopup.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -18,7 +18,7 @@ #include "cntgroupdeletepopup.h" #include #include "cntglobal.h" -#include +#include #include #include #include @@ -41,8 +41,8 @@ void CntGroupDeletePopup::populateListOfGroup() { - HbGroupBox *headingLabel = new HbGroupBox(this); - headingLabel->setHeading(hbTrId("txt_phob_opt_delete_groups")); + HbLabel *headingLabel = new HbLabel(this); + headingLabel->setPlainText(hbTrId("txt_phob_opt_delete_groups")); setHeadingWidget(headingLabel); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntgroupeditormodel.cpp --- a/phonebookui/pbkcommonui/src/cntgroupeditormodel.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntgroupeditormodel.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -48,6 +48,7 @@ iNameItem->setContentWidgetData("text", iGroupName.customLabel()); iNameItem->setContentWidgetData("maxLength", CNT_GROUPNAME_MAXLENGTH); iNumberItem->setContentWidgetData("text", iGroupConfCallNumber.number() ); + iNumberItem->setContentWidgetData("maxLength", CNT_PHONENUMBER_EDITOR_MAXLENGTH); HbDataFormModelItem* root = invisibleRootItem(); appendDataFormItem( iNameItem, root); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cnthistoryview.cpp --- a/phonebookui/pbkcommonui/src/cnthistoryview.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cnthistoryview.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -152,6 +152,10 @@ this, SLOT(showClearHistoryMenu())); connect(mHistoryModel, SIGNAL(layoutChanged()), this, SLOT(updateScrollingPosition())); + connect(mHistoryModel, SIGNAL(modelReset()), + this, SLOT(updateScrollingPosition())); + connect(mHistoryModel, SIGNAL(modelReset()), + this, SLOT(showClearHistoryMenu())); // Connect the menu options to respective slots mClearHistory = static_cast(docLoader()->findObject("cnt:clearhistory")); @@ -159,10 +163,6 @@ connect(mClearHistory, SIGNAL(triggered()), this, SLOT(clearHistory())); showClearHistoryMenu(); - HbMainWindow* mainWindow = mView->mainWindow(); - connect(mainWindow, SIGNAL(orientationChanged(Qt::Orientation)), - this, SLOT(updateScrollingPosition())); - connect(cm, SIGNAL(contactsRemoved(const QList&)), this, SLOT(contactDeletedFromOtherSource(const QList&))); } @@ -258,7 +258,7 @@ delete mRequest; mRequest = NULL; - mRequest = appMng.create(interface, operation, false); // not embedded + mRequest = appMng.create(interface, operation, true); // embedded if ( mRequest ) { mRequest->setArguments(args); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cnthistoryviewitem.cpp --- a/phonebookui/pbkcommonui/src/cnthistoryviewitem.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cnthistoryviewitem.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -16,6 +16,7 @@ */ #include "cnthistoryviewitem.h" +#include "cntdebug.h" #include #include @@ -37,6 +38,9 @@ mNewItem(NULL), mFocusItem(NULL) { + CNT_ENTRY + + CNT_EXIT } //--------------------------------------------------------------- @@ -54,9 +58,13 @@ //--------------------------------------------------------------- void CntHistoryViewItem::updateChildItems() { + CNT_ENTRY + int flags = modelIndex().data(CntFlagsRole).toInt(); mIncoming = flags & CntIncoming ? true : false; mNewMessage = flags & CntUnseen ? true : false; + + CNT_LOG_ARGS(mIncoming << mNewMessage) if (mNewMessage) { @@ -76,6 +84,10 @@ } HbListViewItem::updateChildItems(); + + repolish(); + + CNT_EXIT } //--------------------------------------------------------------- @@ -84,6 +96,8 @@ //--------------------------------------------------------------- void CntHistoryViewItem::pressStateChanged(bool pressed, bool animate) { + CNT_ENTRY + Q_UNUSED(animate); if (pressed) { @@ -117,27 +131,8 @@ mFocusItem = NULL; } } -} - -bool CntHistoryViewItem::event(QEvent* e) -{ - bool result; - if (e->type() == QEvent::GraphicsSceneResize) - { - // HbAbstractItemView has a performance improvement when drawing backrounds but seems - // to screw the layout of history view items. This workaround fixes the issue. There should - // be minimal performance drawbacks since GraphicsSceneResize events are quite few. - // TODO: Remove this once Orbit changes their implementation. Not known when - QGraphicsWidget *frame = static_cast(primitive("frame")); - QRectF frameGeometry = frame->geometry(); - result = HbListViewItem::event(e); - frame->setGeometry(frameGeometry); - } - else - { - result = HbListViewItem::event(e); - } - return result; + + CNT_EXIT } // EOF diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntimportsview.cpp --- a/phonebookui/pbkcommonui/src/cntimportsview.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntimportsview.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -287,17 +287,7 @@ importSimItem->setData(HbIcon("qtg_large_sim"), Qt::DecorationRole); mModel->insertRow(0,importSimItem); - - QStandardItem *importDeviceItem = new QStandardItem(); - QStringList deviceList; - QString deviceImport(hbTrId("txt_phob_dblist_import_from_device")); - deviceList << deviceImport; - importDeviceItem->setData(deviceList, Qt::DisplayRole); - importDeviceItem->setData(HbIcon("qtg_large_data_import"), Qt::DecorationRole); - importDeviceItem->setEnabled(false); - - mModel->insertRow(1,importDeviceItem); - + mListView->setModel(mModel); mListView->setSelectionMode(HbAbstractItemView::NoSelection); connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(endKeyPressed())); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntkeygrabber.cpp --- a/phonebookui/pbkcommonui/src/cntkeygrabber.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntkeygrabber.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -17,14 +17,14 @@ #include "cntkeygrabber.h" -#include #include #include #include #include #include #include - +#include +#include /*! Key press event handler for default actions when pressing either send or end key. End key closes the application and send key opens dialer. Default functionality @@ -36,9 +36,11 @@ CntKeyGrabber::CntKeyGrabber(HbMainWindow *window, QObject *parent) : QObject(parent), mMainWindow(window), - mRequest(NULL) + mRequest(NULL), + mKeyCapture(NULL) { mMainWindow->installEventFilter(this); + mKeyCapture = new XqKeyCapture(); } /*! @@ -47,6 +49,12 @@ CntKeyGrabber::~CntKeyGrabber() { delete mRequest; + if ( mKeyCapture ) + { + mKeyCapture->cancelCaptureKey(Qt::Key_Yes); + } + delete mKeyCapture; + mKeyCapture = NULL; } /*! @@ -59,7 +67,15 @@ */ bool CntKeyGrabber::eventFilter(QObject *obj, QEvent *event) { - if (event->type() == QEvent::KeyPress && obj == mMainWindow) + if ( event->type() == QEvent::ApplicationActivate ) + { + mKeyCapture->captureKey( Qt::Key_Yes ); + } + else if ( event->type() == QEvent::ApplicationDeactivate ) + { + mKeyCapture->cancelCaptureKey( Qt::Key_Yes ); + } + else if (event->type() == QEvent::KeyPress && obj == mMainWindow) { QKeyEvent *keyEvent = static_cast(event); @@ -85,7 +101,7 @@ { QList args; QVariantMap map; - map.insert(XQLOGS_VIEW_INDEX, QVariant(int(LogsServices::ViewAll))); + map.insert(XQLOGS_VIEW_INDEX, QVariant(int(XQService::LogsViewAll))); map.insert(XQLOGS_SHOW_DIALPAD, QVariant(true)); map.insert(XQLOGS_DIALPAD_TEXT, QVariant(QString())); args.append(QVariant(map)); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntmainwindow.cpp --- a/phonebookui/pbkcommonui/src/cntmainwindow.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntmainwindow.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -18,16 +18,18 @@ #include "cntmainwindow.h" #include "cntdefaultviewmanager.h" #include "cntviewnavigator.h" +#include "cntabstractviewfactory.h" #include "cntkeygrabber.h" #include +#include + CntMainWindow::CntMainWindow(QWidget *parent, int defaultView) : HbMainWindow(parent), - mViewManager(NULL), - mDefaultView(defaultView) + mViewManager( NULL ), + mDefaultView( defaultView ) { CNT_ENTRY - CntKeyGrabber *keyGrabber = new CntKeyGrabber(this, this); if (defaultView != noView) @@ -45,6 +47,7 @@ mViewManager = new CntDefaultViewManager( this ); mViewManager->setViewNavigator( navigator ); + mViewManager->setViewFactory( new CntDefaultViewFactory( mViewManager->engine().extensionManager()) ); //activate the view CntViewParameters viewParameters; @@ -61,7 +64,7 @@ delete mViewManager; mViewManager = NULL; - + CNT_EXIT } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntnamesview.cpp --- a/phonebookui/pbkcommonui/src/cntnamesview.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntnamesview.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -55,12 +55,12 @@ bool CntNamesView::isDefault() const { Q_D(const CntNamesView); - return d->mIsDefault; + return true; } int CntNamesView::viewId() const { Q_D(const CntNamesView); - return d->mId; + return namesView; } void CntNamesView::setEngine( CntAbstractEngine& aEngine ) diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntnamesview_p.cpp --- a/phonebookui/pbkcommonui/src/cntnamesview_p.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntnamesview_p.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -22,6 +22,7 @@ #include "cntglobal.h" #include "cntdebug.h" #include "cntapplication.h" +#include "cntfavourite.h" #include #include @@ -51,6 +52,7 @@ const char *CNT_CONTACTLIST_XML = ":/xml/contacts_namelist.docml"; static const int CNT_MIN_ROW_COUNT = 2; +bool CntNamesViewPrivate::mIsFirstTimeUse = true; CntNamesViewPrivate::CntNamesViewPrivate() : QObject(), @@ -64,8 +66,6 @@ mNamesAction(NULL), mMenuBuilder(NULL), mHandledContactId(0), - mIsDefault(true), - mId( namesView ), mActionGroup(NULL), mMenu(NULL), mFilterChanged(false) @@ -145,6 +145,22 @@ CNT_EXIT } +void CntNamesViewPrivate::handleImportContacts( HbAction *aAction ) +{ + CNT_ENTRY + + HbDialog *popup = static_cast(sender()); + + if (popup && aAction == popup->actions().first()) + { + CntViewParameters args; + args.insert(EViewId, importsView); + mViewManager->changeView(args); + } + + CNT_EXIT +} + void CntNamesViewPrivate::switchOrientation() { HbMainWindow* win = mView->mainWindow(); @@ -234,6 +250,46 @@ showFinder(); } + if (mIsFirstTimeUse) + { + // Disable FTU flag + mIsFirstTimeUse = false; + + // Show import contacts popup only if there no local contacts + // Check row count from list model and exclude dummy mycard + if (mListModel->rowCount()==1 && mListModel->myCardId()<= 0) + { + // Default filter to fetch all contacts and groups + QContactFilter filter; + QList contactIds = contactManager->contactIds(filter); + + // Check if favourite group contact exists + // Favourite group contact is created by default in phonebook + int favouriteId = CntFavourite::favouriteGroupId(contactManager); + if ( (contactIds.isEmpty() ) + || (contactIds.count() == 1 && contactIds.at(0) == favouriteId) ) + { + HbMessageBox *note = new HbMessageBox(); + note->setDismissPolicy(HbDialog::NoDismiss); + note->setTimeout(HbPopup::NoTimeout); + note->setBackgroundFaded(true); + note->setAttribute(Qt::WA_DeleteOnClose, true); + note->setStandardButtons(HbMessageBox::NoButton); + note->addAction(new HbAction(hbTrId("txt_phob_button_import"), note)); + note->addAction(new HbAction(hbTrId("txt_common_button_cancel"), note)); + + HbLabel *headingLabel = new HbLabel( note ); + headingLabel->setPlainText(hbTrId("txt_phob_title_import_contacts")); + note->setHeadingWidget(headingLabel); + + note->setIcon(HbIcon("qtg_large_sim")); + note->setText(hbTrId("txt_phob_info_your_phonebook_is_empty_do_you_wish")); + + note->open(this, SLOT(handleImportContacts(HbAction*))); + } + } + } + CNT_EXIT } @@ -687,4 +743,5 @@ return mLoader; } + // End of File diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntphonenumberviewitem.cpp --- a/phonebookui/pbkcommonui/src/cntphonenumberviewitem.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntphonenumberviewitem.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -324,7 +324,7 @@ model->appendRow(internetwork); QStandardItem *sip = new QStandardItem; - sip->setText(hbTrId("txt_phob_formlabel_val_sip")); + sip->setText(hbTrId("txt_phob_formlabel_sip")); sip->setData(subTypeSIP, DetailSubType); sip->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, DetailMaxLength); model->appendRow(sip); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntsettingsmodel.cpp --- a/phonebookui/pbkcommonui/src/cntsettingsmodel.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntsettingsmodel.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -77,13 +77,13 @@ mNameListRowSettingkey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRCntSettings.iUid, KCntNameListRowSetting); - int settingValue = mSettings.readItemValue(*mNameListRowSettingkey, XQSettingsManager::TypeInt).toInt(); + int settingValue = mSettings.readItemValue(*mNameListRowSettingkey, XQSettingsManager::TypeInt).toInt(); if (settingValue == CntOneRowNameOnly) { - rowSetting->setContentWidgetData("currentIndex", 0 ); - } else if (settingValue == CntTwoRowsNameAndPhoneNumber) { - rowSetting->setContentWidgetData("currentIndex", 1 ); - } + rowSetting->setContentWidgetData("currentIndex", 0 ); + } else if (settingValue == CntTwoRowsNameAndPhoneNumber) { + rowSetting->setContentWidgetData("currentIndex", 1 ); + } } CntSettingsModel::~CntSettingsModel() @@ -112,7 +112,7 @@ } else if (topLeft.row() == 1) { int selected = itemFromIndex(topLeft)->contentWidgetData( "currentIndex" ).toInt(); - if (selected == 0) { + if (selected == 0) { written = mSettings.writeItemValue(*mNameListRowSettingkey, QVariant(CntOneRowNameOnly)); } else if (selected == 1) { written = mSettings.writeItemValue(*mNameListRowSettingkey, QVariant(CntTwoRowsNameAndPhoneNumber)); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntsettingsview.cpp --- a/phonebookui/pbkcommonui/src/cntsettingsview.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntsettingsview.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -44,7 +44,7 @@ mForm = static_cast (document()->findWidget(QString("dataForm"))); mForm->setItemRecycling(true); - mModel = new CntSettingsModel(); + mModel = new CntSettingsModel(); mForm->setModel( mModel ); mBack = new HbAction(Hb::BackNaviAction, mView); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/pbkcommonui/src/cntviewnavigator.cpp --- a/phonebookui/pbkcommonui/src/cntviewnavigator.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/pbkcommonui/src/cntviewnavigator.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -22,10 +22,12 @@ QObject( aParent ), iTop( noView ) { + } CntViewNavigator::~CntViewNavigator() -{ +{ + } void CntViewNavigator::next( const int& aId, QFlags &flags ) diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookapp/phonebookapp.pro --- a/phonebookui/phonebookapp/phonebookapp.pro Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookapp/phonebookapp.pro Fri Sep 17 08:27:32 2010 +0300 @@ -52,7 +52,7 @@ SOURCES += src/cntappservicehandler.cpp # capability -TARGET.CAPABILITY = CAP_APPLICATION +TARGET.CAPABILITY = CAP_APPLICATION NetworkControl TRANSLATIONS = contacts.ts diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookapp/src/main.cpp --- a/phonebookui/phonebookapp/src/main.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookapp/src/main.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -24,7 +24,9 @@ int main(int argc, char **argv) { +#if defined (TRACES) || defined (TRACE2FILE) qInstallMsgHandler(MSG_HANDLER); +#endif CntApplication a( argc, argv ); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookservices/inc/cntservices.h --- a/phonebookui/phonebookservices/inc/cntservices.h Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookservices/inc/cntservices.h Fri Sep 17 08:27:32 2010 +0300 @@ -174,7 +174,15 @@ void removeNotSupportedDetails(QContact& contact); void fillOnlineAccount( QContactOnlineAccount& account, const QString& value, const QString& subType, bool defaultForOnlineAccountIsImpp); QContactManager* contactManager(); - + + /** + * Checks if we already have the given contact global uid in database. If so, + * updates the local id and managerUri accordingly. + * + * If given contact has already a local id, method does nothing. + */ + void updateLocalId( QContact& aContact ); + private: // from CntAbstractServiceProvider void CompleteServiceAndCloseApp(const QVariant& retValue); void overrideReturnValue(const QVariant& retValue); diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookservices/phonebookservices.pro --- a/phonebookui/phonebookservices/phonebookservices.pro Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookservices/phonebookservices.pro Fri Sep 17 08:27:32 2010 +0300 @@ -68,7 +68,7 @@ src/cntservicesubeditview.cpp # capability -TARGET.CAPABILITY = CAP_APPLICATION +TARGET.CAPABILITY = CAP_APPLICATION NetworkControl TRANSLATIONS = contacts.ts diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp --- a/phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -234,12 +234,6 @@ // Set action filter mAction = aArgs.value(ESelectedAction).toString(); - // ESelectedAction is defined in cntviewparams.h - - // Has never been implemented. - //QString filterStr = aArgs.value(KCntServiceViewParamFilter).toString(); - // KCntServiceViewParamFilter is defined in cntserviceviewparams.h - if (mAction == KCntActionSms) { QContactActionFilter actionFilter; @@ -254,9 +248,15 @@ } else if (mAction == KCntActionEmail) { - QContactActionFilter actionFilter; - actionFilter.setActionName("email"); - mListModel->setFilter(actionFilter); + QContactDetailFilter emailFilter; + emailFilter.setMatchFlags( QContactDetailFilter::MatchContains ); + emailFilter.setDetailDefinitionName( + QContactEmailAddress::DefinitionName, + QContactEmailAddress::FieldEmailAddress ); + // we need to give something to filter for the email filter + emailFilter.setValue( "@" ); + mListModel->setFilter( emailFilter ); + } else { diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookservices/src/cntservices.cpp --- a/phonebookui/phonebookservices/src/cntservices.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookservices/src/cntservices.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -83,15 +83,6 @@ CntServiceViewManager* srvMng = static_cast(mViewManager); connect(srvMng, SIGNAL(applicationClosed()), this, SLOT(terminateService())); } -/* -void CntServices::setViewManager( CntAbstractViewManager& aViewManager ) -{ - CNT_LOG - mViewManager = &aViewManager; - CntServiceViewManager* srvMng = static_cast(mViewManager); - connect(srvMng, SIGNAL(applicationClosed()), this, SLOT(terminateService())); -} -*/ void CntServices::singleFetch( const QString &title, const QString &action, @@ -227,6 +218,9 @@ } vCardFile.close(); + // check if the contact is in db already. + updateLocalId( contact ); + // Save thumbnail images QList details = contact.details(); for (int i = 0;i < details.count();i++) @@ -550,6 +544,33 @@ } } +void CntServices::updateLocalId( QContact& aContact ) +{ + CNT_ENTRY + if ( aContact.localId() == 0 ) + { + QContactGuid guid = aContact.detail(); + QString guidString = guid.guid(); + + QContactDetailFilter filter; + filter.setDetailDefinitionName( QContactGuid::DefinitionName, QContactGuid::FieldGuid ); + filter.setValue( guid.guid() ); + + QContactManager& cm = mEngine->contactManager( SYMBIAN_BACKEND ); + QList idList = cm.contactIds( filter, QList() ); + int count = idList.count(); + + if ( !idList.isEmpty() ) + { + QContactId id; + id.setLocalId( idList.first() ); + id.setManagerUri( cm.managerUri() ); + + aContact.setId( id ); + } + } + CNT_EXIT +} // This method is inherited from CntAbstractServiceProvider void CntServices::CompleteServiceAndCloseApp(const QVariant& retValue) { diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookservices/src/cntserviceviewfactory.cpp --- a/phonebookui/phonebookservices/src/cntserviceviewfactory.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookservices/src/cntserviceviewfactory.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -33,10 +33,12 @@ CntDefaultViewFactory( aMgr ), mProvider( aServiceProvider ) { + } CntServiceViewFactory::~CntServiceViewFactory() { + } CntAbstractView* CntServiceViewFactory::createView( int aViewId ) diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookservices/src/cntserviceviewmanager.cpp --- a/phonebookui/phonebookservices/src/cntserviceviewmanager.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookservices/src/cntserviceviewmanager.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -24,10 +24,10 @@ CntServiceViewManager::CntServiceViewManager( HbMainWindow *mainWindow, CntAbstractServiceProvider& aProvider ): CntDefaultViewManager(mainWindow) - { +{ // ownership of the factory is given to the base class. setViewFactory( new CntServiceViewFactory( aProvider, engine().extensionManager() ) ); - } +} /*! Destructor diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookservices/src/main.cpp --- a/phonebookui/phonebookservices/src/main.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookservices/src/main.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -19,6 +19,7 @@ #include #include #include +#include #include "cntserviceproviderold.h" #include "cntserviceproviderold2.h" #include "cntserviceproviderfetch.h" @@ -34,7 +35,9 @@ int main(int argc, char **argv) { +#if defined (TRACES) || defined (TRACE2FILE) qInstallMsgHandler(MSG_HANDLER); +#endif HbApplication a( argc, argv ); @@ -58,12 +61,11 @@ CntServices* services = new CntServices(); services->setParent( &mainWindow ); // for ownership - CntServiceViewManager* viewManager = new CntServiceViewManager( + QScopedPointer viewManager(new CntServiceViewManager( &mainWindow, - *services ); // as CntAbstractServiceProvider + *services )); // as CntAbstractServiceProvider viewManager->setViewNavigator( navigator ); - //services->setViewManager( *viewManager ); services->setEngine( viewManager->engine() ); // These objects talk with QT Highway (send/receive) diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testpbkservices.cpp --- a/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testpbkservices.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testpbkservices.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -683,7 +683,7 @@ if ( aNewInterface ) { - QString interface("com.nokia.symbian.IContactsFetch"); + QString interface("com.nokia.symbian.IContactsEdit"); // service name is not needed mRequest = appMng.create( interface, operation, true); // embedded } diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testvcard.vcf --- a/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testvcard.vcf Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testvcard.vcf Fri Sep 17 08:27:32 2010 +0300 @@ -1,320 +1,45 @@ BEGIN:VCARD -VERSION:3.0 -FN:Alice Jones -N:Jones;Alice;;; -TEL;TYPE=HOME,CELL:555-4444 -TEL;TYPE=WORK,FAX:555-1212 -ADR;TYPE=WORK:;;Leeds West Yorkshire;;New York;10087;United States -EMAIL:mailto:alice.jones@nokia.com -TITLE:Assistant Manager -ORG:;Services -NOTE:This is the note for the vCard. -BDAY:20100101 -X-SIP:Alice@yahoo.com -PHOTO;TYPE=PNG;ENCODING=B:/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAASw - AA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAwICAgICAwICAwUDAwMFBQQDAwQFBgUFBQUFBggGBwcHB - wYICAkKCgoJCAwMDAwMDA4ODg4OEBAQEBAQEBAQEAEDBAQGBgYMCAgMEg4MDhIUEBAQEBQREBAQ - EBARERAQEBAQEBEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/8AAEQgBLAEsAwERAAIRAQM - RAf/EANcAAQAABwEBAAAAAAAAAAAAAAABAgUGBwgJAwQBAQABBQEBAAAAAAAAAAAAAAABAgQFBg - cDCBAAAQMDAgQEAwMFBwwNDQAAAQACAxEEBQYHITESCEFREwlhIhRxgTKRQiMVGaFSM9M0Fhjws - YLSUySEJXWVFzjB0eFicpKyQ3S01DVlg6OzRFRklKTERYUmJxEAAgEDAgMCCAgMBQQDAAAAAAEC - EQMEIQUxEgZBUWFxgZGxIjITocHR4VIUFQfw8UJiorLiIzMkNBZyglM1F8LSQyZEJTb/2gAMAwE - AAhEDEQA/AOqaAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI - AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI - AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI - AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI - AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI - AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI - AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI - AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI - AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI - AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAggIoAgIIAgIoAgCAIAgCAggCAICKAIC - CAVQEUAQBAQQEUBAmiAVQEUAQBAEAQBAEAQBAEBA1pwSoJC4gqFqySNSVS6kEOojmqm0KEanmUY - qiPEngVFAeczngijgKcx5qltrVqoqlxIteSRwp9qiM3JcKFOpP8AmqutCohWqlSTAr5IB1E8Cqg - KnzSqAqQmgoQB81TIiqIOLvA0+1Q02tCGn2BvX18TX4ImqFVVwJuo14BQqgVKrDRKXOHAn71S2U - 6vgRcSQADxUvgVUFXDhVCKqoL6eKjVFVGC5xHAqFIgfMeSqTqidCbiqWnUggSQqwQqaoU0Yc6g8 - vtVLdCqqROOSqBFAEAQBAEAQBAEBJKaAfaqJxbRKMDbq96OyWzGtLnQmuLy8iyttHHNLHb2hlYG - ytD2/N1DwK2jb+m8/Msq5ZhzIxV3Pt2rjjJlo/tJO2Q/+v5EfH6E/wBuskujN3f/AIX8B4/a2P3 - n24P3Ee2nO5Wzw8OWvLaW9kZBFNdWnpQte9waC9/WaCp5q3u9H7tFVdl6eIrjuuO+02Tjuop4Y7 - i3cJY5Gh8cjTUOa4VBB8iFpzfK2no1pQy0eWSqj1B6vmCh6ktUZYW8u9WhditNRat1/LNDj5Zm2 - zX28XrP9Rw4VFQsttu25ObcduzHmdKlrkXrduKc3QwuPcj7ZC6gyGRqCBxsSOJ5fnrZX0Xuy1dv - Txli91sU0Zshg9Q2Oo8HjdR45xdY5S3ivLZ7qNJimYJGkjw4FaVctStzlCfFOhlITUrfMYU3G76 - e3PbK/ucTlM+7K39k4su7LDxfWSRPBp0u4sbWvkVs2L0tuV6PNC06d704mNnuViPFli/tQ+2v/w - Bl1CP/AMU3+PWR/sjdn/46eU8vtfG+kQ/ah9tnP6XUFP8AJTf49F0Puy/IT8o+18b6RH9qH22eF - rqD/Nbf45T/AGRu3+n8I+2MfvPW29zvtqubhluY85AHf8/LjA2MfaRMT+4p/sfdv9P4SPtjH7zO - +12+W1+82Ofktus/b5f0QDc2sbum4gr4SROo4Favuez5uBJLItuNeFeD8RksfItXfZZSN7O5TbH - YD9Vncee4g/W/qfRfTw+tX0iOqvEU5r12vZszcE/cRrTj4CjIy42NZGLT7k3bC3qe6/yLS3zsTx - Hwo8rNS6L3SEeeUKLxlp9p2OKZszh8vb5rF2mYsSXW99FHcWxcOkmOVvU2o86Fafdi4ScXxTMs5 - JpNH1iYO5cSK1+7hT7V48zSqVUdDDm8PdpshsflbfT+uM0TlZm+qcdZx/UTQx8g6QAgNBIIC2Tb - +ntxzoc9i25R+l2GPvZ9qzo2Y+PuSds1CDf5AU4EGxPP/jrLS6N3VL+Hr4yyW72qmWdmO4HQ+/F - te5HQUF++wselsmRu7X0LZ8jj/BxvLj1OA4mgp8VrW4bVkYU+W9pL6PavGZW1dhdXMjH2s+/nt6 - 0LqzLaM1Fe3seRwtw60vxHaF8bZWUrR3UK81nMXpPdMm1G5at1TVSynudqE+VlW2r70tkd5dY2+ - gtEXV5Llblj5IWT2vpMc2Npe4h3UeQCtdy6Y3HEsO5ehypUKrGfavT5U9TPVagA8Fq70Rk6Ern9 - HDx5pKXq1JSMXb19yO1mwMWMk3DvpIX5Zz22dvbR+vKRGKue5tRRvhXzWd2vZc3PUvcQ5uXj4Cx - ycq3aS5mYs/aRdsxFW3+Rd5Btjx/5azr6M3ZL+E/gLH7Xx12mQ9mu63Z3frL3+B0DfzSX+Phbcz - W93B6DnQlwZ1RguPUATxWH3Lp/P2+2p37bSfAu7GbYvcGZlaeAWATMgTKQEAQBAEAQBAEBJKKto - qZEp0OQPuKUb3Q5wGv8msKiv/u0a+pugly7TCna36Wc23ht5Mq+D0GtMbXPLumtGCr3AV6W+Z/K - t8jedTBtUIOa0/o3AOB/NPiOVHfFJTrHmpwPSp0b9vru2uNQx2uxW5V8H5K2ZTS2UlfR11CwfyV - 5PAvbQ9Hi4cByXz51x0osZvJtaxb9bwN9xum17gperI32DyOFOHEg+AC4+3SOhtulKmn3ueua7Y - XHvI6h+tbY08OC6j93Scs+VdNPjNa3xJ2U69pywDz1MNPzm14+JcvpK4/WpxRodtJvVnVbuO3Lz - G2XZDgbjT8xtcnmsVisZb3cZo6Jk1vGZi37Yw4fCq+bNq2+3m9Q3YT9lTnLhWur0OgZN73OEqdy - +I5UBge6hJdU/jdxq7nUE8acePxX0lasJJqPYvgOfyl2v8NS9cTslu5n8dDmMRo7K3NncjrguGW - M/TI3wc2rORWt3epNrjNxd6jWjLxYN+Sqon1f0fd8By0Plj/gU39qqf7n2pf+ZfCVfZ+R9H0D+j - 9vgOP8xssaeH0U/wDaqH1TtP8ArR8zKlt2Q+z0Fuao0RrPRd1FZ6rwl7hZLhvVCy9t5IPUA/el4 - ANPGiy+37ji5zf1eSly8fwZa3se5aVZqhdfbzuRnNq949M6qwty6Gl3FbZKIE9M9rI4CSN/mCsb - 1BttvNw5wmlzLhpWhcYmRK1cTTNv/daeHDb51BRzL0mviKxGi5b92cVz3k21ojZ9+p7uPec+J3t - 6ZT0mhb+aeNPED7l3CUUseUaV0ZpVtVcde0717ZV/0daYHP8AxdaAH7IW/ur4x3FfzU/8T0OsWa - e6VDWXvC74cZs+y40Bto6HK6xkb0XlySH2+MDqj5qVDpQfzfDxW+9L9IXtwau3U1ZXdSr8j7DC7 - hukYepF1Zy6zeay2fyl7qHUN3JkL+7kdLfXly4vfJI81JLnVPjy8Avo6OPbsUVuKgkl6qpTx6d5 - otycrk/Weptl2mdh2e3clttd7qMmw2kAQ+1sGj0rvJ9JHAg0cyIitSaE+HDiuWdUdbWrFbGMoym - 9G9Vy+I2Hb9qlL1p6I6g6Z0zgtI4S105puxix2MsWCK0s4GBkbGDyA8fM+K4Bfv3b03O5Jyk+16 - s3eFqMI0XA4o90Ly3uH3GZw45ievDhXpbxX1x006bZZdPyEcyzlTKZkj27Kf0ocEB4Wt9Q/wCDS - LB9df7Rc019X9ZFztP9XGnhOvgHHyXyynVUZ0jU+HMZKww2Pusvk5mwWllDJcXU7jQRxxtLnOP3 - Ar3tWpTkoR1bdEimcuWFWcTe5feu/wB+t2ctrOdzhjIXGxwFvUkRWUZ+VwB4/pKeofi5fWvTOzx - 2/BUZKk37Ve/yHMs/Id117NTFVHHn+H76flW0yq7Tro6cDG0SL02e3Pzezm5OG3GwBJmxsoN3b0 - FJrWQdE0VDTiWF1PJ1FhN729blhOw9KLQvsXIdqVWdxtFaxwuutK4rWGAmE+Py9vHc20jTX5Xip - Bpwq08D8V8g5WPPHvStTXrRdGdNs3Izgmiuh9RVW57EQaqKgipAQBAEAQBASu5KHwByC9xQB3dF - nfP6SwPHw/vaNfUPREqbRb8cv1mc33l/zUvJ6CzuzTHY3N9yOj8RlYGXdjezSw3lpOwPilY6F4I - cDULL9Uydnar04uj5dPA6ot9vgpZEVLtZWu8DteyXbzrd1xiIXz6Nzb3yYW+oXNtnVqbWUmtC0H - 5KniAsV0j1Lb3PG9zN0uQomu9d9a6svN0wHYlzLgzAtjeXWOuoMlYTyQXlvI2a1uIXdMkcrHVBa - 5tCHA04+C3qUVcqp0a7qVRhudxacTrh2V901lv7owaf1JM2HW+BjazJW5IH1kDQGtuWU51/PHgV - 8udW9N3NsyOeCrblwfy9x0LAzo34KNdUWt7n4/8A4JY08crb1WY+7xfz83+b8Zbb7/Bj4zleD87 - a/vm0/KF9G3OBoUFqdG++MEdmW2R8m4k//ILgnSv/AOhveOfpZu25a4cPEvQjnOxpbNE0UaTJH8 - QB1Dku9OUeauvA0uLjU776KAZpDDCJoawWluGhoDRQRilAOS+LM11vzb+k/SdZsJK2vEVsEnxVl - RrVM9yD69B4/fzSLrxINF/datbcbY6HvegC5GbkibNSrxG6yle5gPkS0GnwXV/u8lN504J0VPkN - b3yEfcps506P46rww87u3qfteF9C5jfu34viNFt+0b3e61/BbeDxLLz+vEuJfduv317yG376vVi - c+ZgDBIKnlTh8fH7l229rF1NPte0jfjuB78P1Jt/idqNk7snIsx1tbZ3VLKBtuRC0Phtqg1fQ8X - 04eS4ns/R7v5c7+WqQ5qxVeOvajbcrdoxsqFvjTuNDw+fIX4eTJd3Fw+nWXOkmllkdzJJJc5zuH - ErtzsxtW+VUSppp6TVXzNVfFnRftB7AYMFLY7mb4W0V5ejoucLpg/PDAXUc2W6BqHvFeDOQ8arg - PVHWk8iDxsbSOlZUalVcaa8PCbftu009e5xN8oYY4Y2RwtaxjQGMjYAGBreQAHIBcgc23rqzbKd - iPRg5gcvM8yqdV4iTh33Rf6xm43+Wbj/ktX2H03/tdj/Cjl25f1EvG/SZJ9unj3RYL/o1/wD9Vl - WB69b+yp/5f1kXWz/1UfL6Dr259OPh4r5cR0Vtmj3uU9wjdMaXh2R0xcdGW1CwT517DQwY8E9LC - RQh0jqEf70HzXWugdh+sZDypr1IcPH8xrO9ZihH3aevac0IIJZ5Yre2ifPM9zY4IWCsj3EhrWsA - 5k8gF9CXLvu3KfYlV+JcTSI1k6LtOmUHY1ZHs3Og5bSIa8fGM+6+aA4nIhpeIOulfT6D09Pmvnd - 9VS+23e5n7jmolrw76V7ze/s2KxHp61DmhdW1xZXU1pexOtp7V74poJAQ+ORpo6NwP5wPA/FfRF - q5GVtTb1eqoaPJONYvib8+2f3A+hPd7B6nuj6cvXe6Uc8khrh/DWwJ4D9+0eJJXEOv9ilBLNhw0 - jLh29vA2vZsxL93J8TomwcKDlzXDotVNx4Mnjr1EHwVdFUpq6nopKggCAIAgCAldyUMHID3FQD3 - S5vn/JbCv/w0a+qeglF7RCvfL9ZnPN3p9ZnXuXoLb7I2tHdJoUNr/KZP/QvXp1PNvachS7I/Gi1 - 2n+phXvOt26W2OlN39EZLQesrUXOPyEZaSKdUMg/BIwnkWHiF8v7fuFzCv++stqSOi3bCuwpJHF - /fLZjVOw+4V7obVTT0QkSYzI9JEV7aOJEczDQceBafGoX1psm9Wt1s+8g6PtrRa9ulWc1zcV2J8 - pb+3+vtVbY6vxuuNIXbrHKY2VssRBPQ9oqHRyN4dTXCoKvtwwbW4Y8rEo6NeI8bF+VmXNHsN3+7 - ffTS3cF2gYfWWnXhl1FlLaHO40uHqWV20Ava9vPpPNjhwoR4rj3S203du3q7ZnwUVR60aqu3wdp - su4ZccjGi1xrr5jn8a9bByJcwgD8NCQu43OBqcOJ0b74iP6GO2VP3mJ5/5PXBOlV/7De/xT9LN0 - 3JfykPEvQjnMwv9eGvJr4y7hWgLxw+1d/m4N8Hwf4fCabCMTv3o8EaUw4cOki0txT7IwviXMivf - zf5z9J1m17Cp3FYAANVbVVCujqQJ4KlMqoaOe6y4f6K9D0/F+vnmn+ATgrqX3e1+0JOn5PyGr79 - /BS8Jzk0fw1XhQPG7gp/xwvojMX7p+I0m37aN7/da/gtu6eLLyn/AJpcU+7f+Pe8ht+/ezE58SH - pikcaijT8wFSOHku3XvYb8Bptv2kdCd/+xK31jt1it1tmrRtvqF2Ns7jM6fhp6V+BAC99vWgbL8 - OTvtXDtp6xePmTsZT5oczUZUXMte3wG4Ze1KVlThxoc/bm1msrp9leRSW1xbudFJbyNMcsb2cC1 - 7eYdUeVV3KOQrsFKDr4qUp4eJqcuZaS4o3P7R+/fLbfSWG3W8tzJkNLuDbexzz/AJ7rHEmjGynm - +Eef4m+AK5F1P0TG/F5GIqTWsk2/W8WhtG27uo0hc8h0ww+axecx0GXwt3FfWN4wS2t1A8SRPYe - NWubULgly1O3JwmqNcUzb1NcVqj72Oq4j8n3ry4o9a9pw77ov9YzcYf8AjFxT8jV9gdNf7VY/wn - L9yX8xLxv0mSfbp/1osGfO2v8A/qsqwPXv+1S/y/rIudn/AKqPl9B1U3H17gdsdEZjXup5hFj8N - byXMvEVcWirWNHi5xoAF814WFPLyIWocW/xvxHQbl2MYuTOH+624ue3Z1/mtf6kk67vLTulDK1Z - DDX9HG3ya0cgvsLbtvjgYsMeC0SOX5GS7t1yfaV7t41vt/tvunitfbj4y6y1hgy65ssfZxxvLrx - v8FI71HsFGOHUrHqDbsnMxJWLElFvi5d3bwqemHdt2rlZ6+I3rHuo7S8HO0nmeFajptjx+H6Xku - LP7tc9RVblvzv/ALTa/t6xXg/gNGO4TXGgNzd0crr/AG1xlxiLHNkXOQsL5sYIvXcZJWem5wo9x - Lj8V2XYcDKwMaNm/KMpLg13eFmqZt21cuc0Uyx9K6lzWi9Q4zVmnbk2mUxFzHeWV0ePRLEeB+xZ - rOx7WRB27irCSoy3hc5LqlHsO3ewu7eK3v2uwu4WLAidfRBmQtA6ptrqP5ZYj/wXL4/3fa7mBky - sT7Ho+9dh1DGyFetpoyIz8ZpyosOmuHaXZ6KogIAgCAIAgJJa9HDnUKKrtJRyC9xN7h3Q53h+K1 - sBWnlbR+K+o+hI02m3Xg3L9ZnON4XNlS8noLY7H3tHdFoRgrX6qWp8P4F6u+rava7yfBR+NFtt0 - X9ah4ztAQAR5HiV8o0TOnSbqjC/dF26YPuL2+mwNy9tlnLAuuNP5d7a+hOB+B9OJjfSjlsew75P - bMhTXsv2o9/i8Jjtww1fttdpxu1XpXPaC1Pk9G6rs32WYxMroLy3fxIe00q3za7mD4r61xM21k2 - Y37ck4SWi7fxnN8nHnalyspsN9eW9pNjoZXC2uix11A0nok9N3U3qHKoXtKxGcuaWtOB5qToeNf - 0jB/vm8/8AhBHcTXs8CmC1On3djorKau7G9M5HFQOupNP2GHyD4o2l7zD9OyJzgBzDWvqfgvnfp - /MtY3UVx3NE5zXws33MtueGqLgjmA6WoBYeNKsq6hA514EflX0WrUuLdU9fIaEoupsBpTvv7mtH - 4Gz09j9TRXNnYxtgs/qbO2klbE0Ua10np1dQDmVpF7o/aJybdnV/nT+Uy0d1yIqilSngRV/2i3d - IeWctB5j6C2/i1brobaUv4f6U/lPT7ZyfpfAvkH7RXukPA5y1p8LC3/i1H9kbT/pfpT+Uj7Zyfp - fAjF27/cHuvvrcWMu5WX+vjx3V9BaRwxW8UTnj5nERNbU+FSti2rZMHbpN48eVy46t+ksr+bdvq - k3XzFM2Z0lkdcbq6T0niY3SXeRyFu0Bo/AwOq57vJracSvTesuGPiSuTlwRGNZlduJRN0/dWb0s - 28Y8ElrL0FopXgYguS/dq/317xG0b9H92mc+J29UUoaC0BvCvOv3Lt12L9xJp9hp0UvVo+J3t20 - p/o4005nD/F1nTgf7i1fGe5L+aud/M/SdVsqlpU7jXHu/7I8LvdbT6629EWK1rE0l8NGxWuUNal - sxp8sh8HinH8S3XpbrG9tv7q5WVnu0r532GJz9shdXPFescs87gM5pTM3um9R2clhkcfI6C8sJ2 - lskb2UDuBFCOVD94X0li5Vm+lO26qla1rx7NDQ7tuUJUkqMzn2u94WtO3XJx4u8a/N6KnePr8KZ - P0lsDw9W0c40aRwJZXpIr40WjdRdJ425xdy2vd3F2uvrGZ27dJ2nyydYnWPbTc/RW7WlbXWGhMl - HkcdcgOqxw9SJ54lkrObHg8wV835uBkYl1wvRcX4U0bzZyIXY1icae6No/pGbhioI/XFxQ8q8Gn - kV9W9P862rGaf5HxnOdy/qJ/h2mRvbrFO6LCDj/Jr8t++2kWN+8KKhtLp28v6yPfaIv63B+P0My - j7le/w1Dn7XYzTU4Nlh3tu9RzRuqH3gFY7dw8oxR33rSugdiduKzrq71Ff9VTJ7znVraXA0gxth - d5bI2WIx8Rnu76aK2tYG+L53Bjf3SAu15FyHuncboo6t18HA1i1Zd2fLE2xg9sff+WFkrr/FxPe - 0F7DK6rS4VINPKtFyh/eNhKbpCb8qM+tju07ice2Dv4KUyGJ4eUjlC+8XA5ub3Uq+NEvY7veiSf - 2xt/o43yR32Kkc1rnNYyVzS4tHBoqacSvX/kjCfG3Lzoqjst1OtTU/LY29xGWu8PkIjbXthLJa3 - VuR8zJYnljqg/EcF1GzOE4xuKS5ZJNeX5DXblqVpuMja328e4Ru2O479ttRTlun9Xvay3dWrbfI - gUY414NY5oLTT86i5d11sDysb6xBVuQfh9nUz+zZTty5W9Dq3C7qcR8OBXzlHvN946nsqwEAQBA - EAQEkn4fOqpkqolGpW/vYLhd+NzL7ca+1bPipr6OGL6OO1bK1ogjbGOJkb5eS6PsvWUsDFjY93z - ctfyqcXX6LNczNp+sXObmp5PnKfsx7dmB2c3Lwm5FprG4yMuFkdKyzfZtibKXNLaF3qupz8lc7t - 1tLOx52fd8vMqe1X/pRGPsys3Iz5uD7vnNwgARxPDyXMKGxJkPTA+Yn7D8CoohF0NeO5fsu0J3F - ZSx1LPfP07nLZoguMpawiR11bipEcreptek8nV+C3np7qq9tqcGnO3rSNaJN9q0Ziszbo5DrWhh - Ae1Jpo8Rr+6pSlfoG/wActvh95corldiv+f8AYMN/b35/wfORHtR6ZBY/+f8AdcCCP7xaK0Nf7s - k/vJa0Vin+f9kmOwcsk+f4PnN1tP6SssJonHaGuKX9nY2MWMkMzeE8UUIhIc2pFHN5rkORkyvZM - r+sW5OXiq6m0xglDkqaq7ke2JtDqvJT5TROUutIPuSXusoWC5so3E1/RwucwtHmOoro2B94G4Wl - S83cSpTWnxGCvbOp8JfB85j79kvIaj/SgRX/AMEH/a1sv/J1umuKq/4/2SxfT/5/wfOP2Szxy3R - P+ZG/9sVK+8/ux/0/2B/b6+n8Hzg+0u/x3QP+ZAP/AKtT/wAnV/8Aj/p/sj+319P4PnPosPaas4 - bkSZHcqW4g49UcWJbC8/2f1Tv6y8J/eS5cMf8AT/ZH9v8A5/wfObKbBdom0fb7NLl9MWsl9nLhn - py5y/eJZ2sIFWQ8B0MJFacftXOd46jzdwThOT5OKj2Gcw8CFhacT4e6DtQxvc0cE7I5+XBjCCcR - mGATGT1i0k8XtpTpV10z1M9oc3yc7mqcafEyc3B+srjTyfOYDl9qLTLmOB19cnqBbU2DeNfE/pl - t9z7wpyhyK1TT6X7JhYbDyyrzVp4PnN6NNYZunsBjtPskMzcdbw2rZiKF4iYGVp9y5Jeuu7dlOl - Ktvzm0xilFRPucCKuJ5cAvOa9XTie0pJIwN3H9nu3PcWLbJX5OE1Da0EeftIw6WSL+5zNq3rA8K - ngtv6e6nyNt01nb+hWir38GYnK2+3f10T8XzmBG+1DpkENbr+64Cjv7wb/HLeV95Lr62PX/ADfs - mGewxb0n8HzmSNjOx3ObBatj1Hozcu7FrM5jcrhZbEG0vYWni17fW4Op+Fw4j4rWN56os7hCk7F - JfS5qtfol/i7ZKxWk61VOBbm5ntq4DcfcPUGvrnWtxZy568lvn2os2yCJ0gA6Q4yio4eSym3dey - xsOON7rm5VTm5qf9Jb3tl95NycuPg+crWxXYFititwbfcPEaxnv7u1guYLeGWzDWB1xE6MONJTX - pLq08VZbv1nPNxXYna401cq8HXuXpPTG2pWbilzcPB85Z2b9rvGahzGQ1Bmdxr24yGTmlu7y5fZ - NLnyTPLiambwrQfBZi394StWo2oY/LBKlFN/9p5XdjVyTfPq/B85d2yft26I2j3DsNwchqCXUku - IDpMbZXFs2KNlwR0tkPzv6i0E0FOfFYbd+t72XiuxCLhV6vmrVd3A9MPZ3Yuc3NXyfObcw9TiSR - SvHpryXN3xNj7eJ69J8kqySXoPI8vBHLvQNRN7/bv0bvBuJkNxLPUUunp8t0vyFnBbNmZJcAdLp - QetlKtA4U+K6Vs3W13BxFjyg7iTqqypT9Fmu5mzxvz5lKnk+csSH2p8DazxXdpuFdw3Fu9sltMy - xAdG5h6muB9bmHAGqz//ACS5RcJWKpqnt/slstjpwn8Hzm8elcbkcPgrDE5W/OUu7OCKCfIuZ6b - rh8bQ0yObU/M6lTx5rjt65CdyTiqJvh3GzWoOEEm6lYXkegQBAEAQBASS/h+9BU8nH4ceYovJLX - wkNNo+G1z+Du7j6W0yNvPNxIhinje80ND8rSTwXtK3OCrJNLwkNx0T4n3B1a/1VVNRFUrUPJDae - PkUSbepNF2kG+BcfuUcrXaGu1ESWcwfxcKImmyKkS5lA3kfBUr2tSXRMhX82nCnA+KPWtdCG3zE - 4IA5pVIqfEiSBxqnhJJeoNNTwryVVK8CFVkTI0AfFQ2l2gh1ivL+vVFqK9xbk+4Oi7LVsGg7vN2 - sWoLuP6i2xLpmC4kiqW1a0mvEjkrqOJelZd3lpBOlTxlkQ51BvUr7T1M6j8oPEfYrNRqerjXgTU - HDjwPjyXsTRoma9v4l5QlzBa6h7qjp81Dk4kOjAYACAq1w0FexHg65tovllmawjn1OANPvUJ07R - pHQna9rj6rHdTPBwII/KqW1XiOTUm6mk+Xn9q9KNiUqEatePjXijSITrxBdQ1fw+xRHVaBrWpK1 - wIqOPGhKToTzV4E3U0fM3h5qaJBpE3V8fsU1KSzNe7w7dbY3mLsddZmPFT5qUW+LZIyRxnkcQ0N - HQ11OJ8VksXb8jJi5Wo1S4lvdybdppSdKl4NdHLGJAatdRzSPIrFet28S6UlTQg+SJtGuPM0UUf - EmLq6I9Y3tcflP3KqOupTXWh6KoqCAIAgCAIDzlNGj7VTKVEQzSDvT3D1zr/drSXattjlJsRNmX - R3Oo8havLHMhe8fK5zCHdLGfpCARVdR6WwbOPjXM+9FPlTcK6ptfhQ1zcbkrl2NqLprr5jJ23/Y - 1tTt3qXTmsMNkszJmtOSi5E02QLo7qXoLSJmFtCw1JoKfasLldWZORauWpW7ajcVPZ9bya6Mu8f - bIWpqfNKvhehW9wu83t+2w1NPpHU+ourK2lW3lvYwSXQgeDxZI6Ooa4eRVngdLZ2Xb54xST4cz5 - dPKemRuNiw2pVfi1Mm6D3I0VuZpmLV+hspFl8VNUC4gd1dLwA4scOYcAeIWvZmLdxbvu7ipJMvb - d2Nxc0dUzG+W7xe3/A6SttZ5LUnRY3tzdWNpbiF77qWeyeI5+mAfN0scQCVsK6Zz5Zn1aiU+Xm4 - qmtO0t3nWFHnroXZtDvztfvjj7m/24y7MgLFwbeWr2GK4hr+EvjdxANOBVju2zZW3XPd34pN9qf - MvOj0x8q1fjzQ7C3Mv3cbEYDC5jPZXUAt48LfSYu5tnxO+pfdxU6mRRfifz5hXVvpvPuzhGMV6y - qm3SPlk+B5yz7XM4viio7RdzGz2+N1d2G3mZ+tvrBokuLCWJ0E4jJA9QMfQloJpXzVvu2yZW30d - 9LXti+ZfAelrLt3J8qep927W/8AtVshZW91uJmm2Ml6T9FZRtM11OB+JzImfMWjxKtdr2q/uE6W - FXx6LzlV/Mt2nSXE8doe4vaXe8XkW3eabf3NjR13YytMFzGw8BIY3/N0k+Ku942LL26SjeSVe58 - y867SnHy4XX6rPbdruA2p2QtLa43GzcdhNefyOxaDLdTNr0lzIm/MWg8yrPa9qyc6fJaSr4XRec - jKy4WKcz492pZDe97YO50Fk9wrTJXT8Xirq3x08jrCZrxdXjZDA0McASHem7jyWcu9K59rIhjyU - eadeWkk1pSuvlPB7haVty1ovAYR7Uu9zT2Svc1id2s/eTZrVGoGs0tYfTumjhtr2QRQxNfG0BoD - nAOryW09R9JXrVmF21FKMIevquPgRjdu3OEpSWur00Kth8h2i7od39hrjCZzKP1/ZXE1s3F+i5l - jLd2RdA55c9hPDpIoHUPkvDIs7nibI7NyFv3MnGXNWs/W4I9IXrFzKrV8y7KGwub7k9m9MZHVGL - 1Hn48dc6RERzDLhjmUM7S5girxkJpSgWi2toyrtuNyMaxm6V7PK+wyk8y3CVGykbV922xm8WpP5 - qaIzply5Y6WCxu4H2z5msFXekJPxEDiaeCvc/pzMwbCu3EuRvsfN6Dys51u7Kka18JeO6G8W32z - Onv5y7jZePF2jnenAHVdLPJ+9iZzceKxO37XfzbvJaj8VPGy8v342o8z4Fg4vvP7es3pLM6us9R - n6TBOhGRtpIHxXbRPK2CNzYHfM5pe8CoWdyOmdxtZMLPKqzWlGmtPCWq3Gz7r3nYZvsruHI2Fvf - WriYbmNksTiKEskaHDn8CtVvQlBuL4p+hmQjLm1Rz3310hDud7hlntvncnkrTDZHFWDpmY+8ltv - mZbzv4Brump6fJdu2bMWF019ZhCEp88l66TNYyLTu5fJzU/EeG9+isz2K640NuVtrqvLXulsvem - w1BhsxePu29Df00lCQGhpZWnCod48aKnacq3vuLes37cYStx54u3FR14alOVZliTUoydGbpbk75 - bZ7UaUstU7g5dmLtclG19nCR13Excxr6RRt4uLQRWi5RgbXkZd92rUatPi9F5+Bnp5du1BTmUna - Lud2a3svrjC7fZwXWQtY/VfjrmN1vcPirQyMY/i5oPAkK63bYMzb2nfSo/ovm8/cUY+favv1XqV - vdnefbnZXDRZzcjLMxdvcv9OyjoZJ55BxLY428XEDiaK023bb+Zc93YWr79EvKet3Lt2IvnZRNo - e5/ZnfDIXGG0HnBPkreP13Y24idbXLoagGRkclC5oJFSFc7psGbt9JZEVR/RfN5yjHzbVyqi9Sr - 6n3z2w0ZqybRepswzG5K3xz83M65BZA2zjcWucZeVR0k08laW9qy71r3tqNVXl4lVzKtwVWyytE - 96vbvr3V1rozAakP6yv3mKy+pgkggmk/NayR9Gku/N81nM3pbcsbGd2cY0SVaST4+I8VuNmTiq8 - eGhgz3H/m1ls04/hbm4CSQDQ/UMpVbF0cozxL6/DgzE7smrsZeD4zb3Xu5OitqdInV+vspFicZA - 2Nhnl/PkePljYB+JxpwAXP8ADwb+Xf8AdWVzNt+TxmfnfjbtqUvAWFth3dbDbvahj0ppPPg5aUd - VpZXkL7V85ALumIS06jQE0Cyud05n4Fn3l6Ko3T1XzegtbGdbuSai9fMZph4yPIFBy/qC1lUoZN - 0PdSQEAQBAEAQHnN+D7+K85pulBSpoXhLE5D3VM9czPr+rccDCw8W/pcNCD/XXX8vlj0lZp7Tk1 - +lI1ZJy3F+T0I273m1PNofafVerbQF02Kx1xcQt50eGEA8aVoTVc12jDWTnWbc+2SM/m3eSzKXc - jWD269q9KZvZLIbjatx8WazOsL++jyV7fME8r4oZXQljnOrwcR1Eea3brDcb0cmNmD5VaikqaeE - xW2YsPductWy3+zR8+2Xc7vDsfjpiMFC593jrF7z+gkH6RxY11OHQ9rfsAWV6n/ndss5TWq5Yun - h8PkLPb77t5LtNPtfmPi9vDbLS+pNWbj6/1HYRX13isobHCNlHW22ZN1vnc1ruAc4gUPlVXPX2f - K07di26RpzPvrSnxnjtGNblGVaunylb2J0/YaB9wvc3SGmoxZ4qXHwXEtnF8sZdPDHdU6Bw4PeS - sdvUnd6cxLsva55Vfiqi8xIK3l3Iw4fiLS7RtstNa47td1NS6ktGZBul7yV9hbXA9SJlxdyH9KG - u4FzRHwNPFZTqXcLtrZMW3B0jcj63e6fjPHFsxuZc2+CLhmwmM0d7n+CsdMwjHW2Wx0kmRtYAGR - SP/Vc0n4R5uHUfirCzJ3el7s5ttqS8nrIqlBQ3CKXB/Iy2sFqnb/X3flrPVe9WVtLfDaNjdZaas - cs5ogDmNaG9LXcOpj+p/wDZfBXd/GyMbYY27CblNqTa8OvzHnZlC9luU+zvPtyeptvcJ7gWgtRb - OZK0mx+sojaZ6HGSNMDz6by75G8A5zw1zvPpVvas5E+nZxupJxlJ+txKpuuapQfq6FU2nw2J7he - +vcDUuu4G5Gz0HA2HC4q5aJLeNzJfpQ5rDX8L4y+v77iqM67LC6dx3ZaXvXJSa4s98d+9y7jfD8 - RuLq/RekbjSObtrjCWhiktZpJYzBGQ58EMnpvpTiW9RofCq5jZvXI3oST1TWpmrtuPu2u9Gn3td - 6T0znNq87l8vire8v7TLRPt7qaFr3xOZEHsdG5wqCHCq6d17cvc2PzvV266aV17TBbNCNbjpwfx - E2tMNh8J7lGjbbD2UdkyTG/UTMt29DHySPlL3OA8SeanHuzn0tcq9feL4hL1c/Xh8xQYdvsBuZ7 - kGdxGp4W3eNxMTMsbCX+BnlgaGRh7ePWAX9VD4hXX1yWL0nH3TalKbi/h8x4uMLmfVVpT5Cqd1+ - nMJpPvN2SzemrOLGXmavLG3yctq0RNnY++EJDw0CpLD018uC8elrksjZcuNxtqEJcvg9VlW4W3D - MttcOZelHpupY2++HuF6d251OBd6c0lYsvP1VMOqKSSMF8nU08w9xYf7FUbdclgdP3px9q8vNqU - 35O5nxT4J0+MpfucbZaWwFnobX+FsIbG8u7/APU939O0RsmjEZuIy9jQKlvp0B5hXX3e7j692xP - g6S1493xkbviwhFSWlO4310e0DSGE/wCg2nn4Qt81yPLSeRcpw5n6WbTafqR8SNFd0tT4HR/uY4 - vPamv4cZjrXE2Pr3ly/ojb1W1w0cT8V1jExve9K/u4tydx/hQ1rJuK1nKT4U+JHx94W52i+6zVe - 3+xGzN+dSTOyX1OburJrnwW8Eg9GshLRQMr1E8qLw6ax57bjZN7IVOeDUU6VbWveV59z6xK2oaq - qPj1tldDau79bbTm7l/DBpDb7GRxWNvkXhlo68tI2UBDuDvUL608ekeSuMaxkY2x1sLmlfVZaVa - 14+ChbylG5l+7m9I6fASb/a52rwPdjtLuTtBlbGe4v54sZnXYpzH9brm4Zax9YBHH05CBw+Kja3 - lvYMm3eWlVTmWumvE9clQt5UPdfAXNNb2m9vuPX+ntbxC9xWgLN4xePf8AwZkjhjuGPLeRo+Y18 - +C8sef1XpWdy06SlcVe32tNPMTJK/n8k+CXobPDvf0zY7Sb2bU7z6Fto8TkJr+GzyP0zej1x6sc - bS5jeBpE57fvXr0Ve+u4eTi39YqMpeHh3+MnPte4vRuQdK6eY+Tus0li9xO+rbLSuXHq4vIWUDs - jbGobPBHc9b4nEcel44FT05luxsV+VPyZU8x4Z8VLJS72kXV7j21mlcPtHhNxtNYqKwyumspZW8 - VxbRtic21eSTUilekxN6ViuiNwu3Mt483WF1etXWlPxl1uuJC3aU4aOPDylld5WobjV+E7bdUXx - L7jLy4i+mcRSr7kQvd+65ZnY8eFuWbGOihNqPi9ZIs9wk7lu1Xi1X0FT7v8vgNZd2G2O2m4V7FZ - aHxNrb5TMRXjxHA9z5JA9rz5OYxgCs9hsTtbTfybKrccml36JdnnPXLfNft25P1aIo3erqfZAZX - bXcPaHNY46iwmUtbZ7cRI0H6IPa75+ilQOnpHwcVedIQyqX7WQmoOEpeuu2nY34yvcJWoSjK09d - FodDsLdtyNjbZJren6uGKYNrWgkYH0+6q4srcYvQ2eOqUu8qKrKggCAIAgCAkkJoKeJUMHP3c65 - j2X9yLTu4eo5PSxWsbT6eO6JLIYjLbtxo9Vx4fK5lfsXX8Om4dPfV4P1rTcmu/XmVDVrk1Yy+eX - CRt7vvgLvV+yustP45wkmyGLuW2/SQer5OoUPxA4Lnmy5McbcLM56KMlXwGYzbfvbE4rtRgn2zt - U4zJ9uMWnoZGm9wGQvm30buDmC7mdcRlwPKrT4rYOs8WcMxXaVVxJr0fOWe1Xoe75FpQx/wBqYZ - rvvM3n3IxlZsdbCSCG7f8AOXF5NuQx3nWE8PKnmtg6ilLF2eziSdJScJU8Ba4FZ3pzfFVLm9tjh - iN0W8T/APsAoTz/AASeKsev+X6zafD1fkK9lbdp9/N8ZDb2h9zDcsk//abDp8v+7oK/1BTuMJf2 - xiuunPP0s9rP9bc8S9CKd2Mtd/SO31rw/vyEeI/5yXwPFe/VVHtOF/hdPgLba9b9z8O1nnq0Ee6 - dpF3KuMl4+B/xRPyXrhU/tPIf58f1kVXH/wDYQX4eyyytrNvdvMl3z7n7dbu4aDLPyTn3WCZeMp - FI5rWzFzC6lSWvDftBWSztzyVs1u/jS5UuWL08FDHwx7Ty3C6q1NzdM9uOx+lMzZ6l07o2yx+Ss - ZRPZ3ccRbJE8AgOFeRAJC5dkb/n3Yu1cuVi69i+JGyWtusWZVgqM1f7YpYduu+jd3ROo5mw5PUM - Pr4xoIpPWY3gp5H05B963ze177p3Fna1UHKq8ehjMSTt5s4z7fmN19UFztM5kUJcLK6HAVJPou5 - DmuW2qK5Hxoz1yScZJLsNNvarkptBqmEOpIzKxeowu4tcbcGhB/CSundfpu5ipp0938Zgtmm07n - Ppqjz3KaX+5dok+WJj58RQul8lXhv/ANVup/6mnwEXV/PrxfKS7bNb+0w1u3jU4h9a8aAPi5L0y - XH+0bdV63vXR+ci2+XOp4PkJO9Tqb3a9vkbKf8AeNhSgJIJyTQPyc1R0e2tozm/a5Jfqsq3N1v2 - ++q9KPDUVxHt17mGNyudcIrPU+ObbWNy/wCVhkuWkdJceHAx/uqvGh9d6fmocbK1854XHG3nKsX - q+PkJvdL1Hiv5ube6QZLXI/rV+SNsHDqFs23kg6iK1p1PCo+77FuLIlfkm4L1X6SN+vQooPXizd - nRoI0jggfCwtOP/kGLl+Z/UTa4c0v1mbLY/hx8S9Bonu3pLTGt/crxenNWWEeRx11ibAXFlMKxS - dNtcOHUF1/bsu/i9LOdqXK+dmuX7MbudyzVVT5DdPRm1W2+2/WND6cscO+T5ZZbW3Y2Z7SeTpKd - RaPKtFyTN3DIy5N3ZuVPEbBYxbdrSCojRvK6M0Rc+5JmNObt2EGQxmp7F8uJs7thMctzO1noUrS - pHpSAUXW7edkvYISxZNO0lzcOFX8pqt23CWZKN1VjJ/EbeY7td7f8VkLbKY7ROPt7y1ljnt5mRl - rmSxOEjHN4/mkcFzi51FuN2DhK4+V6PRGfsbfi2X6ipXwv46ms2kaaE9zbUzdQOEDdXWck+Kkk+ - TrLrWGNjR1c+oxOAot3uNXelfUTbhcjWnx+cxijTcqvu9J6e4Xkv5ybk7RbY4YC4y13kYrySJh4 - xxNuI6lw5gFtT9y9eiYuzayL04vkcJRT7K8rG5yhO7CKfb6ak++TDH7hu1cVaNZjmsDnV4hszgK - 058l5bHGmxXqfRl6DyzJJ5sar8qJcnuXausGbRYnba2mbNnNS5a0ba49tHTOgjcWvcGjjzeKLF9 - GWbkMqWW4+paWr8Zd7tcTtqEeLMY942nLjSOD7btK3ZJuMNJiLGZg5l9v6Ebifvatm2K+r7zZrh - KbfkfMzH5sXFWa9ioVDugwmlIu+Xbi+3LsorvSmosfZ2UjrlpbaCYyytAe40HDgT5BwTp+/ej0/ - fjZdbiuNpcXwWtKHrnQh9ZhKa9Wi/D4TaSDtT7crZ8dxb6FxscjC10bmR8QQeoU405jgudT6m3S - UaSuN18C+QysduxFPRKvjMu2MMVvBHBA30442hkcfLpa0UA/ItbrXwmWUVFUXYfSpJCAIAgCAIC - WQVH+2oaqSjF++3b1t53AaZZp3XNu/1LVzpcZlLV3p3dpKRTqjfQ8D4grL7Xu2RgzbtOil7S7yw - ysSF6OvHsMZbd9k1toPVenNST7h5/L22m5hc2WFurlxtHOaxzA17S49TaONQfFZzN6gt3rMoRsR - i2va7fQWuPhXINOU6pdlPnPj1j2D6DzGrMxqrQ2pMtol2f6jl8fiZzHayufxf0xjp6Q4kk0P2L1 - xep7itK3kwV6ipHm/JXctCi7tqk3yPlr5fkMvbJ7D6D2F0e/R+g7eRkVw909/fXD/AFLm7uHtDX - SyyUFTQCi13ct2v591TvP2dIrsUVw8xf4+LG1WnbxPl2L7fNIbCWues9JXN1OzUF3+sLwXcgkLJ - KOFGUAoPmVe77pd3CUXd/JVERi40bNadrIYft70lhN9c7v7b3N0c7nraG0u7Z0gNq1kMLIAWspU - HpYPFVXN4vTwYYjdYQba8ohjpXZT70eG0nbfo7Z/W+rtd6du7ue91jKyfIR3MgfGxzC536MACg+ - ZU5u73cnHt2ZcLfApxsWNqUmu0kyPbdo3KdwWM7ipry7bqDGQPtobRso+kc11u62qWUrXpefFVW - t5v28GeIvZm0/M6/ERLETve8KVvt2m7d77ZOw1TkLi6wGp8b0ttdRYuT0bgxtJIZJ006gCTTkrj - bd8vYsPcy9e1WrtvhUoycGN2XMvVl3lL2y7QLHQOuLDX+Z13n9UZDFhwsIb68ItwHMLCJIxwdwP - Cqr3XfI5Fvkt2IwXbT8RFjEuQlzSuN+QqW+/aPt5vpmcdqy9urvT2psaR9Pn8VJ6Nw+MH5WSEfi - DfzePBU7Tv97ChyNc1tr2H7JVk4KuyUovll38a/Cffsn25wbQ3Wbvr3VeU1fdZuOOCeTLzGRrI4 - +oUY0Ggr1HqPivHc9zhlOLt21bp9H8RXj48oN1lUxj+z60jitR5bMaI1vm9M2GYuBc3mIsLgMiP - zdXQDwo0cm8KgeJWel1c79iML9pXJQXKpN608xYy2xttqdK+D5zKeQ7aNGZDerA73T3t47NYCxi - x1rAZQYHshaWtL20qSa1PHmsBHfLscOWH+TJ81C9+q/vVc7lQ9sJ236NwO+uU39s7u8dnctbGzn - tHytNq1rnNcS1lAa/L5qme83pYCw/yVLmJWMve+87SXdXtv0buvuPo3c3PXd3Bk9Ezw3OOhtpA2 - KR0E4uG+oKGvzDwVe37xexLF2zClLicX5VQm9iRu3Iyb4GPO76x7WNV3GJ0vvznm6XzTGPusBnW - vfbT24JHU1szWuFCQKtP5Vl+nvtSKn9UhKcHTniuDLTN9xJ8smlJLj2mnG8+gtjr12kNBbB6lut - zNa6hykAyeYknkv5bWwjbToY51BCzro4jjwBXTNqv7hiu5eybfubC1ce81+/YhdahCXOzqxgbGT - GYPHYycgyWdtBBIW/h6o4w00+8LguRdVy7KS4Nt+ds3a3Fxgk+4xfk+2rRuT7gbXuHnu7sZ+zto - bSK2EoFr0QxvjHydNakSGvFZeO9XY4P1N+zVvzlp9X/fe88Blt0YIA+4eQWuSquytS+ehh3uA7W - 9ue4SGxuNRtmxmbxTgcZqLHv9G8hANejqHNhPGnBbNtO939vi7a9a3L2ovtLDKxFeo+DLO0N2U4 - /TGssRq/Pbgah1DJgn+rjrO5vHMgDh/dWgnrHwV5m77Zu2HC1YhCvFrV+gt7eDKFxScmy7d/+1v - b3uAmxuXzclziNQ4Yg43UGNl9G5jaCSGPcPxNBJNFYbbv2ThL3MW3alrKHYy4vYkZy5lpLvKBtF - 2YaA2y1w7crM5S/wBY6oY3ps8rmZTMbfhTqjbxo6lRX4ngshunU17Kte4tL3VvthHg33nhY29Ru - c8nU147udHjcDvg2+0c3KTYWTIYwNbkbJ1LiIidxD2nwK3jpfLhj7Pec7amqPR+LXzmHz6yyY6f - lI2A207Hts9Da1g3F1LksjrTUNi7rx95mpzNFbP5dbIjUdXxr9y0fK6lvuzLHxoqzbn7Sj2rxsz - WPhxtSbbrUvPe3tw0bvplNMZPVV5d28mlbqO/sG2cojD5Y3iQepUGoqOSx22bxfw7UoQ4S4npkY - iuNSfYfVvr296A7gtKQaa1rC9r7F/q4zJ2zhHdWktAOqN9OTgAHDxXjtG8X8G67tvSvFdjQysRX - opGJMR2E4y2vMUc7uVqXKY3ESwT22LN66JnVbPbJG0uBcS0FoqPELOZXUli5alC3jwhJ/lKrPFY - MuZPm4eA2ti/EeFK1J+0laWqmYZ6qopCAIAgCAICV4JHBQ2+wpZIWucfmCcUVdhKY3OrxpxXnSu - vcJaqhBsbiCCKU4DxUuFVx4kUpwPRsdBTn5fBVcpLZDoNafuqCOJHopw+4/FHKVSoBhaeaSb7A3 - UemTz+4I+HhBL6Z5kfcqeXUh6EOgippSvML0UdSOKIti86/wC4vPkpxdSaETGSKAkfEKp6Eolax - wJBHL4c0j4ijWp6dFaGqlKhXUgWnqH+yoqyCV0dTSnDy8CqiE9S3NW7aaB19GyLW+nMfnWRcIRk - LSK49Ov7wyNJB+xXuLm5OM37m5KNePK2qnjcsW5usop+NFO0fsrtVt9eOyOitJY3EXjgWuvLW0i - jmLTzb1hodT4VXrl7pm348ty7KUfotunmIhjWoOsYpPwIvYNIpwWLjrqz3Y6XE8UcE3VkogWFxF - eFP3VVUpcaslEby414D4KOZ11R6N1QETmupUkFVI8lBrtIiMt4c1S+NSpskc2UyEdIoBwPinLR8 - 1Sp+zVcS3MjtnoXNassteZbA2lzqHHMMdllZIWOuImE1o15FeavLeXfjbcIzai+yp4O1GTq1qXJ - 0OBqG+NanirJ6HtJtExY+oNOXJQ4VdahaIiY68+KqcmuBFCX0yOJJNfNRFt8URy+E9I2lvNVIlK - hOpJCAIAgCAIAgIKKAEKQEBFAEBCnGqAEVUAIApAQEUAUAgpBFAQQBAEAQEUAQBAQUAIBQqQQ6U - 7QR6QoYFFIIoAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC - AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAID//Z -UID:00000000de2f6d21-00e16017db094b12-56 -REV:2010-03-22T14:48:55 +VERSION:2.1 +N:Gump;Forrest +FN:Forrest Gump +ORG:Bubba Gump Shrimp Co. +TITLE:Shrimp Man +TEL;FOOBAR;VOICE:+1 (11) 555 1212 +TEL;HOME;VOICE:(404) 555-1212 +TEL;CELL;VOICE:+358 50 4871 460 +ADR;FOOBAR:;;100 Waters Edge;Baytown;LA;30314;United States of America +LABEL;WORK;ENCODING=QUOTED-PRINTABLE:100 Waters Edge=0D=0A= +Baytown, LA 30314=0D=0A= +United States of America +ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America +LABEL;HOME;ENCODING=QUOTED-PRINTABLE:42 Plantation St.=0D=0A= +Baytown, LA 30314=0D=0A= +United States of America +X-MS-OL-DEFAULT-POSTAL-ADDRESS:0 +EMAIL;PREF;INTERNET:forrestgump@example.com +X-MS-CARDPICTURE;TYPE=JPEG;ENCODING=BASE64: + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY + GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR + CACUACcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6UdwpAPU0oIwSTxVeQ7nOPoKRj2B4FAEk + k4/g59zREMgk9fWoFGSKsr8qc+maAIJPnmx6cUUkIy5aigBw4yfSkpT93680lABEMtUs52xk + evFJAOabcHkLQA1DsiJ70US8Kq0UAK3Xim0vagdfpQBYhHy5qufmm/GrJ+SP6Cq0PLE0AJMc + vj0opjNlyfeigCTtTohyKb2qaEfyxQAlw2EA9ajT5YyfWluDlwPQUFSVCryeM0AV6KmEaLy5 + 59KKAFHJxU0ZwoxyTzSBoz0Xn6UOSqEjigBDGN2X5J7CmSSEYCjbSRZLEnkgUyQgufSgBEG5 + vmNFNAycCigCzEPmH50s56D8adEvyk/hTJGXeeMkcc9BQAkQIXPvUeFX7xyfQVK5Pl4OBwBx + UFAAXPRcKPaimUUAaJ4TJ7VUA3MPerMxxGfeoI+pPoKACY8Adjk1FT5fv49OKZQAyiiigC3c + HkD0psXC89zSSHLNTjwn0H86AISckmkoPWigBlFFFAFoPuIBHWnOVI5xzTI+pPoKSTqB6CgA + 2Ken6GmGP3/MU09aAxHQkUABRscc/Q0Ubz3AP4UUATp9xvwpj/fb60UUARnrRRRQAyiiigD/ + 2Q== + +X-MS-OL-DESIGN;CHARSET=utf-8: +REV:20100407T092228Z END:VCARD diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/rom/phonebook.iby --- a/phonebookui/rom/phonebook.iby Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/rom/phonebook.iby Fri Sep 17 08:27:32 2010 +0300 @@ -34,7 +34,6 @@ file=ABI_DIR\BUILD_DIR\pbkcommonui.dll SHARED_LIB_DIR\pbkcommonui.dll UNPAGED file=ABI_DIR\BUILD_DIR\phonebook.exe SHARED_LIB_DIR\phonebook.exe -S60_APP_AIF_RSC(phonebook) UPGRADABLE_APP_REG_RSC(phonebook) data=DATAZ_\RESOURCE_FILES_DIR\qt\plugins\contacts\cntactionsplugin.qtplugin RESOURCE_FILES_DIR\qt\plugins\contacts\cntactionsplugin.qtplugin diff -r ae724a111993 -r 7cc7d74059f9 phonebookui/rom/phonebookservices.iby --- a/phonebookui/rom/phonebookservices.iby Thu Sep 02 20:16:15 2010 +0300 +++ b/phonebookui/rom/phonebookservices.iby Fri Sep 17 08:27:32 2010 +0300 @@ -22,7 +22,6 @@ file=ABI_DIR\UREL\phonebookservices.exe SHARED_LIB_DIR\phonebookservices.exe -S60_APP_AIF_RSC(phonebookservices) S60_APP_RESOURCE(phonebookservices) UPGRADABLE_APP_REG_RSC(phonebookservices) diff -r ae724a111993 -r 7cc7d74059f9 presencecache/inc/presencecacheids.hrh --- a/presencecache/inc/presencecacheids.hrh Thu Sep 02 20:16:15 2010 +0300 +++ b/presencecache/inc/presencecacheids.hrh Fri Sep 17 08:27:32 2010 +0300 @@ -26,19 +26,14 @@ -// Interface UID for Presencefeatures interface -// #define XIMP_ECOM_IF_UID_PRESENCE_INTERFACE 0x2000B185 // Interface UID for PresenceCacheReader interface -// #define XIMP_ECOM_IF_UID_PRESENCE_CACHE_READER 0x2000B4EC #define PRESENCECACHE_ECOM_IF_UID_READER 0xEF007001 // todo: official number // Interface UID for PresenceCacheWriter interface -// #define XIMP_ECOM_IF_UID_PRESENCE_CACHE_WRITER 0x2000B4ED #define PRESENCECACHE_ECOM_IF_UID_WRITER 0xEF007002 // todo: official number // Default implementation resulution data -// for XIMP presencefeature interterface Base ECom interface #define PRESENCECACHE_ECOM_DEFAULT_DATA_PRESENCE_INTERFACE "default" diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecacheqt/tsrc/presencefeeddemo_qt/presencefeeddemo.sisx Binary file presencecache/presencecacheqt/tsrc/presencefeeddemo_qt/presencefeeddemo.sisx has changed diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecachesymbian/group/presencecacheuids.hrh --- a/presencecache/presencecachesymbian/group/presencecacheuids.hrh Thu Sep 02 20:16:15 2010 +0300 +++ b/presencecache/presencecachesymbian/group/presencecacheuids.hrh Fri Sep 17 08:27:32 2010 +0300 @@ -34,4 +34,4 @@ #define PRESENCECACHE_DLL_UID_UTILS 0x2001B31C -#endif // XIMPDLLUIDS_HRH +#endif // PRESENCECACHEUIDS_HRH diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheserver.cpp --- a/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheserver.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheserver.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -26,7 +26,7 @@ #include "presencecacheserver.h" #include "presencecachesession.h" #include "presencecachedefs2.h" -#include "presencetrace.h" +#include "prestrace.h" #include "presencecachesecuritypolicy.h" //Include Cache server namespace diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheservicestore.cpp --- a/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheservicestore.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheservicestore.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -21,7 +21,7 @@ #include "presencecacheservicestore.h" #include "presencecachebuddystore.h" -#include "presencetrace.h" +#include "prestrace.h" #include "presenceobjecthelpers.h" // --------------------------------------------------------------------------- diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecachesymbian/presencecacheserver2/src/presencecachesession.cpp --- a/presencecache/presencecachesymbian/presencecacheserver2/src/presencecachesession.cpp Thu Sep 02 20:16:15 2010 +0300 +++ b/presencecache/presencecachesymbian/presencecacheserver2/src/presencecachesession.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -23,7 +23,7 @@ #include "presenceobjecthelpers.h" #include "presencecachesession.h" #include "presencecacheserver.h" -#include "presencetrace.h" +#include "prestrace.h" #include "cacheobjecthelpers.h" #include "presencecacheservicestore.h" #include "presencecachebuddystore.h" diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecachesymbian/presencecacheutils/group/presencecacheutils.mmp --- a/presencecache/presencecachesymbian/presencecacheutils/group/presencecacheutils.mmp Thu Sep 02 20:16:15 2010 +0300 +++ b/presencecache/presencecachesymbian/presencecacheutils/group/presencecacheutils.mmp Fri Sep 17 08:27:32 2010 +0300 @@ -28,7 +28,7 @@ VENDORID VID_DEFAULT SOURCEPATH ../src -SOURCE presencetrace.cpp +SOURCE prestrace.cpp SOURCE presencecachebuddyinfo.cpp SOURCE presenceobjecthelpers.cpp diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecachesymbian/presencecacheutils/inc/presencetrace.h --- a/presencecache/presencecachesymbian/presencecacheutils/inc/presencetrace.h Thu Sep 02 20:16:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -/* -* Copyright (c) 2008 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: Presence Cache trace utilities -* -*/ - -#ifndef PRESENCETRACE_H__ -#define PRESENCETRACE_H__ - -#include - - -// CONSTANTS -_LIT( KPresenceTraceLogDir, "presence" ); -_LIT( KPresenceTraceLogFile, "presence.log" ); - - - //TRACE INDIRECTION -#ifdef _DEBUG - - /** - * Trace handlers. Different statements with - * different names for handling different parameter amounts. - * - * Link against ximpdatamodel.dll to use trace - * services. - * - * Statements produce traces only in debug builds. - * In hardware debug builds traces go to file defined - * KPresenceTraceLogDir and KPresenceTraceLogFile. - */ - #define TRACE( aStatement ) PresenceTrace::Trace( aStatement ) - #define TRACE_1( aStatement, aP1 ) PresenceTrace::Trace( aStatement, aP1 ) - #define TRACE_2( aStatement, aP1, aP2 ) PresenceTrace::Trace( aStatement, aP1, aP2 ) - #define TRACE_3( aStatement, aP1, aP2, aP3 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3 ) - #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4 ) - #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5 ) - #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) - - - /** - * Block (and thus also function) trace handlers. These - * mark block enter, exit and also non local exit to traces. - * - * Example: - * void CSomeClass::SomeMethod() - * { - * TRACE_BLOCK_ENTER( "CSomeClass::SomeMethod" ); - * - * Do your stuff here. If there happens a leave - * or return before "TRACE_BLOCK_EXIT()" statement, - * it is marked to traces with "CSomeClass::SomeMethod - nonlocal exit" - * - * TRACE_BLOCK_EXIT(); - * } - */ - #define TRACE_BLOCK_ENTER( aBlockName ) TPresenceBlockTraceHandler __blockTraceHandler( _S( aBlockName ) ); - #define TRACE_BLOCK_EXIT() __blockTraceHandler.NormalExit(); - - - -#else //NOT _DEBUG - - #define TRACE( aStatement ) - #define TRACE_1( aStatement, aP1 ) - #define TRACE_2( aStatement, aP1, aP2 ) - #define TRACE_3( aStatement, aP1, aP2, aP3 ) - #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 ) - #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 ) - #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) - #define TRACE_BLOCK_ENTER( aBlockName ) - #define TRACE_BLOCK_EXIT() - -#endif - - - -/** - * XIMP Framework trace sink. - * - * @lib ximpdatamodel.dll - * @since S60 v3.2 - */ -class PresenceTrace - { -public: - - /** - * Trace sink. - * - * @param aFmt A format list to print to trace. - */ - IMPORT_C static void Trace( TRefByValue aFmt,... ); - - - -private: //Prohibited construtor / destructor - PresenceTrace(); - ~PresenceTrace(); - }; - - - -/** - * Block trace handler. - */ -NONSHARABLE_CLASS( TPresenceBlockTraceHandler ) - { -public: - - /** - * Block trace handler constructor. - * - * @param aBlockName Block name. - */ - TPresenceBlockTraceHandler( const TText* aBlockName ); - - - /** - * Block trace handler destructor. - */ - ~TPresenceBlockTraceHandler(); - - - /** - * Marks that block has reached its normal exit. - */ - void NormalExit(); - - -private: - //Block name - const TPtrC iBlockName; - - //Normal exit marker - TBool iBlockNormalExit; -}; - - -#endif // PresenceTrace_H__ - diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecachesymbian/presencecacheutils/inc/prestrace.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presencecache/presencecachesymbian/presencecacheutils/inc/prestrace.h Fri Sep 17 08:27:32 2010 +0300 @@ -0,0 +1,146 @@ +/* +* Copyright (c) 2008 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: Presence Cache trace utilities +* +*/ + +#ifndef PRESTRACE_H__ +#define PRESTRACE_H__ + +#include + + +// CONSTANTS +_LIT( KPresenceTraceLogDir, "presence" ); +_LIT( KPresenceTraceLogFile, "presence.log" ); + + + //TRACE INDIRECTION +#ifdef _DEBUG + + /** + * Trace handlers. Different statements with + * different names for handling different parameter amounts. + * + * Statements produce traces only in debug builds. + * In hardware debug builds traces go to file defined + * KPresenceTraceLogDir and KPresenceTraceLogFile. + */ + #define TRACE( aStatement ) PresenceTrace::Trace( aStatement ) + #define TRACE_1( aStatement, aP1 ) PresenceTrace::Trace( aStatement, aP1 ) + #define TRACE_2( aStatement, aP1, aP2 ) PresenceTrace::Trace( aStatement, aP1, aP2 ) + #define TRACE_3( aStatement, aP1, aP2, aP3 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3 ) + #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4 ) + #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5 ) + #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) + + + /** + * Block (and thus also function) trace handlers. These + * mark block enter, exit and also non local exit to traces. + * + * Example: + * void CSomeClass::SomeMethod() + * { + * TRACE_BLOCK_ENTER( "CSomeClass::SomeMethod" ); + * + * Do your stuff here. If there happens a leave + * or return before "TRACE_BLOCK_EXIT()" statement, + * it is marked to traces with "CSomeClass::SomeMethod - nonlocal exit" + * + * TRACE_BLOCK_EXIT(); + * } + */ + #define TRACE_BLOCK_ENTER( aBlockName ) TPresenceBlockTraceHandler __blockTraceHandler( _S( aBlockName ) ); + #define TRACE_BLOCK_EXIT() __blockTraceHandler.NormalExit(); + + + +#else //NOT _DEBUG + + #define TRACE( aStatement ) + #define TRACE_1( aStatement, aP1 ) + #define TRACE_2( aStatement, aP1, aP2 ) + #define TRACE_3( aStatement, aP1, aP2, aP3 ) + #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 ) + #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 ) + #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) + #define TRACE_BLOCK_ENTER( aBlockName ) + #define TRACE_BLOCK_EXIT() + +#endif + + + +/** + * trace sink. + */ +class PresenceTrace + { +public: + + /** + * Trace sink. + * + * @param aFmt A format list to print to trace. + */ + IMPORT_C static void Trace( TRefByValue aFmt,... ); + + + +private: //Prohibited construtor / destructor + PresenceTrace(); + ~PresenceTrace(); + }; + + + +/** + * Block trace handler. + */ +NONSHARABLE_CLASS( TPresenceBlockTraceHandler ) + { +public: + + /** + * Block trace handler constructor. + * + * @param aBlockName Block name. + */ + TPresenceBlockTraceHandler( const TText* aBlockName ); + + + /** + * Block trace handler destructor. + */ + ~TPresenceBlockTraceHandler(); + + + /** + * Marks that block has reached its normal exit. + */ + void NormalExit(); + + +private: + //Block name + const TPtrC iBlockName; + + //Normal exit marker + TBool iBlockNormalExit; +}; + + +#endif // PRESTRACE_H__ + diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecachesymbian/presencecacheutils/src/presencetrace.cpp --- a/presencecache/presencecachesymbian/presencecacheutils/src/presencetrace.cpp Thu Sep 02 20:16:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* -* Copyright (c) 2008 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: TPresence Cache trace implementation -* -*/ - -// INCLUDE FILES -#include "presencetrace.h" - -#include -#include -#include - - -/** - * Handler used by trace implementation to truncate - * the string rather than panic in case of buffer overflow. - * - * @since 3.0 - */ -NONSHARABLE_CLASS( TPresenceOverflowTruncate ) : public TDes16Overflow - { - public: - void Overflow( TDes16& /*aDes*/ ) {} - }; - - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// PresenceTrace::Trace() -// ----------------------------------------------------------------------------- -// -EXPORT_C void PresenceTrace::Trace( TRefByValue aFmt,... ) - { - TBuf< 250 > buffer; - buffer.Append( _L("[") ); - buffer.Append( RThread().Name() ); - buffer.Append( _L("] ") ); - - TPresenceOverflowTruncate overflowHandler; - - VA_LIST list; - VA_START( list, aFmt ); - buffer.AppendFormatList( aFmt, list, &overflowHandler ); - - -// #ifdef __WINS__ - RDebug::Print( _L("%S"), &buffer ); -// #endif // __WINS__ Pia -// Pia #else - - RFileLogger logger; - if( logger.Connect() == KErrNone ) - { - logger.SetDateAndTime( EFalse, ETrue ); - logger.CreateLog( KPresenceTraceLogDir, - KPresenceTraceLogFile, - EFileLoggingModeAppend ); - - logger.Write( buffer ); - logger.CloseLog(); - logger.Close(); - } - -// Pia #endif // __WINS__ - } - - - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// TPresenceBlockTraceHandler::TPresenceBlockTraceHandler() -// ----------------------------------------------------------------------------- -// -EXPORT_C TPresenceBlockTraceHandler::TPresenceBlockTraceHandler( const TText* aBlockName ) - : iBlockName( aBlockName ), - iBlockNormalExit( EFalse ) - { - TRACE_1( _L("%S - enter"), &iBlockName ); - } - - -// ----------------------------------------------------------------------------- -// TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler() -// ----------------------------------------------------------------------------- -// -EXPORT_C TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler() // CSI: 82 # - { - if( !iBlockNormalExit ) - { - //Normal exit not recorded so far - //Thus report here nonlocal exit - TRACE_1( _L("%S - nonlocal exit"), &iBlockName ); - } - } - - -// ----------------------------------------------------------------------------- -// TPresenceBlockTraceHandler::NormalExit() -// ----------------------------------------------------------------------------- -// -EXPORT_C void TPresenceBlockTraceHandler::NormalExit() - { - TRACE_1( _L("%S - exit"), &iBlockName ); - iBlockNormalExit = ETrue; - } - - diff -r ae724a111993 -r 7cc7d74059f9 presencecache/presencecachesymbian/presencecacheutils/src/prestrace.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presencecache/presencecachesymbian/presencecacheutils/src/prestrace.cpp Fri Sep 17 08:27:32 2010 +0300 @@ -0,0 +1,123 @@ +/* +* Copyright (c) 2008 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: TPresence Cache trace implementation +* +*/ + +// INCLUDE FILES +#include "prestrace.h" + +#include +#include +#include + + +/** + * Handler used by trace implementation to truncate + * the string rather than panic in case of buffer overflow. + * + * @since 3.0 + */ +NONSHARABLE_CLASS( TPresenceOverflowTruncate ) : public TDes16Overflow + { + public: + void Overflow( TDes16& /*aDes*/ ) {} + }; + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// PresenceTrace::Trace() +// ----------------------------------------------------------------------------- +// +EXPORT_C void PresenceTrace::Trace( TRefByValue aFmt,... ) + { + TBuf< 250 > buffer; + buffer.Append( _L("[") ); + buffer.Append( RThread().Name() ); + buffer.Append( _L("] ") ); + + TPresenceOverflowTruncate overflowHandler; + + VA_LIST list; + VA_START( list, aFmt ); + buffer.AppendFormatList( aFmt, list, &overflowHandler ); + + +// #ifdef __WINS__ + RDebug::Print( _L("%S"), &buffer ); +// #endif // __WINS__ Pia +// Pia #else + + RFileLogger logger; + if( logger.Connect() == KErrNone ) + { + logger.SetDateAndTime( EFalse, ETrue ); + logger.CreateLog( KPresenceTraceLogDir, + KPresenceTraceLogFile, + EFileLoggingModeAppend ); + + logger.Write( buffer ); + logger.CloseLog(); + logger.Close(); + } + +// Pia #endif // __WINS__ + } + + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TPresenceBlockTraceHandler::TPresenceBlockTraceHandler() +// ----------------------------------------------------------------------------- +// +EXPORT_C TPresenceBlockTraceHandler::TPresenceBlockTraceHandler( const TText* aBlockName ) + : iBlockName( aBlockName ), + iBlockNormalExit( EFalse ) + { + TRACE_1( _L("%S - enter"), &iBlockName ); + } + + +// ----------------------------------------------------------------------------- +// TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler() +// ----------------------------------------------------------------------------- +// +EXPORT_C TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler() // CSI: 82 # + { + if( !iBlockNormalExit ) + { + //Normal exit not recorded so far + //Thus report here nonlocal exit + TRACE_1( _L("%S - nonlocal exit"), &iBlockName ); + } + } + + +// ----------------------------------------------------------------------------- +// TPresenceBlockTraceHandler::NormalExit() +// ----------------------------------------------------------------------------- +// +EXPORT_C void TPresenceBlockTraceHandler::NormalExit() + { + TRACE_1( _L("%S - exit"), &iBlockName ); + iBlockNormalExit = ETrue; + } + +