--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pkiutilities/SecModUI/src/SecModUIModel.cpp Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,1384 @@
+/*
+* Copyright (c) 2005-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: Implementation of the CSecModUIModel class
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "SecModUI.h"
+#include "SecModUIModel.h"
+#include "SecModUIViewAccess.h"
+#include "SecModUIViewCode.h"
+#include "SecModUIViewMain.h"
+#include "SecModUIViewSignature.h"
+#include "SecModUISyncWrapper.h"
+#include "SecModUILogger.h"
+#include <SecModUI.rsg>
+#include <certmanui.rsg>
+#include <CTSecDlgs.rsg>
+#include <aknViewAppUi.h>
+#include <AknUtils.h>
+#include <data_caging_path_literals.hrh>
+#include <bautils.h>
+#include <unifiedkeystore.h>
+#include <aknlists.h>
+#include <mctauthobject.h>
+#include <aknnotewrappers.h>
+#include <StringLoader.h>
+#include <mctkeystore.h>
+#include <akntitle.h>
+#include <aknmessagequerydialog.h>
+#include <eikenv.h>
+#include <securityerr.h>
+#include <AknGlobalNote.h>
+
+// CONSTANTS
+_LIT(KResourceFile, "z:SecModUI.rsc");
+_LIT(KResourceFile2, "z:CertManUI.rsc");
+_LIT(KResourceFile3, "z:CTsecdlgs.rsc");
+_LIT(KTab, " \t");
+_LIT(KDoubleTab, "\t\t");
+_LIT(KFourAsterisks,"****");
+_LIT(KEnter, "\n");
+_LIT(KDoubleEnter, "\n\n");
+
+_LIT(KSecModUIPanic, "Security Module UI panic");
+
+const TInt KMaxLengthTextDetailsBody = 750;
+const TInt KMaxLengthItemValue = 100;
+const TInt KWIMStoreUid ( 0x101F79D9 );
+const TInt KItemLength (200);
+
+// ============================= LOCAL FUNCTIONS ===============================
+GLDEF_C void Panic(TInt aPanic)
+ {
+ User::Panic(KSecModUIPanic, aPanic);
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+#ifndef RD_GS_RENOVATION
+EXPORT_C MSecModUI* MSecModUI::CreateL()
+ {
+ LOG_CREATE;
+ LOG_ENTERFN("MSecModUI::CreateL()");
+ LOG_LEAVEFN("MSecModUI::CreateL()");
+ return CSecModUIModel::NewL();
+ }
+#endif
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::CSecModUIModel
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSecModUIModel::CSecModUIModel()
+ {
+ LOG_WRITE( "CSecModUIModel::CSecModUIModel" );
+ }
+
+// Destructor
+CSecModUIModel::~CSecModUIModel()
+ {
+ LOG_ENTERFN("CSecModUIModel::~CSecModUIModel");
+ delete iWrapper;
+ if ( iResourceFileOffset )
+ {
+ iEikEnv->DeleteResourceFile( iResourceFileOffset );
+ }
+ if ( iResourceFileOffset2 )
+ {
+ iEikEnv->DeleteResourceFile( iResourceFileOffset2 );
+ }
+ if ( iResourceFileOffset3 )
+ {
+ iEikEnv->DeleteResourceFile( iResourceFileOffset3 );
+ }
+ ResetAndDestroyCTObjects();
+ LOG_LEAVEFN("CSecModUIModel::~CSecModUIModel");
+ LOG_DELETE;
+ }
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ResetAndDestroyCTObjects()
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ResetAndDestroyCTObjects()
+ {
+ LOG_ENTERFN("CSecModUIModel::ResetAndDestroyCTObjects()");
+
+ ResetAndDestroyAOs();
+
+ iAOKeyStores.Reset();
+
+ delete iUnifiedKeyStore;
+ iUnifiedKeyStore = NULL;
+ iKeyStore = NULL;
+ LOG_LEAVEFN("CSecModUIModel::ResetAndDestroyCTObjects()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ResetAndDestroyAOs()
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ResetAndDestroyAOs()
+ {
+ LOG_ENTERFN("CSecModUIModel::ResetAndDestroyAOs()");
+ if (iAOList)
+ {
+ iAOList->Release();
+ iAOList = NULL;
+ }
+ if (iAOArray.Count() > 0 &&
+ iAOArray[0]->Token().TokenType().Type().iUid == KTokenTypeFileKeystore)
+ {
+ iAOArray.Reset();
+ }
+ else
+ {
+ iAOArray.Close();
+ }
+ LOG_LEAVEFN("CSecModUIModel::ResetAndDestroyAOs()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ConstructL()
+ {
+ LOG_ENTERFN("CSecModUIModel::ConstructL()");
+ iEikEnv = CEikonEnv::Static();
+ AddResourceFileL();
+
+#ifndef RD_GS_RENOVATION
+
+ CSecModUIViewMain* viewMain = CSecModUIViewMain::NewLC(*this);
+ ((CAknViewAppUi*)iEikEnv->EikAppUi())->AddViewL(viewMain);
+ CleanupStack::Pop(viewMain);
+
+ CSecModUIViewCode* viewCode = CSecModUIViewCode::NewLC(*this);
+ ((CAknViewAppUi*)iEikEnv->EikAppUi())->AddViewL(viewCode);
+ CleanupStack::Pop(viewCode);
+
+ CSecModUIViewAccess* viewAccess = CSecModUIViewAccess::NewLC(*this);
+ ((CAknViewAppUi*)iEikEnv->EikAppUi())->AddViewL(viewAccess);
+ CleanupStack::Pop(viewAccess);
+
+ CSecModUIViewSignature* viewSignature =
+ CSecModUIViewSignature::NewLC(*this);
+ ((CAknViewAppUi*)iEikEnv->EikAppUi())->AddViewL(viewSignature);
+ CleanupStack::Pop(viewSignature);
+#endif
+ InitializeKeyStoreL();
+ LOG_LEAVEFN("CSecModUIModel::ConstructL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSecModUIModel* CSecModUIModel::NewL()
+ {
+ LOG_ENTERFN("CSecModUIModel::NewL()");
+ CSecModUIModel* self = new( ELeave ) CSecModUIModel();
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ LOG_LEAVEFN("CSecModUIModel::NewL()");
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::InitializeKeyStoreL()
+// -----------------------------------------------------------------------------
+//
+TInt CSecModUIModel::InitializeKeyStoreL()
+ {
+ LOG_ENTERFN("CSecModUIModel::InitializeKeyStoreL()");
+ ResetAndDestroyCTObjects();
+ iUnifiedKeyStore = CUnifiedKeyStore::NewL(iEikEnv->FsSession());
+
+ if (iWrapper == NULL)
+ {
+ iWrapper = CSecModUISyncWrapper::NewL();
+ }
+
+ TInt err = iWrapper->Initialize(*iUnifiedKeyStore);
+
+ ShowErrorNoteL(err);
+ if (KErrNone != err && KErrHardwareNotAvailable != err)
+ {
+ LOG_LEAVEFN("CSecModUIModel::InitializeKeyStoreL()");
+ return err;
+ }
+ TInt keyStoreCount = iUnifiedKeyStore->KeyStoreCount();
+ if (0 >= keyStoreCount)
+ {
+ LOG_LEAVEFN("CSecModUIModel::InitializeKeyStoreL()");
+ return KErrNone;
+ }
+
+ RMPointerArray<CCTKeyInfo> keyInfos;
+ CleanupClosePushL(keyInfos);
+ TCTKeyAttributeFilter filter;
+ TInt keyInfoCount = 0;
+ filter.iPolicyFilter = TCTKeyAttributeFilter::EAllKeys;
+
+ for (TInt i = 0; i < keyStoreCount; i++)
+ {
+ err = iWrapper->ListKeys(iUnifiedKeyStore->KeyStore(i), keyInfos, filter);
+ LOG_WRITE_FORMAT( "CSecModUIModel::InitializeKeyStoreL() list err = %d ", err );
+
+ //If list ok, append the AO, otherwise go next
+ if ( err == KErrNone )
+ {
+ keyInfoCount = keyInfos.Count();
+ for (TInt j = 0; j < keyInfoCount; j++)
+ {
+ // Check that keystore has at least one AO.
+ if (NULL != keyInfos[j]->Protector())
+ {
+ // If keystore has AO, add it to the array.
+ User::LeaveIfError(
+ iAOKeyStores.Append(&(iUnifiedKeyStore->KeyStore(i))));
+ break;
+ }
+ }
+ }
+ keyInfos.Close();
+ }
+ CleanupStack::PopAndDestroy(&keyInfos); //keyInfos
+
+ LOG_LEAVEFN("CSecModUIModel::InitializeKeyStoreL()");
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::AddResourceFileL()
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::AddResourceFileL()
+ {
+ LOG_ENTERFN("CSecModUIModel::AddResourceFileL()");
+ // Resource file loading
+ RFs& fs = iEikEnv->FsSession();
+
+ TFileName fileName;
+
+ TParse parse;
+ // secmodui.rsc
+ parse.Set(KResourceFile, &KDC_RESOURCE_FILES_DIR, NULL);
+
+ fileName = parse.FullName();
+
+ BaflUtils::NearestLanguageFile( fs, fileName );
+ iResourceFileOffset = iEikEnv->AddResourceFileL( fileName );
+
+ // CertManUI.rsc
+ parse.Set(KResourceFile2, &KDC_RESOURCE_FILES_DIR, NULL);
+ fileName = parse.FullName();
+ BaflUtils::NearestLanguageFile( fs, fileName );
+ iResourceFileOffset2 = iEikEnv->AddResourceFileL( fileName );
+
+ // CTSecDlg.rsc
+ parse.Set(KResourceFile3, &KDC_RESOURCE_FILES_DIR, NULL);
+ fileName = parse.FullName();
+ BaflUtils::NearestLanguageFile( fs, fileName );
+ iResourceFileOffset3 = iEikEnv->AddResourceFileL( fileName );
+
+ LOG_LEAVEFN("CSecModUIModel::AddResourceFileL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::LoadTokenLabelsL(CEikTextListBox& aListBox)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::LoadTokenLabelsL(CEikTextListBox& aListBox)
+ {
+ LOG_ENTERFN("CSecModUIModel::LoadTokenLabelsL()");
+
+ TInt keyStoreCount = iAOKeyStores.Count();
+
+ if (0 == keyStoreCount)
+ {
+ LOG_WRITE_FORMAT("keyStoreCount == %i",keyStoreCount);
+ LOG_LEAVEFN("CSecModUIModel::LoadTokenLabelsL()");
+ //disable the scrollbar if no keystore
+ aListBox.ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,CEikScrollBarFrame::EOff);
+ return;
+ }
+ TBuf<KItemLength> item;
+ TBuf<KItemLength> label;
+
+ CDesCArray* itemArray =
+ STATIC_CAST(CDesCArray*, aListBox.Model()->ItemTextArray());
+ for (TInt i = 0; i < keyStoreCount; i++)
+ {
+ if (iAOKeyStores[i]->Token().TokenType().Type().iUid
+ == KTokenTypeFileKeystore)
+ {
+ AppendResourceL(label, R_QTN_KEYSTORE_LIST_TEXT_PHONE_KEYSTORE);
+ }
+ else
+ {
+ label = iAOKeyStores[i]->Token().Label();
+ }
+ item += KTab;
+ item += label;
+ item += KTab;
+ AppendLocationL(item, iAOKeyStores[i]->Token().TokenType().Type());
+ item.SetLength(item.Length() - 1); // Remove \n from the end
+ itemArray->AppendL(item);
+ label.Zero();
+ item.Zero();
+ }
+
+ LOG_LEAVEFN("CSecModUIModel::LoadTokenLabelsL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::CheckCodeViewStringsL(MDesCArray& aItemArray)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::CheckCodeViewStringsL(MDesCArray& aItemArray)
+ {
+ LOG_ENTERFN("CSecModUIModel::CheckCodeViewStringsL()");
+ InitAuthObjectsL();
+ ListAuthObjectsL();
+
+ if (0 >= iAOArray.Count())
+ {
+ // Handle error
+ }
+ else if (1 == iAOArray.Count())
+ {
+ // Only PIN-G exists, let's remove "signing codes" from the list
+ CDesCArray* itemArray = STATIC_CAST(CDesCArray*, &aItemArray);
+ itemArray->Delete(1); // signing code is in the second position
+ }
+ else
+ {
+ // Do nothing
+ }
+ LOG_LEAVEFN("CSecModUIModel::CheckCodeViewStringsL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::InitAuthObjectsL()
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::InitAuthObjectsL()
+ {
+ LOG_ENTERFN("CSecModUIModel::InitAuthObjectsL()");
+ TInt err = KErrNone;
+ // Symbian's file key store does not support
+ // MCTAuthenticationObjectList interface, so we need to use
+ // other way to get AO.
+ if (iKeyStore->Token().TokenType().Type().iUid == KTokenTypeFileKeystore)
+ {
+ if (iAOArray.Count()==0)
+ {
+ RMPointerArray<CCTKeyInfo> keyInfos;
+ CleanupClosePushL(keyInfos);
+ TCTKeyAttributeFilter filter;
+ TInt keyInfoCount = 0;
+ filter.iPolicyFilter = TCTKeyAttributeFilter::EAllKeys;
+ err = iWrapper->ListKeys(*iKeyStore, keyInfos, filter);
+ ShowErrorNoteL(err);
+ User::LeaveIfError(err);
+ keyInfoCount = keyInfos.Count();
+ for (TInt j = 0; j < keyInfoCount; j++)
+ {
+ // Check that keystore has at least one AO.
+ if (NULL != keyInfos[j]->Protector())
+ {
+ // If keystore has AO, add it to the array.
+ User::LeaveIfError(iAOArray.Append(keyInfos[j]->Protector()));
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(&keyInfos); //keyInfos
+ }
+ }
+ else
+ {
+ if (NULL == iAOList)
+ {
+ MCTTokenInterface* tokenInterface = NULL;
+ err = iWrapper->GetAuthObjectInterface(
+ iKeyStore->Token(), tokenInterface);
+ if ( KErrNone != err || NULL == tokenInterface )
+ {
+ ShowErrorNoteL(err);
+ LOG_LEAVEFN("CSecModUIModel::InitAuthObjectsL()");
+ User::Leave(err);
+ }
+ iAOList = (MCTAuthenticationObjectList*)tokenInterface;
+ }
+ }
+ LOG_LEAVEFN("CSecModUIModel::InitAuthObjectsL()");
+ }
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ListAuthObjectsL()
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ListAuthObjectsL()
+ {
+ LOG_ENTERFN("CSecModUIModel::ListAuthObjectsL()");
+ if (0 >= iAOArray.Count())
+ {
+ __ASSERT_ALWAYS(iAOList, Panic(EPanicNullPointer));
+ TInt err = iWrapper->ListAuthObjects(*iAOList, iAOArray);
+ if (err)
+ {
+ ShowErrorNoteL(err);
+ User::Leave(err);
+ }
+ }
+ LOG_LEAVEFN("CSecModUIModel::ListAuthObjectsL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::OpenTokenL(TInt aTokenIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::OpenTokenL(TInt aTokenIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::OpenTokenL()");
+ ResetAndDestroyAOs();
+ iKeyStore = iAOKeyStores[aTokenIndex];
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL(KSecModUIViewCodeId);
+ LOG_LEAVEFN("CSecModUIModel::OpenTokenL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::OpenAuthObjViewL(TInt aIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::OpenAuthObjViewL(TInt aIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::OpenAuthObjViewL()");
+ if (KPinGSettIndex==aIndex)
+ {
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL(KSecModUIViewAccessId);
+ }
+ else if (KPinNrSettIndex==aIndex)
+ {
+ ((CAknViewAppUi*)iAvkonAppUi)->
+ ActivateLocalViewL(KSecModUIViewSignatureId);
+ }
+ else
+ {
+
+ }
+ LOG_LEAVEFN("CSecModUIModel::OpenAuthObjViewL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::CloseAuthObjL(TInt aIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::CloseAuthObjL(TInt aIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::CloseAuthObjL()");
+ if (PinOpen(aIndex))
+ {
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TInt err = iWrapper->CloseAuthObject(*(iAOArray[aIndex]));
+ if (err)
+ {
+ ShowErrorNoteL(err);
+ User::Leave(err);
+ }
+ }
+ LOG_LEAVEFN("CSecModUIModel::CloseAuthObjL()");
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ViewSecModDetailsL(TInt aTokenIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ViewSecModDetailsL(TInt aTokenIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::ViewSecModDetailsL(TInt aTokenIndex)");
+ iKeyStore = iAOKeyStores[aTokenIndex];
+ InitAuthObjectsL();
+ ListAuthObjectsL();
+ ViewOpenedSecModDetailsL();
+ iKeyStore = NULL; // not owned
+ if (iAOList)
+ {
+ iAOList->Release();
+ iAOList = NULL;
+ }
+ iAOArray.Reset();
+
+ LOG_LEAVEFN("CSecModUIModel::ViewSecModDetailsL(TInt aTokenIndex)");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ViewOpenedSecModDetailsL()
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ViewOpenedSecModDetailsL()
+ {
+ LOG_ENTERFN("CSecModUIModel::ViewSecModDetailsL()");
+ // Create message buffer
+ HBufC* message = HBufC::NewLC(KMaxLengthTextDetailsBody);
+ TPtr messagePtr = message->Des();
+ MCTToken& token = iKeyStore->Token();
+
+ if (token.TokenType().Type().iUid == KTokenTypeFileKeystore)
+ {
+ AppendItemL(messagePtr, R_QTN_WIM_NAME,
+ KNullDesC, R_QTN_KEYSTORE_LIST_TEXT_PHONE_KEYSTORE);
+ }
+ else
+ {
+ AppendItemL(messagePtr, R_QTN_WIM_NAME,
+ token.Label(), R_TEXT_RESOURCE_VIEW_NO_LABEL_DETAILS);
+ }
+
+ AppendItemL(messagePtr, R_QTN_WIM_CARD_VERSION,
+ token.Information( MCTToken::EVersion ),
+ R_TEXT_RESOURCE_DETAILS_VIEW_NOT_DEFINED );
+
+ AppendLocationL(messagePtr, token.TokenType().Type(), R_QTN_WIM_SECURITY_MODULE_LOCATION);
+ messagePtr.Append(KEnter); // AppendLocationL does not add enter as others
+
+ if (token.TokenType().Type().iUid == KTokenTypeFileKeystore)
+ {
+ AppendItemL(messagePtr, R_QTN_WIM_SETT_PIN_G,
+ KNullDesC, R_QTN_SECMOD_TITLE_PHONE_KEYSTORE_CODE);
+ }
+ else
+ {
+ AppendItemL(messagePtr, R_QTN_WIM_SETT_PIN_G,
+ iAOArray[0]->Label(), R_QTN_WIM_PIN_G_NO_LABEL_DETAILS);
+ }
+
+ AppendPinNRsL(messagePtr);
+
+ AppendItemL(messagePtr, R_QTN_WIM_SERIAL_NRO,
+ token.Information( MCTToken::ESerialNo),
+ R_TEXT_RESOURCE_DETAILS_VIEW_NOT_DEFINED);
+
+ AppendItemL(messagePtr, R_QTN_WIM_MANUF,
+ token.Information( MCTToken::EManufacturer),
+ R_TEXT_RESOURCE_DETAILS_VIEW_NOT_DEFINED);
+
+ CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL(*message);
+ dlg->PrepareLC(R_SECMOD_DETAILS_VIEW);
+ dlg->RunLD();
+ CleanupStack::PopAndDestroy(message);
+ LOG_LEAVEFN("CSecModUIModel::ViewSecModDetailsL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::AppendPinNRsL(TDes& aMessage) const
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::AppendPinNRsL(TDes& aMessage) const
+ {
+ TInt pinCount = iAOArray.Count();
+ HBufC* value = NULL;
+ TInt j = 1;
+
+ for (TInt i=1; i<pinCount; i++)
+ {
+ AppendResourceAndEnterL(aMessage, R_QTN_WIM_KEY_PIN);
+ if (iAOArray[i]->Label().Length() > 0)
+ {
+ aMessage.Append(iAOArray[i]->Label());
+ }
+ else
+ {
+ value = StringLoader::LoadLC(R_QTN_WIM_PIN_NR_NO_LABEL_DETAILS, j);
+ aMessage.Append(*value);
+ j++;
+ }
+ aMessage.Append(KDoubleEnter);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::AppendLocationL(...)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::AppendLocationL(
+ TDes& aMessage,
+ TUid aUid,
+ TInt aItemRes) const
+ {
+ TInt location = 0;
+
+
+ switch ( aUid.iUid )
+ {
+ case KTokenTypeFileKeystore:
+ {
+ location = R_TEXT_RESOURCE_DETAILS_VIEW_LOCATION_PHONE_MEMORY;
+ break;
+ }
+ case KWIMStoreUid:
+ {
+ location = R_TEXT_RESOURCE_DETAILS_VIEW_LOCATION_SMART_CARD;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ if (0 != aItemRes)
+ {
+ AppendResourceAndEnterL(aMessage, aItemRes);
+ }
+ AppendResourceAndEnterL(aMessage, location);
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::AppendItemL(...)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::AppendItemL(
+ TDes& aMessage,
+ TInt aResItem,
+ const TDesC& aValue,
+ TInt aResNotDefined) const
+ {
+ AppendResourceAndEnterL(aMessage, aResItem);
+ AppendValueL(aMessage, aValue, aResNotDefined);
+ aMessage.Append(KEnter);
+ }
+
+// ---------------------------------------------------------
+// CSecModUIModel::AppendResourceL(TDes& aMessage, TInt aResource)
+// Appends aResource to aMessage
+// ---------------------------------------------------------
+//
+void CSecModUIModel::AppendResourceL(TDes& aMessage, TInt aResource) const
+ {
+ HBufC* stringHolder = StringLoader::LoadLC(aResource);
+ aMessage.Append(*stringHolder);
+ CleanupStack::PopAndDestroy(stringHolder);
+ }
+
+// ---------------------------------------------------------
+// CSecModUIModel::AppendResourceL(TDes& aMessage, TInt aResource)
+// Appends aResource to aMessage
+// ---------------------------------------------------------
+//
+void CSecModUIModel::AppendResourceAndEnterL(TDes& aMessage, TInt aResource) const
+ {
+ HBufC* stringHolder = StringLoader::LoadLC(aResource);
+ aMessage.Append(*stringHolder);
+ CleanupStack::PopAndDestroy(stringHolder);
+ aMessage.Append(KEnter);
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::AppendValueL(...)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::AppendValueL(
+ TDes& aMessage,
+ const TDesC& aValue,
+ TInt aResNotDefined) const
+ {
+ HBufC* buf = HBufC::NewLC(KMaxLengthItemValue);
+ buf->Des() = aValue;
+ buf->Des().TrimLeft();
+ TInt length = buf->Des().Length();
+ if (length == 0 )
+ {
+ AppendResourceAndEnterL(aMessage, aResNotDefined);
+ }
+ else
+ {
+ aMessage.Append(*buf);
+ aMessage.Append(KEnter);
+ }
+ CleanupStack::PopAndDestroy(buf);
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::DeleteKeyStoreL(TInt aTokenIndex)
+// -----------------------------------------------------------------------------
+//
+TBool CSecModUIModel::DeleteKeyStoreL(TInt aTokenIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::DeleteKeyStoreL()");
+ __ASSERT_ALWAYS(aTokenIndex < iAOKeyStores.Count(), Panic(EPanicIndexOutOfRange));
+ // ask confirmation from the user
+ if (ShowConfirmationQueryL(R_QTN_CM_CONFIRM_DELETE_KEYS))
+ {
+ RMPointerArray<CCTKeyInfo> keyInfos;
+ CleanupClosePushL(keyInfos);
+ TCTKeyAttributeFilter filter;
+ filter.iPolicyFilter = TCTKeyAttributeFilter::EAllKeys;
+ TInt err = iWrapper->ListKeys(*iAOKeyStores[aTokenIndex], keyInfos, filter);
+ ShowErrorNoteL(err);
+ User::LeaveIfError(err);
+ for (TInt i = 0; i < keyInfos.Count(); ++i)
+ {
+ err = iWrapper->DeleteKey(*iUnifiedKeyStore, keyInfos[i]->Handle());
+ ShowErrorNoteL(err);
+
+ if (KErrHardwareNotAvailable == err )
+ {
+ break; // Break the loop, if keystore not available
+ }
+ }
+ CleanupStack::PopAndDestroy(&keyInfos); //keyInfos
+ ResetAndDestroyCTObjects();
+ InitializeKeyStoreL();
+ LOG_LEAVEFN("CSecModUIModel::DeleteKeyStoreL()");
+ return ETrue;
+ }
+ else
+ {
+ LOG_LEAVEFN("CSecModUIModel::DeleteKeyStoreL()");
+ return EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::IsTokenDeletable(TInt aTokenIndex)
+// -----------------------------------------------------------------------------
+//
+TBool CSecModUIModel::IsTokenDeletable(TInt aTokenIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::IsTokenDeletable()");
+ __ASSERT_ALWAYS(aTokenIndex < iAOKeyStores.Count(), Panic(EPanicIndexOutOfRange));
+ TBool ret = EFalse;
+ if (iAOKeyStores[aTokenIndex]->Token().TokenType().Type().iUid
+ == KTokenTypeFileKeystore)
+ {
+ ret = ETrue;
+ }
+ else
+ {
+ ret = EFalse;
+ }
+ LOG_LEAVEFN("CSecModUIModel::IsTokenDeletable()");
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::LoadPinNRLabelsL(...)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::LoadPinNRLabelsL(CEikTextListBox& aListBox, TBool aShowBlockedNote)
+ {
+ LOG_ENTERFN("CSecModUIModel::LoadPinNRLabelsL()");
+ TBuf<KMaxSettItemSize> item;
+ TBuf<KMaxSettItemSize> label;
+ CDesCArray* itemArray = STATIC_CAST(CDesCArray*, aListBox.Model()->ItemTextArray());
+ itemArray->Reset();
+
+ LOG_WRITE_FORMAT("CSecModUIModel::LoadPinNRLabelsL, iAOArray.Count() == %i",iAOArray.Count());
+ TUint32 status = 0;
+ // Here is assumed that the first AO is always PIN-G
+ for (TInt i = 1; i < iAOArray.Count(); i++)
+ {
+ label = iAOArray[i]->Label();
+ status = iAOArray[i]->Status();
+ LOG_WRITE_FORMAT("PIN-NR status == %i", status);
+ if (status & EAuthObjectBlocked)
+ {
+ if (aShowBlockedNote)
+ {
+ if (status & EUnblockDisabled)
+ {
+ ShowInformationNoteL(R_QTN_WIM_PIN_TOTALBLOCKED, label);
+ }
+ else
+ {
+ ShowInformationNoteL(R_QTN_WIM_ERR_PIN_BLOCKED, label);
+ }
+ }
+ HBufC* value = StringLoader::LoadLC(R_QTN_WIM_STATUS_BLOCKED);
+ CreateSettingItem(label, *value, item );
+ CleanupStack::PopAndDestroy(value);
+ }
+ else
+ {
+ CreateSettingItem(label, KFourAsterisks, item);
+ }
+ itemArray->AppendL(item);
+ label.Zero();
+ item.Zero();
+ }
+ LOG_LEAVEFN("CSecModUIModel::LoadPinNRLabelsL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::LoadPinGItemsL(CEikTextListBox& aListBox)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::LoadPinGItemsL(CEikTextListBox& aListBox)
+ {
+ LOG_ENTERFN("CSecModUIModel::LoadPinGItemsL()");
+ TBuf<KMaxSettItemSize> item;
+ TBuf<KMaxSettItemSize> label;
+
+ CDesCArray* itemArray = STATIC_CAST(CDesCArray*,
+ aListBox.Model()->ItemTextArray());
+
+ if (iKeyStore->Token().TokenType().Type().iUid
+ == KTokenTypeFileKeystore)
+ {
+ AppendResourceL(label, R_QTN_SECMOD_TITLE_PHONE_KEYSTORE_CODE);
+ }
+ else
+ {
+ label = iAOArray[KPinGIndex]->Label();
+ }
+ CreateSettingItem(label, KFourAsterisks, item);
+ itemArray->AppendL(item);
+ item.Zero();
+ PINRequestItemL(KPinGIndex, item);
+ itemArray->AppendL(item);
+ item.Zero();
+ PINStatusItemL(KPinGIndex, item, ETrue);
+ itemArray->AppendL(item);
+ LOG_LEAVEFN("CSecModUIModel::LoadPinGItemsL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::PINRequestItemL(...)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::PINRequestItemL(TInt aIndex, TDes& aItem) const
+ {
+ LOG_ENTERFN("CSecModUIModel::PINRequestItemL()");
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TUint32 status = iAOArray[aIndex]->Status();
+ HBufC* title = NULL;
+ HBufC* value = NULL;
+ title = StringLoader::LoadLC(R_QTN_WIM_PIN_REQUEST);
+
+ if (status & EEnabled)
+ {
+ value = StringLoader::LoadLC(R_QTN_WIM_REQUEST_ON);
+ CreateSettingItem(*title, *value, aItem );
+ }
+ else
+ {
+ value = StringLoader::LoadLC(R_QTN_WIM_REQUEST_OFF);
+ CreateSettingItem(*title, *value, aItem );
+ }
+ CleanupStack::PopAndDestroy(2, title);
+ LOG_LEAVEFN("CSecModUIModel::PINRequestItemL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::PINStatusItemL(...)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::PINStatusItemL(
+ TInt aIndex,
+ TDes& aItem,
+ TBool aShowBlockedNote) const
+ {
+ LOG_ENTERFN("CSecModUIModel::PINStatusItemL()");
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TUint32 status = iAOArray[aIndex]->Status();
+ HBufC* title = NULL;
+ HBufC* value = NULL;
+ title = StringLoader::LoadLC(R_QTN_WIM_SETT_STATUS);
+
+ LOG_WRITE_FORMAT("PIN-G status == %i", status);
+
+ if (status & EAuthObjectBlocked)
+ {
+ if (aShowBlockedNote)
+ {
+ if (status & EUnblockDisabled)
+ {
+ ShowInformationNoteL(
+ R_QTN_WIM_PIN_TOTALBLOCKED, iAOArray[aIndex]->Label());
+ }
+ else
+ {
+ ShowInformationNoteL(
+ R_QTN_WIM_ERR_PIN_BLOCKED, iAOArray[aIndex]->Label());
+ }
+ }
+ value = StringLoader::LoadLC(R_QTN_SECMOD_STATUS_VALUE_BLOCKED);
+ }
+ else if ( PinOpen(aIndex) )
+ {
+ value = StringLoader::LoadLC(R_QTN_WIM_OPT_OPEN);
+ }
+ else
+ {
+ value = StringLoader::LoadLC(R_QTN_WIM_STATUS_CLOSED);
+ }
+ CreateSettingItem(*title, *value, aItem );
+ CleanupStack::PopAndDestroy(2, title);
+ LOG_LEAVEFN("CSecModUIModel::PINStatusItemL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::CreateSettingItem(...)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::CreateSettingItem(
+ const TDesC& aTitle, const TDesC& aValue, TDes& aItem) const
+ {
+ LOG_ENTERFN("CSecModUIModel::CreateSettingItem()");
+ aItem += KTab;
+ aItem += aTitle;
+ aItem += KDoubleTab;
+ aItem += aValue;
+ LOG_LEAVEFN("CSecModUIModel::CreateSettingItem()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::eOrUnblockPinNrL(TInt aIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ChangeOrUnblockPinNrL(TInt aIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::ChangeOrUnblockPinNrL()");
+ // Add PIN-G to the list
+ ChangeOrUnblockPinL(aIndex+1);
+ LOG_LEAVEFN("CSecModUIModel::ChangeOrUnblockPinNrL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ChangeOrUnblockPinL(TInt aIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ChangeOrUnblockPinL(TInt aIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::ChangeOrUnblockPinL()");
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TUint32 status = iAOArray[aIndex]->Status();
+
+ if ((status & EAuthObjectBlocked) && (status & EUnblockDisabled))
+ {
+ return; // We cannot do anything. PIN is total bolcked.
+ }
+ else if (status & EAuthObjectBlocked)
+ {
+ // Let's unblock the PIN
+ UnblockPinL(aIndex);
+ }
+ else if (status & EChangeDisabled)
+ {
+ // We cannot do anything. Change is disabled.
+ }
+ else if (status & EEnabled)
+ {
+ // PIN is enabled. Let's change the PIN.
+ ChangePinL(aIndex);
+ }
+ else
+ {
+ // PIN is disabled. Not possible to change PIN.
+ }
+ LOG_LEAVEFN("CSecModUIModel::ChangeOrUnblockPinL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ChangePinNrL(TInt aIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ChangePinNrL(TInt aIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::ChangePinNrL()");
+ ChangePinL(aIndex+1);
+ LOG_LEAVEFN("CSecModUIModel::ChangePinNrL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ChangePinL(TInt aIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ChangePinL(TInt aIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::ChangePinL()");
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TInt err = KErrNone;
+
+ err = iWrapper->ChangeReferenceData(*(iAOArray[aIndex]));
+ if (err)
+ {
+ ShowErrorNoteL(err);
+ }
+ else
+ {
+ ShowConfirmationNoteL(R_QTN_WIM_INFO_PIN_CHANGED);
+ }
+
+ LOG_LEAVEFN("CSecModUIModel::ChangePinL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::UnblockPinNrL(TInt aIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::UnblockPinNrL(TInt aIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::UnblockPinNrL()");
+ UnblockPinL(aIndex+1);
+ LOG_LEAVEFN("CSecModUIModel::UnblockPinNrL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::UnblockPinL(TInt aIndex)
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::UnblockPinL(TInt aIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::UnblockPinL()");
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TInt err = iWrapper->UnblockAuthObject(*(iAOArray[aIndex]));
+ if (KErrNone == err)
+ {
+ ShowConfirmationNoteL(R_QTN_WIM_INFO_PIN_UNBLOCKED);
+ }
+ else
+ {
+ ShowErrorNoteL(err);
+ }
+ LOG_LEAVEFN("CSecModUIModel::UnblockPinL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::PinNrChangeable(TInt aIndex) const
+// -----------------------------------------------------------------------------
+//
+TBool CSecModUIModel::PinNrChangeable(TInt aIndex) const
+ {
+ // Add PIN-G to the list
+ return PinChangeable(aIndex+1);
+ }
+// -----------------------------------------------------------------------------
+// CSecModUIModel::PinChangeable(TInt aIndex) const
+// -----------------------------------------------------------------------------
+//
+TBool CSecModUIModel::PinChangeable(TInt aIndex) const
+ {
+ LOG_ENTERFN("CSecModUIModel::PinChangeable()");
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TUint32 status = iAOArray[aIndex]->Status();
+ TBool ret = ETrue;
+ if ( (status & EAuthObjectBlocked) || (status & EChangeDisabled) )
+ //if ( status & (EAuthObjectBlocked | EChangeDisabled))
+ {
+ ret = EFalse;
+ }
+ else if ( status & EEnabled )
+ {
+ ret = ETrue;
+ }
+ else // PIN is disabled;
+ {
+ ret = EFalse;
+ }
+ LOG_LEAVEFN("CSecModUIModel::PinChangeable()");
+ return ret;
+ }
+// -----------------------------------------------------------------------------
+// CSecModUIModel::PinNrUnblockable(TInt aIndex) const
+// -----------------------------------------------------------------------------
+//
+TBool CSecModUIModel::PinNrUnblockable(TInt aIndex) const
+ {
+ // Add PIN-G to the list
+ return PinUnblockable(aIndex+1);
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::PinUnblockable(TInt aIndex) const
+// -----------------------------------------------------------------------------
+//
+TBool CSecModUIModel::PinUnblockable(TInt aIndex) const
+ {
+ LOG_ENTERFN("CSecModUIModel::PinUnblockable()");
+ TUint32 status = iAOArray[aIndex]->Status();
+ TBool ret = ETrue;
+ if ( status & EUnblockDisabled )
+ {
+ ret = EFalse;
+ }
+ else if ( status & EAuthObjectBlocked )
+ {
+ ret = ETrue;
+ }
+ else // PIN is not blocked;
+ {
+ ret = EFalse;
+ }
+ LOG_LEAVEFN("CSecModUIModel::PinUnblockable()");
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::PinOpen(TInt aIndex) const
+// -----------------------------------------------------------------------------
+//
+TBool CSecModUIModel::PinOpen(TInt aIndex) const
+ {
+ LOG_ENTERFN("CSecModUIModel::PinOpen()");
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TInt timeRemaining = 0;
+ TInt err = iWrapper->TimeRemaining(*(iAOArray[aIndex]), timeRemaining);
+ TBool ret = ETrue;
+ if ( 0 < timeRemaining )
+ {
+ ret = ETrue;
+ }
+ else if( timeRemaining == -1 )
+ {
+ ret = ETrue;
+ }
+ else
+ {
+ ret = EFalse;
+ }
+ LOG_LEAVEFN("CSecModUIModel::PinOpen()");
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ChangeCodeRequestL(TInt aIndex)
+// -----------------------------------------------------------------------------
+//
+TInt CSecModUIModel::ChangeCodeRequestL(TInt aIndex)
+ {
+ LOG_ENTERFN("CSecModUIModel::ChangeCodeRequestL()");
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TUint32 status = iAOArray[aIndex]->Status();
+ TInt err = KErrNone;
+ if (status & EDisableAllowed && !(status & EAuthObjectBlocked))
+ {
+ if ( status & EEnabled )
+ {
+ err = iWrapper->DisableAuthObject(*(iAOArray[aIndex]));
+ }
+ else
+ {
+ err = iWrapper->EnableAuthObject(*(iAOArray[aIndex]));
+ }
+ ShowErrorNoteL(err);
+ }
+ LOG_LEAVEFN("CSecModUIModel::ChangeCodeRequestL()");
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::PinRequestChangeable(TInt aIndex) const
+// -----------------------------------------------------------------------------
+//
+TBool CSecModUIModel::PinRequestChangeable(TInt aIndex) const
+ {
+ LOG_ENTERFN("CSecModUIModel::PinRequestChangeable()");
+ __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange));
+ TUint32 status = iAOArray[aIndex]->Status();
+ TBool ret = EFalse;
+ if ( status & EAuthObjectBlocked )
+ {
+ ret = EFalse;
+ }
+ else if ( status & EDisableAllowed )
+ {
+ ret = ETrue;
+ }
+ else // Disable not allowed;
+ {
+ ret = EFalse;
+ }
+ LOG_LEAVEFN("CSecModUIModel::PinRequestChangeable()");
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ShowErrorNoteL(TInt aError) const
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ShowErrorNoteL(TInt aError) const
+ {
+ LOG_ENTERFN("CSecModUIModel::ShowErrorNoteL()");
+ HBufC* text = NULL;
+
+ switch (aError)
+ {
+ case KErrCancel:
+ case KErrLocked:
+ case KErrNone:
+ {
+ LOG_WRITE_FORMAT("aError == %i",aError);
+ LOG_LEAVEFN("CSecModUIModel::ShowErrorNoteL()");
+ break;
+ }
+ case KErrInUse:
+ {
+ text = StringLoader::LoadLC(R_QTN_KEYSTORE_INFO_UNABLE_TO_DELETE);
+ break;
+ }
+ case KErrBadPassphrase:
+ {
+ text = StringLoader::LoadLC(R_QTN_WIM_ERR_WRONG_PIN);
+ break;
+ }
+ case KErrHardwareNotAvailable: // flow thru
+ default:
+ {
+ LOG_WRITE_FORMAT("ERROR: aError == %i",aError);
+ text = StringLoader::LoadLC(R_QTN_WIM_ERR_IO_ERROR);
+ break;
+ }
+ }
+
+ if (text)
+ {
+ CAknErrorNote* note = new (ELeave) CAknErrorNote;
+ note->ExecuteLD(*text);
+ CleanupStack::PopAndDestroy(text);
+ }
+ LOG_LEAVEFN("CSecModUIModel::ShowErrorNoteL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ShowConfirmationQueryL(TInt aResourceId) const
+// -----------------------------------------------------------------------------
+//
+TInt CSecModUIModel::ShowConfirmationQueryL(TInt aResourceId) const
+ {
+ LOG_ENTERFN("CSecModUIModel::ShowConfirmationQueryL ()");
+ HBufC* text = NULL;
+ text = StringLoader::LoadLC(aResourceId);
+ CAknQueryDialog* dlg = CAknQueryDialog::NewL(CAknQueryDialog::ENoTone);
+ TInt selection = dlg->ExecuteLD(R_SECMOD_CONFIRMATION_QUERY_YES_NO, *text);
+ CleanupStack::PopAndDestroy(text);
+ LOG_LEAVEFN("CSecModUIModel::ShowConfirmationNoteL()");
+ return selection;
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ShowConfirmationNoteL(TInt aResourceId) const
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ShowConfirmationNoteL(TInt aResourceId) const
+ {
+ LOG_ENTERFN("CSecModUIModel::ShowConfirmationNoteL()");
+ HBufC* text = NULL;
+ text = StringLoader::LoadLC(aResourceId);
+ CAknConfirmationNote * note = new (ELeave) CAknConfirmationNote;
+ note->ExecuteLD(*text);
+ CleanupStack::PopAndDestroy(text);
+ LOG_LEAVEFN("CSecModUIModel::ShowConfirmationNoteL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ShowInformationNoteL(...)
+// Global note needs to be used here because otherwise view might cancel
+// the query too early when the view is activated.
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ShowInformationNoteL(
+ TInt aResourceId,
+ const TDesC& aString) const
+ {
+ LOG_ENTERFN("CSecModUIModel::ShowInformationNoteL()");
+ HBufC* text = NULL;
+ if (0 == aString.Length())
+ {
+ text = StringLoader::LoadLC(aResourceId);
+ }
+ else
+ {
+ text = StringLoader::LoadLC(aResourceId, aString);
+ }
+ CAknGlobalNote * note = CAknGlobalNote::NewLC();
+ note->ShowNoteL(EAknGlobalInformationNote, *text);
+ CleanupStack::PopAndDestroy(2, text);
+ LOG_LEAVEFN("CSecModUIModel::ShowInformationNoteL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ActivateTitleL(const TDesC& aTitle) const
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ActivateTitleL(const TDesC& aTitle) const
+ {
+ LOG_ENTERFN("CSecModUIModel::ActivateTitleL()");
+ TUid titlePaneUid;
+ titlePaneUid.iUid = EEikStatusPaneUidTitle;
+ CEikStatusPane* sp = iAvkonAppUi->StatusPane();
+
+ CEikStatusPaneBase::TPaneCapabilities subPane =
+ sp->PaneCapabilities(titlePaneUid);
+
+ if (subPane.IsPresent() && subPane.IsAppOwned())
+ {
+ // Fetch pointer to the default title pane control
+ CAknTitlePane* title = STATIC_CAST(
+ CAknTitlePane*, sp->ControlL(titlePaneUid) );
+ title->SetTextL(aTitle);
+ }
+ LOG_LEAVEFN("CSecModUIModel::ActivateTitleL()");
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::ActivateTokenLabelToTitleL() const
+// -----------------------------------------------------------------------------
+//
+void CSecModUIModel::ActivateTokenLabelToTitleL() const
+ {
+ if (iKeyStore->Token().TokenType().Type().iUid
+ == KTokenTypeFileKeystore)
+ {
+ HBufC* stringHolder =
+ StringLoader::LoadLC(R_QTN_KEYSTORE_TITLE_PHONE_KEYSTORE);
+ ActivateTitleL(*stringHolder);
+ CleanupStack::PopAndDestroy(stringHolder);
+ }
+ else
+ {
+ ActivateTitleL(iKeyStore->Token().Label());
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::Wrapper()
+// -----------------------------------------------------------------------------
+//
+CSecModUISyncWrapper& CSecModUIModel::Wrapper()
+ {
+ return *iWrapper;
+ }
+
+// -----------------------------------------------------------------------------
+// CSecModUIModel::SecurityModuleCount() const
+// -----------------------------------------------------------------------------
+//
+TInt CSecModUIModel::SecurityModuleCount() const
+ {
+ return iAOKeyStores.Count();
+ }
+
+// End of File