diff -r 000000000000 -r 094583676ce7 wvuing/wvuiprocess/Src/CCAGlobalNotificationObserverPC.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiprocess/Src/CCAGlobalNotificationObserverPC.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,599 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Global interface for the UI to get notifications when theres a +* change in contact, list, invite, settings, conversation, group etc +* +*/ + + +#include "MCAContactListModel.h" +#include "MCAChatInterface.h" +#include "MCAInvite.h" +#include "MCASettings.h" +#include "TStorageManagerGlobals.h" +#include "MCAContactList.h" +#include "MCAStoredContact.h" +#include "MCAStoredContacts.h" +#include "CCAStorageManagerFactory.h" +#include "MCAMessage.h" +#include "MCAMessageUtils.h" +#include "MCAUiGlobalNotificationObserverPC.h" +#include "CCAGlobalNotificationObserverPC.h" +#include "MCAMessageErrorInformer.h" +#include "MCAContactLists.h" +#include "capresencemanager.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::CCAGlobalNotificationObserverPC +// ----------------------------------------------------------------------------- + +CCAGlobalNotificationObserverPC::CCAGlobalNotificationObserverPC( + MCAContactListModel& aContactListModel, + MCAChatInterface& aChatInterface, + MCAInvite& aInviteInterface, + MCASettings& aSettingsInterface, + const MCAMessageUtils& aMessageUtils ) + : iContactListModel( aContactListModel ), + iChatInterface( aChatInterface ), + iInviteInterface( aInviteInterface ), + iSettingsInterface( aSettingsInterface ), + iMessageUtils( aMessageUtils ) + { + } + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::NewL +// ----------------------------------------------------------------------------- + +CCAGlobalNotificationObserverPC* CCAGlobalNotificationObserverPC::NewL( + MCAContactListModel& aContactListModel, + MCAChatInterface& aChatInterface, + MCAInvite& aInviteObserver, + MCASettings& aSettingsInterface, + const MCAMessageUtils& aMessageUtils ) + { + CCAGlobalNotificationObserverPC* self + = new ( ELeave ) CCAGlobalNotificationObserverPC( + aContactListModel, + aChatInterface, + aInviteObserver, + aSettingsInterface, + aMessageUtils ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::ConstructL +// ----------------------------------------------------------------------------- +void CCAGlobalNotificationObserverPC::ConstructL() + { + iContactInterface = CCAStorageManagerFactory::ContactListInterfaceL(); + iContactInterface->AddObserverL( this );// listen these events.. + iInviteInterface.AddInviteObserver( this ); + iSettingsInterface.AddObserverL( this ); //register with engine + + // Register this as chat observer + iChatInterface.RegisterChatObserver( this ); + + iMessageUtils.MessageErrorInformer().RegisterObserver( this ); + } + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::~CCAGlobalNotificationObserverPC +// ----------------------------------------------------------------------------- +CCAGlobalNotificationObserverPC::~CCAGlobalNotificationObserverPC() + { + iGlobalNotificationObservers.ResetAndDestroy(); + iGlobalNotificationObservers.Close(); + if ( iContactInterface ) + { + iContactInterface->RemoveObserver( this ); + } + iInviteInterface.RemoveInviteObserver( this ); + iSettingsInterface.RemoveObserver( this ); + iChatInterface.UnregisterChatObserver( this ); + iMessageUtils.MessageErrorInformer().UnregisterObserver( this ); + } + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::HandleContactDelete +// MCAStoredContactsObserver implementation +// ----------------------------------------------------------------------------- + +void CCAGlobalNotificationObserverPC::HandleContactDelete( const TDesC& aContactId ) + { + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + iGlobalNotificationObservers[index]->HandleDelete( aContactId, TEnumsPC::EContactItem ); + } + + } + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::HandleAddition +// MCAStoredContactsObserver implementation +// ----------------------------------------------------------------------------- + +void CCAGlobalNotificationObserverPC::HandleAddition( MCAContactList& /*aList*/, MCAStoredContact& /*aContact*/ ) + { + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + iGlobalNotificationObservers[index]->HandleAddition( TEnumsPC::EContactItem ); + } + } + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::HandleChange +// MCAStoredContactsObserver implementation +// ----------------------------------------------------------------------------- + +void CCAGlobalNotificationObserverPC::HandleChange( MCAContactList* aList, MCAStoredContact* /*aContact*/, + TStorageManagerGlobals::TCAObserverEventType aEventType, + TBool /*aUserIdChanged */ ) + { + // we need to handle the change here..from storage manager... + TEnumsPC::TChange eventtype = TEnumsPC::EUnknownEvent; + TInt error( KErrNone ); + switch ( aEventType ) + { + case TStorageManagerGlobals::EStorageEventPreChange: + { + // ignore the pre-change events + return; + } + case TStorageManagerGlobals::EStorageEventListDelete: + case TStorageManagerGlobals::EStorageEventMultipleChanges: + { + TInt index = iContactListModel.IndexOfList( aList, EFalse, ETrue ); + + eventtype = aEventType == TStorageManagerGlobals::EStorageEventListDelete + ? TEnumsPC::EDelete : TEnumsPC::EMultipleChanges; + + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + iGlobalNotificationObservers[index]->HandleChange( + TEnumsPC::EContactListItem, eventtype ); + } + + break; + } + case TStorageManagerGlobals::EStorageEventPostChange: + { + // call back the UI with HandleChange here.... + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + iGlobalNotificationObservers[index]->HandleChange( + TEnumsPC::EContactItem, TEnumsPC::EChanged ); + } + break; + } + case TStorageManagerGlobals::EStorageEventListAddition: + case TStorageManagerGlobals::EStorageEventListChanged: + { + eventtype = aEventType == TStorageManagerGlobals::EStorageEventListAddition + ? TEnumsPC::EAddition : TEnumsPC::EChanged; + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + iGlobalNotificationObservers[index]->HandleChange( + TEnumsPC::EContactListItem, eventtype ); + } + break; + } + default: + { + break; + } + } + + if ( error ) + { + CActiveScheduler::Current()->Error( error ); + } + + } + +// --------------------------------------------------------- +// CCAGlobalNotificationObserverPC::HandleSettingsChangeL +// @see MCASettingsObserver +// --------------------------------------------------------- + +void CCAGlobalNotificationObserverPC::HandleSettingsChangeL( TInt aChangedSettingEnum ) + { + + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + TEnumsPC::TCASettingValues settings = ConvertToSettingsEnumsPC( aChangedSettingEnum ); + iGlobalNotificationObservers[index]->HandleSettingsChangeL( settings ); + } + + } +// -------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::ConvertToSettingsEnumsPC +// (other items were commented in a header). +// -------------------------------------------------------------------- +// +TEnumsPC::TCASettingValues CCAGlobalNotificationObserverPC::ConvertToSettingsEnumsPC( + TInt aStatus ) + { + MCASettings::TCASettingFlags engineFlags = ( MCASettings::TCASettingFlags )aStatus; + + TEnumsPC::TCASettingValues setValue = TEnumsPC::EUnknownValue; + + // Map status to setting item + switch ( engineFlags ) + { + case MCASettings::EDefaultScreenNameInUse : + { + setValue = TEnumsPC::EDefaultScreenNameInUse; + break; + } + case MCASettings::EAutomaticPresenceUpdate : + { + setValue = TEnumsPC::EAutomaticPresenceUpdate; + break; + } + + case MCASettings::EShowOffline : + { + setValue = TEnumsPC::EShowOffline; + break; + } + case MCASettings::EShowTimeStamps : + { + setValue = TEnumsPC::EShowTimeStamps; + break; + } + default: + { + break; + } + } + return setValue ; + } + +// --------------------------------------------------------- +// CCAGlobalNotificationObserverPC::HandleInvitation() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAGlobalNotificationObserverPC::HandleInvitationEventL( + TInviteEventType aEvent, const MCAInvitation* aInvitation ) + { + TEnumsPC::TInviteType inviteType = TEnumsPC::EInviteUnknown; + switch ( aEvent ) + { + case MCAInviteObserver::ENewInvite: + { + inviteType = TEnumsPC::ENewInvite; + break; + } + case MCAInviteObserver::EInviteCancel: // Flowthrough + case MCAInviteObserver::EInviteExpired: + { + inviteType = TEnumsPC::EInviteCancelOrExpired; + break; + } + + case MCAInviteObserver::EInviteRead: + { + inviteType = TEnumsPC::EInviteRead; + break; + } + default: + { + inviteType = TEnumsPC::EInviteUnknown; + break; + } + } + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + if ( aInvitation ) + { + iGlobalNotificationObservers[index]->HandleInvitationEventL( + inviteType, + iContactInterface->Identification( aInvitation->UserID() ) , + aInvitation->Message() ); + } + + else + { + iGlobalNotificationObservers[index]->HandleInvitationEventL( + inviteType, + KNullDesC(), KNullDesC() ); + } + } + + } + +// --------------------------------------------------------- +// CCAGlobalNotificationObserverPC::HandleInvitationResponse() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAGlobalNotificationObserverPC::HandleInvitationResponse( + TBool aAcceptance, + const TDesC& aUserId, + const TDesC& aGroupName, + const TDesC& aResponse ) + { + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + iGlobalNotificationObservers[index]->HandleInvitationResponse( aAcceptance, + aUserId, + aGroupName, + aResponse ); + } + } + +// --------------------------------------------------------- +// CCAGlobalNotificationObserverPC::MCAGlobalNotificationObserverPCL() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAGlobalNotificationObserverPC::AddGlobalObserverL( + MCAUiGlobalNotificationObserverPC* aGlobalObserver ) + { + ASSERT( aGlobalObserver ); + + TInt status( iGlobalNotificationObservers.Append( aGlobalObserver ) ); + User::LeaveIfError( status ); + } + +// --------------------------------------------------------- +// CCAGlobalNotificationObserverPC::RemoveGlobalObserver() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAGlobalNotificationObserverPC::RemoveGlobalObserver( + MCAUiGlobalNotificationObserverPC* aGlobalObserver ) + { + ASSERT( aGlobalObserver ); + + const TInt status( iGlobalNotificationObservers.Find( aGlobalObserver ) ); + if ( status != KErrNotFound ) + { + iGlobalNotificationObservers.Remove( status ); + iGlobalNotificationObservers.Compress(); + } + } + + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC: HandleChatEvent +// ----------------------------------------------------------------------------- +// +void CCAGlobalNotificationObserverPC::HandleChatEvent( TChatEventType aEvent, + MCAMessage* aMessage /*= NULL*/ ) + { + + TEnumsPC::TChatEventType aEventType = TEnumsPC::EEventNotSpecified; + TEnumsPC::TMessagerType aMsgrType = TEnumsPC::EMessageOther; + TEnumsPC::TMessageType aMsgType = TEnumsPC::EMessageInvalid; + + const TDesC& wvid( GetWvId( aMessage ) ); + const TDesC& msgText( aMessage ? aMessage->Text() : KNullDesC ); + const TPtrC& identification( aMessage ? + iContactInterface->Identification( wvid ) : KNullDesC() ); + + switch ( aEvent ) + { + case EGroupListChanged: + { + aEventType = TEnumsPC::EGroupListChanged; + break; + } + case EChatListChanged: + { + aEventType = TEnumsPC::EChatListChanged; + break; + } + case ESendListChanged: + { + aEventType = TEnumsPC::ESendListChanged; + break; + } + case EUnreadCountChanged: + { + aEventType = TEnumsPC::EUnreadCountChanged; + break; + } + case EMemoryLow: + { + aEventType = TEnumsPC::EMemoryLow; + break; + } + default: + { + break; + } + + } + + if ( aMessage ) + { + + switch ( aMessage->MessagerType() ) + { + case MCAMessage::EMessageSent: + { + aMsgrType = TEnumsPC::EMessageSent; + break; + } + case MCAMessage::EMessageReceived: + { + aMsgrType = TEnumsPC::EMessageReceived; + break; + } + default: + { + break; + } + + } + + + switch ( aMessage->MessageType() ) + { + case MCAMessage::EMessagePTOP: + { + aMsgType = TEnumsPC::EMessagePTOP; + break; + } + case MCAMessage::EMessageWhisper: + { + aMsgType = TEnumsPC::EMessageWhisper; + break; + } + + case MCAMessage::EMessageGroup: + { + aMsgType = TEnumsPC::EMessageGroup; + break; + } + case MCAMessage::EMessageSystem: + { + aMsgType = TEnumsPC::EMessageSystem; + break; + } + default: + { + break; + } + + } + + } + + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + iGlobalNotificationObservers[index]->HandleChatEvent( + aEventType, + wvid , + identification, + msgText, + aMsgrType, + aMsgType ); + } + } + +// ----------------------------------------------------------------------------- +// CCAAppUi::HandleMessageError +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCAGlobalNotificationObserverPC::HandleMessageError( TInt aError, MCAMessage* aMessage ) + { + for ( TInt index = 0; index < iGlobalNotificationObservers.Count(); index++ ) + { + iGlobalNotificationObservers[index]->HandleMessageError( + aError, + aMessage->Text() ); + } + } + + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::GetWvId +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +const TDesC& CCAGlobalNotificationObserverPC::GetWvId( MCAMessage* aMessage ) + { + if ( aMessage ) + { + + if ( aMessage->MessageType() == MCAMessage::EMessagePTOP ) + { + return aMessage->Sender(); + } + else + { + return aMessage->Target(); + } + } + + return KNullDesC; + } +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::IsContactListsSyncDoneL() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCAGlobalNotificationObserverPC::IsContactListsSyncDoneL() + { + + MCAContactLists* contactLists = + CAPresenceManager::InstanceL()->ContactLists(); + if ( !contactLists ) + { + // not logged in yet, so sync state is ok + return ETrue; + } + return contactLists->IsSyncDone(); + } + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::StoredContactsIsAllSynchronised +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCAGlobalNotificationObserverPC::StoredContactsIsAllSynchronised( TBool& aFailed ) + { + return iContactInterface->IsAllSynchronised( aFailed ); + } + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::IsValidListInterface +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCAGlobalNotificationObserverPC::IsValidStoredContactsInterface() + { + if ( iContactInterface ) + { + return ETrue; + } + else + { + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CCAGlobalNotificationObserverPC::IsValidListInterfaceL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCAGlobalNotificationObserverPC::IsValidListInterfaceL() + { + MCAContactLists* contactLists = + CAPresenceManager::InstanceL()->ContactLists(); + if ( contactLists ) + { + return ETrue; + } + else + { + return EFalse; + } + } + +//end of file +