--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/cone/src/COEMAINSECUREFEP.CPP Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,147 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <coemain.h>
+#include "coeenvextra.h"
+#include "coepanic.h"
+#include <fepplugin.h>
+#include "COEFEP.H"
+#include "coedatastorage.h"
+
+
+#include <ecom/ecom.h>
+
+
+CCoeFepParameters* CCoeFepParameters::NewLC()
+/**
+@internalTechnology
+*/
+ {
+ CCoeFepParameters* const fepParameters=new(ELeave) CCoeFepParameters;
+ CleanupStack::PushL(fepParameters);
+ return fepParameters;
+ }
+
+void CCoeEnv::EnsureSpecifiedFepIsLoadedL(TUid aFepUid)
+ {
+ if (iExtra->iFep.iFepUid != aFepUid)
+ {
+ if (aFepUid == KNullUid)
+ {
+ CCoeEnvExtra::DestroyFep(iExtra->iFep);
+ iExtra->HandleChangeInLoadedFep();
+ }
+ else
+ {
+ CCoeEnvExtra::TFep newFep;
+ CleanupStack::PushL(TCleanupItem(CCoeEnvExtra::DestroyFep, &newFep));
+ newFep.iFepPlugIn = CCoeFepPlugIn::NewL(aFepUid);
+ CCoeFepParameters* const dummyFepParameters = CCoeFepParameters::NewLC();
+ newFep.iFep = newFep.iFepPlugIn->NewFepL(*this, *dummyFepParameters);
+ CleanupStack::PopAndDestroy(dummyFepParameters);
+ newFep.iFepUid=aFepUid;
+ CleanupStack::Pop(&newFep);
+ CCoeEnvExtra::DestroyFep(iExtra->iFep);
+ iExtra->iFep = newFep;
+ iExtra->HandleChangeInLoadedFep();
+ }
+ }
+ }
+
+static void CleanupResetEComImpArray(TAny* aArray)
+ {
+ RImplInfoPtrArray* implementationArray = reinterpret_cast<RImplInfoPtrArray*>(aArray);
+ implementationArray->ResetAndDestroy();
+ }
+
+EXPORT_C void CCoeEnv::AvailableFepsL(RArray<TUid>& aUids, CDesCArray* aDisplayNames)
+/**
+Gets the UIDs, and optionally display names, of all the secure FEPs that are available.
+
+@param aUids The array of FEP UIDs to be filled.
+@param aDisplayNames The array of FEP display names to be filled. May be passed as NULL if display names are not required.
+*/
+ {
+ aUids.Reset();
+ if(aDisplayNames)
+ {
+ aDisplayNames->Reset();
+ }
+ RImplInfoPtrArray implementationArray;
+ CleanupStack::PushL(TCleanupItem(CleanupResetEComImpArray, &implementationArray));
+ REComSession::ListImplementationsL(KUidFepPluginInterface, implementationArray);
+ const TInt count = implementationArray.Count();
+ for(TInt index=0; index<count; ++index)
+ {
+ CImplementationInformation& impl = *(implementationArray[index]);
+ User::LeaveIfError(aUids.Append( impl.ImplementationUid() ));
+ if(aDisplayNames)
+ {
+ aDisplayNames->AppendL(impl.DisplayName());
+ }
+ }
+ CleanupStack::PopAndDestroy(&implementationArray);
+ }
+
+EXPORT_C void CCoeEnv::InstallFepL(TUid aFepUid)
+/**
+Loads the specified secure FEP into all running applications.
+
+The currently loaded FEP, if any, is unloaded.
+
+@param aFepUid The UID of the secure FEP to be loaded.
+@capability WriteDeviceData To protect against installation of insecure FEP.
+*/
+ {
+ InstallFepL(aFepUid, EFalse);
+ }
+
+EXPORT_C void CCoeEnv::InstallFepL(TUid aFepUid, const TBool aLeave)
+/**
+Loads the specified secure FEP into all running applications.
+
+The currently loaded FEP, if any, is unloaded.
+
+@param aFepUid The UID of the secure FEP to be loaded.
+@param aLeave No longer used.
+@capability WriteDeviceData To protect against installation of insecure FEP.
+*/
+ {
+ (void)aLeave;
+ TBuf<16> fepId;
+ FepName::NameFromUid(fepId, aFepUid);
+ CCoeDataStorage::GetL(*this).SetInstalledFepIdL(fepId);
+ }
+
+EXPORT_C void CCoeEnv::ExecuteFepSettingsDialogL(TUid aFepUid)
+/**
+Executes the settings dialog for the specified secure FEP.
+
+The specified FEP does not need to be loaded.
+
+@param aFepUid The UID of the secure FEP for which the settings dialog
+is to be executed.
+*/
+ {
+ CCoeFepPlugIn* fepPlugIn = CCoeFepPlugIn::NewL(aFepUid);
+ CleanupStack::PushL(fepPlugIn);
+ fepPlugIn->SynchronouslyExecuteSettingsDialogL(*this);
+ CleanupStack::PopAndDestroy(fepPlugIn);
+ }
+
+
+//
+
+