diff -r b5fbb9b25d57 -r 67369d1b217f emailuis/emailui/src/FreestyleEmailUiAppui.cpp --- a/emailuis/emailui/src/FreestyleEmailUiAppui.cpp Tue May 11 15:57:15 2010 +0300 +++ b/emailuis/emailui/src/FreestyleEmailUiAppui.cpp Tue May 25 12:23:16 2010 +0300 @@ -38,6 +38,7 @@ #include "cfsmailmessage.h" #include "cfsmailaddress.h" #include "cfsmailcommon.h" +#include "cemailsettingsextension.h" // #include #include @@ -151,6 +152,7 @@ } const TUint KConnectionStatusIconRotationInterval = 100; +const TUint KFakeSyncAnimStopTimerInterval = 3000; // 3 secs const TInt KConnectionStatusIconRotationAmount = 18; // Length of the drive letter descriptor (e.g. "c:") const TInt KDriveDescLength = 2; @@ -584,6 +586,7 @@ // Create custom statuspane indicators object, which shows priority and followup flags CreateStatusPaneIndicatorsL(); iConnectionStatusIconAnimTimer = CFSEmailUiGenericTimer::NewL(this, CActive::EPriorityLow); + iFakeSyncAnimStopTimer = CFSEmailUiGenericTimer::NewL(this, CActive::EPriorityLow); // this includes a wait note where code running will be pending // until a certain callback event is received @@ -740,7 +743,7 @@ delete iNaviDecorator2MailViewer; delete iConnectionStatusIconAnimTimer; - + delete iFakeSyncAnimStopTimer; MTouchFeedback* touchFeedback( MTouchFeedback::Instance() ); if (touchFeedback && touchFeedback->TouchFeedbackSupported()) @@ -1132,7 +1135,7 @@ FUNC_LOG; TIMESTAMP ("Exiting from email application"); g_ApplicationExitOnGoing = ETrue; - if ( iExitGuardian->ExitApplication() == KRequestPending ) + if ( iExitGuardian->TryExitApplication() == KRequestPending ) { SendToBackground(); } @@ -1586,18 +1589,6 @@ } } -void CFreestyleEmailUiAppUi::ManualMailBoxSync( TBool aManualMailBoxSync ) - { - FUNC_LOG; - iManualMailBoxSync = aManualMailBoxSync; - } - -void CFreestyleEmailUiAppUi::ManualMailBoxSyncAll( TBool aManualMailBoxSyncAll ) - { - FUNC_LOG; - iManualMailBoxSyncAll = aManualMailBoxSyncAll; - } - void CFreestyleEmailUiAppUi::ManualMailBoxConnectAll( TBool aManualMailBoxConnectAll ) { FUNC_LOG; @@ -1822,7 +1813,21 @@ // Disabled if offline or roaming if ( aAutoSync ) { - StartMonitoringL(); + // check manual online setting + CEmailExtension* ext=NULL; + TBool manualSync = EFalse; + ext = iActiveMailbox->ExtensionL( KEmailSettingExtensionUid ); + if (ext) + { + CEmailSettingsExtension* extension = reinterpret_cast( ext ); + extension->SetMailBoxId(iActiveMailbox->GetId()); + manualSync = extension->IsSetL(EmailSyncInterval); + iActiveMailbox->ReleaseExtension(ext); + } + if(!manualSync) + { + StartMonitoringL(); + } } } @@ -2111,10 +2116,6 @@ FUNC_LOG; INFO_1( "CMAIL Received event: %d", aEvent ); - if (iExitGuardian) - { - iExitGuardian->EnterLC(); - } TBool gridContentsChanged = EFalse; @@ -2177,6 +2178,7 @@ break; case TFSEventMailboxSyncStateChanged: { + TBool tryRunningFakeSyncAnim( EFalse ); TSSMailSyncState* newSyncState = static_cast( aParam1 ); if ( newSyncState !=0 && *newSyncState ) { @@ -2185,49 +2187,41 @@ case StartingSync: { TIMESTAMP( "Starting sync" ); - //If syncs were started by user, show the synchoronisation indicator - if(iManualMailBoxSyncAll) - { - ManualMailBoxSyncAll(EFalse); - } } break; case SyncError: { // error occured during "Connect" or "Send and receive" operation - // check if user needs to be notified TIMESTAMP( "Sync error" ); - if ( iManualMailBoxSync ) - { - /* - * As a fix to TJOS-82ZFCW, this general popup is no longer needed - * // since error id is not provided by plugin, lets popup general note - * HBufC* text = StringLoader::LoadL( R_FS_MSERVER_TEXT_UNABLE_TO_COMPLETE ); - * CleanupStack::PushL( text ); - * CAknInformationNote* infoNote = new ( ELeave ) CAknInformationNote; - * infoNote->ExecuteLD( *text ); - * CleanupStack::PopAndDestroy( text ); - */ - ManualMailBoxSync( EFalse ); - } } break; - case FinishedSuccessfully: + case FinishedSuccessfully: // fall through + case Idle: + tryRunningFakeSyncAnim = ETrue; + // fall through case SyncCancelled: - case Idle: { TIMESTAMP( "Sync finished" ); - ManualMailBoxSync( EFalse ); } - break; - + break; case PushChannelOffBecauseBatteryIsLow: { } break; } //switch } - UpdateTitlePaneConnectionStatus(); + + if ( tryRunningFakeSyncAnim ) + { + TRAP_IGNORE( RunFakeSyncAnimL() ); + } + + // update title pane connection status only if fake anim isn't + // ongoing (if it is the update will happen once it's finished) + if ( !iFakeSyncAnimStopTimer->IsActive() ) + { + UpdateTitlePaneConnectionStatus(); + } } //case break; @@ -2317,10 +2311,6 @@ } // Download manager removed - if (iExitGuardian) - { - CleanupStack::PopAndDestroy(); // iExitGuardian->EnterLC() - } } void CFreestyleEmailUiAppUi::LaunchWizardL() @@ -2530,6 +2520,7 @@ titlePane->SetSmallPicture( iConnectionIconBitmap, iConnectionIconMask, iConnectionIconBitmap && iConnectionIconMask); } iConnectionStatusIconAnimTimer->Stop(); + iFakeSyncAnimStopTimer->Stop(); } void CFreestyleEmailUiAppUi::UpdateTitlePaneConnectionStatus( @@ -2563,6 +2554,7 @@ // Set connection icon iConnectionStatusIconAnimTimer->Stop(); + iFakeSyncAnimStopTimer->Stop(); iConnectionIconBitmap = 0; iConnectionIconMask = 0; TSize iconSize = LayoutHandler()->statusPaneIconSize(); @@ -2920,6 +2912,56 @@ } // ----------------------------------------------------------------------------- +// CFreestyleEmailUiAppUi::RunFakeSyncAnimL +// ----------------------------------------------------------------------------- +void CFreestyleEmailUiAppUi::RunFakeSyncAnimL() + { + FUNC_LOG; + + if ( iConnectionStatusVisible ) + { + // don't run if animation already ongoing + if ( !iConnectionStatusIconAnimTimer->IsActive() ) + { + TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle ); + CEikStatusPaneBase::TPaneCapabilities subPaneTitle = + StatusPane()->PaneCapabilities( titlePaneUid ); + if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() ) + { + CAknTitlePane* titlePane = + static_cast( + StatusPane()->ControlL( titlePaneUid ) ); + if ( titlePane ) + { + iConnectionIconBitmap = NULL; + iConnectionIconMask = NULL; + FsTextureManager()->ProvideBitmapL( + EStatusTextureSynchronising, + iConnectionIconBitmap, + iConnectionIconMask ); + if ( iConnectionIconBitmap && iConnectionIconMask ) + { + AknIconUtils::SetSize( + iConnectionIconBitmap, + LayoutHandler()->statusPaneIconSize(), + EAspectRatioNotPreserved ); + titlePane->SetSmallPicture( + iConnectionIconBitmap, + iConnectionIconMask, + ETrue ); + iConnectionStatusIconAnimTimer->Start( + KConnectionStatusIconRotationInterval ); + iFakeSyncAnimStopTimer->Start( + KFakeSyncAnimStopTimerInterval ); + titlePane->DrawNow(); + } + } + } + } + } + } + +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void CFreestyleEmailUiAppUi::ConstructNaviPaneL() @@ -2975,7 +3017,7 @@ void CFreestyleEmailUiAppUi::TimerEventL( CFSEmailUiGenericTimer* aTriggeredTimer ) { - if (aTriggeredTimer == iConnectionStatusIconAnimTimer) + if ( aTriggeredTimer == iConnectionStatusIconAnimTimer ) { if ( iConnectionStatusVisible ) { @@ -2997,6 +3039,12 @@ } } } + if ( aTriggeredTimer == iFakeSyncAnimStopTimer ) + { + // Just call the UpdateTitlePaneConnectionStatus. + // The method will put the correct sync icon to title pane + UpdateTitlePaneConnectionStatus(); + } } // -----------------------------------------------------------------------------