diff -r 6b8f3b30d0ec -r efd4f1afd43e emailservices/emailserver/cmailhandlerplugin/src/cmailcpssettings.cpp --- a/emailservices/emailserver/cmailhandlerplugin/src/cmailcpssettings.cpp Wed Jun 09 09:22:57 2010 +0300 +++ b/emailservices/emailserver/cmailhandlerplugin/src/cmailcpssettings.cpp Mon Jun 21 15:20:54 2010 +0300 @@ -20,6 +20,7 @@ #include // CRepository #include +#include // Email Framework APIs // @@ -59,6 +60,7 @@ FUNC_LOG; Cancel(); iMailboxArray.Close(); + delete iBackupRestoreSubscriber; delete iCenRep; } @@ -70,7 +72,9 @@ CActive( EPriorityStandard ), iMailClient( aMailClient ), iCenRep( NULL ), - iConfigData( 0 ) + iConfigData( 0 ), + iRestoreStarted( EFalse ), + iBackupOngoing( EFalse ) { FUNC_LOG; CActiveScheduler::Add( this ); @@ -87,6 +91,9 @@ // Trapping is done by MailServer infrastructure, not by CPS handler // In practice, this is fatal to cps handling, and widget won't work iCenRep = CRepository::NewL( KCRUidCmailWidget ); + iBackupRestoreSubscriber = CPSSubscriber::NewL( + *this, KUidSystemCategory, conn::KUidBackupRestoreKey ); + iBackupRestoreSubscriber->Subscribe(); LoadSettingsL(); // mailboxes etc. user changeable data LoadConfigurationL(); // internal configuration data } @@ -98,10 +105,13 @@ void CMailCpsSettings::RunL() { FUNC_LOG; - StartObservingL(); - LoadSettingsL(); // mailboxes etc. user changeable data - LoadConfigurationL(); // internal configuration data - iObserver->SettingsChangedCallback(); + if ( !BackupOrRestoreMode() ) + { + StartObservingL(); + LoadSettingsL(); // mailboxes etc. user changeable data + LoadConfigurationL(); // internal configuration data + iObserver->SettingsChangedCallback(); + } } // --------------------------------------------------------------------------- @@ -348,7 +358,7 @@ FUNC_LOG; RPointerArray mailboxarray; TInt err = iMailClient.ListMailBoxes( TFSMailMsgId(), mailboxarray ); - INFO_1("CMailCpsSettings::ResolveMailbox():: ListMailBoxes() returns %d", err); + INFO_1("CMAIL CMailCpsSettings::ResolveMailbox():: ListMailBoxes() returns %d", err); if( !err ) // KErrNone = 0 { err = KErrNotFound; @@ -914,6 +924,60 @@ return ret; } +// --------------------------------------------------------------------------- +// CMailCpsSettings::HandlePropertyChangedL +// --------------------------------------------------------------------------- +// +void CMailCpsSettings::HandlePropertyChangedL( const TUid& aCategory, TInt aKey ) + { + FUNC_LOG; + if ( aCategory == KUidSystemCategory && aKey == conn::KUidBackupRestoreKey ) + { + TInt keyVal = 0; + const TInt error = RProperty::Get( KUidSystemCategory, conn::KUidBackupRestoreKey, keyVal ); + if( error == KErrNone ) + { + const conn::TBURPartType partType = + static_cast< conn::TBURPartType >( keyVal & conn::KBURPartTypeMask ); + if ( keyVal != 0 ) + { + switch( partType ) + { + case conn::EBURRestoreFull: + case conn::EBURRestorePartial: + iRestoreStarted = ETrue; + break; + case conn::EBURBackupFull: + case conn::EBURBackupPartial: + iBackupOngoing = ETrue; + break; + case conn::EBURUnset: + case conn::EBURNormal: + default: + iBackupOngoing = EFalse; + break; + } + } + } + } + } +// ---------------------------------------------------------------------------- +// CMailCpsHandler::BackupOrRestoreMode() +// Check if phone is in backup/restore mode +// ---------------------------------------------------------------------------- +// +TBool CMailCpsSettings::BackupOrRestoreMode() + { + FUNC_LOG; + + TBool backupOrRestore = EFalse; + + if ( iRestoreStarted || iBackupOngoing ) + { + backupOrRestore = ETrue; + } + return backupOrRestore; + }