diff -r 000000000000 -r 4e91876724a2 photosgallery/commonui/src/glxbackservicewrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/commonui/src/glxbackservicewrapper.cpp Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,269 @@ +/* +* Copyright (c) 2008-2009 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: wrapper for Back Stepping Service +* +*/ + + + + +// from AIW and LIW +#include +#include + +#include +#include + +// parameter names used by BS Service +#include "glxbsserviceconstants.h" + +// for CleanupResetAndDestroyPushL +#include + + +#include "glxbackservicewrapper.h" + +using namespace LIW; + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CGlxBackServiceWrapper::CGlxBackServiceWrapper() + { + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CGlxBackServiceWrapper::ConstructL( const TUid aUid ) + { + TRACER( "CGlxBackServiceWrapper::ConstructL" ); + // create Service Handler and keep as long as access to BS Service needed + iServiceHandler = CLiwServiceHandler::NewL(); + // for convinience keep pointers to Service Handler param lists + iInParamList = &iServiceHandler->InParamListL(); + iOutParamList = &iServiceHandler->OutParamListL(); + + RCriteriaArray criteriaArray; + CleanupResetAndDestroyPushL( criteriaArray ); + + // create Liw criteria + CLiwCriteriaItem* criterion = + CLiwCriteriaItem::NewLC( KLiwCmdAsStr, KBSInterface, KBSServiceID ); + criterion->SetServiceClass( TUid::Uid( KLiwClassBase ) ); + + criteriaArray.AppendL( criterion ); + CleanupStack::Pop( criterion ); + + // attach Liw criteria + iServiceHandler->AttachL( criteriaArray ); + // get BS Service interface + iServiceHandler->ExecuteServiceCmdL( *criterion, + *iInParamList, + *iOutParamList ); + + CleanupStack::PopAndDestroy( &criteriaArray ); + + // extract BS interface from output params + TInt pos( 0 ); + iOutParamList->FindFirst( pos, KBSInterface ); + if( pos != KErrNotFound ) + { + iBSInterface = (*iOutParamList)[pos].Value().AsInterface(); + } + + if ( !iBSInterface ) + { + // handle no BS Service + User::Leave( KErrNotFound ); + } + + InitializeL( aUid ); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C CGlxBackServiceWrapper* CGlxBackServiceWrapper::NewL( + const TUid aUid ) + { + TRACER( "CGlxBackServiceWrapper::NewL" ); + CGlxBackServiceWrapper* self = + CGlxBackServiceWrapper::NewLC( aUid ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C CGlxBackServiceWrapper* CGlxBackServiceWrapper::NewLC( + const TUid aUid ) + { + TRACER( "CGlxBackServiceWrapper::NewLC" ); + CGlxBackServiceWrapper* self = new( ELeave ) CGlxBackServiceWrapper; + CleanupStack::PushL( self ); + self->ConstructL( aUid ); + return self; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CGlxBackServiceWrapper::~CGlxBackServiceWrapper() + { + TRACER( "CGlxBackServiceWrapper::~CGlxBackServiceWrapper" ); + if ( iBSInterface ) + { + iBSInterface->Close(); + } + + delete iServiceHandler; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CGlxBackServiceWrapper::ForwardActivationEventL( const TDesC8& aState, + const TBool aEnter ) + { + TRACER( "CGlxBackServiceWrapper::ForwardActivationEventL" ); + iInParamList->Reset(); + iOutParamList->Reset(); + + TLiwGenericParam state( KBSInParamState, TLiwVariant( aState ) ); + iInParamList->AppendL( state ); + TLiwGenericParam enter( KBSInParamEnter, TLiwVariant( aEnter ) ); + iInParamList->AppendL( enter ); + + iBSInterface->ExecuteCmdL( KBSCmdForwardActivationEvent, + *iInParamList, + *iOutParamList ); + + TInt result = HandleResultL(); + + iInParamList->Reset(); + iOutParamList->Reset(); + + return result; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CGlxBackServiceWrapper::HandleBackCommandL( const TDesC8& aState, + const TBool aCheckOnly) + { + TRACER( "CGlxBackServiceWrapper::HandleBackCommandL" ); + iInParamList->Reset(); + iOutParamList->Reset(); + + TLiwGenericParam state( KBSInParamState, TLiwVariant( aState ) ); + iInParamList->AppendL( state ); + TLiwGenericParam checkOnly( KBSInParamCheckOnly, TLiwVariant( aCheckOnly ) ); + iInParamList->AppendL( checkOnly ); + + iBSInterface->ExecuteCmdL( KBSCmdHandleBackCommand, + *iInParamList, + *iOutParamList ); + + TInt result = HandleResultL(); + + iInParamList->Reset(); + iOutParamList->Reset(); + + return result; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CGlxBackServiceWrapper::InitializeL( const TUid aUid ) + { + TRACER( "CGlxBackServiceWrapper::InitializeL" ); + iInParamList->Reset(); + iOutParamList->Reset(); + + TLiwGenericParam appUid( KBSInParamAppUid, TLiwVariant( aUid.iUid ) ); + iInParamList->AppendL( appUid ); + + iBSInterface->ExecuteCmdL( KBSCmdInitialize, + *iInParamList, + *iOutParamList ); + + if ( HandleResultL() != 1 ) + { + // Initialize command was not consumed - handle failiure + User::Leave( KErrArgument ); + } + + iInParamList->Reset(); + iOutParamList->Reset(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CGlxBackServiceWrapper::HandleResultL() + { + TRACER( "CGlxBackServiceWrapper::HandleResultL" ); + TInt statusInfo( KErrNotFound ); + + TInt posErr( 0 ); + iOutParamList->FindFirst( posErr, EGenericParamError ); + if( posErr != KErrNotFound ) + { + // error code found - extract and handle + TInt errorCode( KErrNone ); + (*iOutParamList)[posErr].Value().Get( errorCode ); + + User::LeaveIfError( errorCode ); + } + + // if no error returned, carry on + TInt posStat( 0 ); + iOutParamList->FindFirst( posStat, KBSOutParamStatusInfo ); + if( posStat != KErrNotFound ) + { + // status info present - extract and return + (*iOutParamList)[posStat].Value().Get( statusInfo ); + } + else + { + // no return value + // this should not happen + User::Leave( KErrNotFound ); + } + + return statusInfo; + }