messagingfw/muiuutils/src/MsvFactorySettings.cpp
changeset 15 ff168ad79dda
--- /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 <e32base.h>
+#include <e32test.h>
+#include <msvapi.h>
+#include <msvuids.h>
+#include <mtmuibas.h>
+#include <mtuireg.h>
+#include <mtudcbas.h>
+#include <bautils.h>
+#include <mtmuidef.hrh>
+#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<TMsvFactorySettingsLevel > 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  
+