--- a/emailuis/emailui/src/FreestyleEmailUiAppui.cpp Fri Feb 19 22:37:30 2010 +0200
+++ b/emailuis/emailui/src/FreestyleEmailUiAppui.cpp Fri Mar 12 15:41:14 2010 +0200
@@ -87,6 +87,7 @@
#include <data_caging_path_literals.hrh> // hardcoded paths removal from cmail
#include "cfsccontactactionmenu.h"
//</cmail>
+#include <layoutmetadata.cdl.h> // for Layout_Meta_Data
// INTERNAL INCLUDE FILES
#include "FreestyleEmailUiContactHandler.h"
@@ -106,7 +107,7 @@
#include "FreestyleEmailUiAttachmentsListModel.h"
#include "FreestyleEmailUiAttachmentsListVisualiser.h"
#include "FreestyleEmailUiAttachmentsListControl.h"
-#include "FreestyleEmailCenRepHandler.h"
+#include "freestyleemailcenrephandler.h"
#include "FreestyleEmailUiSettingsListView.h"
#include "FreestyleEmailUiGlobalSettingsListView.h"
#include "FreestyleEmailUiDownloadManagerModel.h"
@@ -155,6 +156,203 @@
// Length of the drive letter descriptor (e.g. "c:")
const TInt KDriveDescLength = 2;
+
+// TDisplayImagesCache
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::~TDisplayImagesCache
+// ---------------------------------------------------------------------------
+//
+TDisplayImagesCache::~TDisplayImagesCache()
+ {
+ iCache.Reset();
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::AddMessageL
+// ---------------------------------------------------------------------------
+//
+void TDisplayImagesCache::AddMessageL( const CFSMailMessageBase& aMsg )
+ {
+ AddMessageL(aMsg.GetMailBoxId(), aMsg.GetMessageId());
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::RemoveMessage
+// ---------------------------------------------------------------------------
+//
+void TDisplayImagesCache::RemoveMessage( const CFSMailMessageBase& aMsg )
+ {
+ RemoveMessage(aMsg.GetMailBoxId(), aMsg.GetMessageId());
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::Contains
+// ---------------------------------------------------------------------------
+//
+TBool TDisplayImagesCache::Contains( const CFSMailMessageBase& aMsg ) const
+ {
+ return Contains(aMsg.GetMailBoxId(), aMsg.GetMessageId());
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::AddMessageL
+// ---------------------------------------------------------------------------
+//
+void TDisplayImagesCache::AddMessageL( const TFSMailMsgId& aBoxId, const TFSMailMsgId& aMsgId )
+ {
+ TInt index(MailBoxIndex(aBoxId));
+ if (index == KErrNotFound)
+ {
+ AddMailBoxL(aBoxId, index);
+ }
+ iCache[index].AddMessageL(aMsgId);
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::RemoveMessage
+// ---------------------------------------------------------------------------
+//
+void TDisplayImagesCache::RemoveMessage( const TFSMailMsgId& aBoxId, const TFSMailMsgId& aMsgId )
+ {
+ const TInt index(MailBoxIndex(aBoxId));
+ if (index != KErrNotFound)
+ {
+ iCache[index].RemoveMessage(aMsgId);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::RemoveMailbox
+// ---------------------------------------------------------------------------
+//
+void TDisplayImagesCache::RemoveMailbox( const TFSMailMsgId& aBoxId )
+ {
+ const TInt index(MailBoxIndex(aBoxId));
+ if (index != KErrNotFound)
+ {
+ iCache.Remove(index);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::Contains
+// ---------------------------------------------------------------------------
+//
+TBool TDisplayImagesCache::Contains( const TFSMailMsgId& aBoxId, const TFSMailMsgId& aMsgId ) const
+ {
+ const TInt index(MailBoxIndex(aBoxId));
+ if (index != KErrNotFound)
+ {
+ return iCache[index].Contains(aMsgId);
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::MailBoxIndex
+// ---------------------------------------------------------------------------
+//
+TInt TDisplayImagesCache::MailBoxIndex( const TFSMailMsgId& aBoxId ) const
+ {
+ return iCache.FindInOrder(TItem(aBoxId), TLinearOrder<TItem>(TItem::CompareItem));
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::AddMailBoxL
+// ---------------------------------------------------------------------------
+//
+void TDisplayImagesCache::AddMailBoxL( const TFSMailMsgId& aBoxId, TInt& aCacheIndex )
+ {
+ aCacheIndex = KErrNotFound;
+ iCache.InsertInOrderL(TItem(aBoxId), TLinearOrder<TItem>(TItem::CompareItem));
+ aCacheIndex = MailBoxIndex(aBoxId);
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::TItem::TItem
+// ---------------------------------------------------------------------------
+//
+TDisplayImagesCache::TItem::TItem( const TFSMailMsgId& aBoxId )
+ : iMailBoxId( aBoxId )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::TItem::~TItem
+// ---------------------------------------------------------------------------
+//
+TDisplayImagesCache::TItem::~TItem()
+ {
+ iMessageIds.Reset();
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::TItem::Contains
+// ---------------------------------------------------------------------------
+//
+TBool TDisplayImagesCache::TItem::Contains( const TFSMailMsgId& aMsgId ) const
+ {
+ return MessageIndex(aMsgId) != KErrNotFound;
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::TItem::AddMessageL
+// ---------------------------------------------------------------------------
+//
+void TDisplayImagesCache::TItem::AddMessageL( const TFSMailMsgId& aMsgId )
+ {
+ if (!Contains(aMsgId))
+ {
+ iMessageIds.InsertInOrderL(aMsgId, TLinearOrder<TFSMailMsgId>(TItem::CompareMsgId));
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::TItem::RemoveMessage
+// ---------------------------------------------------------------------------
+//
+void TDisplayImagesCache::TItem::RemoveMessage( const TFSMailMsgId& aMsgId )
+ {
+ const TInt index(MessageIndex(aMsgId));
+ if (index != KErrNotFound)
+ {
+ iMessageIds.Remove(index);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::TItem::MessageIndex
+// ---------------------------------------------------------------------------
+//
+TInt TDisplayImagesCache::TItem::MessageIndex( const TFSMailMsgId& aMsgId ) const
+ {
+ return iMessageIds.FindInOrder(aMsgId, TLinearOrder<TFSMailMsgId>(TItem::CompareMsgId));
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::TItem::CompareItem
+// ---------------------------------------------------------------------------
+//
+TInt TDisplayImagesCache::TItem::CompareItem( const TItem& aItem1, const TItem& aItem2 )
+ {
+ return CompareMsgId(aItem1.iMailBoxId, aItem2.iMailBoxId);
+ }
+
+// ---------------------------------------------------------------------------
+// TDisplayImagesCache::TItem::CompareMsgId
+// ---------------------------------------------------------------------------
+//
+TInt TDisplayImagesCache::TItem::CompareMsgId( const TFSMailMsgId& aId1, const TFSMailMsgId& aId2 )
+ {
+ TInt result(aId1.PluginId().iUid - aId2.PluginId().iUid);
+ if (!result)
+ {
+ result = TInt(aId1.Id() - aId2.Id());
+ }
+ return result;
+ }
+
// ---------------------------------------------------------------------------
// C++ constructor.
// ---------------------------------------------------------------------------
@@ -165,7 +363,10 @@
iIsCaptured( EFalse ), // init "end key captured" to false
iAutomatedMailBoxOnline( EFalse ),
iMsgReaderIsSupported( KErrGeneral ),
- iSwitchingToBackground( EFalse )
+ iSwitchingToBackground( EFalse ),
+ iHasEmbeddedApp( EFalse ),
+ iPreviousAppEmbedded( EFalse ),
+ iEditorStartedFromEmbeddedApp( EFalse )
{
FUNC_LOG;
iEnv = &aEnv;
@@ -246,6 +447,17 @@
// Enable Avkon skins.
BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
+
+ // This MUST be after BaseConstructL
+ MTouchFeedback* touchFeedback(MTouchFeedback::Instance());
+ if (touchFeedback == NULL)
+ {
+ touchFeedback = MTouchFeedback::CreateInstanceL();
+ iTouchFeedbackCreated = ETrue;
+ }
+ touchFeedback->SetFeedbackEnabledForThisApp(touchFeedback->TouchFeedbackSupported());
+
+
// Create instance for Central repository handler
iCRHandler = CFSEmailCRHandler::InstanceL();
@@ -533,6 +745,19 @@
delete iNaviDecorator2MailViewer;
delete iConnectionStatusIconAnimTimer;
+
+
+ MTouchFeedback* touchFeedback( MTouchFeedback::Instance() );
+ if (touchFeedback && touchFeedback->TouchFeedbackSupported())
+ {
+ touchFeedback->SetFeedbackEnabledForThisApp(EFalse);
+ }
+
+ if (iTouchFeedbackCreated)
+ {
+ MTouchFeedback::DestroyInstance();
+ }
+
TIMESTAMP( "Application exit" );
}
@@ -639,7 +864,7 @@
}
// may be tricky; added here to handle activation of composer view from external app when email is plugin settings view
// in this case also duplictaed view needs to be poped up, but iSettingsViewActive is already set to EFalse
- // other solution would need to expand api of this class to handle directly this case
+ // other solution would need to expand api of this class to handle directly this case
else
if ( iPreviousActiveView->Id() == SettingsViewId || iPreviousActiveView->Id() == MailListId )
{
@@ -1239,17 +1464,33 @@
// CAlfEnv::Static()->NotifySkinChangedL();
// }
-
- if( aType == KEikDynamicLayoutVariantSwitch || aType == KAknsMessageSkinChange)
+ if( aType == KEikDynamicLayoutVariantSwitch || aType == KAknsMessageSkinChange )
{
+ // Changing layout for status pane (just in case it is not switched
+ // correctly), fix for HMNN-82BAGR error
+ TBool landscape(Layout_Meta_Data::IsLandscapeOrientation());
+ CEikStatusPane* statusPane = StatusPane();
+ if(landscape)
+ {
+ if( statusPane->CurrentLayoutResId() != R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT)
+ {
+ statusPane->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT);
+ }
+ }
+ else
+ {
+ if( statusPane->CurrentLayoutResId() != R_AVKON_STATUS_PANE_LAYOUT_USUAL_EXT)
+ {
+ statusPane->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL_EXT);
+ }
+ }
+
TRect screenRect;
AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, screenRect );
//<cmail> layout manager call removed </cmail>
// Notify layouthandler of changed screen resolution.
iLayoutHandler->ScreenResolutionChanged();
StatusPane()->DrawNow();
- TRect rect;
- AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect);
if(iEnv)
{
Display().SetVisibleArea( screenRect );
@@ -1407,6 +1648,15 @@
return iEikonEnv->ScreenDevice()->DisplayMode();
}
+// ---------------------------------------------------------------------------
+// Returns display images cache
+// ---------------------------------------------------------------------------
+//
+TDisplayImagesCache& CFreestyleEmailUiAppUi::DisplayImagesCache()
+ {
+ return iDisplayImagesCache;
+ }
+
// ---------------------------------------------------------------------------
// Returns the current flip status.
@@ -1587,6 +1837,7 @@
// autosyncmonitor has been succesfully created
if ( iAutoSyncMonitor )
{
+ TIMESTAMP( "Starting auto sync" );
iAutoSyncMonitor->StartMonitoring();
}
}
@@ -1858,6 +2109,7 @@
{
case TFSEventMailboxDeleted:
{
+ iDisplayImagesCache.RemoveMailbox(aMailbox);
gridContentsChanged = ETrue;
if ( iActiveMailbox && iActiveMailbox->GetId().Id() == aMailbox.Id() &&
iCurrentActiveView->Id() != SettingsViewId )
@@ -1989,11 +2241,22 @@
}
}
break;
- case TFSEventMailboxSettingsChanged:
+ case TFSEventMailboxCapabilityChanged:
+ // Refresh grid if mailbox capabilities have changed
+ case TFSEventMailboxSettingsChanged:
// Refresh grid if mailbox settings are changed,
// name/branding might have changed.
gridContentsChanged = ETrue;
break;
+ case TFSEventMailDeleted:
+ {
+ RArray<TFSMailMsgId>* entries = reinterpret_cast<RArray<TFSMailMsgId>*>(aParam1);
+ for (TInt i = entries->Count() - 1; i >= 0; i--)
+ {
+ iDisplayImagesCache.RemoveMessage(aMailbox, entries->operator[](i));
+ }
+ }
+ break;
default:
{
}
@@ -2564,7 +2827,7 @@
}
// -----------------------------------------------------------------------------
-// CFreestyleEmailUiAppUi::SendToBackgroundL
+// CFreestyleEmailUiAppUi::SendToBackground
// Send self to background.
// -----------------------------------------------------------------------------
void CFreestyleEmailUiAppUi::SendToBackground()
@@ -2583,6 +2846,56 @@
}
// -----------------------------------------------------------------------------
+// CFreestyleEmailUiAppUi::SetEmbeddedApp
+// Set flag for judging if there is a embedded app in FSEmail.
+// -----------------------------------------------------------------------------
+void CFreestyleEmailUiAppUi::SetEmbeddedApp( TBool aEmbeddedApp )
+ {
+ iHasEmbeddedApp = aEmbeddedApp;
+ }
+
+// -----------------------------------------------------------------------------
+// CFreestyleEmailUiAppUi::EmbeddedApp
+// Get embedded app flag.
+// -----------------------------------------------------------------------------
+TBool CFreestyleEmailUiAppUi::EmbeddedApp() const
+ {
+ return iHasEmbeddedApp;
+ }
+
+// -----------------------------------------------------------------------------
+// CFreestyleEmailUiAppUi::SetEmbeddedAppToPreviousApp
+// -----------------------------------------------------------------------------
+void CFreestyleEmailUiAppUi::SetEmbeddedAppToPreviousApp( TBool aEmbeddedApp )
+ {
+ iPreviousAppEmbedded = aEmbeddedApp;
+ }
+
+// -----------------------------------------------------------------------------
+// CFreestyleEmailUiAppUi::EmbeddedAppIsPreviousApp
+// -----------------------------------------------------------------------------
+TBool CFreestyleEmailUiAppUi::EmbeddedAppIsPreviousApp() const
+ {
+ return iPreviousAppEmbedded;
+ }
+
+// -----------------------------------------------------------------------------
+// CFreestyleEmailUiAppUi::SetEditorStartedFromEmbeddedApp
+// -----------------------------------------------------------------------------
+void CFreestyleEmailUiAppUi::SetEditorStartedFromEmbeddedApp( TBool aEmbeddedApp )
+ {
+ iEditorStartedFromEmbeddedApp = aEmbeddedApp;
+ }
+
+// -----------------------------------------------------------------------------
+// CFreestyleEmailUiAppUi::EditorStartedFromEmbeddedApp
+// -----------------------------------------------------------------------------
+TBool CFreestyleEmailUiAppUi::EditorStartedFromEmbeddedApp() const
+ {
+ return iEditorStartedFromEmbeddedApp;
+ }
+
+// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
void CFreestyleEmailUiAppUi::ConstructNaviPaneL()