--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/ncnlist/src/CNcnUI.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -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 <f32file.h> // For TParse
+#include <data_caging_path_literals.hrh> // For literals
+#include <stringresourcereader.h> // For CStringResourceReader
+#include <StringLoader.h> // For StringLoader
+#include <AknUtils.h> // For AknTextUtils
+#include <AknGlobalNote.h> // For CAknGlobalNote
+#include <viewcli.h> // For CVwsSessionWrapper
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <viewclipartner.h>
+#endif
+#include <e32property.h> // For RProperty
+#include <BTSapDomainPSKeys.h> // For KPSUidBluetoothSapConnectionState
+#include <activeidle2domainpskeys.h>
+#include <coreapplicationuisdomainpskeys.h>
+
+#include <Ncnlist.rsg> // 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<KNcnDeliveryResourceBufLen> deliveredText =
+ reader->ReadResourceString( R_NCN_DELIVERED_NOTE_TEXT );
+
+ TBuf<KNcnDeliveryTextBufLen> 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