emailuis/emailui/src/FreestyleEmailUiAppui.cpp
branchRCL_3
changeset 17 67369d1b217f
parent 16 b5fbb9b25d57
child 18 6b8f3b30d0ec
equal deleted inserted replaced
16:b5fbb9b25d57 17:67369d1b217f
    36 #include "cfsmailbox.h"
    36 #include "cfsmailbox.h"
    37 #include "cfsmailfolder.h"
    37 #include "cfsmailfolder.h"
    38 #include "cfsmailmessage.h"
    38 #include "cfsmailmessage.h"
    39 #include "cfsmailaddress.h"
    39 #include "cfsmailaddress.h"
    40 #include "cfsmailcommon.h"
    40 #include "cfsmailcommon.h"
       
    41 #include "cemailsettingsextension.h"
    41 //</cmail>
    42 //</cmail>
    42 #include <freestyleemailui.mbg>
    43 #include <freestyleemailui.mbg>
    43 #include <AknQueryDialog.h>
    44 #include <AknQueryDialog.h>
    44 #include <AknBidiTextUtils.h>
    45 #include <AknBidiTextUtils.h>
    45 #include <gdi.h>
    46 #include <gdi.h>
   149     return static_cast<CFreestyleEmailUiAppUi*>
   150     return static_cast<CFreestyleEmailUiAppUi*>
   150     	( aObject )->ViewLoadIdleCallbackFunctionL();
   151     	( aObject )->ViewLoadIdleCallbackFunctionL();
   151     }
   152     }
   152 
   153 
   153 const TUint KConnectionStatusIconRotationInterval = 100;
   154 const TUint KConnectionStatusIconRotationInterval = 100;
       
   155 const TUint KFakeSyncAnimStopTimerInterval = 3000; // 3 secs
   154 const TInt KConnectionStatusIconRotationAmount = 18;
   156 const TInt KConnectionStatusIconRotationAmount = 18;
   155 // Length of the drive letter descriptor (e.g. "c:")
   157 // Length of the drive letter descriptor (e.g. "c:")
   156 const TInt KDriveDescLength = 2;
   158 const TInt KDriveDescLength = 2;
   157 
   159 
   158 
   160 
   582 
   584 
   583     iConnectionStatusVisible = ETrue;
   585     iConnectionStatusVisible = ETrue;
   584     // Create custom statuspane indicators object, which shows priority and followup flags
   586     // Create custom statuspane indicators object, which shows priority and followup flags
   585     CreateStatusPaneIndicatorsL();
   587     CreateStatusPaneIndicatorsL();
   586     iConnectionStatusIconAnimTimer = CFSEmailUiGenericTimer::NewL(this, CActive::EPriorityLow);
   588     iConnectionStatusIconAnimTimer = CFSEmailUiGenericTimer::NewL(this, CActive::EPriorityLow);
       
   589     iFakeSyncAnimStopTimer = CFSEmailUiGenericTimer::NewL(this, CActive::EPriorityLow);
   587 
   590 
   588     // this includes a wait note where code running will be pending
   591     // this includes a wait note where code running will be pending
   589     // until a certain callback event is received
   592     // until a certain callback event is received
   590     // -> thus keep this last in this method!
   593     // -> thus keep this last in this method!
   591     iWizardObserver->DoWizardStartupActionsL();
   594     iWizardObserver->DoWizardStartupActionsL();
   738     CFSEmailDownloadInfoMediator::Destroy();
   741     CFSEmailDownloadInfoMediator::Destroy();
   739 
   742 
   740     delete iNaviDecorator2MailViewer;
   743     delete iNaviDecorator2MailViewer;
   741 
   744 
   742     delete iConnectionStatusIconAnimTimer;
   745     delete iConnectionStatusIconAnimTimer;
   743 
   746     delete iFakeSyncAnimStopTimer;
   744 
   747 
   745     MTouchFeedback* touchFeedback( MTouchFeedback::Instance() );
   748     MTouchFeedback* touchFeedback( MTouchFeedback::Instance() );
   746     if (touchFeedback && touchFeedback->TouchFeedbackSupported())
   749     if (touchFeedback && touchFeedback->TouchFeedbackSupported())
   747         {
   750         {
   748         touchFeedback->SetFeedbackEnabledForThisApp(EFalse);
   751         touchFeedback->SetFeedbackEnabledForThisApp(EFalse);
  1130 void CFreestyleEmailUiAppUi::Exit()
  1133 void CFreestyleEmailUiAppUi::Exit()
  1131     {
  1134     {
  1132     FUNC_LOG;
  1135     FUNC_LOG;
  1133     TIMESTAMP ("Exiting from email application");
  1136     TIMESTAMP ("Exiting from email application");
  1134     g_ApplicationExitOnGoing = ETrue;
  1137     g_ApplicationExitOnGoing = ETrue;
  1135     if ( iExitGuardian->ExitApplication() == KRequestPending )
  1138     if ( iExitGuardian->TryExitApplication() == KRequestPending )
  1136         {
  1139         {
  1137         SendToBackground();
  1140         SendToBackground();
  1138         }
  1141         }
  1139     }
  1142     }
  1140 
  1143 
  1584             RunAppShutter();
  1587             RunAppShutter();
  1585             break;
  1588             break;
  1586         }
  1589         }
  1587     }
  1590     }
  1588 
  1591 
  1589 void CFreestyleEmailUiAppUi::ManualMailBoxSync( TBool aManualMailBoxSync )
       
  1590     {
       
  1591     FUNC_LOG;
       
  1592     iManualMailBoxSync = aManualMailBoxSync;
       
  1593     }
       
  1594 
       
  1595 void CFreestyleEmailUiAppUi::ManualMailBoxSyncAll( TBool aManualMailBoxSyncAll )
       
  1596     {
       
  1597     FUNC_LOG;
       
  1598     iManualMailBoxSyncAll = aManualMailBoxSyncAll;
       
  1599     }
       
  1600 
       
  1601 void CFreestyleEmailUiAppUi::ManualMailBoxConnectAll( TBool aManualMailBoxConnectAll )
  1592 void CFreestyleEmailUiAppUi::ManualMailBoxConnectAll( TBool aManualMailBoxConnectAll )
  1602     {
  1593     {
  1603     FUNC_LOG;
  1594     FUNC_LOG;
  1604     iManualMailBoxConnectAll = aManualMailBoxConnectAll;
  1595     iManualMailBoxConnectAll = aManualMailBoxConnectAll;
  1605     }
  1596     }
  1820 
  1811 
  1821 	// Start connect automatically if asked by the caller
  1812 	// Start connect automatically if asked by the caller
  1822 	// Disabled if offline or roaming
  1813 	// Disabled if offline or roaming
  1823     if ( aAutoSync )
  1814     if ( aAutoSync )
  1824         {
  1815         {
  1825         StartMonitoringL();
  1816         // check manual online setting
       
  1817         CEmailExtension* ext=NULL;
       
  1818         TBool manualSync = EFalse;
       
  1819         ext = iActiveMailbox->ExtensionL( KEmailSettingExtensionUid );
       
  1820         if (ext)
       
  1821             {
       
  1822             CEmailSettingsExtension* extension = reinterpret_cast<CEmailSettingsExtension*>( ext );
       
  1823             extension->SetMailBoxId(iActiveMailbox->GetId());
       
  1824             manualSync = extension->IsSetL(EmailSyncInterval);
       
  1825             iActiveMailbox->ReleaseExtension(ext);
       
  1826             }
       
  1827         if(!manualSync)
       
  1828             {
       
  1829             StartMonitoringL();
       
  1830             }
  1826         }
  1831         }
  1827 	}
  1832 	}
  1828 
  1833 
  1829 void CFreestyleEmailUiAppUi::StartMonitoringL()
  1834 void CFreestyleEmailUiAppUi::StartMonitoringL()
  1830     {
  1835     {
  2109                                      TAny* aParam1, TAny* aParam2, TAny* aParam3 )
  2114                                      TAny* aParam1, TAny* aParam2, TAny* aParam3 )
  2110     {
  2115     {
  2111     FUNC_LOG;
  2116     FUNC_LOG;
  2112     INFO_1( "CMAIL Received event: %d", aEvent );
  2117     INFO_1( "CMAIL Received event: %d", aEvent );
  2113 
  2118 
  2114     if (iExitGuardian)
       
  2115         {
       
  2116         iExitGuardian->EnterLC();
       
  2117         }
       
  2118 
  2119 
  2119     TBool gridContentsChanged = EFalse;
  2120     TBool gridContentsChanged = EFalse;
  2120 
  2121 
  2121     switch ( aEvent )
  2122     switch ( aEvent )
  2122     	{
  2123     	{
  2175 				}
  2176 				}
  2176    			}
  2177    			}
  2177   			break;
  2178   			break;
  2178     	case TFSEventMailboxSyncStateChanged:
  2179     	case TFSEventMailboxSyncStateChanged:
  2179     		{
  2180     		{
       
  2181     		TBool tryRunningFakeSyncAnim( EFalse );
  2180     		TSSMailSyncState* newSyncState = static_cast<TSSMailSyncState*>( aParam1 );
  2182     		TSSMailSyncState* newSyncState = static_cast<TSSMailSyncState*>( aParam1 );
  2181     		if ( newSyncState !=0 && *newSyncState )
  2183     		if ( newSyncState !=0 && *newSyncState )
  2182     			{
  2184     			{
  2183         		switch ( *newSyncState )
  2185         		switch ( *newSyncState )
  2184         			{
  2186         			{
  2185                     case StartingSync:
  2187                     case StartingSync:
  2186                         {
  2188                         {
  2187                         TIMESTAMP( "Starting sync" );
  2189                         TIMESTAMP( "Starting sync" );
  2188                         //If syncs were started by user, show the synchoronisation indicator
       
  2189                         if(iManualMailBoxSyncAll)
       
  2190                             {
       
  2191                             ManualMailBoxSyncAll(EFalse);
       
  2192                             }
       
  2193                         }
  2190                         }
  2194                         break;
  2191                         break;
  2195                     case SyncError:
  2192                     case SyncError:
  2196                         {
  2193                         {
  2197                         // error occured during "Connect" or "Send and receive" operation
  2194                         // error occured during "Connect" or "Send and receive" operation
  2198                         // check if user needs to be notified
       
  2199                         TIMESTAMP( "Sync error" );
  2195                         TIMESTAMP( "Sync error" );
  2200                         if ( iManualMailBoxSync )
       
  2201                             {
       
  2202 							/*
       
  2203 							 * As a fix to TJOS-82ZFCW, this general popup is no longer needed
       
  2204                              * // since error id is not provided by plugin, lets popup general note
       
  2205                              * HBufC* text = StringLoader::LoadL( R_FS_MSERVER_TEXT_UNABLE_TO_COMPLETE );
       
  2206                              * CleanupStack::PushL( text );
       
  2207                              * CAknInformationNote* infoNote = new ( ELeave ) CAknInformationNote;
       
  2208                              * infoNote->ExecuteLD( *text );
       
  2209                              * CleanupStack::PopAndDestroy( text );
       
  2210                              */
       
  2211                             ManualMailBoxSync( EFalse );
       
  2212                             }
       
  2213                         }
  2196                         }
  2214                         break;
  2197                         break;
  2215                     case FinishedSuccessfully:
  2198                     case FinishedSuccessfully: // fall through
       
  2199                     case Idle:    
       
  2200                         tryRunningFakeSyncAnim = ETrue;
       
  2201                         // fall through
  2216                     case SyncCancelled:
  2202                     case SyncCancelled:
  2217                     case Idle:
       
  2218                         {
  2203                         {
  2219                         TIMESTAMP( "Sync finished" );
  2204                         TIMESTAMP( "Sync finished" );
  2220                         ManualMailBoxSync( EFalse );
       
  2221                         }
  2205                         }
  2222                         break;
  2206                         break;                       
  2223 
       
  2224        				case PushChannelOffBecauseBatteryIsLow:
  2207        				case PushChannelOffBecauseBatteryIsLow:
  2225     					{
  2208     					{
  2226     					}
  2209     					}
  2227     					break;
  2210     					break;
  2228         			} //switch
  2211         			} //switch
  2229     			}
  2212     			}
  2230     		UpdateTitlePaneConnectionStatus();
  2213 
       
  2214     		if ( tryRunningFakeSyncAnim )
       
  2215     		    {
       
  2216                 TRAP_IGNORE( RunFakeSyncAnimL() );
       
  2217     		    }
       
  2218     		
       
  2219     		// update title pane connection status only if fake anim isn't
       
  2220     		// ongoing (if it is the update will happen once it's finished)
       
  2221     		if ( !iFakeSyncAnimStopTimer->IsActive() )
       
  2222     		    {
       
  2223                 UpdateTitlePaneConnectionStatus();
       
  2224     		    }
  2231     		} //case
  2225     		} //case
  2232     		break;
  2226     		break;
  2233 
  2227 
  2234 		case TFSEventNewMailbox:
  2228 		case TFSEventNewMailbox:
  2235 		    {
  2229 		    {
  2315     	{
  2309     	{
  2316     	iHtmlViewerView->HandleMailBoxEventL( aEvent, aMailbox, aParam1, aParam2, aParam3 );
  2310     	iHtmlViewerView->HandleMailBoxEventL( aEvent, aMailbox, aParam1, aParam2, aParam3 );
  2317     	}
  2311     	}
  2318     // Download manager removed
  2312     // Download manager removed
  2319 
  2313 
  2320     if (iExitGuardian)
       
  2321         {
       
  2322         CleanupStack::PopAndDestroy(); // iExitGuardian->EnterLC()
       
  2323         }
       
  2324     }
  2314     }
  2325 
  2315 
  2326 void CFreestyleEmailUiAppUi::LaunchWizardL()
  2316 void CFreestyleEmailUiAppUi::LaunchWizardL()
  2327     {
  2317     {
  2328     FUNC_LOG;
  2318     FUNC_LOG;
  2528             AknIconUtils::SetSize( iConnectionIconBitmap, iconSize, EAspectRatioNotPreserved );
  2518             AknIconUtils::SetSize( iConnectionIconBitmap, iconSize, EAspectRatioNotPreserved );
  2529             }
  2519             }
  2530 		titlePane->SetSmallPicture( iConnectionIconBitmap, iConnectionIconMask, iConnectionIconBitmap && iConnectionIconMask);
  2520 		titlePane->SetSmallPicture( iConnectionIconBitmap, iConnectionIconMask, iConnectionIconBitmap && iConnectionIconMask);
  2531 		}
  2521 		}
  2532 	iConnectionStatusIconAnimTimer->Stop();
  2522 	iConnectionStatusIconAnimTimer->Stop();
       
  2523 	iFakeSyncAnimStopTimer->Stop();
  2533     }
  2524     }
  2534 
  2525 
  2535 void CFreestyleEmailUiAppUi::UpdateTitlePaneConnectionStatus(
  2526 void CFreestyleEmailUiAppUi::UpdateTitlePaneConnectionStatus(
  2536 		TForcedStatus aForcedStatus /*= ENoForce*/ )
  2527 		TForcedStatus aForcedStatus /*= ENoForce*/ )
  2537     {
  2528     {
  2561 			TRAP_IGNORE( titlePane =
  2552 			TRAP_IGNORE( titlePane =
  2562 				(CAknTitlePane*)StatusPane()->ControlL( titlePaneUid ) );
  2553 				(CAknTitlePane*)StatusPane()->ControlL( titlePaneUid ) );
  2563 
  2554 
  2564 			// Set connection icon
  2555 			// Set connection icon
  2565 			iConnectionStatusIconAnimTimer->Stop();
  2556 			iConnectionStatusIconAnimTimer->Stop();
       
  2557 			iFakeSyncAnimStopTimer->Stop();
  2566 			iConnectionIconBitmap = 0;
  2558 			iConnectionIconBitmap = 0;
  2567 			iConnectionIconMask = 0;
  2559 			iConnectionIconMask = 0;
  2568 			TSize iconSize = LayoutHandler()->statusPaneIconSize();
  2560 			TSize iconSize = LayoutHandler()->statusPaneIconSize();
  2569 			TBool startTimer = EFalse;
  2561 			TBool startTimer = EFalse;
  2570 			if ( ( connectionStatus == EFSMailBoxOnline && iForcedConnectionStatus != EForceToDisconnected ) ||
  2562 			if ( ( connectionStatus == EFSMailBoxOnline && iForcedConnectionStatus != EForceToDisconnected ) ||
  2918     {
  2910     {
  2919     return iLastPointerPosition;
  2911     return iLastPointerPosition;
  2920     }
  2912     }
  2921 
  2913 
  2922 // -----------------------------------------------------------------------------
  2914 // -----------------------------------------------------------------------------
       
  2915 // CFreestyleEmailUiAppUi::RunFakeSyncAnimL
       
  2916 // -----------------------------------------------------------------------------
       
  2917 void CFreestyleEmailUiAppUi::RunFakeSyncAnimL()
       
  2918     {
       
  2919     FUNC_LOG;
       
  2920     
       
  2921     if ( iConnectionStatusVisible )
       
  2922         {
       
  2923         // don't run if animation already ongoing
       
  2924         if ( !iConnectionStatusIconAnimTimer->IsActive() )
       
  2925             {
       
  2926             TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
       
  2927             CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
       
  2928                 StatusPane()->PaneCapabilities( titlePaneUid );
       
  2929             if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
       
  2930                 {
       
  2931                 CAknTitlePane* titlePane = 
       
  2932                     static_cast<CAknTitlePane*>( 
       
  2933                         StatusPane()->ControlL( titlePaneUid ) );
       
  2934                 if ( titlePane )
       
  2935                     {
       
  2936                     iConnectionIconBitmap = NULL;
       
  2937                     iConnectionIconMask = NULL;
       
  2938                     FsTextureManager()->ProvideBitmapL( 
       
  2939                         EStatusTextureSynchronising,
       
  2940                         iConnectionIconBitmap, 
       
  2941                         iConnectionIconMask );
       
  2942                     if ( iConnectionIconBitmap && iConnectionIconMask )
       
  2943                         {
       
  2944                         AknIconUtils::SetSize( 
       
  2945                             iConnectionIconBitmap, 
       
  2946                             LayoutHandler()->statusPaneIconSize(), 
       
  2947                             EAspectRatioNotPreserved );
       
  2948                         titlePane->SetSmallPicture( 
       
  2949                             iConnectionIconBitmap, 
       
  2950                             iConnectionIconMask, 
       
  2951                             ETrue );
       
  2952                         iConnectionStatusIconAnimTimer->Start(
       
  2953                             KConnectionStatusIconRotationInterval );
       
  2954                         iFakeSyncAnimStopTimer->Start( 
       
  2955                             KFakeSyncAnimStopTimerInterval );
       
  2956                         titlePane->DrawNow();
       
  2957                         }
       
  2958                     }
       
  2959                 }
       
  2960             }
       
  2961         }
       
  2962     }
       
  2963 
       
  2964 // -----------------------------------------------------------------------------
  2923 //
  2965 //
  2924 // -----------------------------------------------------------------------------
  2966 // -----------------------------------------------------------------------------
  2925 void CFreestyleEmailUiAppUi::ConstructNaviPaneL()
  2967 void CFreestyleEmailUiAppUi::ConstructNaviPaneL()
  2926     {
  2968     {
  2927     FUNC_LOG;
  2969     FUNC_LOG;
  2973     return decorator;
  3015     return decorator;
  2974     }
  3016     }
  2975 
  3017 
  2976 void CFreestyleEmailUiAppUi::TimerEventL( CFSEmailUiGenericTimer* aTriggeredTimer )
  3018 void CFreestyleEmailUiAppUi::TimerEventL( CFSEmailUiGenericTimer* aTriggeredTimer )
  2977     {
  3019     {
  2978     if (aTriggeredTimer == iConnectionStatusIconAnimTimer)
  3020     if ( aTriggeredTimer == iConnectionStatusIconAnimTimer )
  2979         {
  3021         {
  2980         if ( iConnectionStatusVisible )
  3022         if ( iConnectionStatusVisible )
  2981             {
  3023             {
  2982             TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
  3024             TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
  2983             CEikStatusPaneBase::TPaneCapabilities subPaneTitle =
  3025             CEikStatusPaneBase::TPaneCapabilities subPaneTitle =
  2994                 AknIconUtils::SetSizeAndRotation(iConnectionIconBitmap, iconSize, EAspectRatioNotPreserved, iConnectionStatusIconAngle);
  3036                 AknIconUtils::SetSizeAndRotation(iConnectionIconBitmap, iconSize, EAspectRatioNotPreserved, iConnectionStatusIconAngle);
  2995                 titlePane->DrawNow();
  3037                 titlePane->DrawNow();
  2996                 iConnectionStatusIconAnimTimer->Start(KConnectionStatusIconRotationInterval);
  3038                 iConnectionStatusIconAnimTimer->Start(KConnectionStatusIconRotationInterval);
  2997                 }
  3039                 }
  2998             }
  3040             }
       
  3041         }
       
  3042     if ( aTriggeredTimer == iFakeSyncAnimStopTimer )
       
  3043         {
       
  3044         // Just call the UpdateTitlePaneConnectionStatus.
       
  3045         // The method will put the correct sync icon to title pane
       
  3046         UpdateTitlePaneConnectionStatus();
  2999         }
  3047         }
  3000     }
  3048     }
  3001 
  3049 
  3002 // -----------------------------------------------------------------------------
  3050 // -----------------------------------------------------------------------------
  3003 // CFreestyleEmailUiAppUi::SetFocusVisibility
  3051 // CFreestyleEmailUiAppUi::SetFocusVisibility