--- /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 <cntservicescontact.h>
+#include <cntlistmodel.h>
+#include "cntserviceviewparams.h"
+
+#include <hbmenu.h>
+#include <hbview.h>
+#include <hblistview.h>
+#include <hbdocumentloader.h>
+#include <hbaction.h>
+#include "cntactionpopup.h"
+
+#include <QCoreApplication>
+
+CntServiceContactFetchView::CntServiceContactFetchView( CntAbstractServiceProvider& aServiceProvider ):
+CntBaseSelectionView(),
+mProvider( aServiceProvider )
+ {
+ HbAction* cancel = static_cast<HbAction*>( 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<QContactPhoneNumber> phonenumbers = aContact.details<QContactPhoneNumber>();
+
+ 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<QContactEmailAddress> emailAddresses = aContact.details<QContactEmailAddress>();
+
+ 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<QContactPhoneNumber> phonenumbers = aContact.details<QContactPhoneNumber>();
+ 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<QContactEmailAddress> emailAddresses = aContact.details<QContactEmailAddress>();
+ 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<QContactPhoneNumber>(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<QContactEmailAddress>(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