diff -r 77415202bfc8 -r 2e6c4614c58e connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConfirmationQueryNotif.cpp --- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConfirmationQueryNotif.cpp Tue Feb 02 00:24:11 2010 +0200 +++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConfirmationQueryNotif.cpp Fri Feb 19 23:12:51 2010 +0200 @@ -32,7 +32,7 @@ #include #include #include - +#include using namespace CMManager; @@ -109,6 +109,24 @@ } } + // Check if emergency call is ongoing. If it is then do not display the dialog. + TInt err( KErrNone ); + TInt state( 0 ); + + err = RProperty::Get( + KPSUidCtsyEmergencyCallInfo, + KCTSYEmergencyCallInfo, + state ); + + if ( err == KErrNone && state ) + { + // Emergency call is active. Cancel connection. + CLOG_WRITE( "CConfirmationQueryNotif::StartL: Emergency call is active!" ); + aMessage.WriteL( aReplySlot, TPckg( EMsgQueryCancelled ) ); + aMessage.Complete( KErrNone ); + return; + } + iChoice = EMsgQueryCancelled; TPckgBuf input; input.Copy( aBuffer ); @@ -117,14 +135,24 @@ iReplySlot = aReplySlot; iMessage = aMessage; iCancelled = EFalse; - - TCallBack cb( LaunchDialogL, this ); + + if ( iLaunchDialogAsync ) + { + delete iLaunchDialogAsync; + iLaunchDialogAsync = NULL; + } - if ( !iLaunchDialogAsync ) + if ( iNoteInfo.iNoteId == EConfirmMethodUsageQueryInHomeNetwork ) { + TCallBack cb( LaunchDialogL, this ); iLaunchDialogAsync = new( ELeave ) CAsyncCallBack( cb, CActive::EPriorityHigh ); } - + else + { + TCallBack cb( LaunchDialogVisitorL, this ); + iLaunchDialogAsync = new( ELeave ) CAsyncCallBack( cb, CActive::EPriorityHigh ); + } + iLaunchDialogAsync->CallBack(); } @@ -144,8 +172,17 @@ iMessage.Complete( KErrCancel ); } - delete iDialog; - iDialog = NULL; + if ( iDialog ) + { + delete iDialog; + iDialog = NULL; + } + + if ( iDialogVisitor ) + { + delete iDialog; + iDialog = NULL; + } } CLOG_LEAVEFN( "CConfirmationQueryNotif::Cancel" ); @@ -210,27 +247,14 @@ automatic = StringLoader::LoadLC( R_QTN_OCC_LIST_CS_DATA_HOME_NW_AUTOMATIC ); thisTime = StringLoader::LoadLC( R_QTN_OCC_LIST_CS_DATA_HOME_NW_THIS_TIME ); - if ( myself->iNoteInfo.iNoteId == EConfirmMethodUsageQueryInHomeNetwork ) - { - heading = StringLoader::LoadLC( R_QTN_OCC_PRMPT_CS_DATA_HOME_NW ); - messageBase = StringLoader::LoadLC( R_QTN_OCC_DETAIL_CS_DATA_HOME_NW ); - // the order of the query options depends on the location - choices.Append(EMsgQueryAutomatically); - choices.Append(EMsgQueryThisTime); - array->AppendL( *automatic ); - array->AppendL( *thisTime ); - } - else - { - heading = StringLoader::LoadLC( R_QTN_OCC_PRMPT_CS_DATA_FOREIGN_NW ); - messageBase = StringLoader::LoadLC( R_QTN_OCC_DETAIL_CS_DATA_FOREIGN_NW ); - // the order of the query options depends on the location - choices.Append(EMsgQueryThisTime); - choices.Append(EMsgQueryAutomatically); - array->AppendL( *thisTime ); - array->AppendL( *automatic ); - } - + heading = StringLoader::LoadLC( R_QTN_OCC_PRMPT_CS_DATA_HOME_NW ); + messageBase = StringLoader::LoadLC( R_QTN_OCC_DETAIL_CS_DATA_HOME_NW ); + // the order of the query options depends on the location + choices.Append(EMsgQueryAutomatically); + choices.Append(EMsgQueryThisTime); + array->AppendL( *automatic ); + array->AppendL( *thisTime ); + // Set the dialog heading and message text myself->iDialog->Heading()->SetTextL(*heading); myself->iDialog->MessageBox()->SetMessageTextL(messageBase); @@ -253,4 +277,50 @@ return 0; } +// --------------------------------------------------------- +// TInt CConfirmationQueryNotif::LaunchDialogVisitorL() +// --------------------------------------------------------- +// +TInt CConfirmationQueryNotif::LaunchDialogVisitorL( TAny* aObject ) + { + CLOG_ENTERFN( "CCConfirmationQueryNotif::LaunchDialogVisitorL" ); + CConfirmationQueryNotif* myself = + static_cast( aObject ); + + myself->iDialogVisitor = new ( ELeave ) CConfirmationQueryVisitor( myself ); + myself->iDialogVisitor->PrepareLC( R_VISITOR_QUERY ); + + HBufC* heading = NULL; + HBufC* message = NULL; + TInt resourceId = R_QTN_OCC_DETAIL_CS_DATA_FOREIGN_NW; + heading = StringLoader::LoadLC( + R_QTN_OCC_PRMPT_CS_DATA_FOREIGN_NW ); + + CDesCArrayFlat* strings = new( ELeave ) CDesCArrayFlat( 2 ); + CleanupStack::PushL( strings ); + + HBufC* messageBase = StringLoader::LoadL( resourceId, *strings ); + CleanupStack::PopAndDestroy( strings ); + + CleanupStack::PushL( messageBase ); + TInt lenMsg = messageBase->Des().Length(); + + message = HBufC::NewL( lenMsg ); + TPtr messagePtr = message->Des(); + messagePtr.Append( messageBase->Des() ); + + CleanupStack::PopAndDestroy( messageBase ); + + CleanupStack::PushL( message ); + myself->iDialogVisitor->SetMessageTextL( *message ); + CleanupStack::PopAndDestroy( message ); + + myself->iDialogVisitor->QueryHeading()->SetTextL( *heading ); + CleanupStack::PopAndDestroy( heading ); + + myself->iDialogVisitor->RunLD(); + CLOG_LEAVEFN( "CConfirmationQueryNotif::LaunchDialogVisitorL" ); + return 0; + } + // End of File