diff -r 35488577e233 -r 2fa1fa551b0b satengine/SatServer/Engine/src/CSatSUiSubSession.cpp --- a/satengine/SatServer/Engine/src/CSatSUiSubSession.cpp Mon Aug 23 15:50:31 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,563 +0,0 @@ -/* -* Copyright (c) 2002-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: Ui sub session. -* -*/ - - - -// INCLUDE FILES -#include -#include - -#include "CSatSUiSubSession.h" -#include "CSatSSession.h" -#include "CSatSServer.h" -#include "CSatCommandHandler.h" -#include "CSatCommandContainer.h" -#include "MSatApi.h" -#include "EnginePanic.h" -#include "SatLog.h" -#include "SATInternalPSKeys.h" - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::CSatSUiSubSession -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -//lint -e{1403, 1769} Can not be initialized, harmless. -CSatSUiSubSession::CSatSUiSubSession( - CSatSSession& aSession, - MSatApi& aSatApi, - TSatEventMediator& aEventMediator ) // Session - : - CSatSSubSession( aSession ), - iEventData(), - iEventDataPckg( iEventData ), - iSatApi( aSatApi ), - iEventMediator( aEventMediator ) - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::CSatSUiSubSession calling - exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::ConstructL() - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::ConstructL calling" ) - - iEventMediator.RegisterL( this, MSatUtils::ESmsSent ); - - // Get registered service requests from MSatUtils. - iServiceRequest = iSession.SatServer()->SatUtils()->ServiceRequests(); - - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::ConstructL exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CSatSUiSubSession* CSatSUiSubSession::NewL( - CSatSSession& aSession, - MSatApi& aSatApi, - TSatEventMediator& aEventMediator ) - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::NewL calling" ) - - CSatSUiSubSession* self = - new( ELeave ) CSatSUiSubSession( aSession, aSatApi, aEventMediator ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::NewL exiting" ) - return self; - } - -// Destructor -CSatSUiSubSession::~CSatSUiSubSession() - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::~CSatSUiSubSession calling" ) - - iServiceRequest = NULL; - - // Unregister to listen events - iEventMediator.Unregister( this ); - - // Inform session that UI Session is closed. - // Session tells to container of iServiceRequest to reset - // request handlers. - iSession.UiSessionClosed(); - - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::~CSatSUiSubSession exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::HandleCommandL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::HandleCommandL( - const RMessage2& aMessage ) // Message from ui client. - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL calling" ) - LOG2( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL \ - command: %i", aMessage.Function() ) - switch ( aMessage.Function() ) - { - // Ui client is ready to handle setupmenu command. - case ESatSProactiveSetUpMenu: - { - // Notifies that SetUpMenu command has been made because SAT Client - // side application is returning to the main menu after SelectItem. - // For example: Next action is LaunchBrowser command and after - // Browser is launched then SAT Client side application has been - // opened top of Browser. In some cases SAT client side application - // stays topmost. - iEventMediator.Notify( MSatUtils::ESetUpMenuRequested ); - // This service request is handled also like commands listed below. - } - //lint -fallthrough intended here - case ESatSProactiveDisplayText: - case ESatSProactiveGetInkey: - case ESatSProactiveGetInput: - case ESatSProactiveSelectItem: - case ESatSProactivePlayTone: - case ESatSProactiveRefresh: - case ESatSProactiveDisplayTextResponse: - case ESatSProactiveGetInkeyResponse: - case ESatSProactiveGetInputResponse: - case ESatSProactiveSelectItemResponse: - case ESatSProactivePlayToneResponse: - case ESatSProactiveQuery: - case ESatSProactiveQueryResponse: - case ESatSProactiveNotification: - case ESatSProactiveNotificationResponse: - { - const TInt count( iServiceRequest->Count() ); - TBool requestHandled( EFalse ); - TInt index( 0 ); - // Loop until request is handled or no request handler found. - while ( !requestHandled && index < count ) - { - requestHandled = iServiceRequest->At( index )-> - HandleRequest( aMessage ); - index++; - } - LOG2( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL \ - index: %i", index ) - break; - } - - // Menu selection envelope. - case ESatSActiveMenuSelection: - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession: MenuSelection" ) - // Declare the IPC data structures. - RSat::TMenuSelectionV1 menuSelection; - RSat::TMenuSelectionV1Pckg menuSelectionPckg( menuSelection ); - - // Perform the IPC transfer of response data. - TRAPD( res, aMessage.ReadL( 0, menuSelectionPckg ) ); - - // Send the response further only if IPC succeeded. - if ( KErrNone != res ) - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession: KErrNone != res" ) - iSession.PanicClient( aMessage, ESatSBadDescriptor ); - } - iSatApi.SendMenuSelection( menuSelectionPckg ); - - // Complete the client request. - aMessage.Complete( KErrNone ); - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::HandleCommandL exiting" ) - return; - } - - case ESatSProactiveEvent: - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession: Event" ) - iEventRequest = aMessage; - iEventRequestAvailable = ETrue; - if ( iCloseUiRequested ) - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::HandleCommandL closeui" ) - CloseUiSession(); - } - else if ( iSmsSent ) - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::HandleCommandL smssent" ) - SendSmsSentEventToClient(); - } - else if ( iClearScreenRequested ) - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL \ - clearscreen" ) - ClearScreen(); - } - else if ( iUiEventRequested ) - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL \ - UiEventRequested" ) - HandleUiEventNotification(); - } - else - { - LOG( SIMPLE, "SATENGINE: Event request available" ) - } - - break; - } - - case ESatSProactiveEventResponse: - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession: EventResponse" ) - // Declare the IPC data structures. - TSatEventV1 eventRsp; - //lint -e{603} eventRsp read through eventRspPckg in ReadL. - TSatEventV1Pckg eventRspPckg( eventRsp ); - - // Perform the IPC transfer of response data. - TRAPD( res, aMessage.ReadL( 0, eventRspPckg ) ); - if ( KErrNone != res ) - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL \ - read response data error" ) - iSession.PanicClient( aMessage, ESatSBadDescriptor ); - } - else - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL \ - no error" ) - aMessage.Complete( KErrNone ); - } - break; - } - - case ESatSSessionTerminated: - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession: SessionTerminated" ) - TSatTermination temp; - //lint -e{603} temp read through tempPckg in ReadL. - TSatTerminationPckg tempPckg ( temp ); - TRAPD( res, aMessage.ReadL( 0, tempPckg ) ); - if ( KErrNone != res ) - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL \ - read tempPckg error" ) - iSession.PanicClient( aMessage, ESatSBadDescriptor ); - } - else - { - LOG2( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL \ - temp.type: %i", temp.type ) - switch ( temp.type ) - { - case ETerminatedByCancel: - { - iEventMediator.Notify( - MSatUtils::ECommandCancelled ); - break; - } - case ETerminatedByEndKey: - { - iEventMediator.Notify( - MSatUtils::ECancelledUsingEndKey ); - - PublishSatAppClosedUsingEndKey(); - - // Inform session that UI Session is closed. - // Session is not actually closed yet but this prevents - // sending data through this session. - // Notify thread death monitor - iSession.NotifyThreadDeathMonitor(); - break; - } - default: - { - LOG( SIMPLE, "SATENGINE: Unknown termination type" ) - } - } - } - // Complete the client request. - aMessage.Complete( KErrNone ); - break; - } - - default: - { - LOG( SIMPLE, " Unhandled command") - } - } - - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::HandleCommandL exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::CloseUiSession -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::CloseUiSession() - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::CloseUiSession calling" ) - - // Set request flag to ETrue. Updated when command is successfully sent. - iCloseUiRequested = ETrue; - - // Notify thread death monitor - iSession.NotifyThreadDeathMonitor(); - - iEventData.iEvent = ESatSCloseSatUiAppEvent; - - const TBool commandSent( SendCommandDataToClient( iEventRequestAvailable, - iEventDataPckg, - iEventRequest ) ); - - if ( commandSent ) - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::CloseUiSession commandSent" ) - // If command was sent, set flag to false, so when next Event request - // arrives, command data is not sent. - iCloseUiRequested = EFalse; - } - - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::CloseUiSession exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::ClearScreen -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::ClearScreen() - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::ClearScreen calling" ) - - // Set request flag to ETrue. Updated when command is successfully sent. - iClearScreenRequested = ETrue; - - iEventData.iEvent = ESatSClearScreenEvent; - - const TBool commandSent( SendCommandDataToClient( iEventRequestAvailable, - iEventDataPckg, - iEventRequest ) ); - - if ( commandSent ) - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::ClearScreen commandSent" ) - // If command was sent, set flag to false, so when next Event request - // arrives, command data is not sent. - iClearScreenRequested = EFalse; - } - - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::ClearScreen exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::UiEventNotification -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::UiEventNotification( - TInt aEventId, TInt aEventStatus, TInt aEventError ) - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::UiEventNotification calling" ) - - // Set request flag to ETrue. Updated when command is successfully sent. - iUiEventRequested = ETrue; - iEventData.iEvent = static_cast< TSatSEvent >( aEventId ); - iEventData.iStatus = static_cast< TSatSEventStatus >( aEventStatus ); - iEventData.iError = aEventError; - - HandleUiEventNotification(); - - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::UiEventNotification exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::HandleUiEventNotification -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::HandleUiEventNotification() - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::HandleUiEventNotification calling" ) - - // Send Command to client - const TBool commandSent( SendCommandDataToClient( iEventRequestAvailable, - iEventDataPckg, - iEventRequest ) ); - - // Check the status of command sending - if ( commandSent ) - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::HandleUiEventNotification commandSent" ) - // If command was sent, set flag to false, so when next Event request - // arrives, command data is not sent. - iUiEventRequested = EFalse; - } - - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::HandleUiEventNotification exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::SendCommand -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::SendCommand( - TDesC8* aCmdData, // Data from SIM. - TDes8* aCmdRsp, // Response. - TSatServerRequest aRequest ) // Request, which the aData is sent. - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::SendCommand calling" ) - - const TInt count( iServiceRequest->Count() ); - TBool requestHandled( EFalse ); - TInt index( 0 ); - - // Loop until request is handled or no request handler found. - while ( !requestHandled && ( index < count ) ) - { - requestHandled = iServiceRequest->At( index )->HandleCommand( - aCmdData, aCmdRsp, aRequest ); - index++; - } - LOG2( SIMPLE, "SATENGINE: CSatSUiSubSession::SendCommand \ - index: %i", index ) - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::SendCommand exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::Event -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::Event( TInt aEvent ) - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::Event calling" ) - - if ( MSatUtils::ESmsSent == aEvent ) - { - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::Event ESmsSent" ) - iSmsSent = ETrue; - SendSmsSentEventToClient(); - } - - LOG( SIMPLE, "SATENGINE: CSatSUiSubSession::Event exiting" ) - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::SendCommandDataToClient -// Writes descriptor to clients address space and -// completes the request. -// ----------------------------------------------------------------------------- -// -TBool CSatSUiSubSession::SendCommandDataToClient( - TBool& aRequestAvailable, // Is request available - const TDesC8& aData, // Data to be sent to client - const RMessage2& aMessage ) const // Message of the request - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::SendCommandDataToClient calling" ) - - TBool commandSent( EFalse ); - - // Is ui client ready to receive the command data. - if ( aRequestAvailable ) - { - LOG( SIMPLE, "SATENGINE: SendCommandDataToClient: Sending to Client" ) - TRAPD( res, aMessage.WriteL( 0, aData ) ); - if ( KErrNone != res ) - { - LOG( SIMPLE, - "SATENGINE: SendCommandDataToClient: KErrNone != res" ) - iSession.PanicClient( aMessage, ESatSBadDescriptor ); - } - aMessage.Complete( KErrNone ); - aRequestAvailable = EFalse; - commandSent = ETrue; - } - - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::SendCommandDataToClient exiting" ) - return commandSent; - } - -// ----------------------------------------------------------------------------- -// CSatSUiSubSession::SendSmsSentEventToClient -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::SendSmsSentEventToClient() - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::SendSmsSentEventToClient calling" ) - - iEventData.iEvent = ESatSSmEndEvent; - const TBool commandSent( SendCommandDataToClient( iEventRequestAvailable, - iEventDataPckg, iEventRequest ) ); - - if ( commandSent ) - { - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::SendSmsSentEventToClient commandSent" ) - // If command was sent, set flag to false, so when next Event request - // arrives, command data is not sent. - iSmsSent = EFalse; - } - - LOG( SIMPLE, - "SATENGINE: CSatSUiSubSession::SendSmsSentEventToClient exiting" ) - } - -// ----------------------------------------------------------------------------- -// Publish the P&S key KSatAppClosedUsingEndKey to indicate the occurred -// End Key action -// ----------------------------------------------------------------------------- -// -void CSatSUiSubSession::PublishSatAppClosedUsingEndKey() - { - LOG( SIMPLE, - "SATENGINE:CSatSUiSubSession::PublishSatAppClosedUsingEndKey calling" ) - - TInt error = RProperty::Set( KPSUidSatServerInternal, - KSatAppClosedUsingEndKey, KSatAppTerminatedUsingEndKey ); - LOG2( SIMPLE, "CSatSUiSubSession::PublishSatAppClosedUsingEndKey \ - P&S key: %i", KSatAppTerminatedUsingEndKey ) - LOG2(NORMAL, - "SATENGINE: CSatSUiSubSession::PublishSatAppClosedUsingEndKey - \ - publish KSapAppClosedUsingEndKey and return: %d ", error ); - - LOG( SIMPLE, - "SATENGINE:CSatSUiSubSession::PublishSatAppClosedUsingEndKey exiting" ) - }