pushmtm/MtmUtilSrc/PushMtmSettings.cpp
changeset 0 84ad3b177aa3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushMtmSettings.cpp	Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,320 @@
+/*
+* 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 the License "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:  CPushMtmSettings class definition.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmSettings.h"
+#include "PushInitiatorList.h"
+#include "PushMtmUtilPanic.h"
+#include "PushMtmLog.h"
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h> 
+#include <PushEntry.h>
+#include <SysUtil.h>
+#include <bldvariant.hrh>
+#include <FeatMgr.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmSettings::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmSettings* CPushMtmSettings::NewL()
+    {
+    CPushMtmSettings* self = CPushMtmSettings::NewLC();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::NewLC
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmSettings* CPushMtmSettings::NewLC()
+    {
+    PUSHLOG_ENTERFN("CPushMtmSettings::NewLC")
+
+    CPushMtmSettings* self = new (ELeave) CPushMtmSettings();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    PUSHLOG_LEAVEFN("CPushMtmSettings::NewLC")
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::~CPushMtmSettings
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmSettings::~CPushMtmSettings()
+    {
+    PUSHLOG_ENTERFN("CPushMtmSettings::~CPushMtmSettings")
+    delete iPushInitiatorList;
+    if ( iFeatureManagerInitialized )
+        {
+        FeatureManager::UnInitializeLib();
+        iFeatureManagerInitialized = EFalse;
+        }
+    PUSHLOG_LEAVEFN("CPushMtmSettings::~CPushMtmSettings")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::SetServiceReception
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::SetServiceReception( TBool aReceive )
+    {
+    PUSHLOG_WRITE_FORMAT
+        ("CPushMtmSettings::SetServiceReception <%d>",aReceive?1:0)
+    if ( iServiceReception != aReceive )
+        {
+        iServiceReception = aReceive;
+        iServiceReceptionChanged = ETrue;
+        }
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::SetServiceLoadingType
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::SetServiceLoadingType( TServiceLoading aType )
+    {
+    PUSHLOG_WRITE_FORMAT
+        ("CPushMtmSettings::SetServiceLoadingType <%d>",(TInt)aType)
+    if ( iServiceLoadingType != aType )
+        {
+        iServiceLoadingType = aType;
+        iServiceLoadingTypeChanged = ETrue;
+        }
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::ServiceReception
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CPushMtmSettings::ServiceReception() const
+    {
+    PUSHLOG_WRITE_FORMAT
+        ("CPushMtmSettings::ServiceReception <%d>",(TInt)iServiceReception)
+    return iServiceReception;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::ServiceLoadingType
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmSettings::TServiceLoading 
+    CPushMtmSettings::ServiceLoadingType() const
+    {
+    PUSHLOG_WRITE_FORMAT
+        ("CPushMtmSettings::ServiceLoadingType <%d>",(TInt)iServiceLoadingType)
+    return iServiceLoadingType;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::PushInitiatorList
+// ---------------------------------------------------------
+//
+EXPORT_C CPushInitiatorList& CPushMtmSettings::PushInitiatorList() const
+    {
+    __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+    return *iPushInitiatorList;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::LoadL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::LoadL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmSettings::LoadL")
+
+    Reset(); // Remove outdated data.
+
+    // Open the Repository for reading:
+    CRepository* repository = CRepository::NewL( KCRUidPushMtm );
+    CleanupStack::PushL( repository );
+
+    InternalizeL( *repository );
+
+    CleanupStack::PopAndDestroy( repository ); // repository
+
+    // ******************** Reset indicators ***********************
+    iServiceReceptionChanged = EFalse;
+    iServiceLoadingTypeChanged = EFalse;
+    __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+    iPushInitiatorList->ResetChanged();
+
+    PUSHLOG_LEAVEFN("CPushMtmSettings::LoadL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::SaveL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::SaveL( const TBool aForce )
+    {
+    PUSHLOG_ENTERFN("CPushMtmSettings::SaveL")
+    PUSHLOG_WRITE_FORMAT(" aForce <%d>",aForce?1:0)
+    PUSHLOG_WRITE_FORMAT(" SR changed <%d>",iServiceReceptionChanged?1:0)
+    PUSHLOG_WRITE_FORMAT(" SL changed <%d>",iServiceLoadingTypeChanged?1:0)
+    __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+    PUSHLOG_WRITE_FORMAT(" WL changed <%d>",iPushInitiatorList->Changed()?1:0)
+
+    if ( aForce || ( iServiceReceptionChanged || 
+                     iServiceLoadingTypeChanged || 
+                     iPushInitiatorList->Changed() ) )
+        {
+        // Save the settings to Repository.
+        CRepository* repository = CRepository::NewL( KCRUidPushMtm );
+        CleanupStack::PushL( repository );
+
+        ExternalizeL( *repository );
+
+        CleanupStack::PopAndDestroy( repository ); // repository
+
+        // ***************** Reset indicators ***********************
+        iServiceReceptionChanged = EFalse;
+        iServiceLoadingTypeChanged = EFalse;
+        __ASSERT_DEBUG( iPushInitiatorList, 
+                        UtilPanic( EPushMtmUtilPanNull ) );
+        iPushInitiatorList->ResetChanged();
+        }
+
+    PUSHLOG_LEAVEFN("CPushMtmSettings::SaveL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::RestoreFactorySettingsL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::RestoreFactorySettingsL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmSettings::RestoreFactorySettingsL")
+
+    // The factory settings are stored in the shared data.
+    CRepository* repository = CRepository::NewL( KCRUidPushMtm );
+    CleanupStack::PushL( repository );
+    User::LeaveIfError( repository->Reset() );
+    PUSHLOG_WRITE(" repository->Reset OK")
+    CleanupStack::PopAndDestroy( repository ); // repository
+
+    // Load up-to-date values.
+    LoadL();
+
+    PUSHLOG_LEAVEFN("CPushMtmSettings::RestoreFactorySettingsL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmSettings::ConstructL()
+    {
+    // Create an empty push initiator list.
+    iPushInitiatorList = CPushInitiatorList::NewL();
+    FeatureManager::InitializeLibL();
+    iFeatureManagerInitialized = ETrue;
+    // Initialize:
+    LoadL();
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::CPushMtmSettings
+// ---------------------------------------------------------
+//
+CPushMtmSettings::CPushMtmSettings() 
+:   CBase(), 
+    iServiceReception( ETrue ), 
+    iServiceLoadingType( EManual ), 
+    iServiceReceptionChanged ( EFalse ), 
+    iServiceLoadingTypeChanged ( EFalse ),
+    iFeatureManagerInitialized( EFalse )
+    {
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::Reset
+// ---------------------------------------------------------
+//
+void CPushMtmSettings::Reset()
+    {
+    PUSHLOG_ENTERFN("CPushMtmSettings::Reset")
+    __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+    iPushInitiatorList->ResetAndDestroy();
+    PUSHLOG_LEAVEFN("CPushMtmSettings::Reset")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::ExternalizeL
+// ---------------------------------------------------------
+//
+void CPushMtmSettings::ExternalizeL( CRepository& aRepository ) const
+    {
+    PUSHLOG_ENTERFN("CPushMtmSettings::ExternalizeL")
+
+    __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+
+    TInt value;
+    PUSHLOG_WRITE_FORMAT
+        (" iServiceReception <%d>",(TInt)iServiceReception)
+    value = iServiceReception ? 1 : 0;
+    User::LeaveIfError( aRepository.Set( KPushMtmServiceReception, value ) );
+    PUSHLOG_WRITE(" SR written")
+    
+    PUSHLOG_WRITE_FORMAT
+        (" iServiceLoadingType <%d>",(TInt)iServiceLoadingType)
+    value = ( iServiceLoadingType == CPushMtmSettings::EManual ) ? 1 : 0;
+    User::LeaveIfError( aRepository.Set( KPushMtmServiceLoading, value ) );
+    PUSHLOG_WRITE(" SL written")
+    
+    iPushInitiatorList->ExternalizeL( aRepository );
+
+    PUSHLOG_LEAVEFN("CPushMtmSettings::ExternalizeL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::InternalizeL
+// ---------------------------------------------------------
+//
+void CPushMtmSettings::InternalizeL( CRepository& aRepository )
+    {
+    PUSHLOG_ENTERFN("CPushMtmSettings::InternalizeL")
+
+    __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+    
+    TInt value(0);
+    User::LeaveIfError( aRepository.Get( KPushMtmServiceReception, value ) );
+    PUSHLOG_WRITE_FORMAT(" KPushMtmServiceReception <%d>",(TInt)value)
+    iServiceReception = ( value == 1 ) ? ETrue : EFalse;
+    PUSHLOG_WRITE(" SR loaded")
+    
+    User::LeaveIfError( aRepository.Get( KPushMtmServiceLoading, value ) );
+    PUSHLOG_WRITE_FORMAT(" KPushMtmServiceLoading <%d>",(TInt)value)
+    iServiceLoadingType = ( value == 1 ) ? CPushMtmSettings::EManual : 
+                                           CPushMtmSettings::EAutomatic;
+    PUSHLOG_WRITE(" SL loaded")
+    
+    iPushInitiatorList->InternalizeL( aRepository );
+
+    PUSHLOG_LEAVEFN("CPushMtmSettings::InternalizeL")
+    }
+
+//  End of File.