diff -r ebe688cedc25 -r 7fdbb852d323 messagingappbase/ncnlist/src/CNcnUI.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/ncnlist/src/CNcnUI.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -0,0 +1,406 @@ +/* +* Copyright (c) 2004 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: Methods for CNcnUI class. +* +*/ + + + +// INCLUDE FILES +#include "CNcnUI.h" +#include "NcnModelBase.h" +#include "NcnHandlerAudio.h" +#include "CNcnClass0Viewer.h" +#include "NcnSNNotifier.h" +#include "NcnSubscriber.h" + +#include // For TParse +#include // For literals +#include // For CStringResourceReader +#include // For StringLoader +#include // For AknTextUtils +#include // For CAknGlobalNote +#include // For CVwsSessionWrapper +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include // For RProperty +#include // For KPSUidBluetoothSapConnectionState +#include +#include + +#include // New Contacts Note resource + +// ================= LOCAL CONSTANTS ======================= +namespace + { + _LIT( KNcnResourceFileName,"z:ncnlist.rsc" ); + + const TInt KNcnDeliveryResourceBufLen = 128; + const TInt KNcnDeliveryTextBufLen = 256; + + const TUid KMCEAppUid = { 0x100058C5 }; + const TUid KMCEViewUid = { 0x02 }; + } + +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------- +// CNcnUI::CNcnUI +// ---------------------------------------------------- +// +CNcnUI::CNcnUI( CNcnModelBase& aModel ) : + iNcnModel( aModel ), + iIdleState( EFalse ), + iBootPhase( EFalse ), + iSAPConnected( EFalse ) + //iVisualNotificationsAllowed( ETrue ), + //iAudioNotificationsAllowed( ETrue ) + { + // empty + } + +// ---------------------------------------------------- +// CNcnUI::ConstructL +// ---------------------------------------------------- +// +void CNcnUI::ConstructL() + { + iAudioHandler = CNcnHandlerAudio::NewL( &iNcnModel ); + iClass0Viewer = CNcnClass0Viewer::NewL( iNcnModel.MsvSessionHandler() ); + iNotifier = CNcnSNNotifier::NewL(); + + // initialize and subscribe SAP connection subscriber + iSAPSubscriber = CNcnSubscriber::NewL( *this, + KPSUidBluetoothSapConnectionState, + KBTSapConnectionState ); + iSAPSubscriber->Subscribe(); + + // set SAP connection status + iSAPConnected = SAPConnected(); + } + +// ---------------------------------------------------- +// CNcnUI::NewL +// ---------------------------------------------------- +// +CNcnUI* CNcnUI::NewL( CNcnModelBase& aModel ) + { + CNcnUI* self = new (ELeave) CNcnUI( aModel ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// ---------------------------------------------------- +// CNcnUI::~CNcnUI +// ---------------------------------------------------- +// +CNcnUI::~CNcnUI() + { + delete iSAPSubscriber; + delete iNotifier; + delete iClass0Viewer; + delete iAudioHandler; + } + +// ---------------------------------------------------- +// CNcnUI::ShowMessageL +// ---------------------------------------------------- +// +void CNcnUI::ShowMessageL( const TMsvEntry& aEntry ) + { + // use class0 viewer for immidiate display + iClass0Viewer->ShowClass0SmsL( aEntry ); + } + +// ---------------------------------------------------- +// CNcnUI::OpenMessageL +// ---------------------------------------------------- +// +void CNcnUI::OpenMessageL( const TMsvEntry& aEntry ) + { + TVwsViewId messagingCentreInboxView( KMCEAppUid, KMCEViewUid ); + TUid uid = TUid::Uid( aEntry.Id() ); + + // Create view wrapper object and launch MCE application + CVwsSessionWrapper* viewCli = CVwsSessionWrapper::NewLC(); + viewCli->CreateActivateViewEvent( + messagingCentreInboxView, uid, KNullDesC8() ); + CleanupStack::PopAndDestroy( viewCli ); + + iNcnModel.NotifyPublishAndSubscribe( + KPSUidAiInformation, // Idle status category + KActiveIdleState, + EPSAiBackground );// ActiveIdle to background + } + +// ---------------------------------------------------- +// CNcnUI::ShowDeliveryNoteL +// ---------------------------------------------------- +// +void CNcnUI::ShowDeliveryNoteL( const TMsvEntry& aEntry ) + { + TParse *fp = new(ELeave) TParse(); + fp->Set( KNcnResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL ); + CleanupStack::PushL( fp ); + + TFileName myFileName( fp->FullName() ); + CStringResourceReader* reader = CStringResourceReader::NewL( myFileName ); + CleanupStack::PushL( reader ); + + TBuf deliveredText = + reader->ReadResourceString( R_NCN_DELIVERED_NOTE_TEXT ); + + TBuf theWholeString; + + StringLoader::Format( theWholeString, deliveredText, -1, aEntry.iDetails ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( + theWholeString ); + + CAknGlobalNote * note = CAknGlobalNote::NewL(); + + CleanupStack::PushL( note ); + note->ShowNoteL( EAknGlobalInformationNote, theWholeString ); + CleanupStack::PopAndDestroy( 3 ); + } + +// ---------------------------------------------------- +// CNcnUI::PlayMessageAlertToneL +// ---------------------------------------------------- +// +void CNcnUI::PlayMessageAlertToneL() + { + if( AudioNotificationsAllowed() ) + { + iAudioHandler->PlayAlertToneL( CNcnModelBase::EIndexUnreadMessages ); + } + } + +// ---------------------------------------------------- +// CNcnUI::PlayMessageAlertTone +// ---------------------------------------------------- +// +void CNcnUI::PlayMessageAlertTone() + { + TRAP_IGNORE( PlayMessageAlertToneL() ); + } + +// ---------------------------------------------------- +// CNcnUI::PlayEMailAlertToneL +// ---------------------------------------------------- +// +void CNcnUI::PlayEMailAlertToneL() + { + if( AudioNotificationsAllowed() ) + { + iAudioHandler->PlayAlertToneL( CNcnModelBase::EIndexNewEmails ); + } + } + +// ---------------------------------------------------- +// CNcnUI::PlayEMailAlertTone +// ---------------------------------------------------- +// +void CNcnUI::PlayEMailAlertTone() + { + TRAP_IGNORE( PlayEMailAlertToneL() ); + } + +// ---------------------------------------------------- +// CNcnUI::PlayEMailAlertTone +// ---------------------------------------------------- +// +void CNcnUI::AbortAlertTonePlayback() + { + iAudioHandler->StopMsgReceivedTonePlaying(); + } + +// ---------------------------------------------------- +// CNcnUI::FlashDisplay +// ---------------------------------------------------- +// +void CNcnUI::FlashDisplay() + { + // only flash display if notifications are allowed + if( VisualNotificationsAllowed() ) + { + // try to set the P&S property + TInt err = RProperty::Set( + KPSUidCoreApplicationUIs, + KLightsControl, + ELightsOn ); + + // only set it back if setting succeeded in first place + if( err == KErrNone ) + { + RProperty::Set( + KPSUidCoreApplicationUIs, + KLightsControl, + ELightsOff ); + } + } + } + +// ---------------------------------------------------- +// CNcnUI::SetIdleState +// ---------------------------------------------------- +// +void CNcnUI::SetIdleState( TBool aIdleState ) + { + // update idle state if changed + if( iIdleState != aIdleState ) + { + iIdleState = aIdleState; + iNotifier->IdleState( iIdleState ); + } + } + +// ---------------------------------------------------- +// CNcnUI::IdleState +// ---------------------------------------------------- +// +TBool CNcnUI::IdleState() + { + return iIdleState; + } + +// ---------------------------------------------------- +// CNcnUI::SetBootPhase +// ---------------------------------------------------- +// +void CNcnUI::SetBootPhase( TBool aBootPhase ) + { + iBootPhase = aBootPhase; + } + +// ---------------------------------------------------- +// CNcnUI::BootPhase +// ---------------------------------------------------- +// +TBool CNcnUI::BootPhase() + { + return iBootPhase; + } + +// ---------------------------------------------------- +// CNcnUI::UpdateSoftNotification +// ---------------------------------------------------- +// +void CNcnUI::UpdateSoftNotification( + MNcnNotifier::TNcnNotificationType aNotification, + TUint aAmount ) + { + // only update notification if visual notifications are allowed + if( VisualNotificationsAllowed() ) + { + // update SN notification + iNotifier->NewItems( aNotification, aAmount ); + } + } + +// ---------------------------------------------------- +// CNcnUI::VisualNotificationsAllowed +// ---------------------------------------------------- +// +TBool CNcnUI::VisualNotificationsAllowed() + { + // visual notifications are not allowed + // when SAP is connected + return !iSAPConnected; + } + +// ---------------------------------------------------- +// CNcnUI::AudioNotificationsAllowed +// ---------------------------------------------------- +// +TBool CNcnUI::AudioNotificationsAllowed() + { + // audio notifications are not allowed when SAP + // is connected or during boot phase + return ( !iSAPConnected && !iBootPhase ); + } + +// ---------------------------------------------------- +// CNcnUI::HandlePropertyChangedL +// ---------------------------------------------------- +// +void CNcnUI::HandlePropertyChangedL( const TUid& aCategory, TInt aKey ) + { + // SAP connection state changed + if( aCategory == KPSUidBluetoothSapConnectionState && + aKey == KBTSapConnectionState ) + { + // update SAP connection status + iSAPConnected = SAPConnected(); + + //Clear notes if we have changed to connected or we are connecting + //TSW bug ID PRIA-6HTCCK + if(iSAPConnected == TRUE) + { + NCN_RDEBUG( _L( "CNcnUI::SAP is connected. clear all soft notifications!" ) ); + iNotifier->NewItems(MNcnNotifier::ENcnMessagesNotification,0); + iNotifier->NewItems(MNcnNotifier::ENcnAudioMessagesNotification,0); + iNotifier->NewItems(MNcnNotifier::ENcnEmailNotification,0); + iNotifier->NewItems(MNcnNotifier::ENcnVoiceMailNotification,0); + iNotifier->NewItems(MNcnNotifier::ENcnVoiceMailOnLine1Notification,0); + iNotifier->NewItems(MNcnNotifier::ENcnVoiceMailOnLine2Notification,0); + iNotifier->NewItems(MNcnNotifier::ENcnMissedCallsNotification,0); + } + } + } + +// ---------------------------------------------------- +// CNcnUI::SAPConnected +// ---------------------------------------------------- +// +TBool CNcnUI::SAPConnected() + { + // default to false + TBool ret = EFalse; + + // get SAP connection state + TInt state = 0; + TInt err = RProperty::Get( + KPSUidBluetoothSapConnectionState, + KBTSapConnectionState, + state ); + + if( err == KErrNone ) + { + NCN_RDEBUG_INT( _L( "CNcnUI::SAPConnected - SAP connection = %d" ), state ); + + // if SAP is connecting or connected, return ETrue + if( state == EBTSapConnecting || state == EBTSapConnected ) + { + NCN_RDEBUG( _L( "CNcnUI::SAPConnected - SAP connected" ) ); + ret = ETrue; + } + else + { + NCN_RDEBUG( _L( "CNcnUI::SAPConnected - SAP not connected" ) ); + } + } + else + { + NCN_RDEBUG_INT( _L( "CNcnUI::SAPConnected - Could not read SAP connection value, err = %d" ), err ); + } + + return ret; + } + +// End of File