homescreensrv_plat/sapi_backstepping/src/bsserviceinterface.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:17 +0200
changeset 0 79c6a41cd166
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007 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:  Back Stepping Service Interface
 *
*/


#include "bsserviceinterface.h"
#include "bsserviceconstants.h"

using namespace LIW;

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CBSServiceInterface::CBSServiceInterface()
    {
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CBSServiceInterface::ConstructL()
    {
    User::LeaveIfError( iBSClient.Connect( ) );
    }

// ---------------------------------------------------------------------------
//
// ---------------------------------------------------------------------------
//
CBSServiceInterface* CBSServiceInterface::NewLC()
    {
    CBSServiceInterface* self = new( ELeave ) CBSServiceInterface;
    CleanupStack::PushL( self );
    self->ConstructL( );
    return self;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CBSServiceInterface::~CBSServiceInterface()
    {
    iBSClient.Close( );
    }

// ---------------------------------------------------------------------------
//  Executes the SAPI as per params
// ---------------------------------------------------------------------------
//
void CBSServiceInterface::ExecuteCmdL( const TDesC8& aCmdName,
    const CLiwGenericParamList& aInParamList,
    CLiwGenericParamList& aOutParamList, TUint aCmdOptions,
    MLiwNotifyCallback* aCallback )
    {
    if ( !aCallback && !aCmdOptions )
        {
        if ( !aCmdName.Compare( KBSCmdInitialize ) )
            {
            InitializeL( aInParamList, aOutParamList );
            }
        else if ( !aCmdName.Compare( KBSCmdForwardActivationEvent ) )
            {
            ForwardActivationEventL( aInParamList, aOutParamList );
            }
        else if ( !aCmdName.Compare( KBSCmdHandleBackCommand ) )
            {
            HandleBackCommandL( aInParamList, aOutParamList );
            }
        else
            {
            HandleErrorL( aOutParamList, KErrNotSupported );
            }
        }
    else
        {
        HandleErrorL( aOutParamList, KErrNotSupported );
        }
    }

// ---------------------------------------------------------------------------
// Closes the interface
// ---------------------------------------------------------------------------
//
void CBSServiceInterface::Close()
    {
    delete this;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CBSServiceInterface::InitializeL(
    const CLiwGenericParamList& aInParamList,
    CLiwGenericParamList& aOutParamList )
    {
    TInt32 appUid;
    TInt err = GetParam( aInParamList, KBSInParamAppUid, appUid );
    if ( err == KErrNone )
        {
        TInt retVal = iBSClient.Initialize( TUid::Uid( appUid ) );
        HandleResultL( aOutParamList, retVal );
        return;
        }

    HandleErrorL( aOutParamList, err );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CBSServiceInterface::ForwardActivationEventL(
    const CLiwGenericParamList& aInParamList,
    CLiwGenericParamList& aOutParamList )
    {
    TPtrC8 state;
    TInt err = GetParam( aInParamList, KBSInParamState, state );
    if ( err == KErrNone )
        {
        TBool enter;
        err = GetParam( aInParamList, KBSInParamEnter, enter );
        if ( err == KErrNone )
            {
            TInt retVal = iBSClient.ForwardActivationEvent( state, enter );
            HandleResultL( aOutParamList, retVal );
            return;
            }
        }

    HandleErrorL( aOutParamList, err );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CBSServiceInterface::HandleBackCommandL(
    const CLiwGenericParamList& aInParamList,
    CLiwGenericParamList& aOutParamList )
    {
    TPtrC8 state;
    TInt err = GetParam( aInParamList, KBSInParamState, state );

    TBool checkOnly(EFalse);
    if ( GetParam( aInParamList, KBSInParamCheckOnly, checkOnly ) != KErrNone )
        {
        // use default value if parameter isn't correct
        checkOnly = EFalse;
        }

    if ( err == KErrNone )
        {
        TInt retVal = iBSClient.HandleBackCommand( state, checkOnly );
        HandleResultL( aOutParamList, retVal );
        return;
        }

    HandleErrorL( aOutParamList, err );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CBSServiceInterface::HandleErrorL( CLiwGenericParamList& aOutParamList,
    const TInt aError )
    {
    aOutParamList.AppendL( TLiwGenericParam( EGenericParamError,
        TLiwVariant( aError ) ) );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CBSServiceInterface::HandleResultL( CLiwGenericParamList& aOutParamList,
    const TInt aResult )
    {
    TLiwGenericParam statusInfo;
    statusInfo.SetNameAndValueL( KBSOutParamStatusInfo, TLiwVariant( aResult ) );
    aOutParamList.AppendL( statusInfo );
    statusInfo.Reset( );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
TInt CBSServiceInterface::GetParam( const CLiwGenericParamList& aInParamList,
    const TDesC8& aParamName, TPtrC8& aPtr ) const
    {
    TInt errCode(KErrArgument);

    const TLiwGenericParam* param= NULL;
    TInt pos( 0);
    param = aInParamList.FindFirst( pos, aParamName );
    if ( param && (pos != KErrNotFound ) )
        {
        if ( param->Value().Get( aPtr ) )
            {
            errCode = KErrNone;
            }
        }

    return errCode;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
TInt CBSServiceInterface::GetParam( const CLiwGenericParamList& aInParamList,
    const TDesC8& aParamName, TInt32& aNumber ) const
    {
    TInt errCode(KErrArgument);

    const TLiwGenericParam* param= NULL;
    TInt pos( 0);
    param = aInParamList.FindFirst( pos, aParamName );
    if ( param && (pos != KErrNotFound ) )
        {
        if ( param->Value().Get( aNumber ) )
            {
            errCode = KErrNone;
            }
        }

    return errCode;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
TInt CBSServiceInterface::GetParam( const CLiwGenericParamList& aInParamList,
    const TDesC8& aParamName, TBool& aBool ) const
    {
    TInt errCode(KErrArgument);

    const TLiwGenericParam* param= NULL;
    TInt pos( 0);
    param = aInParamList.FindFirst( pos, aParamName );
    if ( param && (pos != KErrNotFound ) )
        {
        if ( param->Value().Get( aBool ) )
            {
            errCode = KErrNone;
            }
        }

    return errCode;
    }