diff -r d4f567ce2e7c -r 5b6f26637ad3 phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp Tue Aug 31 15:05:21 2010 +0300 @@ -0,0 +1,332 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "cntservicecontactfetchview.h" + +#include +#include +#include "cntserviceviewparams.h" + +#include +#include +#include +#include +#include +#include "cntactionpopup.h" + +#include + +CntServiceContactFetchView::CntServiceContactFetchView( CntAbstractServiceProvider& aServiceProvider ): +CntBaseSelectionView(), +mProvider( aServiceProvider ) + { + HbAction* cancel = static_cast( mDocument->findObject( "cnt:cancel" ) ); + mView->menu()->addAction( cancel ); + connect(cancel, SIGNAL(triggered()), this, SLOT(cancelFetch()) ); + connect( this, SIGNAL(viewClosed()), this, SLOT(closeFetchView()) ); + connect( this, SIGNAL(viewOpened(CntAbstractViewManager*, const CntViewParameters)), this, SLOT(aboutToOpenView(CntAbstractViewManager*, const CntViewParameters)) ); +} + +CntServiceContactFetchView::~CntServiceContactFetchView() +{ +} + + +void CntServiceContactFetchView::cancelFetch() + { + CntServicesContactList serviceList; + QVariant variant; + variant.setValue(serviceList); + mProvider.CompleteServiceAndCloseApp(variant); + } + + + +void CntServiceContactFetchView::closeFetchView() +{ + QModelIndexList temp = mListView->selectionModel()->selection().indexes(); + mIndex = 0; + for(int i = 0; i < temp.count(); i++ ) + { + QContact contact = mListModel->contact(temp.at(i)); + if (mAction == KCntActionCall) + { + serviceCallMessageAction(contact, KCntActionCall); + } + else if (mAction == KCntActionSms ) + { + serviceCallMessageAction(contact, "message"); + } + else if (mAction == KCntActionEmail) + { + serviceEmailAction(contact); + } + else + { + serviceAllAction(contact); + } + } + showPreviousView(); +} + +void CntServiceContactFetchView::serviceCallMessageAction(QContact& aContact, QString aAction) +{ + CntServicesContact servicesContact; + //get the phonenumber + QList phonenumbers = aContact.details(); + + Q_ASSERT_X( phonenumbers.count() > 0, "serviceCallMessageAction", "Number count is zero"); + + QContactDetail detail = aContact.preferredDetail(aAction); + if (!detail.isEmpty()) + { + //Set preferred detail for services + QContactPhoneNumber number = detail; + servicesContact.mDisplayName = aContact.displayLabel(); + servicesContact.mPhoneNumber = number.number(); + servicesContact.mEmailAddress = ""; + servicesContact.mContactId = aContact.localId(); + mServiceList.append(servicesContact); + } + else + { + // show popup for call numbers + CntActionPopup *actionPopup = new CntActionPopup(&aContact); + bool popup = actionPopup->showActionPopup(aAction); + if(popup) + { + //if call numbers are present wait for signals + mIndex++; + connect( actionPopup, SIGNAL(executeContactAction(QContact&,QContactDetail, QString)), this, + SLOT(popupContactAction(QContact&, QContactDetail, QString))); + connect( actionPopup, SIGNAL(actionPopupCancelPressed()), this, + SLOT(actionPopupCancelSlot())); + } + else + { + //else delete popup if no call number present + delete actionPopup; + } + } +} + +void CntServiceContactFetchView::serviceEmailAction(QContact& aContact) +{ + CntServicesContact servicesContact; + //get the email address + QList emailAddresses = aContact.details(); + + Q_ASSERT_X( emailAddresses.count() > 0, "serviceEmailAction", "email address count is zero"); + + QContactDetail detail = aContact.preferredDetail("email"); + if (!detail.isEmpty()) + { + //Set preferred detail for services + QContactEmailAddress email = detail; + servicesContact.mDisplayName = aContact.displayLabel(); + servicesContact.mPhoneNumber = ""; + servicesContact.mEmailAddress = email.emailAddress(); + servicesContact.mContactId = aContact.localId(); + mServiceList.append(servicesContact); + + } + else + { + // show popup for email id's + CntActionPopup *actionPopup = new CntActionPopup(&aContact); + bool popup = actionPopup->showActionPopup("email"); + if(popup) + { + //if email id's are present wait for signals + mIndex++; + connect( actionPopup, SIGNAL(executeContactAction(QContact&,QContactDetail, QString)), this, + SLOT(popupContactAction(QContact&, QContactDetail, QString))); + connect( actionPopup, SIGNAL(actionPopupCancelPressed()), this, + SLOT(actionPopupCancelSlot())); + } + else + { + //else delete popup if no email present + delete actionPopup; + } + } +} + +void CntServiceContactFetchView::serviceAllAction(QContact& aContact) +{ + CntServicesContact servicesContact; + servicesContact.mDisplayName = aContact.displayLabel(); + QContactDetail callDetail = aContact.preferredDetail("call"); + //Check for preferredDetail from call + // if not present check for preferredDetail for message + // if not present pick first phone number + if (!callDetail.isEmpty()) + { + QContactPhoneNumber number = callDetail; + servicesContact.mPhoneNumber = number.number(); + } + else + { + QContactDetail smsDetail = aContact.preferredDetail("message"); + if (!callDetail.isEmpty()) + { + QContactPhoneNumber number = smsDetail; + servicesContact.mPhoneNumber = number.number(); + } + else + { + QList phonenumbers = aContact.details(); + if(phonenumbers.count() > 0) + { + servicesContact.mPhoneNumber = phonenumbers.first().number(); + } + else + { + servicesContact.mPhoneNumber = ""; + } + } + } + + QContactDetail emailDetail = aContact.preferredDetail("email"); + if (!emailDetail.isEmpty()) + { + QContactEmailAddress email = emailDetail; + servicesContact.mEmailAddress = email.emailAddress(); + } + else + { + //get first email address + QList emailAddresses = aContact.details(); + if(emailAddresses.count() > 0) + { + servicesContact.mEmailAddress = emailAddresses.first().emailAddress(); + } + else + { + servicesContact.mEmailAddress = ""; + } + } + servicesContact.mContactId = aContact.localId(); + mServiceList.append(servicesContact); +} + +void CntServiceContactFetchView::aboutToOpenView(CntAbstractViewManager* aMgr, const CntViewParameters aArgs) +{ + mMgr = aMgr; + + // Set title of the view. + QString title = aArgs.value(KCntServiceViewParamTitle).toString(); + mView->setTitle(title); + + // 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; + actionFilter.setActionName("message"); + mListModel->setFilter(actionFilter); + } + else if (mAction == KCntActionCall) + { + QContactActionFilter actionFilter; + actionFilter.setActionName("call"); + mListModel->setFilter(actionFilter); + } + else if (mAction == KCntActionEmail) + { + QContactActionFilter actionFilter; + actionFilter.setActionName("email"); + mListModel->setFilter(actionFilter); + } + else + { + QContactDetailFilter filter; + filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType); + QString typeContact = QContactType::TypeContact; + filter.setValue(typeContact); + mListModel->setFilter(filter); + } + + // hide my card if it's not set + if ( mListModel->myCardId() == 0 ) + { + mListModel->showMyCard( false ); + } +} + +void CntServiceContactFetchView::popupContactAction(QContact& aContact,QContactDetail contactDetail, QString aAction) +{ + if (aAction.compare("call", Qt::CaseInsensitive) == 0 + || aAction.compare("message", Qt::CaseInsensitive) == 0 ) + { + CntServicesContact servicesContact; + QContactPhoneNumber number = static_cast(contactDetail); + QString name = aContact.displayLabel(); + servicesContact.mDisplayName = aContact.displayLabel(); + servicesContact.mPhoneNumber = number.number(); + servicesContact.mEmailAddress = ""; + servicesContact.mContactId = aContact.localId(); + mServiceList.append(servicesContact); + mIndex--; + } + else if (aAction.compare("email", Qt::CaseInsensitive) == 0 ) + { + CntServicesContact servicesContact; + QContactEmailAddress email = static_cast(contactDetail); + servicesContact.mDisplayName = aContact.displayLabel(); + servicesContact.mPhoneNumber = ""; + servicesContact.mEmailAddress = email.emailAddress(); + servicesContact.mContactId = aContact.localId(); + mServiceList.append(servicesContact); + mIndex--; + } + + if (aContact.preferredDetail(aAction).isEmpty() && (aAction == "call" || aAction == "message" || aAction == "email")) + { + aContact.setPreferredDetail(aAction, contactDetail); + //return value will be ignored because we cannot do anything if it fails. + mEngine->contactManager(SYMBIAN_BACKEND).saveContact(&aContact); + } + + showPreviousView(); +} + +void CntServiceContactFetchView::actionPopupCancelSlot() +{ + mIndex--; + showPreviousView(); +} + +void CntServiceContactFetchView::showPreviousView() +{ + if(mIndex==0) + { + QVariant variant; + variant.setValue(mServiceList); + mProvider.CompleteServiceAndCloseApp(variant); + + CntViewParameters args; + mMgr->back( args ); + } +} +// EOF