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 |
|