diff -r 78df25012fda -r 12bc758d6a02 phoneclientserver/callui/src/cauiengine/cauidialogs.cpp --- a/phoneclientserver/callui/src/cauiengine/cauidialogs.cpp Fri Sep 17 17:09:13 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,658 +0,0 @@ -/* -* Copyright (c) 2008 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: Implementation of CallUIEngine. -* -*/ - - -// INCLUDES - -#include -#include -#include -#include -#include // Resources. -#include -#include -#include -#include -#include -#include "cauidialogs.h" -#include "cauilogger.h" -#include "cauiquery.h" -#include "cauiengine.h" -#include "cphcntmatcher.h" -#include "cauiactiveobject.h" - -// CLASS DECLARATION - -/** -* Container for informatioin needed in Reconnection query. -* -* @lib CaUiEngine.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS( CCaUiReConQueryInformation ) - : public CBase - { - public: // Constructors and destructor - - /** - * C++ constructor. - * - * @see CCaUiEngApi::LaunchNoteAndReconConfQueryL(). - */ - CCaUiReConQueryInformation( - MCaUiReconnectQueryObserver& aObserver, - CPhCntMatcher* aPhCntMatcher, - const TPtrC aPhoneNumber, - const TBool aIncludeVideoCallOption, - const TPtrC aNoteText ); - - /** - * Destructor. - */ - ~CCaUiReConQueryInformation(); - - - public: // Data - - // Observer storage. - MCaUiReconnectQueryObserver& iObserver; - - // Matcher storage. - CPhCntMatcher* iPhCntMatcher; - - // Phone number storage. - const TPtrC iPhoneNumber; - - // Video call option storage. - const TBool iIncludeVideoCallOption; - - // The name corresponding the phone number. - const TPtrC iAlias; - - }; - - -// ----------------------------------------------------------------------------- -// CCaUiReConQueryInformation::CCaUiReConQueryInformation -// -// C++ default constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CCaUiReConQueryInformation::CCaUiReConQueryInformation( - MCaUiReconnectQueryObserver& aObserver, - CPhCntMatcher* aPhCntMatcher, - const TPtrC aPhoneNumber, - const TBool aIncludeVideoCallOption, - const TPtrC aAlias ) - : iObserver( aObserver ), - iPhCntMatcher( aPhCntMatcher ), - iPhoneNumber( aPhoneNumber ), - iIncludeVideoCallOption( aIncludeVideoCallOption ), - iAlias( aAlias ) - { - } - -// ----------------------------------------------------------------------------- -// CCaUiReConQueryInformation::~CCaUiReConQueryInformation -// -// Destructor. -// ----------------------------------------------------------------------------- -// -CCaUiReConQueryInformation::~CCaUiReConQueryInformation() - { - } - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::CCaUiDialogs -// -// -// ----------------------------------------------------------------------------- -// -CCaUiDialogs::CCaUiDialogs( CCaUiEngine& aCaUiEngine ) - : iCaUiEngine( aCaUiEngine ) - { - } - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::NewL -// -// -// ----------------------------------------------------------------------------- -// -CCaUiDialogs* CCaUiDialogs::NewL( CCaUiEngine& aCaUiEngine ) - { - CCaUiDialogs* self = new( ELeave ) CCaUiDialogs( aCaUiEngine ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::ConstructL -// -// -// ----------------------------------------------------------------------------- -// -void CCaUiDialogs::ConstructL() - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::ConstructL() Begin"); - // Create reconnect query, not visible yet. - iReconListQuery = CAknGlobalListQuery::NewL(); - - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::ConstructL() End"); - } - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::~CCaUiDialogs -// -// -// ----------------------------------------------------------------------------- -// -CCaUiDialogs::~CCaUiDialogs() - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::~CCaUiDialogs() Begin"); - // Cancel confirmation query if exists. - CancelReconConfQuery(); - delete iReconListQuery; - - // Delete reconnection query information. - delete iReConQueryInformation; - - // Cancel and delete note timer if exists. - if ( iNoteTimer ) - { - iNoteTimer->Cancel(); - delete iNoteTimer; - } - - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::~CCaUiDialogs() End"); - } - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::QueryVideoCallDefaultActionL -// -// -// ----------------------------------------------------------------------------- -// -TInt CCaUiDialogs::QueryVideoCallDefaultActionL() - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::QueryVideoCallDefaultActionL() Begin"); - HBufC* vtstring = NULL; - HBufC* header = NULL; - vtstring = StringLoader::LoadLC( R_CALLUI_VT_SETTING_NOTE ); - header = StringLoader::LoadLC( R_CALLUI_POPUP_VT_TITLE_SETTING ); - - CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *vtstring ); - CleanupStack::PushL( dlg ); - dlg->SetHeaderTextL( *header ); - CleanupStack::Pop( dlg ); - - // Show query note to user - TInt result = dlg->ExecuteLD( R_CALLUI_VT_SETTING_QUERY ); - - CleanupStack::PopAndDestroy( 2, vtstring ); // header, vtstring - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::QueryVideoCallDefaultActionL() End"); - - return result; - } - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::LaunchCreateListQueryL -// -// -// ----------------------------------------------------------------------------- -// -TBool CCaUiDialogs::LaunchCreateListQueryL( TPhCltCallType& aCallType ) - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::LaunchCreateListQueryL() Begin"); - - TInt choice = KErrNotFound; - - CListMappingArray* mappingList = new ( ELeave ) CListMappingArray( 4 ); - CleanupStack::PushL( mappingList ); - - // Create query dialog. - CCaUiCreateListQuery* dlg = - new ( ELeave ) CCaUiCreateListQuery( &choice ); - dlg->PrepareLC( R_CALLUI_CREATE_LIST_QUERY ); - - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::LaunchCreateListQueryL() 1"); - - // new clean list item array - CDesCArray* textArray = new( ELeave ) CDesCArrayFlat( 4 ); - CleanupStack::PushL( textArray ); - - FillListQueryItemsL( *textArray, *mappingList ); - - CleanupStack::Pop( textArray ); - - // Dialog takes the ownership of textArray - if( textArray ) - { - dlg->SetOwnershipType( ELbmOwnsItemArray ); - dlg->SetItemTextArray( textArray ); - } - - // Highlight preferred item from listbox - if( aCallType == EPhCltVideo ) - { - dlg->ListBox()->SetCurrentItemIndex( KCallUiVideoCall ); - } - - TBool ok = dlg->RunLD(); - CAUILOGSTRING2("CALLUI: >>>CCaUiDialogs::LaunchCreateListQueryL() ok = %d", ok ); - CAUILOGSTRING2("CALLUI: >>>CCaUiDialogs::LaunchCreateListQueryL() choice = %d", choice ); - if ( ok ) - { - // Check what call type was selected. - - // Dynamic list made because of voip support - // take calltype from mappinglist - aCallType = mappingList->At( choice ).iCallType; - } - - CleanupStack::PopAndDestroy( mappingList ); - - return ok; - } - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::FillListQueryItemsL -// -// -// ----------------------------------------------------------------------------- -// -void CCaUiDialogs::FillListQueryItemsL( - CDesCArray& aTextArray, - CListMappingArray& aMappingList ) - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::FillListQueryItemsL() Begin"); - - // Pointer for strings to be loaded. - HBufC* bufPtr = NULL; - TInt index = 0; - TListMappingItem item; - - // Voice call option. - bufPtr = StringLoader::LoadLC( R_CALLUI_CREATE_LIST_VOICE ); - aTextArray.AppendL( *bufPtr ); - CleanupStack::PopAndDestroy( bufPtr ); - bufPtr = NULL; - item.iIndex = index; - item.iCallType = EPhCltVoice; - aMappingList.AppendL( item ); - index++; - - // Video call option. - if ( FeatureManager::FeatureSupported( KFeatureIdCsVideoTelephony ) ) - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::FillListQueryItemsL() Adding video call option"); - bufPtr = StringLoader::LoadLC( R_CALLUI_CREATE_LIST_VIDEO ); - aTextArray.AppendL( *bufPtr ); - CleanupStack::PopAndDestroy( bufPtr ); - bufPtr = NULL; - item.iIndex = index; - item.iCallType = EPhCltVideo; - aMappingList.AppendL( item ); - index++; - } - // Internet call option is shown if dynamic voip is set on - // and there are VoIP profiles defined - if( iCaUiEngine.IsVoIPProfiles() ) - { - // Internet call option. - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::FillListQueryItemsL() Adding internet call option"); - bufPtr = StringLoader::LoadLC( R_CALLUI_CREATE_LIST_INTERNET ); - aTextArray.AppendL( *bufPtr ); - CleanupStack::PopAndDestroy( bufPtr ); - bufPtr = NULL; - item.iIndex = index; - item.iCallType = EPhCltCallVoIP; - aMappingList.AppendL( item ); - index++; - } - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::FillListQueryItemsL() End"); - } - - -/** not tested **/ - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::LaunchNoNetSupNoteL -// -// -// ----------------------------------------------------------------------------- -// -void CCaUiDialogs::LaunchNoNetSupNoteL() - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::LaunchNoNetSupNoteL() Begin"); - HBufC* string = StringLoader::LoadLC( R_CALLUI_NO_VIDEO_NETWORK ); - - CAknInformationNote* dlg = new ( ELeave ) CAknInformationNote( EFalse ); - dlg->ExecuteLD( *string ); - dlg = NULL; - - CleanupStack::PopAndDestroy( string ); - string = NULL; - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::LaunchNoNetSupNoteL() End"); - } - - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::LaunchReconConfQueryL -// -// -// ----------------------------------------------------------------------------- -// -void CCaUiDialogs::LaunchReconConfQueryL( - MCaUiReconnectQueryObserver& aObserver, - CPhCntMatcher* aPhCntMatcher, - const TPtrC aPhoneNumber, - const TBool aIncludeVideoCallOption, - const TPtrC aAlias ) - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::LaunchReconConfQueryL() Begin "); - CDesCArray* textArray = new( ELeave ) CDesCArrayFlat( 4 ); - CleanupStack::PushL( textArray ); - - // Delete the old query if exists. - CancelReconConfQuery(); - - // Create new active object to handle query results. - iReconActObject = CCaUiGlnActiveObject::NewL( - aObserver, - aPhCntMatcher, - aPhoneNumber, - aAlias ); - - CCaUiTIntArray* objectArray = iReconActObject->ReconQueryOptionsArray(); - - // Pointer for strings to be loaded. - HBufC* bufPtr = NULL; - - // Voice call option. - bufPtr = StringLoader::LoadLC( R_CALLUI_RECONNECT_LIST_ITEM_VOICE ); - textArray->AppendL( *bufPtr ); - CleanupStack::PopAndDestroy( bufPtr ); - bufPtr = NULL; - objectArray->AppendL( CCaUiGlnActiveObject::ECaUiVoiceCall ); - - // Video call option is included only if it is wanted. - if ( aIncludeVideoCallOption ) - { - bufPtr = StringLoader::LoadLC( R_CALLUI_RECONNECT_LIST_ITEM_VIDEO ); - textArray->AppendL( *bufPtr ); - CleanupStack::PopAndDestroy( bufPtr ); - bufPtr = NULL; - objectArray->AppendL( CCaUiGlnActiveObject::ECaUiVideoCall ); - } - -#ifndef RD_UNIFIED_EDITOR - // MMS option. - if (FeatureManager::FeatureSupported(KFeatureIdMMS)) - { - bufPtr = StringLoader::LoadLC( R_CALLUI_RECONNECT_LIST_ITEM_MMS ); - textArray->AppendL( *bufPtr ); - CleanupStack::PopAndDestroy( bufPtr ); - bufPtr = NULL; - objectArray->AppendL( CCaUiGlnActiveObject::ECaUiMms ); - } - - // SMS option. - bufPtr = StringLoader::LoadLC( R_CALLUI_RECONNECT_LIST_ITEM_SMS ); - textArray->AppendL( *bufPtr ); - CleanupStack::PopAndDestroy( bufPtr ); - bufPtr = NULL; - objectArray->AppendL( CCaUiGlnActiveObject::ECaUiSms ); - -#else - // Send message option. - bufPtr = StringLoader::LoadLC( R_CALLUI_RECONNECT_LIST_ITEM_MESSAGE ); - textArray->AppendL( *bufPtr ); - CleanupStack::PopAndDestroy( bufPtr ); - bufPtr = NULL; - objectArray->AppendL( CCaUiGlnActiveObject::ECaUiMsg ); -#endif // RD_UNIFIED_EDITOR - - // Load query header. - bufPtr = StringLoader::LoadLC( R_CALLUI_RECONNECT_QUERY_HEADER ); - iReconListQuery->SetHeadingL( *bufPtr ); // Set query heading. - CleanupStack::PopAndDestroy( bufPtr ); - bufPtr = NULL; - - // Show query. - iReconActObject->SetActive(); - iReconListQuery->ShowListQueryL( textArray, iReconActObject->iStatus ); - - CleanupStack::PopAndDestroy( textArray ); - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::LaunchReconConfQueryL() End "); - } - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::CancelReconConfQuery -// -// -// ----------------------------------------------------------------------------- -// -void CCaUiDialogs::CancelReconConfQuery() - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::CancelReconConfQuery() Begin "); - // Cancel the earlier query if exists. - if( iReconListQuery ) - { - iReconListQuery->CancelListQuery(); - } - - // Cancel the active object. - if( iReconActObject ) - { - if ( iReconActObject->IsActive() ) - { - iReconActObject->Cancel(); - } - } - iReconfQueryOngoing = EFalse; - delete iReconActObject; - iReconActObject = NULL; - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::CancelReconConfQuery() End "); - } - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::CancelNoteAndReconConfQuery -// -// -// ----------------------------------------------------------------------------- -// -void CCaUiDialogs::CancelNoteAndReconConfQuery() - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::CancelNoteAndReconConfQuery() Begin "); - // Delete reconnection query information. - delete iReConQueryInformation; - iReConQueryInformation = NULL; - - // Cancel Note timer if exists. - if ( iNoteTimer ) - { - // Cancel note timer. - iNoteTimer->Cancel(); - } - - // Cancel the reconnect query if exists. - if( iReconListQuery ) - { - iReconListQuery->CancelListQuery(); - } - - // Cancel the active object. - if( iReconActObject ) - { - if ( iReconActObject->IsActive() ) - { - iReconActObject->Cancel(); - } - } - - delete iReconActObject; - iReconActObject = NULL; - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::CancelNoteAndReconConfQuery() End "); - } - - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::LaunchNoteAndReconConfQueryL -// -// -// ----------------------------------------------------------------------------- -// -void CCaUiDialogs::LaunchNoteAndReconConfQueryL( - MCaUiReconnectQueryObserver& aObserver, - CPhCntMatcher* aPhCntMatcher, - const TPtrC aPhoneNumber, - const TBool aIncludeVideoCallOption, - const TPtrC aNoteText, - const TPtrC aAlias ) - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::LaunchNoteAndReconConfQueryL() Begin "); - iReconfQueryOngoing = ETrue; - delete iReConQueryInformation; - iReConQueryInformation = NULL; - iReConQueryInformation = new ( ELeave ) CCaUiReConQueryInformation( - aObserver, - aPhCntMatcher, - aPhoneNumber, - aIncludeVideoCallOption, - aAlias ); - - HBufC* string = NULL; - TInt noteTextLength = aNoteText.Length(); - - // Use either given note string or the qtn.tel.no.video.network string. - if ( noteTextLength ) - { - string = HBufC::NewLC( noteTextLength ); - string->Des() = aNoteText; - } - else - { - string = StringLoader::LoadLC( R_CALLUI_NO_VIDEO_NETWORK ); - } - - if ( !iInfoNote ) - { - iInfoNote = new ( ELeave ) CAknInformationNote( EFalse ); - iInfoNote->SetTimeout( CAknNoteDialog::ELongTimeout ); - iInfoNote->ExecuteLD( *string ); - } - - // Start note wait timer. - if ( !iNoteTimer ) - { - iNoteTimer = CPeriodic::NewL( CActive::EPriorityStandard ); - } - iNoteTimer->Cancel(); - iNoteTimer->Start( - KCaUiEngNoteTimeout, - KCaUiEngNoteTimeout, - TCallBack( DoPerformNoteLaunchCallBackL, this ) ); - - CleanupStack::PopAndDestroy( string ); - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::LaunchNoteAndReconConfQueryL() End"); - } - - - -// ----------------------------------------------------------------------------- -// CCaUiDialogs::DoPerformNoteLaunchCallBackL -// -// -// ----------------------------------------------------------------------------- -// -TInt CCaUiDialogs::DoPerformNoteLaunchCallBackL( TAny* aAny ) - { - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::DPNoteLaunchCallBackL() Begin"); - - CCaUiDialogs* self = static_cast< CCaUiDialogs* >( aAny ); - - if ( self ) - { - if ( self->iNoteTimer ) - { - // Cancel note timer. - self->iNoteTimer->Cancel(); - } - - if ( self->iInfoNote ) - { - // Information note still displayed - return KErrNone; - } - - if ( self->iReConQueryInformation && self->IsReconfQueryOngoing() ) - { - // Launch reconnect query. - self->LaunchReconConfQueryL( - self->iReConQueryInformation->iObserver, - self->iReConQueryInformation->iPhCntMatcher, - self->iReConQueryInformation->iPhoneNumber, - self->iReConQueryInformation->iIncludeVideoCallOption, - self->iReConQueryInformation->iAlias ); - } - - delete self->iReConQueryInformation; - self->iReConQueryInformation = NULL; - } - CAUILOGSTRING("CALLUI: >>>CCaUiDialogs::DPNoteLaunchCallBackL() end"); - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// CCaUiEngine::IsReconfQueryOngoing -// -// -// ----------------------------------------------------------------------------- -// -TBool CCaUiDialogs::IsReconfQueryOngoing() - { - return iReconfQueryOngoing; - } - - -// ----------------------------------------------------------------------------- -// CCaUiEngine::IsReconfQueryOngoing -// -// -// ----------------------------------------------------------------------------- -// -void CCaUiDialogs::SetReconfQueryOngoing( const TBool aOngoing ) - { - iReconfQueryOngoing = aOngoing; - }