diff -r 63339781d179 -r 09b1ac925e3f cpsecplugins/cpadvancedsecplugin/src/cpcertview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpcertview.cpp Tue Aug 31 16:04:40 2010 +0300 @@ -0,0 +1,922 @@ +/* +* Copyright (c) 2010 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 +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include <../../inc/cpsecplugins.h> +#include "cpcertdetailview.h" +#include "cpcertview.h" +#include "cpcertdatacontainer.h" +#include "cpcerttrustview.h" +#include "cpcertmanuisyncwrapper.h" + + +CpCertView::CpCertView(const QModelIndex& modelIndex, QGraphicsItem *parent /*= 0*/) + : CpBaseSettingView(0,parent), + mPopup(NULL), + mPrevView(NULL), + mCurrentView(NULL), + mRefreshedView(NULL), + mListView(NULL), + mSelectAllView(NULL), + mOriginalView(NULL), + mNote(NULL) + { + RDEBUG("0", 0); + mOriginalView = mainWindow()->currentView(); + + HbMenu* menu = this->menu(); + std::auto_ptr deleteAction(new HbAction(hbTrId("txt_common_menu_delete"))); + connect(deleteAction.get(), SIGNAL(triggered()), this, SLOT(deleteList())); + menu->addAction(deleteAction.get()); + deleteAction.release(); + + std::auto_ptr layout(new QGraphicsLinearLayout(Qt::Vertical)); + + HbDataForm *form = q_check_ptr(new HbDataForm(this)); + std::auto_ptr formModel(q_check_ptr(new HbDataFormModel())); + form->setModel(formModel.get()); + formModel.release(); + + HbListWidget* certificateList = q_check_ptr(new HbListWidget(this)); + + CpCertView::TCertificateViews currentView = (CpCertView::TCertificateViews)modelIndex.row(); + QString title; + if(currentView == EPersonalView) + { + title = "Move to Device"; + } + else if(currentView == EDeviceView) + { + title = "Move to Personal"; + } + RDEBUG("0", 0); + if(currentView == EPersonalView || currentView == EDeviceView) + { + std::auto_ptr moveToDeviceAction(q_check_ptr(new HbAction(title))); + connect(moveToDeviceAction.get(), SIGNAL(triggered()), this, SLOT(moveCert())); + menu->addAction(moveToDeviceAction.get()); + moveToDeviceAction.release(); + } + + setDetails(currentView); + TInt count = 0; + try + { + QT_TRAP_THROWING(mCertDataContainer = CpCertDataContainer::NewL()); + QT_TRAP_THROWING(count = refreshListL()); + } + catch(const std::exception& exception) + { + HbMessageBox::information(exception.what()); + throw(exception); + } + RDEBUG("0", 0); + for(int index = 0; index< count; index++) + { + QString certificateLabel = certLabel(index); + std::auto_ptr singleCert(q_check_ptr(new HbListWidgetItem())); + singleCert->setText(certificateLabel); + certificateList->addItem(singleCert.get()); + singleCert.release(); + } // End of FOR loop + + connect(certificateList, SIGNAL(activated(QModelIndex)), this, SLOT(openCertFromList(QModelIndex))); + connect(certificateList, SIGNAL(longPressed(HbAbstractViewItem*, QPointF )), this, SLOT(indicateLongPress(HbAbstractViewItem*, QPointF))); + + layout->addItem(certificateList); + setLayout(layout.get()); + layout.release(); + + mPopup = q_check_ptr(new HbDialog()); + mContextMenu = q_check_ptr(new HbMenu()); + + RDEBUG("0", 0); + } + +CpCertView::~CpCertView() + { + delete mCertDataContainer; + mCertDataContainer = NULL; + RDEBUG("0", 0); + if(mPrevView) + { + mPrevView->deleteLater(); + mPrevView= NULL; + } + if(mCurrentView) + { + mCurrentView->deleteLater(); + mCurrentView= NULL; + } + if(mRefreshedView) + { + mRefreshedView->deleteLater(); + mRefreshedView= NULL; + } + if(mListView) + { + mListView->deleteLater(); + mListView= NULL; + } + + if(mSelectAllView) + { + mSelectAllView->deleteLater(); + mSelectAllView = NULL; + } + + mSelectionIndex.Close(); + + mIndexList.Close(); + + delete mPopup; + + delete mNote; + mNote = NULL; + + delete mContextMenu; + + } + +void CpCertView::setDetails(CpCertView::TCertificateViews currentView) + { + RDEBUG("0", 0); + switch(currentView) + { + case EAuthorityView: + setTitle(hbTrId("txt_certificate_manager_list_authority_certificate")); + mCertView = EAuthorityView; + break; + + case ETrustedView: + setTitle(hbTrId("txt_certificate_manager_list_trusted_site_certific")); + mCertView = ETrustedView; + break; + + case EPersonalView: + setTitle(hbTrId("txt_certificate_manager_list_personal_certificates")); + mCertView = EPersonalView; + break; + + case EDeviceView: + setTitle(hbTrId("txt_certificate_manager_list_device_certificates")); + mCertView = EDeviceView; + break; + } + } + +void CpCertView::indicateLongPress(HbAbstractViewItem *item,QPointF coords) + { + RDEBUG("0", 0); + mPos = item->modelIndex().row(); // Pos will tell you what is the certificate clicked in particular view. + + mContextMenu->clearActions(); + std::auto_ptr open(q_check_ptr(new HbAction(hbTrId("txt_common_menu_open")))); + connect(open.get(), SIGNAL(triggered()), this, SLOT( openCertificate())); + mContextMenu->addAction(open.get()); + open.release(); + + QString moveTitle; + + if(mCertView == EAuthorityView) + { + std::auto_ptr trustSettings(q_check_ptr(new HbAction(hbTrId("txt_certificate_manager_menu_trust_settings")))); + connect(trustSettings.get(), SIGNAL(triggered()), this, SLOT(showTrustSettings())); + mContextMenu->addAction(trustSettings.get()); + trustSettings.release(); + } + else if(mCertView == EPersonalView) + { + moveTitle = hbTrId("txt_certificate_manager_menu_move_to_device_certif"); + } + else if(mCertView == EDeviceView) + { + moveTitle = hbTrId("txt_certificate_manager_menu_move_to_personal_cert"); + } + + if(mCertView == EPersonalView || mCertView == EDeviceView ) + { + std::auto_ptr moveCert(q_check_ptr(new HbAction(moveTitle))); + connect(moveCert.get(), SIGNAL(triggered()), this, SLOT(moveSelectedCert())); + mContextMenu->addAction(moveCert.get()); + moveCert.release(); + } + + RDEBUG("0", 0); + if( certAt(mPos)->IsDeletable() ) + { + std::auto_ptr menuDelete(q_check_ptr(new HbAction(hbTrId("txt_common_menu_delete")))); + connect(menuDelete.get(), SIGNAL(triggered()), this, SLOT(deleteCertificate())); + mContextMenu->addAction(menuDelete.get()); + menuDelete.release(); + } + mContextMenu->setPreferredPos(coords); + mContextMenu->open(); + } + +void CpCertView::openCertFromList(const QModelIndex& modelIndex) + { + RDEBUG("0", 0); + // Pos will tell you what is the certificate clicked in particular view. + mPos = modelIndex.row(); + openCertificate(); + } + +void CpCertView::openCertificate() + { + RDEBUG("0", 0); + mCurrentView = q_check_ptr(new CpCertDetailView(mCertView,mPos,*mCertDataContainer)); + connect(mCurrentView, SIGNAL(aboutToClose()), this, SLOT(displayPreviousView())); + mPrevView = mainWindow()->currentView(); + mainWindow()->addView(mCurrentView); + mainWindow()->setCurrentView(mCurrentView); + } + +void CpCertView::displayPreviousView() + { + RDEBUG("0", 0); + mainWindow()->removeView(mCurrentView); + mCurrentView->deleteLater(); + mCurrentView= NULL; + mainWindow()->setCurrentView(mPrevView); + } + +void CpCertView::deleteCertificate() + { + RDEBUG("0", 0); + RArray pos; + pos.Append(mPos); + QT_TRAP_THROWING(deleteCertsL(pos)); + } + +void CpCertView::deleteList() + { + RDEBUG("0", 0); + mSelectAll = EFalse; + mPopup->setDismissPolicy(HbDialog::NoDismiss); + // Set the label as heading widget + mPopup->setHeadingWidget(q_check_ptr(new HbLabel(hbTrId("txt_certificate_manager_setlabel_certificates")))); + + std::auto_ptr layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical))); + + mSelectAllView = q_check_ptr(new HbListView(this)); + QStandardItemModel* selectAllModel = q_check_ptr(new QStandardItemModel(this)); + // Populate the model with content + std::auto_ptr selectAllItem(q_check_ptr(new QStandardItem())); + selectAllItem->setData(QString("Select All"),Qt::DisplayRole); + selectAllModel->appendRow(selectAllItem.get()); + selectAllItem.release(); + + connect(mSelectAllView, SIGNAL(activated(QModelIndex)), this, SLOT(selectAll())); + mSelectAllView->setModel(selectAllModel); + mSelectAllView->setSelectionMode(HbListView::MultiSelection); + layout->addItem(mSelectAllView); + + mListView = q_check_ptr(new HbListView(this)); + // Connect to "activated" signal + connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemActivated(QModelIndex))); + + // Create a model + QStandardItemModel* model = q_check_ptr(new QStandardItemModel(this)); + TInt count=0; + QT_TRAP_THROWING( count = refreshListL()); + RDEBUG("0", 0); + for(TInt index = 0; index < count ; ++index) + { + const CCTCertInfo* cert = certAt(index); + if( cert->IsDeletable() ) + { + // Populate the model with content + std::auto_ptr certItem(q_check_ptr(new QStandardItem())); + QString certificateLabel = certLabel(index); + certItem->setData( certificateLabel, Qt::DisplayRole); + model->appendRow(certItem.get()); + mSelectionIndex.Append(index); + certItem.release(); + } + } + // Set the model to the list view + mListView->setModel(model); + mListView->setSelectionMode(HbListView::MultiSelection); + layout->addItem(mListView); + + std::auto_ptr widget( q_check_ptr(new HbWidget())); + widget->setLayout(layout.get()); + layout.release(); + mPopup->setContentWidget(widget.get()); + widget.release(); + + mPopup->setPrimaryAction(q_check_ptr(new HbAction(hbTrId("txt_common_opt_delete")))); + mPopup->setSecondaryAction(q_check_ptr(new HbAction(hbTrId("txt_common_button_cancel")))); + mPopup->setTimeout(HbPopup::NoTimeout); + RDEBUG("0", 0); + // Launch popup syncronously + mPopup->open(this, SLOT(handleMultipleDelete(HbAction*))); + +} + +void CpCertView::handleMultipleDelete(HbAction* action) +{ + RDEBUG("0", 0); + if(action == mPopup->primaryAction()) + { + QItemSelectionModel *selectionModel = mListView->selectionModel(); + QModelIndexList mWidgetItemsToRemove = selectionModel->selectedIndexes(); + TInt deleteCount = mWidgetItemsToRemove.count(); + // start deleting from end of array so that the indexes do not changes of the ones + // at the front. + RArray actualIndex; + QT_TRAP_THROWING + ( + CleanupClosePushL(actualIndex); + for (TInt index = deleteCount-1; index>= 0 ; --index) + { + TInt selectedItemIndex = mWidgetItemsToRemove[index].row(); + actualIndex.Append( mSelectionIndex[selectedItemIndex] ); + } + deleteCertsL(actualIndex); + CleanupStack::PopAndDestroy(&actualIndex); + ) // QT_TRAP_THROWING + } + RDEBUG("0", 0); + mListView->deleteLater(); + mListView = NULL; + mSelectAllView->deleteLater(); + mSelectAllView = NULL; + } + +void CpCertView::moveCert() + { + RDEBUG("0", 0); + mSelectAll = EFalse; + mPopup->setDismissPolicy(HbDialog::NoDismiss); + // Set the label as heading widget + if(mCertView == EPersonalView) + { + mPopup->setHeadingWidget(q_check_ptr(new HbLabel(tr("Move To Device")))); + } + else if(mCertView == EDeviceView) + { + mPopup->setHeadingWidget(q_check_ptr(new HbLabel(tr("Move To Personal")))); + } + + std::auto_ptr layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical))); + + mSelectAllView = q_check_ptr(new HbListView(this)); + QStandardItemModel* selectAllModel = q_check_ptr(new QStandardItemModel(this)); + // Populate the model with content + std::auto_ptr selectAllItem(q_check_ptr(new QStandardItem())); + selectAllItem->setData(QString("Select All"),Qt::DisplayRole); + selectAllModel->appendRow(selectAllItem.get()); + selectAllItem.release(); + connect(mSelectAllView, SIGNAL(activated(QModelIndex)), this, SLOT(selectAll())); + mSelectAllView->setModel(selectAllModel); + mSelectAllView->setSelectionMode(HbListView::MultiSelection); + layout->addItem(mSelectAllView); + + mListView = q_check_ptr(new HbListView(this)); + // Connect to "activated" signal + connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemActivated(QModelIndex))); + + // Create a model + QStandardItemModel* model = q_check_ptr(new QStandardItemModel(this)); + TInt count =0; + RDEBUG("0", 0); + QT_TRAP_THROWING(count = refreshListL()); + for(TInt index = 0; index < count ; ++index) + { + // Populate the model with content + std::auto_ptr certItem(q_check_ptr(new QStandardItem())); + QString certificateLabel = certLabel(index); + certItem->setData( certificateLabel, Qt::DisplayRole); + model->appendRow(certItem.get()); + mSelectionIndex.Append(index); + certItem.release(); + } + + // Set the model to the list view + mListView->setModel(model); + mListView->setSelectionMode(HbListView::MultiSelection); + layout->addItem(mListView); + + std::auto_ptr widget(q_check_ptr(new HbWidget())); + widget->setLayout(layout.get()); + layout.release(); + mPopup->setContentWidget(widget.get()); + widget.release(); + RDEBUG("0", 0); + mPopup->setPrimaryAction(q_check_ptr(new HbAction(tr("Yes")))); + mPopup->setSecondaryAction(q_check_ptr(new HbAction(tr("No")))); + mPopup->setTimeout(HbPopup::NoTimeout); + + // Launch popup syncronously + mPopup->open(this, SLOT(handleMoveCertDialog(HbAction*))); + RDEBUG("0", 0); +} + +void CpCertView::handleMoveCertDialog(HbAction* action) +{ + RDEBUG("0", 0); + if(action == mPopup->primaryAction()) + { + QItemSelectionModel *selectionModel = mListView->selectionModel(); + QModelIndexList mWidgetItemsToRemove = selectionModel->selectedIndexes(); + TInt deleteCount = mWidgetItemsToRemove.count(); + // start deleting from end of array so that the indexes do not changes of the ones + // at the front. + RArray actualIndex; + RDEBUG("0", 0); + QT_TRAP_THROWING + ( + CleanupClosePushL(actualIndex); + for (TInt index = deleteCount-1; index>= 0 ; --index) + { + TInt selectedItemIndex = mWidgetItemsToRemove[index].row(); + actualIndex.Append(mSelectionIndex[selectedItemIndex]); + } + moveCertList(actualIndex); + CleanupStack::PopAndDestroy(&actualIndex); + ) + } + mListView->deleteLater(); + mListView = NULL; + mSelectAllView->deleteLater(); + mSelectAllView = NULL; + RDEBUG("0", 0); + } + +void CpCertView::selectAll() + { + RDEBUG("0", 0); + if(mSelectAll == EFalse) + { + mListView->selectAll(); + mSelectAll= ETrue; + } + else + { + mListView->clearSelection(); + mSelectAll= EFalse; + } + } + +void CpCertView::deleteCertsL( RArray& indexList ) + { + RDEBUG("0", 0); + TInt count = indexList.Count(); + for(int index = 0;index Label().Ptr(),entry->Label().Length()); + } + else + { + deleteMsg = "Delete %1 items?"; + sCount.setNum(count); + } + RDEBUG("0", 0); + deleteMsg = deleteMsg.arg(sCount); + mNote->setText(deleteMsg); + mNote->setTimeout(HbPopup::NoTimeout); + mNote->open(this,SLOT(handleDeleteDialog(HbAction*))); + +} + +void CpCertView::handleDeleteDialog(HbAction* action) +{ + RDEBUG("0", 0); + TInt count = mIndexList.Count(); + + if (action != mNote->primaryAction() || count == 0 ) + { + return; + } + + RPointerArray errCerts; + QT_TRAP_THROWING( + CleanupClosePushL(errCerts); + + for(TInt index = 0; index < count; ++index) + { + const CCTCertInfo* entry = certAt(mIndexList[index]); + + if( mCertView == EPersonalView || mCertView == EAuthorityView ) + { + mCertDataContainer->iWrapper->DeleteCertL( + mCertDataContainer->CertManager(), *entry ); + } + else if( mCertView == ETrustedView ) + { + mCertDataContainer->iWrapper->DeleteCertL( + mCertDataContainer->CertManager(),*entry, KCMTrustedServerTokenUid ); + } + else if( mCertView == EDeviceView ) + { + mCertDataContainer->iWrapper->DeleteCertL( + mCertDataContainer->CertManager(), *entry, KCMDeviceCertStoreTokenUid ); + } + errCerts.AppendL(entry); + } + RDEBUG("0", 0); + if(errCerts.Count() > 0) + { + QString message("Unable to delete the following certificate: \n"); + TInt count = errCerts.Count(); + for(TInt index=0;indexLabel(); + QString certName = QString((QChar*)certLabel.Ptr(),certLabel.Length()); + message.append(certName).append("\n"); + } + HbMessageBox::warning(message); + } + count = refreshListL(); + refreshView(count); + + CleanupStack::PopAndDestroy(&errCerts); + ) // QT_TRAP_THROWING + + delete mNote; + mNote = NULL; + RDEBUG("0", 0); + } + +const CCTCertInfo* CpCertView::certAt(TInt index) const + { + RDEBUG("0", 0); + CCTCertInfo* currentCert = NULL; + switch(mCertView) + { + case EAuthorityView: + { + currentCert = mCertDataContainer->iCALabelEntries[ index ]->iCAEntry; + break; + } + case ETrustedView: + { + currentCert = mCertDataContainer->iPeerLabelEntries[ index ]->iPeerEntry; + break; + } + case EDeviceView: + { + currentCert = mCertDataContainer->iDeviceLabelEntries[ index ]->iDeviceEntry; + break; + } + case EPersonalView: + { + currentCert = mCertDataContainer->iUserLabelEntries[ index ]->iUserEntry; + break; + } + }; + return currentCert; + } + +QString CpCertView::certLabel(TInt index) const + { + RDEBUG("0", 0); + CpCertManUICertData* certData = NULL; + HBufC* label = NULL; + TInt length = 0; + switch(mCertView) + { + case EAuthorityView: + { + certData = mCertDataContainer->iCALabelEntries[index]; + label = certData->iCAEntryLabel; + length = certData->iCAEntryLabel->Length(); + break; + } + case ETrustedView: + { + certData = mCertDataContainer->iPeerLabelEntries[index]; + label = certData->iPeerEntryLabel; + length = certData->iPeerEntryLabel->Length(); + break; + } + case EPersonalView: + { + certData = mCertDataContainer->iUserLabelEntries[index]; + label = certData->iUserEntryLabel; + length = certData->iUserEntryLabel->Length(); + break; + } + case EDeviceView: + { + certData = mCertDataContainer->iDeviceLabelEntries[index]; + label = certData->iDeviceEntryLabel; + length = certData->iDeviceEntryLabel->Length(); + break; + } + } + return QString((QChar*)label->Des().Ptr(), length); + } + +TInt CpCertView::refreshListL() + { + RDEBUG("0", 0); + TInt count = 0; + switch(mCertView) + { + case EAuthorityView: + mCertDataContainer->RefreshCAEntriesL(); + count = mCertDataContainer->iCALabelEntries.Count(); + break; + case ETrustedView: + mCertDataContainer->RefreshPeerCertEntriesL(); + count = mCertDataContainer->iPeerLabelEntries.Count(); + break; + case EPersonalView: + mCertDataContainer->RefreshUserCertEntriesL(); + count = mCertDataContainer->iUserLabelEntries.Count(); + break; + case EDeviceView: + mCertDataContainer->RefreshDeviceCertEntriesL(); + count = mCertDataContainer->iDeviceLabelEntries.Count(); + break; + }; + return count; + } + + +void CpCertView::refreshView( TInt count ) + { + RDEBUG("0", 0); + if(mRefreshedView) + { + mRefreshedView->deleteLater(); + mRefreshedView = NULL; + } + + mRefreshedView = q_check_ptr(new CpBaseSettingView()); + switch(mCertView) + { + case EAuthorityView: + { + mRefreshedView->setTitle(hbTrId("txt_certificate_manager_list_authority_certificate")); + break; + } + case ETrustedView: + { + mRefreshedView->setTitle(hbTrId("txt_certificate_manager_list_trusted_site_certific")); + break; + } + case EPersonalView: + { + mRefreshedView->setTitle(hbTrId("txt_certificate_manager_list_personal_certificates")); + break; + } + case EDeviceView: + { + mRefreshedView->setTitle(hbTrId("txt_certificate_manager_list_device_certificates")); + break; + } + } + + HbMenu* menu = mRefreshedView->menu(); + RDEBUG("0", 0); + std::auto_ptr endAction( q_check_ptr(new HbAction(hbTrId("txt_common_opt_delete"))) ); + connect(endAction.get(), SIGNAL(triggered()), this, SLOT(deleteList())); + menu->addAction(endAction.get()); + endAction.release(); + + QString title; + if(mCertView == EPersonalView) + { + title = "Move to Device"; + } + else if(mCertView == EDeviceView) + { + title = "Move to Personal"; + } + std::auto_ptr moveAction(q_check_ptr(new HbAction(title))); + connect(moveAction.get(), SIGNAL(triggered()), this, SLOT(moveCert())); + menu->addAction(moveAction.get()); + moveAction.release(); + RDEBUG("0", 0); + std::auto_ptr layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical))); + + HbListWidget* mCertificateList = q_check_ptr(new HbListWidget(this)); + + for(int index = 0; index< count; index++) + { + QString certificateLabel = certLabel(index); + std::auto_ptr singleCert(q_check_ptr(new HbListWidgetItem())); + singleCert->setText(certificateLabel); + mCertificateList->addItem(singleCert.get()); + singleCert.release(); + } // end of for loop + + connect(mCertificateList, SIGNAL(activated(QModelIndex)), this, SLOT(openCertFromList(QModelIndex))); + connect(mCertificateList, SIGNAL(longPressed(HbAbstractViewItem*, QPointF )), this, SLOT(indicateLongPress(HbAbstractViewItem*, QPointF))); + + layout->addItem(mCertificateList); + RDEBUG("0", 0); + // Refresh current view + QObject::connect(mRefreshedView , SIGNAL(aboutToClose()), this, SLOT(viewDone())); + mPrevView = mainWindow()->currentView(); + mainWindow()->addView(mRefreshedView); + mainWindow()->setCurrentView(mRefreshedView); + mRefreshedView->setLayout(layout.get()); + layout.release(); + RDEBUG("0", 0); + } + + +void CpCertView::viewDone() + { + RDEBUG("0", 0); + mCurrentView = mainWindow()->currentView(); + mCurrentView->deleteLater(); + mCurrentView= NULL; + mainWindow()->setCurrentView(mOriginalView); + } +void CpCertView::showTrustSettings() + { + RDEBUG("0", 0); + mCurrentView = q_check_ptr(new CpCertTrustView(mPos, *mCertDataContainer)); + connect(mCurrentView , SIGNAL(aboutToClose()), this, SLOT(saveTrustSettings())); + mPrevView = mainWindow()->currentView(); + mainWindow()->addView(mCurrentView); + mainWindow()->setCurrentView(mCurrentView); + } + +void CpCertView::saveTrustSettings() + { + ((CpCertTrustView*)mCurrentView)->saveTrustSettings(); + displayPreviousView(); + } + +void CpCertView::moveSelectedCert() + { + RDEBUG("0", 0); + RArray pos; + pos.Append(mPos); + moveCertList(pos); + } + +void CpCertView::moveCertList(RArray& indexList) + { + RDEBUG("0", 0); + mIndexList = indexList; + mNote = new HbMessageBox(HbMessageBox::MessageTypeQuestion); + mNote->setHeadingWidget(q_check_ptr(new HbLabel(hbTrId("txt_certificate_manager_info_move")))); + if( mCertView == EPersonalView ) + { + mNote->setText(hbTrId("txt_certificate_manager_info_device_certificates_c")); + } + else if( mCertView == EDeviceView ) + { + mNote->setText("Use of Personal certificates may require user confirmation. Proceed?"); + } + + mNote->setTimeout(HbPopup::NoTimeout); + mNote->setIconVisible (EFalse); + mNote->open(this,SLOT(handleMoveDialog(HbAction*))); + RDEBUG("0", 0); +} + +void CpCertView::handleMoveDialog(HbAction* action) +{ + RDEBUG("0", 0); + if (action != mNote->primaryAction()) + { + return; + } + + TInt count = mIndexList.Count(); + + for(TInt index = 0 ; index < count; ++index) + { + CCTCertInfo* entry = NULL; + if(mCertView == EPersonalView) + { + entry = mCertDataContainer->iUserLabelEntries[ mIndexList[index] ]->iUserEntry; + } + else if(mCertView == EDeviceView) + { + entry = mCertDataContainer->iDeviceLabelEntries[ mIndexList[index] ]->iDeviceEntry; + } + + // Move key first + TCTKeyAttributeFilter keyFilter; + keyFilter.iKeyId = entry->SubjectKeyId(); + keyFilter.iPolicyFilter = TCTKeyAttributeFilter::EAllKeys; + RDEBUG("0", 0); + TUid sourceCertStoreUid = TUid::Uid(0); + TUid targetCertStoreUid = TUid::Uid(0); + TUid sourceKeyStoreUid = TUid::Uid(0); + TUid targetKeyStoreUid = TUid::Uid(0); + + if(mCertView == EPersonalView) + { + sourceKeyStoreUid = KCMFileKeyStoreTokenUid; + targetKeyStoreUid = KCMDeviceKeyStoreTokenUid; + sourceCertStoreUid = KCMFileCertStoreTokenUid; + targetCertStoreUid = KCMDeviceCertStoreTokenUid; + } + else if(mCertView == EDeviceView) + { + sourceKeyStoreUid = KCMDeviceKeyStoreTokenUid; + targetKeyStoreUid = KCMFileKeyStoreTokenUid; + sourceCertStoreUid = KCMDeviceCertStoreTokenUid; + targetCertStoreUid = KCMFileCertStoreTokenUid; + } + RDEBUG("0", 0); + try + { + + QT_TRAP_THROWING( mCertDataContainer->iWrapper->MoveKeyL( + mCertDataContainer->KeyManager(), keyFilter, sourceKeyStoreUid, targetKeyStoreUid )); + + // Move certificate + QT_TRAP_THROWING( mCertDataContainer->iWrapper->MoveCertL( + mCertDataContainer->CertManager(), *entry, sourceCertStoreUid, targetCertStoreUid ) ); + + } + catch(const std::exception& exception) + { + QString error(exception.what()); + QT_TRAP_THROWING(mCertDataContainer->ShowErrorNoteL( error.toInt() )); + User::Exit( KErrNone ); + } + RDEBUG("0", 0); + try + { + if(mCertView == EPersonalView) + { + QT_TRAP_THROWING( mCertDataContainer->RefreshUserCertEntriesL() ); + } + else if(mCertView == EDeviceView) + { + QT_TRAP_THROWING( mCertDataContainer->RefreshDeviceCertEntriesL() ); + } + } + catch(const std::exception& exception) + { + QString error(exception.what()); + if ( error.toInt() == KErrCorrupt ) + { + QT_TRAP_THROWING(mCertDataContainer->ShowErrorNoteL( error.toInt()) ); + User::Exit( KErrNone ); + } + // have to call straight away the Exit + // showing any error notes would corrupt the display + User::Exit( error.toInt() ); + } + } // for + // Refresh current view + QT_TRAP_THROWING(refreshView(refreshListL())); + delete mNote; + mNote = NULL; + RDEBUG("0", 0); + } +