diff -r f742655b05bf -r d38647835c2e convergedconnectionhandler/cchserver/src/cchnotehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convergedconnectionhandler/cchserver/src/cchnotehandler.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,392 @@ +/* +* Copyright (c) 2008-2010 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: CCh note handler. +* +*/ + +// INCLUDE FILES +#include "cchnotehandler.h" +#include "cchprivatecrkeys.h" +#include "cchserverbase.h" +#include "cchfeaturemanager.h" +#include +#include +#include +#include +#include "cchsecondarydisplayapi.h" +#include +#include +#include +#include "cchlogger.h" + +_LIT( KCchResourceDir, "\\resource\\apps\\" ); +_LIT( KCchResourceFileName, "cch.r*" ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::CCchNoteHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCchNoteHandler::CCchNoteHandler( CCCHServerBase& aServer ) + : CActive ( EPriorityHigh ), + iServer( aServer ), + iCoverDisplaySupported( aServer.FeatureManager().CoverDisplaySupported() ) + { + } + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CCchNoteHandler* CCchNoteHandler::NewL( CCCHServerBase& aServer ) + { + CCchNoteHandler* self = + new (ELeave) CCchNoteHandler( aServer ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// ---------------------------------------------------------------------------- +// CCchNoteHandler::ConstructL() +// ---------------------------------------------------------------------------- + +void CCchNoteHandler::ConstructL() + { + iGlobalMsgQuery = CAknGlobalMsgQuery::NewL(); + iCchCenRep = CRepository::NewL( KCRUidCch ); + User::LeaveIfError( iFsSession.Connect() ); + iResourceFile = ScanFileL( TFileName( KCchResourceFileName ), + TFileName( KCchResourceDir ) ); + User::LeaveIfNull( iResourceFile ); + CActiveScheduler::Add( this ); + } + +// ---------------------------------------------------------------------------- +// CCchNoteHandler::~CCchNoteHandler() +// Destructor +// ---------------------------------------------------------------------------- + +CCchNoteHandler::~CCchNoteHandler() + { + Cancel(); + iMsgQueryInfoArray.Close(); + iFsSession.Close(); + delete iResourceFile; + delete iCchCenRep; + delete iGlobalMsgQuery; + } + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::RunL +// From CActive, handles note/query dismissal. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCchNoteHandler::RunL() + { + TInt status = iStatus.Int(); + CCHLOGSTRING2( "CCchNoteHandler::RunL iResourceId: %d", iResourceId ); + + // update central repository + switch ( iResourceId ) + { + case R_QTN_FIRST_EMERGENCY_WARNING_NOTE: + { + if ( status == EAknSoftkeyYes || status == EAknSoftkeyOk ) + { + iCchCenRep->Set( + KCCHVoIPEmergencyWarningShown, + ECCHVoIPEmergencyWarningAlreadyShown ); + } + if( iDie ) + { + + delete this; + return; + } + else + { + // now we are show this emergency note -> we can show + // another if needed + iServer.SetVoIPEmergencyNoteShown( EFalse ); + } + break; + } + case R_QTN_VOIP_DO_NOT_SHOW_WARNING: + { + if ( status == EAknSoftkeyYes || status == EAknSoftkeyOk ) + { + iCchCenRep->Set( + KCCHVoIPShowEmergencyWarningOnOff, + ECCHVoIPEmergencyWarningOnOffDoNotShowWarning ); + + } + if( iDie ) + { + + delete this; + return; + } + else + { + // now we are show this emergency note -> we can show + // another if needed + iServer.SetVoIPEmergencyNoteShown( EFalse ); + } + break; + } + case R_QTN_SERVTAB_ALLOW_GPRS_WHEN_ROAMING_QUERY: + { + if ( status == EAknSoftkeyYes || status == EAknSoftkeyOk ) + { + // Set gprs roaming cost warning note as shown to cenrep + iCchCenRep->Set( + KCCHGprsRoamingCostWarningShown, + ECCHGprsRoamingCostWarningAlreadyShown ); + } + } + break; + default: + break; + } + + // delete self + if( iResourceId != R_QTN_VOIP_EM_CALL_ERROR_NOTE_NO_CS && iDie ) + { + delete this; + return; + } + + // peek one message from query array + if( iMsgQueryInfoArray.Count() > 0 ) + { + TGlobalMsgQueryInfo msgQueryInfo = iMsgQueryInfoArray[0]; + DoLaunchGlobalNoteL( msgQueryInfo.iResourceId, + msgQueryInfo.iSoftkeyId, + msgQueryInfo.iSecondaryDisplayIndex ); + + iMsgQueryInfoArray.Remove( 0 ); + } + } + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::CanBeDestroyed +// ----------------------------------------------------------------------------- +// +TBool CCchNoteHandler::CanBeDestroyed() + { + if( IsActive() ) + { + iDie = ETrue; + return EFalse; + } + else + { + return ETrue; + } + } + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::DoCancel +// From CActive, cancels current operation. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCchNoteHandler::DoCancel() + { + iGlobalMsgQuery->CancelMsgQuery(); + } + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::RunError +// From CActive, handles exceptions in RunL. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCchNoteHandler::RunError( TInt /*aError*/ ) + { + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::LaunchGlobalNoteL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCchNoteHandler::LaunchGlobalNoteL( const TInt aResourceId, + const TInt aSoftKeyConfig, + const TInt aSecondaryDisplayIndex ) + { + CCHLOGSTRING( "CCchNoteHandler::LaunchGlobalNoteL: IN" ); + + // Check there is global message query is shown at the moment + if ( IsActive() ) + { + TBool alreadyAdded( EFalse ); + for ( TInt i( 0 ) ; i < iMsgQueryInfoArray.Count() ; i++ ) + { + if ( iMsgQueryInfoArray[ i ].iResourceId == aResourceId ) + { + alreadyAdded = ETrue; + } + } + + // Add to array only if note with same resource is not + // already in array + if ( !alreadyAdded && ( iResourceId != aResourceId ) ) + { + // add the message query info to array + TGlobalMsgQueryInfo msgQueryInfo; + msgQueryInfo.iResourceId = aResourceId; + msgQueryInfo.iSoftkeyId = aSoftKeyConfig; + msgQueryInfo.iSecondaryDisplayIndex = aSecondaryDisplayIndex; + + iMsgQueryInfoArray.AppendL( msgQueryInfo ); + } + } + else + { + DoLaunchGlobalNoteL( aResourceId, aSoftKeyConfig, aSecondaryDisplayIndex ); + } + + if( aResourceId == R_QTN_VOIP_EM_CALL_ERROR_NOTE_NO_CS ) + { + TGlobalMsgQueryInfo msgQueryInfo; + msgQueryInfo.iResourceId = R_QTN_VOIP_DO_NOT_SHOW_WARNING; + msgQueryInfo.iSoftkeyId = R_AVKON_SOFTKEYS_OK_CANCEL; + msgQueryInfo.iSecondaryDisplayIndex = + SecondaryDisplay::ECmdShowDoNotShowVoipEmergencyCallWarningQuery; + + iMsgQueryInfoArray.AppendL( msgQueryInfo ); + } + + CCHLOGSTRING( "CCchNoteHandler::LaunchGlobalNoteL: OUT" ); + } + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::DoLaunchGlobalNoteL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCchNoteHandler::DoLaunchGlobalNoteL( const TInt aResourceId, + const TInt aSoftKeyConfig, + const TInt aSecondaryDisplayIndex ) + { + CCHLOGSTRING( "CCchNoteHandler::LaunchGlobalNoteL: IN" ); + + iResourceId = aResourceId; + HBufC* textBuffer = LoadResourceL( aResourceId ); + CleanupStack::PushL( textBuffer ); + + // Set secondary display data if necessary + if ( iCoverDisplaySupported ) + { + CAknSDData* sd = CAknSDData::NewL( + SecondaryDisplay::KCatCch, + aSecondaryDisplayIndex, + KNullDesC8); + + iGlobalMsgQuery->SetSecondaryDisplayData(sd); + } + + iGlobalMsgQuery->ShowMsgQueryL( + iStatus, + textBuffer->Des(), + aSoftKeyConfig, + KNullDesC, + KNullDesC ); + + CleanupStack::PopAndDestroy( textBuffer ); + SetActive(); + + CCHLOGSTRING( "CCchNoteHandler::LaunchGlobalNoteL: OUT" ); + } + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::LoadResourceL +// Loads the localized text resource from resource file +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +HBufC* CCchNoteHandler::LoadResourceL( TInt aResourceID ) + { + RResourceFile resourceFile; + CleanupClosePushL( resourceFile ); + resourceFile.OpenL( iFsSession, *iResourceFile ); + resourceFile.ConfirmSignatureL( 0 ); + HBufC8* readBuffer=resourceFile.AllocReadLC( + aResourceID ); + const TPtrC16 ptrReadBuffer( + (TText16*) readBuffer->Ptr(),(readBuffer->Length()+1) >> 1 ); + HBufC* textBuffer=HBufC16::NewL( ptrReadBuffer.Length() ); + *textBuffer=ptrReadBuffer; + CleanupStack::PopAndDestroy( readBuffer ); + CleanupStack::PopAndDestroy( &resourceFile ); + return textBuffer; + } + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::ScanFileC +// Finds out the correct path for a file +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +HBufC* CCchNoteHandler::ScanFileL( const TDesC& aFileName, + const TDesC& aFilePath ) + { + CCHLOGSTRING( "CCchNoteHandler::ScanFileL: IN" ); + TFindFile search( iFsSession); + CDir* dirlist; + HBufC* fullName = NULL; + TFileName filename(aFileName); + TInt err = search.FindWildByDir( filename, aFilePath, dirlist ); + if (err == KErrNone) + { + CCHLOGSTRING( "CCchNoteHandler::ScanFileL: dir found" ); + if ( dirlist && 0 < dirlist->Count() ) + { + TParse fullentry; + fullentry.Set( (*dirlist)[0].iName, &search.File(), NULL ); + TFileName nearestFile( fullentry.FullName() ); + BaflUtils::NearestLanguageFile( iFsSession, nearestFile ); + + fullName = HBufC::NewL( nearestFile.Length() ); + fullName->Des().Copy( nearestFile ); + } + delete dirlist; + } + CCHLOGSTRING2( "CCchNoteHandler::ScanFileL: OUT value=%s",fullName ); + return fullName; + } + +// ----------------------------------------------------------------------------- +// CCchNoteHandler::CchCenRep +// ----------------------------------------------------------------------------- +// +CRepository* CCchNoteHandler::CchCenRep() + { + return iCchCenRep; + } +// End of File