cpsecplugins/cpadvancedsecplugin/src/cpsecurityview.cpp
branchRCL_3
changeset 22 03674e5abf46
parent 21 09b1ac925e3f
child 23 94da73d93b58
equal deleted inserted replaced
21:09b1ac925e3f 22:03674e5abf46
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0""
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 #include <QStringList>
       
    19 #include <QGraphicsLinearLayout>
       
    20 #include <qlist.h>
       
    21 #include <qstring.h>
       
    22 #include <qvector.h>
       
    23 #include <qpair.h>
       
    24 
       
    25 #include <hblineedit.h>
       
    26 #include <hbdataform.h>
       
    27 #include <hbdataformmodel.h>
       
    28 #include <hbdataformmodelitem.h>
       
    29 #include <hblabel.h>
       
    30 #include <hbpushbutton.h>
       
    31 #include <hbmenu.h>
       
    32 #include <hbaction.h>
       
    33 #include <hbmessagebox.h>
       
    34 #include <HbListWidget>
       
    35 #include <HbListWidgetItem>
       
    36 #include <HbGroupBox>
       
    37 #include <hbpushbutton.h>
       
    38 #include <hbmainwindow.h>
       
    39 #include <hbabstractviewitem.h>
       
    40 #include <HbMessageBox>
       
    41 
       
    42 #include <memory>
       
    43 
       
    44 #include <../../inc/cpsecplugins.h>
       
    45 
       
    46 #include "cpsecurityview.h"
       
    47 #include "cpsecmodview.h"
       
    48 #include "cpcertview.h"
       
    49 #include "cpsecmodmodel.h"
       
    50 #include "cpsecmoduleinfoview.h"
       
    51 
       
    52 CpSecurityView::CpSecurityView(QGraphicsItem *parent /*= 0*/)
       
    53 	: CpBaseSettingView(0,parent),
       
    54 	  mSecModUIModel(NULL),
       
    55 	  mSecModView(NULL),
       
    56 	  mPreView(NULL),
       
    57 	  mCertView(NULL),
       
    58 	  mCurrentView(NULL),
       
    59 	  mPos(0),
       
    60 	  mNote(NULL)
       
    61 	{
       
    62 	RDEBUG("0", 0);
       
    63 	setTitle(hbTrId("txt_certificate_manager_setlabel_advanced_security"));
       
    64 	
       
    65 	std::auto_ptr<QGraphicsLinearLayout> layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical)));
       
    66     HbListWidget* listCertView = q_check_ptr(new HbListWidget(this)); 
       
    67 
       
    68     std::auto_ptr<HbListWidgetItem> authcert(q_check_ptr(new HbListWidgetItem()));
       
    69     authcert->setText(hbTrId("txt_certificate_manager_list_authority_certificate"));
       
    70     
       
    71     std::auto_ptr<HbListWidgetItem> trustedsitecert(q_check_ptr(new HbListWidgetItem()));
       
    72     trustedsitecert->setText(hbTrId("txt_certificate_manager_list_trusted_site_certific"));
       
    73     
       
    74     std::auto_ptr<HbListWidgetItem> personalcert(q_check_ptr(new HbListWidgetItem()));
       
    75     personalcert->setText(hbTrId("txt_certificate_manager_list_personal_certificates"));
       
    76     
       
    77     std::auto_ptr<HbListWidgetItem> devicecert(q_check_ptr(new HbListWidgetItem()));
       
    78     devicecert->setText(hbTrId("txt_certificate_manager_list_device_certificates"));    
       
    79 
       
    80     listCertView->addItem(authcert.get());
       
    81     authcert.release();
       
    82     listCertView->addItem(trustedsitecert.get());
       
    83     trustedsitecert.release();
       
    84     listCertView->addItem(personalcert.get());
       
    85     personalcert.release();
       
    86     listCertView->addItem(devicecert.get());
       
    87     devicecert.release();
       
    88 
       
    89     connect(listCertView, SIGNAL(released(QModelIndex)), this, SLOT(displayCert(QModelIndex)));
       
    90         
       
    91     HbListWidget* listSecView = q_check_ptr(new HbListWidget(this)); 
       
    92     QMap<QString,QString> keystoreLabels;
       
    93     RDEBUG("0", 0);
       
    94     try
       
    95 		{
       
    96 		QT_TRAP_THROWING(
       
    97 		mSecModUIModel = CSecModUIModel::NewL();
       
    98 		keystoreLabels = mSecModUIModel->LoadTokenLabelsL(); )
       
    99 		}
       
   100     catch(const std::exception& exception)
       
   101     	{
       
   102 		QString error(exception.what());
       
   103 		HbMessageBox::information(error);
       
   104 		QT_RETHROW;
       
   105     	}
       
   106     
       
   107     QMapIterator<QString, QString> labelIter(keystoreLabels);
       
   108     if(keystoreLabels.count() != 0)
       
   109     	{
       
   110 		while(labelIter.hasNext())
       
   111 			{
       
   112 			labelIter.next();
       
   113 			std::auto_ptr<HbListWidgetItem> widget(q_check_ptr(new HbListWidgetItem()));
       
   114 			widget->setText(labelIter.key());
       
   115 			widget->setSecondaryText(labelIter.value());
       
   116 			listSecView->addItem(widget.get());
       
   117 			widget.release();
       
   118 			}
       
   119 		connect(listSecView, SIGNAL(activated(QModelIndex)), this, SLOT(showCodeView(QModelIndex)));   
       
   120 		connect(listSecView, SIGNAL(longPressed(HbAbstractViewItem*, QPointF )), this, SLOT(indicateLongPress(HbAbstractViewItem*, QPointF))); 
       
   121     	}
       
   122     else
       
   123     	{
       
   124 		std::auto_ptr<HbListWidgetItem> emptyWidget(q_check_ptr(new HbListWidgetItem()));
       
   125 		emptyWidget->setText("(no security modules)");
       
   126     	listSecView->addItem(emptyWidget.get());
       
   127     	emptyWidget.release();
       
   128     	}
       
   129     RDEBUG("0", 0);
       
   130     std::auto_ptr<HbGroupBox> certificatesList(q_check_ptr(new HbGroupBox()));
       
   131 	certificatesList->setHeading(hbTrId("txt_certificate_manager_setlabel_certificates"));
       
   132 	certificatesList->setContentWidget(listCertView);
       
   133 	certificatesList->setCollapsed(true);
       
   134 	layout->addItem(certificatesList.get());
       
   135 	certificatesList.release();
       
   136 	
       
   137 	std::auto_ptr<HbGroupBox> protectedContentList(q_check_ptr(new HbGroupBox()));
       
   138 	protectedContentList->setHeading("Protected Content");
       
   139 	protectedContentList->setCollapsed(true);
       
   140 	layout->addItem(protectedContentList.get());
       
   141 	protectedContentList.release();
       
   142 	
       
   143 	std::auto_ptr<HbGroupBox> securityModuleList(q_check_ptr(new HbGroupBox()));
       
   144 	securityModuleList->setHeading("Security Module");
       
   145 	securityModuleList->setContentWidget(listSecView);
       
   146 	securityModuleList->setCollapsed(true);
       
   147 	layout->addItem(securityModuleList.get());
       
   148 	securityModuleList.release();
       
   149 	
       
   150 	mContextMenu = q_check_ptr(new HbMenu());
       
   151 	
       
   152 	setLayout(layout.get()); 
       
   153 	layout.release();
       
   154 	}
       
   155 
       
   156 
       
   157 CpSecurityView::~CpSecurityView()
       
   158 	{
       
   159 	if(mSecModView)
       
   160 		{
       
   161 		mSecModView->deleteLater();
       
   162 		}
       
   163 	
       
   164 	if(mPreView)
       
   165 		{
       
   166 		mPreView->deleteLater();
       
   167 		}
       
   168 	
       
   169 	if(mCertView)
       
   170 		{
       
   171 		mCertView->deleteLater();
       
   172 		}
       
   173 	
       
   174 	if(mCurrentView)
       
   175 		{
       
   176 		mCurrentView->deleteLater();
       
   177 		}
       
   178 	
       
   179 	delete mSecModUIModel;  
       
   180 	
       
   181 	delete mNote;
       
   182 	delete mContextMenu;
       
   183 	}
       
   184 
       
   185 void CpSecurityView::showCodeView()
       
   186 	{
       
   187 	RDEBUG("0", 0);
       
   188 	try
       
   189 		{
       
   190 		mSecModView = q_check_ptr(new CpSecModView(mPos, *mSecModUIModel));    
       
   191 		QObject::connect(mSecModView , SIGNAL(aboutToClose()), this, SLOT(viewDone()));
       
   192 		mPreView = mainWindow()->currentView();   //suppose mPreView  is member variable of CpSecurityView
       
   193 		mainWindow()->addView(mSecModView);
       
   194 		mainWindow()->setCurrentView(mSecModView);
       
   195 		}
       
   196 	catch(const std::exception& exception)
       
   197 		{
       
   198 		HbMessageBox::information(exception.what());
       
   199 		}
       
   200 	}
       
   201 
       
   202 void CpSecurityView::showCodeView( const QModelIndex& aModelIndex)
       
   203 	{
       
   204 	mPos = aModelIndex.row();
       
   205 	showCodeView();	
       
   206 	}
       
   207 
       
   208 void CpSecurityView::showWIMview()
       
   209 	{
       
   210 	RDEBUG("0", 0);
       
   211 	try
       
   212 		{
       
   213 		QObject::connect(mSecModView , SIGNAL(aboutToClose()), this, SLOT(viewDone()));
       
   214 		mPreView = mainWindow()->currentView();   //suppose mPreView  is member variable of CpSecurityView
       
   215 		mainWindow()->addView(mSecModView);
       
   216 		mainWindow()->setCurrentView(mSecModView);  
       
   217 		}
       
   218 	catch(const std::exception& exception)
       
   219 		{
       
   220 		HbMessageBox::information(exception.what());
       
   221 		}
       
   222 	}
       
   223 
       
   224 void CpSecurityView::viewDone()  
       
   225 	{
       
   226 	try
       
   227 		{
       
   228 		mainWindow()->removeView(mSecModView);    
       
   229 		mSecModView->deleteLater();
       
   230 		mSecModView= NULL;
       
   231 		mainWindow()->setCurrentView(mPreView);
       
   232 		}
       
   233 	catch(const std::exception& exception)
       
   234 		{
       
   235 		HbMessageBox::information(exception.what());
       
   236 		}
       
   237 	}
       
   238 
       
   239 void CpSecurityView::displayCert(const QModelIndex& modelIndex)
       
   240 	{
       
   241 	RDEBUG("0", 0);
       
   242 	try
       
   243 	{
       
   244 	mCertView = q_check_ptr(new CpCertView(modelIndex));    
       
   245 	connect(mCertView , SIGNAL(aboutToClose()), this, SLOT(displayPrevious()));
       
   246 	mPreView = mainWindow()->currentView();   
       
   247 	mainWindow()->addView(mCertView);
       
   248 	mainWindow()->setCurrentView(mCertView);
       
   249 	}
       
   250 	catch(const std::exception& exception)
       
   251 		{
       
   252 		HbMessageBox::information(exception.what());
       
   253 		}
       
   254 	}
       
   255 
       
   256 void CpSecurityView::displayPrevious()  
       
   257 	{
       
   258 	RDEBUG("0", 0);
       
   259 	try
       
   260 		{
       
   261 		mainWindow()->removeView(mCertView);    
       
   262 		mCertView->deleteLater();
       
   263 		mCertView= NULL;
       
   264 		mainWindow()->setCurrentView(mPreView);
       
   265 		}
       
   266 	catch(const std::exception& exception)
       
   267 		{
       
   268 		HbMessageBox::information(exception.what());
       
   269 		}
       
   270 	}
       
   271 
       
   272 void CpSecurityView::indicateLongPress(HbAbstractViewItem *item,QPointF coords)
       
   273 	{
       
   274 	RDEBUG("0", 0);
       
   275 	try
       
   276 		{
       
   277 		mContextMenu->clearActions();
       
   278 		mPos = item->modelIndex().row();   
       
   279 		
       
   280 		std::auto_ptr<HbAction> openModule(q_check_ptr(new HbAction("Open")));     
       
   281 		connect(openModule.get(), SIGNAL(triggered()), this, SLOT( showCodeView()));    
       
   282 		mContextMenu->addAction(openModule.get());
       
   283 		openModule.release();
       
   284 		
       
   285 		if(mSecModUIModel->IsTokenDeletable(mPos))
       
   286 			{
       
   287 			std::auto_ptr<HbAction> deleteModule(q_check_ptr(new HbAction("Delete")));     
       
   288 			connect(deleteModule.get(), SIGNAL(triggered()), this, SLOT( deleteModule()));    
       
   289 			mContextMenu->addAction(deleteModule.get());
       
   290 			deleteModule.release();
       
   291 			}
       
   292 		
       
   293 		std::auto_ptr<HbAction> moduleInfo(q_check_ptr(new HbAction("Module Info")));     
       
   294 		connect(moduleInfo.get(), SIGNAL(triggered()), this, SLOT( moduleDetails()));    
       
   295 		mContextMenu->addAction(moduleInfo.get());
       
   296 		moduleInfo.release();
       
   297 				
       
   298 		mContextMenu->setPreferredPos(coords);
       
   299 		mContextMenu->open();
       
   300 		}
       
   301 	catch(const std::exception& exception)
       
   302 		{
       
   303 		HbMessageBox::information(exception.what());
       
   304 		}
       
   305 	}
       
   306 
       
   307 void CpSecurityView::deleteModule()
       
   308 	{
       
   309 	RDEBUG("0", 0);
       
   310 	try
       
   311 		{
       
   312 		
       
   313 		delete mNote;
       
   314 		mNote = NULL;
       
   315 		
       
   316 		mNote = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
       
   317 		mNote->setHeadingWidget(q_check_ptr(new HbLabel(tr("Delete..."))));
       
   318 		mNote->setText("Delete keystore and password?");
       
   319 		mNote->setPrimaryAction(q_check_ptr(new HbAction("Yes")));
       
   320 		mNote->setSecondaryAction(q_check_ptr(new HbAction("No")));
       
   321 		mNote->setTimeout(HbPopup::NoTimeout);
       
   322 		mNote->setIconVisible (EFalse);
       
   323 		mNote->open(this,SLOT(dialogClosed(HbAction*)));
       
   324 		}
       
   325 	catch(const std::exception& exception)
       
   326 		{
       
   327 	    HbMessageBox *box = new HbMessageBox(exception.what());
       
   328     	box->setAttribute(Qt::WA_DeleteOnClose);
       
   329     	box->open();	
       
   330 		}
       
   331 
       
   332 }
       
   333 void CpSecurityView::dialogClosed(HbAction* action)
       
   334 {
       
   335 	RDEBUG("0", 0);
       
   336 	if (action != mNote->primaryAction())
       
   337 		{
       
   338 		return;
       
   339 		}
       
   340 		
       
   341 	try
       
   342 		{
       
   343 		QT_TRAP_THROWING(mSecModUIModel->DeleteKeysL(mPos));
       
   344    		}		
       
   345 	catch(const std::exception& exception)
       
   346 		{
       
   347 	    HbMessageBox *box = new HbMessageBox(exception.what());
       
   348     	box->setAttribute(Qt::WA_DeleteOnClose);
       
   349     	box->open();
       
   350 		}
       
   351 	}
       
   352 
       
   353 void CpSecurityView::moduleDetails()
       
   354 	{
       
   355 	RDEBUG("0", 0);
       
   356 	try
       
   357 		{
       
   358 		QVector< QPair<QString,QString> > securityDetails;
       
   359 		QT_TRAP_THROWING(securityDetails = mSecModUIModel->SecModDetailsL(mPos));
       
   360 		mModuleinfoView = q_check_ptr(new CpSecmoduleInfoView(securityDetails));
       
   361 		
       
   362 		connect(mModuleinfoView , SIGNAL(aboutToClose()), this, SLOT(displayPreviousFromModInfo()));
       
   363 		mPreView = mainWindow()->currentView();   
       
   364 		mainWindow()->addView(mModuleinfoView);
       
   365 		mainWindow()->setCurrentView(mModuleinfoView);
       
   366 		}
       
   367 	catch(const std::exception& exception)
       
   368 		{
       
   369 		HbMessageBox::information(exception.what());
       
   370 		}
       
   371 	}
       
   372 
       
   373 void CpSecurityView::displayPreviousFromModInfo()  
       
   374 	{
       
   375 	RDEBUG("0", 0);
       
   376 	try
       
   377 		{
       
   378 		mainWindow()->removeView(mModuleinfoView);    
       
   379 		mCertView->deleteLater();
       
   380 		mCertView= NULL;
       
   381 		mainWindow()->setCurrentView(mPreView);
       
   382 		}
       
   383 	catch(const std::exception& exception)
       
   384 		{
       
   385 		HbMessageBox::information(exception.what());
       
   386 		}
       
   387 	}
       
   388