--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/pbkcommonui/src/cntimportsview.cpp Tue Aug 31 15:05:21 2010 +0300
@@ -0,0 +1,827 @@
+/*
+* 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 "cntimportsview.h"
+#include "cntglobal.h"
+
+#include <hbpushbutton.h>
+#include <hbaction.h>
+#include <hbview.h>
+#include <hbmenu.h>
+#include <hbframebackground.h>
+#include <QStandardItemModel>
+#include <hbmainwindow.h>
+#include <hblabel.h>
+#include <hblistview.h>
+#include <QTimer>
+#include <hbnotificationdialog.h>
+#include <hbmessagebox.h>
+#include <hbprogressbar.h>
+#include <QGraphicsLinearLayout>
+#include <hbframebackground.h>
+#include <hbabstractviewitem.h>
+#include <hbextendedlocale.h>
+#include <hbparameterlengthlimiter.h>
+#include <hblistviewitem.h>
+#include <hbstringutil.h>
+#include <QCoreApplication>
+#include <hbdevicenotificationdialog.h>
+
+const char *CNT_IMPORT_UI_XML = ":/xml/contacts_sim.docml";
+const int KTimerValue = 1; // used as 1 msec timer for saving ADN contacts from SIM
+
+CntImportsView::CntImportsView() : mContactSimManagerADN(0),
+ mContactSimManagerSDN(0),
+ mFetchRequestADN(0),
+ mFetchRequestSDN(0),
+ mListView(0),
+ mModel(0),
+ mAdnSimUtility(0),
+ mSdnSimUtility(0),
+ mAdnEntriesPresent(0),
+ mImportSimPopup(0),
+ mSaveCount(0),
+ mFetchIsDone(0),
+ mTimerId(0),
+ mAdnStorePresent(0),
+ mSdnStorePresent(0),
+ mSimPresent(0),
+ mAdnStoreEntries(0),
+ mSdnStoreEntries(0),
+ mSimError(0),
+ mWaitingForAdnCache(0),
+ mImportInProgress(false)
+{
+ bool ok = false;
+ mDocumentLoader.load(CNT_IMPORT_UI_XML, &ok);
+
+ if (ok)
+ {
+ mView = static_cast<HbView*>(mDocumentLoader.findWidget(QString("view")));
+ }
+ else
+ {
+ qFatal("Unable to read :/xml/contacts_sim.docml");
+ }
+
+ //back button
+ mSoftkey = new HbAction(Hb::BackNaviAction, mView);
+ connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
+
+}
+
+void CntImportsView::deactivate()
+{
+}
+
+
+CntImportsView::~CntImportsView()
+{
+ mView->deleteLater();
+ delete mFetchRequestADN;
+ delete mFetchRequestSDN;
+ delete mModel;
+ delete mAdnSimUtility;
+ delete mSdnSimUtility;
+}
+
+/*!
+Activates a previous view
+*/
+void CntImportsView::showPreviousView()
+{
+ CntViewParameters args;
+ mViewManager->back(args);
+}
+
+/*
+Activates a default view
+*/
+void CntImportsView::activate(const CntViewParameters aArgs)
+{
+ Q_UNUSED(aArgs);
+ //back button
+
+ if (mView->navigationAction() != mSoftkey)
+ {
+ mView->setNavigationAction(mSoftkey);
+ }
+
+ mViewManager = &mEngine->viewManager();
+ mContactSymbianManager = &mEngine->contactManager(SYMBIAN_BACKEND);
+
+ // Sim Utility info fetch
+ int getSimInfoError(0);
+ int storesError(0);
+ int getSdnSimInfoError(0);
+
+
+ //ADN store
+ int error = -1;
+ mAdnSimUtility = new CntSimUtility(CntSimUtility::AdnStore, error);
+
+ if (error != 0)
+ {
+ delete mAdnSimUtility;
+ mAdnSimUtility = 0;
+ mSimError = true;
+ }
+ else
+ {
+ // check what stores are there
+ CntSimUtility::AvailableStores stores = mAdnSimUtility->getAvailableStores(storesError);
+ if(!storesError)
+ {
+ mSimPresent = stores.SimPresent;
+ mAdnStorePresent = stores.AdnStorePresent;
+ mSdnStorePresent = stores.SdnStorePresent;
+ }
+
+ //check there are ADN contacts
+ if (mAdnStorePresent)
+ {
+ CntSimUtility::SimInfo simInfo = mAdnSimUtility->getSimInfo(getSimInfoError);
+ if (!getSimInfoError)
+ {
+ // sim entries are present
+ mAdnStoreEntries = simInfo.usedEntries;
+ if (mAdnStoreEntries > 0)
+ {
+ mAdnEntriesPresent = true;
+ }
+ }
+ else
+ {
+ if (getSimInfoError == KErrNotReady)
+ {
+ //ADN store is not accessible, e.g. because of active FDN
+ //Or ADN cache is not ready yet, so wait for this
+ mAdnStorePresent = true;
+ mAdnEntriesPresent = true;
+ mWaitingForAdnCache = true;
+ connect(mAdnSimUtility, SIGNAL(adnCacheStatusReady(CntSimUtility::CacheStatus&, int)), this, SLOT(adnCacheStatusReady(CntSimUtility::CacheStatus&, int)));
+ if (!mAdnSimUtility->notifyAdnCacheStatus()) {
+ mAdnStorePresent = false;
+ mAdnEntriesPresent = false;
+ mWaitingForAdnCache = false;
+ }
+ }
+ else
+ {
+ simInfoErrorMessage(getSimInfoError);
+ }
+ }
+ }
+ }
+
+ //SDN store
+ if (mSdnStorePresent && !mWaitingForAdnCache)
+ {
+ int sdnError = -1;
+ mSdnStorePresent = false;
+ if (!mSdnSimUtility)
+ {
+ mSdnSimUtility = new CntSimUtility(CntSimUtility::SdnStore, sdnError);
+ if (sdnError != 0)
+ {
+ delete mSdnSimUtility;
+ mSdnSimUtility = 0;
+ }
+ }
+ if (mSdnSimUtility)
+ {
+ //get number of SDN contacts
+ CntSimUtility::SimInfo sdnSimInfo = mSdnSimUtility->getSimInfo(getSdnSimInfoError);
+ if (!getSdnSimInfoError)
+ {
+ // sim entries are present
+ mSdnStoreEntries = sdnSimInfo.usedEntries;
+ if (mSdnStoreEntries > 0) {
+ mSdnStorePresent = true;
+ }
+ }
+ }
+ }
+ // end SDN store
+
+ mListView = static_cast<HbListView*>(mDocumentLoader.findWidget(QString("listView")));
+
+ HbFrameBackground frame;
+ frame.setFrameGraphicsName("qtg_fr_list_normal");
+ frame.setFrameType(HbFrameDrawer::NinePieces);
+ mListView->itemPrototypes().first()->setDefaultFrame(frame);
+ mListView->listItemPrototype()->setStretchingStyle(HbListViewItem::StretchLandscape);
+ mListView->setUniformItemSizes(true);
+
+ connect(mListView, SIGNAL(activated (const QModelIndex&)),
+ this, SLOT(onListViewActivated(const QModelIndex&)));
+
+ mModel = new QStandardItemModel();
+
+ QStandardItem *importSimItem = new QStandardItem();
+ QStringList simList;
+
+ QString simImport(hbTrId("txt_phob_dblist_import_from_sim"));
+ QString simNoContacts(hbTrId("txt_phob_dblist_import_from_1_val_no_sim_contacts"));
+ QString simNoCard(hbTrId("txt_phob_dblist_import_from_ovi_val_no_sim_card"));
+
+ // check if SIM card is there
+ if (mSimError)
+ {
+ simList << simImport;
+ importSimItem->setEnabled(false);
+ }
+ else if (!(mAdnStorePresent || mSdnStorePresent))
+ {
+ // Both stores are not present
+ // disable the QStandardItem
+ if (!mSimPresent)
+ {
+ simList << simImport << simNoCard;
+ }
+ else
+ {
+ simList << simImport << simNoContacts;
+ }
+ importSimItem->setEnabled(false);
+ }
+ else if (!(mAdnEntriesPresent || mSdnStorePresent))
+ {
+ // Sim card is present
+ // No ADN entries are there
+ // no SDN entries are there
+ simList << simImport << simNoContacts;
+ importSimItem->setEnabled(false);
+ }
+ else
+ {
+ // SIM card is present
+ //ADN entries or SDN entries are there
+ simList << simImport;
+ int error = 0;
+ QDateTime date = mAdnSimUtility->getLastImportTime(error);
+ if (error == 0) {
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ QString dateStr = locale.format(date.date(), r_qtn_date_usual);
+ QString dateStrLocaleDigits = HbStringUtil::convertDigits(dateStr);
+ QString dateStrFull =
+ HbParameterLengthLimiter(hbTrId("txt_phob_dblist_import_from_1_val_updated_1")).arg(dateStrLocaleDigits);
+ simList << dateStrFull;
+ }
+ }
+ importSimItem->setData(simList, Qt::DisplayRole);
+ 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()));
+}
+
+void CntImportsView::simInfoErrorMessage(int infoError)
+{
+ Q_UNUSED(infoError);
+ QString errorMessage;
+ errorMessage.append(hbTrId("txt_phob_info_sim_card_error"));
+ HbNotificationDialog::launchDialog(errorMessage);
+ mSimError = true;
+}
+
+void CntImportsView::onListViewActivated(const QModelIndex &index)
+{
+ int row = index.row();
+ if ( row == 0 ) // row 0 has "Imports from SIM"
+ {
+ if (!startSimImport())
+ {
+ //show error note
+ simInfoErrorMessage(KErrAccessDenied);
+ }
+ else
+ {
+ //start popup and progress
+ showWaitNote();
+ }
+ }
+}
+
+
+bool CntImportsView::startSimImport()
+{
+
+ bool started = false;
+ mImportInProgress = true;
+
+ delete mFetchRequestADN;
+ mContactSimManagerADN = &mEngine->contactManager(SIM_BACKEND_ADN);
+ mFetchRequestADN = new QContactFetchRequest;
+ mFetchRequestADN->setManager(mContactSimManagerADN);
+
+ delete mFetchRequestSDN;
+ mContactSimManagerSDN = &mEngine->contactManager(SIM_BACKEND_SDN);
+ mFetchRequestSDN = new QContactFetchRequest;
+ mFetchRequestSDN->setManager(mContactSimManagerSDN);
+
+ if (mWaitingForAdnCache)
+ {
+ //show progress dialog and wait when ADN cache is ready
+ started = true;
+ }
+ else
+ {
+ if(mAdnStorePresent)
+ {
+ connect(mFetchRequestADN, SIGNAL(resultsAvailable()), this, SLOT(importFetchResultReceivedADN()));
+ }
+
+ if(mSdnStorePresent)
+ {
+ connect(mFetchRequestSDN, SIGNAL(resultsAvailable()), this, SLOT(importFetchResultReceivedSDN()));
+ }
+
+ if(mAdnEntriesPresent > 0 && mContactSimManagerADN->error() == QContactManager::NoError)
+ {
+ // ADN contacts are there, start fetch
+ mFetchRequestADN->start();
+ started = true;
+ }
+ else if (mSdnStorePresent && mContactSimManagerSDN->error() == QContactManager::NoError)
+ {
+ //start fetch of SDN contacts since ADN contacts are not there
+ mFetchRequestSDN->start();
+ started = true;
+ }
+ }
+ return started;
+}
+
+void CntImportsView::stopSimImport()
+{
+ mImportSimPopup->close();
+ mImportInProgress = false;
+ if (mFetchIsDone)
+ {
+ // indicates that timer has been started
+ killTimer(mTimerId);
+ }
+ mSaveSimContactsList.clear();
+ mSaveSimContactsListSDN.clear();
+
+ showSimImportResults();
+
+ if (mFetchRequestADN != NULL)
+ {
+ mFetchRequestADN->cancel();
+ }
+ if (mFetchRequestSDN != NULL)
+ {
+ mFetchRequestSDN->cancel();
+ }
+
+ // save import time
+ int error = 0;
+ mAdnSimUtility->setLastImportTime(error);
+
+ //update sim import row with last import time
+ if (error == 0) {
+ QList<QStandardItem*> importSimItems = mModel->takeRow(0);
+ QStandardItem* importSimItem = 0;
+ if (importSimItems.count() > 0) {
+ importSimItem = importSimItems.at(0);
+ }
+
+ if (importSimItem != 0) {
+ QDateTime date = mAdnSimUtility->getLastImportTime(error);
+ if (error == 0) {
+ QStringList simList;
+ QString simImport(hbTrId("txt_phob_dblist_import_from_sim"));
+ simList << simImport;
+
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ QString dateStr = locale.format(date.date(), r_qtn_date_usual);
+ QString dateStrLocaleDigits = HbStringUtil::convertDigits(dateStr);
+ QString dateStrFull =
+ HbParameterLengthLimiter(hbTrId("txt_phob_dblist_import_from_1_val_updated_1")).arg(dateStrLocaleDigits);
+ simList << dateStrFull;
+
+ importSimItem->setData(simList, Qt::DisplayRole);
+ importSimItem->setData(HbIcon("qtg_large_sim"), Qt::DecorationRole);
+ }
+ mModel->insertRow(0, importSimItem);
+ mListView->reset();
+ }
+ }
+
+}
+
+void CntImportsView::importFetchResultReceivedADN()
+{
+ //save import time
+ int error = 0;
+ mAdnSimUtility->setLastImportTime(error);
+
+ QList<QContact> simContactsList = mFetchRequestADN->contacts();
+ if (simContactsList.isEmpty())
+ {
+ // No sim contacts, jump to fetching SDN contacts
+ fetchSDNContacts();
+ }
+ else
+ {
+ // save ADN contacts
+
+ int count = simContactsList.count();
+ foreach(QContact contact, simContactsList)
+ {
+ if (contact.localId() > 0)
+ {
+ //delete local id before saving to different storage
+ QScopedPointer<QContactId> contactId(new QContactId());
+ contactId->setLocalId(0);
+ contactId->setManagerUri(QString());
+ contact.setId(*contactId);
+
+ // custom label contains name information, save it to the first name
+ QList<QContactDetail> names = contact.details(QContactName::DefinitionName);
+ if (names.count() > 0)
+ {
+ QContactName name = static_cast<QContactName>(names.at(0));
+ name.setFirstName(name.customLabel());
+ name.setCustomLabel(QString());
+ contact.saveDetail(&name);
+ }
+
+ //update phone numbers to contain default subtype
+ QList<QContactDetail> numbers = contact.details(QContactPhoneNumber::DefinitionName);
+ for (int i = 0; i < numbers.count(); i++)
+ {
+ QContactPhoneNumber number = static_cast<QContactPhoneNumber>(numbers.at(i));
+ number.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+ contact.saveDetail(&number);
+ }
+
+ //remove sync target details, it's read-only.
+ QList<QContactDetail> syncTargets = contact.details(QContactSyncTarget::DefinitionName);
+ for (int j = 0; j < syncTargets.count(); j++)
+ {
+ QContactSyncTarget syncTarget = static_cast<QContactSyncTarget>(syncTargets.at(j));
+ contact.removeDetail(&syncTarget);
+ }
+
+ contact.setType(QContactType::TypeContact);
+ setPreferredDetails(&contact);
+ mSaveSimContactsList.append(contact);
+
+ }
+ }
+ // save the list synchronously because async cancelling of save request is
+ // not supported in symbian backend at the time of this implementation
+
+ if (!(mSaveSimContactsList.isEmpty()))
+ {
+ // indicates that there is one or more sim contact that has been fetched
+ // create a timer and start saving synchronously one by one
+ // when cancel is pressed, kill the timer
+
+ mTimerId = startTimer(KTimerValue); // starting a 1 msec timer
+ mFetchIsDone = true;
+ mSaveCount = 0;
+ }
+ }
+}
+
+void CntImportsView::timerEvent(QTimerEvent *event)
+{
+ Q_UNUSED(event);
+ if (!(mSaveCount >= mSaveSimContactsList.count())) // while mSaveCount is less than or equal to mSaveSimContactsList.count()
+ {
+ QContact unSavedContact = mSaveSimContactsList.at(mSaveCount);
+ mContactSymbianManager->saveContact(&unSavedContact);
+ mSaveCount++;
+ //use another counter to check number of actual saved if saveContact() fails
+ }
+ else
+ {
+ // saving complete
+ killTimer(mTimerId);
+ mSaveSimContactsList.clear();
+
+ // ADN contacts fetching and saving is done
+ // Now start SDN fetching and save
+ fetchSDNContacts();
+ }
+}
+
+void CntImportsView::showWaitNote()
+{
+ mImportSimPopup = new HbDialog();
+ mImportSimPopup->setDismissPolicy(HbPopup::NoDismiss);
+ mImportSimPopup->setTimeout(HbPopup::NoTimeout);
+ mImportSimPopup->setBackgroundFaded(true);
+ mImportSimPopup->setAttribute(Qt::WA_DeleteOnClose, true);
+
+ HbLabel *headingLabel = new HbLabel(mImportSimPopup);
+ headingLabel->setPlainText(hbTrId("txt_phob_title_import_contacts"));
+ mImportSimPopup->setHeadingWidget(headingLabel);
+
+ QGraphicsLinearLayout *containerLayout = new QGraphicsLinearLayout(Qt::Vertical);
+ containerLayout->setContentsMargins(0, 0, 0, 0);
+ containerLayout->setSpacing(10);
+
+ HbLabel *icon = new HbLabel(mImportSimPopup);
+ icon->setIcon(HbIcon("qtg_large_sim"));
+
+ HbLabel *simText= new HbLabel(mImportSimPopup);
+ simText->setPlainText(hbTrId("txt_phob_info_importing_contacts_from_sim"));
+ simText->setTextWrapping(Hb::TextWordWrap);
+ simText->setElideMode(Qt::ElideNone);
+
+ HbProgressBar *progressBar = new HbProgressBar(mImportSimPopup);
+ progressBar->setRange(0,0);
+
+ HbPushButton *stopButton = new HbPushButton(mImportSimPopup);
+ stopButton->setText(hbTrId("txt_phob_button_cancel"));
+ connect(stopButton, SIGNAL(clicked()), this, SLOT(stopSimImport()));
+
+ QGraphicsLinearLayout *containerLayout1 = new QGraphicsLinearLayout(Qt::Horizontal);
+ containerLayout1->addItem(icon);
+ containerLayout1->addItem(simText);
+
+ QGraphicsWidget *containerWidget = new QGraphicsWidget;
+ containerLayout->addItem(containerLayout1);
+ containerLayout->addItem(progressBar);
+ containerLayout->addItem(stopButton);
+ containerWidget->setLayout(containerLayout);
+ mImportSimPopup->setContentWidget(containerWidget);
+ mSaveCount = 0;
+ mImportSimPopup->open();
+}
+
+void CntImportsView::showSimImportResults() const
+{
+ QString results = hbTrId("txt_phob_dpophead_ln_contacts_imported").arg(mSaveCount).arg(mAdnStoreEntries + mSdnStoreEntries);
+ HbNotificationDialog::launchDialog(results);
+}
+
+void CntImportsView::fetchSDNContacts()
+{
+ if (mSdnStorePresent && mContactSimManagerSDN->error() == QContactManager::NoError)
+ {
+ mFetchRequestSDN->start();
+ }
+ else
+ {
+ // no SDN contacts to fetch
+ showSimImportResults();
+ mImportSimPopup->close();
+ mImportInProgress = false;
+ // Importing finished, go back to NamesView
+ showPreviousView();
+ }
+}
+
+void CntImportsView::importFetchResultReceivedSDN()
+{
+ //save import time
+ int error = 0;
+ mAdnSimUtility->setLastImportTime(error);
+
+ QList<QContact> simContactsListSDN = mFetchRequestSDN->contacts();
+ if (simContactsListSDN.isEmpty())
+ {
+ //No sdn contacts present
+ showSimImportResults();
+ mSaveSimContactsListSDN.clear();
+ mImportSimPopup->close();
+ mImportInProgress = false;
+ // Importing finished, go back to NamesView
+ showPreviousView();
+ }
+ else
+ {
+ // SAVE SDN CONTACTS
+ int count = simContactsListSDN.count();
+ foreach(QContact contact, simContactsListSDN)
+ {
+ if (contact.localId() > 0)
+ {
+ //delete local id before saving to different storage
+ QScopedPointer<QContactId> contactId(new QContactId());
+ contactId->setLocalId(0);
+ contactId->setManagerUri(QString());
+ contact.setId(*contactId);
+
+ //custom label contains name information, save it to the first name
+ QList<QContactDetail> names = contact.details(QContactName::DefinitionName);
+ if (names.count() > 0)
+ {
+ QContactName name = static_cast<QContactName>(names.at(0));
+ name.setFirstName(name.customLabel());
+ name.setCustomLabel(QString());
+ contact.saveDetail(&name);
+ }
+
+ //update phone numbers to contain default subtype
+ QList<QContactDetail> numbers = contact.details(QContactPhoneNumber::DefinitionName);
+ for (int i = 0; i < numbers.count(); i++)
+ {
+ QContactPhoneNumber number = static_cast<QContactPhoneNumber>(numbers.at(i));
+ number.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+ contact.saveDetail(&number);
+ }
+
+ //remove sync target details, it's read-only.
+ QList<QContactDetail> syncTargets = contact.details(QContactSyncTarget::DefinitionName);
+ for (int j = 0; j < syncTargets.count(); j++)
+ {
+ QContactSyncTarget syncTarget = static_cast<QContactSyncTarget>(syncTargets.at(j));
+ contact.removeDetail(&syncTarget);
+ }
+
+ contact.setType(QContactType::TypeContact);
+ setPreferredDetails(&contact);
+ mSaveSimContactsListSDN.append(contact);
+
+ }
+ }
+ // save the list synchronously because async cancelling of save request is
+ // not supported in symbian backend at the time of this implementation
+
+ if (!(mSaveSimContactsListSDN.isEmpty()))
+ {
+ // indicates that there is one or more SDN sim contact that has been fetched
+ QMap<int, QContactManager::Error> errorMap;
+ mContactSymbianManager->saveContacts(&mSaveSimContactsListSDN,&errorMap);
+ // check number of contacts really saved
+ mSaveCount = mSaveCount + mSaveSimContactsListSDN.count();
+ }
+
+ // no more SDN contacts to fetch
+ showSimImportResults();
+ mSaveSimContactsListSDN.clear();
+ mImportSimPopup->close();
+ mImportInProgress = false;
+ // Importing finished, go back to NamesView
+ showPreviousView();
+ }
+}
+
+void CntImportsView::adnCacheStatusReady(CntSimUtility::CacheStatus& cacheStatus, int error)
+{
+ mWaitingForAdnCache = false;
+ //update ADN store info...
+ if (error != 0 || cacheStatus == CntSimUtility::ECacheFailed)
+ {
+ mAdnStorePresent = false;
+ mAdnEntriesPresent = false;
+ mSdnStorePresent = false;
+ }
+ else
+ {
+ //check if there are ADN contacts
+ mAdnStorePresent = true;
+ mAdnEntriesPresent = false;
+ int getSimInfoError = -1;
+ CntSimUtility::SimInfo simInfo = mAdnSimUtility->getSimInfo(getSimInfoError);
+ if (!getSimInfoError)
+ {
+ // sim entries are present
+ mAdnStoreEntries = simInfo.usedEntries;
+ if (mAdnStoreEntries > 0)
+ {
+ mAdnEntriesPresent = true;
+ }
+ }
+
+ //get number of SDN contacts
+ int sdnError = -1;
+ mSdnStorePresent = false;
+ if (!mSdnSimUtility)
+ {
+ mSdnSimUtility = new CntSimUtility(CntSimUtility::SdnStore, sdnError);
+ if (sdnError != 0)
+ {
+ delete mSdnSimUtility;
+ mSdnSimUtility = 0;
+ }
+ }
+ if (mSdnSimUtility)
+ {
+ int getSdnSimInfoError = 0;
+ CntSimUtility::SimInfo sdnSimInfo = mSdnSimUtility->getSimInfo(getSdnSimInfoError);
+ if (!getSdnSimInfoError)
+ {
+ mSdnStoreEntries = sdnSimInfo.usedEntries;
+ if (mSdnStoreEntries > 0)
+ {
+ mSdnStorePresent = true;
+ }
+ }
+ }
+ }
+
+ //dismiss progress dialog, if there are no SIM contacts
+ if(mImportSimPopup != NULL && mImportSimPopup->isActive() &&
+ !mAdnEntriesPresent && !mSdnStorePresent)
+ {
+ mImportSimPopup->close();
+ showSimImportResults();
+ }
+
+ //disable sim import item, if there are no SIM contacts
+ if(!mAdnEntriesPresent && !mSdnStorePresent && mModel)
+ {
+ QList<QStandardItem*> importSimItems = mModel->takeRow(0);
+ QStandardItem* importSimItem = 0;
+ if (importSimItems.count() > 0)
+ {
+ importSimItem = importSimItems.at(0);
+ }
+
+ if (importSimItem != 0)
+ {
+ QStringList simList;
+ QString simImport(hbTrId("txt_phob_dblist_import_from_sim"));
+ simList << simImport;
+ QString simNoContacts(hbTrId("txt_phob_dblist_import_from_1_val_no_sim_contacts"));
+ simList << simNoContacts;
+
+ importSimItem->setData(simList, Qt::DisplayRole);
+ importSimItem->setData(HbIcon("qtg_large_sim"), Qt::DecorationRole);
+ importSimItem->setEnabled(false);
+ mModel->insertRow(0, importSimItem);
+ mListView->reset();
+ }
+ }
+
+ //start SIM contacts import, if user tapped "SIM import"
+ if(mImportSimPopup != NULL && mImportSimPopup->isActive())
+ {
+ if (!startSimImport())
+ {
+ //dismiss wait note
+ mImportSimPopup->close();
+ mImportInProgress = false;
+ //and show error note
+ simInfoErrorMessage(KErrAccessDenied);
+ }
+ }
+}
+
+void CntImportsView::setPreferredDetails( QContact *aContact )
+{
+ QList<QContactPhoneNumber> numberList( aContact->details<QContactPhoneNumber>() );
+ //set preferred number for call if there is only one phone number
+ if ( aContact->preferredDetail("call").isEmpty() && numberList.count() == 1 )
+ {
+ aContact->setPreferredDetail( "call", numberList.first() );
+ }
+ //set preferred number for message if there is only one mobile phone number
+ if ( aContact->preferredDetail("message").isEmpty() && numberList.count() == 1 )
+ {
+ aContact->setPreferredDetail( "message", numberList.first() );
+ }
+ //set preferred number for message if there is only one email address
+ QList<QContactEmailAddress> emailList( aContact->details<QContactEmailAddress>() );
+ if ( aContact->preferredDetail("email").isEmpty() && emailList.count() == 1 )
+ {
+ aContact->setPreferredDetail( "email", emailList.first() );
+ }
+}
+
+void CntImportsView::endKeyPressed()
+{
+ if(mImportInProgress && !mSimError)
+ {
+ QString results = hbTrId("txt_phob_dpophead_ln_contacts_imported").arg(mSaveCount).arg(mAdnStoreEntries + mSdnStoreEntries);
+ HbDeviceNotificationDialog::notification(QString(),results);
+ }
+}
+
+
+// EOF