emailservices/emailserver/cmailhandlerplugin/src/cmailcpssettings.cpp
branchRCL_3
changeset 52 efd4f1afd43e
parent 26 67369d1b217f
--- 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 <e32base.h>
 // CRepository
 #include <centralrepository.h>
+#include <connect/sbdefs.h>
 
 // Email Framework APIs
 //<cmail>
@@ -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<CFSMailBox> 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;
+    }