diff -r 28ae839b4c09 -r ff168ad79dda messagingfw/muiuutils/src/MsvFactorySettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/muiuutils/src/MsvFactorySettings.cpp Fri Apr 16 15:27:42 2010 +0300 @@ -0,0 +1,140 @@ +/* +* Copyright (c) 2002 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: MsvFactorySettings implementation +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "MsvFactorySettings.h" + + + +// MODULE DATA STRUCTURES +class CDummyObserver : public CBase, public MMsvSessionObserver + { + public: + CDummyObserver() {}; + void HandleSessionEventL( TMsvSessionEvent /*aEvent*/, + TAny* /*aArg1*/, + TAny* /*aArg2*/, + TAny* /*aArg3*/ ) {}; + }; + +// LOCAL FUNCTION PROTOTYPES +/** +* Performs factory settings to single item +*/ +void DoRestoreFactorySettingsSingleMtmL( CClientMtmRegistry& aBaseReg, + CMtmUiRegistry& aUiReg, + TUid anId, + TMsvFactorySettingsLevel aLevel ); + + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// MsvFactorySettings::ResetL +// --------------------------------------------------------- +// +EXPORT_C void MsvFactorySettings::ResetL( TMsvFactorySettingsLevel aLevel ) + { + // connect to the server + CDummyObserver* ob = new( ELeave )CDummyObserver; + CleanupStack::PushL(ob); + + CMsvSession* session = CMsvSession::OpenSyncL( *ob ); + CleanupStack::PushL( session ); + + //create ui registry + CClientMtmRegistry* basemtmregistry = CClientMtmRegistry::NewL( *session ); + CleanupStack::PushL( basemtmregistry ); + CMtmUiRegistry* uiRegistry = CMtmUiRegistry::NewL( *session ); + CleanupStack::PushL( uiRegistry ); + + //check through mtms + TInt error = 0; + TInt count=uiRegistry->NumRegisteredMtmDlls(); + for ( TInt cc=0; cc < count; ++cc ) + { + // return value is ignored, so as not to prevent other MTMs being initialised + TRAPD(ret, DoRestoreFactorySettingsSingleMtmL( *basemtmregistry, + *uiRegistry, + basemtmregistry->MtmTypeUid( cc ), + aLevel ) ); + if ( ret && ret != KErrNotSupported ) + { + error = ret; + } + } + + User::LeaveIfError( error ); + CleanupStack::PopAndDestroy( 4,ob ); // uiRegistry,basemtmregistry,session,ob + } + + +// --------------------------------------------------------- +// DoRestoreFactorySettingsSingleMtmL +// --------------------------------------------------------- +// +void DoRestoreFactorySettingsSingleMtmL( CClientMtmRegistry& aBaseReg, + CMtmUiRegistry& aUiReg, + TUid anId, + TMsvFactorySettingsLevel aLevel ) + { + //create base mtm + CBaseMtm* baseMtm = aBaseReg.NewMtmL( anId ); + CleanupStack::PushL( baseMtm ); + + CBaseMtmUi* mtmUi = aUiReg.NewMtmUiL( *baseMtm ); + CleanupStack::PushL( mtmUi ); + + TInt response; + TUid isInstalled = { KUidMsvMtmQueryFactorySettings }; + TInt err = mtmUi->QueryCapability( isInstalled, response ); + + if ( err == KErrNone ) + { + // Need to install this type + CMsvEntrySelection* tempobject = new ( ELeave ) CMsvEntrySelection; + CleanupStack::PushL( tempobject ); + TPckg levelPack( aLevel ); + TInt installNow = { KMtmUiFunctionRestoreFactorySettings }; + mtmUi->InvokeSyncFunctionL( installNow, *tempobject, levelPack ); + CleanupStack::PopAndDestroy( tempobject ); + } + else if ( err != KErrNotSupported ) + { + User::Leave( err ); + } + else + { + //Does nothing + } + + CleanupStack::PopAndDestroy( 2, baseMtm ); // mtmUi,baseMtm + } + +// End of File +