diff -r cce62ebc198e -r 93c594350b9a fmradio/fmradioactionhandler/src/fmradioactionhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fmradio/fmradioactionhandler/src/fmradioactionhandler.cpp Wed Sep 01 12:30:32 2010 +0100 @@ -0,0 +1,263 @@ +/* +* Copyright (c) 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: Implementation for the FM Radio Action Handler Plugin. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "fmradioactionhandler.h" +#include "fmradioactionhandler.hrh" +#include "fmradioactionhandlerdefs.h" + +// --------------------------------------------------------- +// CFMRadioActionHandler::NewL +// --------------------------------------------------------- +// +CFMRadioActionHandler* CFMRadioActionHandler::NewL() + { + CFMRadioActionHandler* self = new ( ELeave ) CFMRadioActionHandler(); + CleanupStack::PushL( self ); + + self->ConstructL(); + + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::~CFMRadioActionHandler +// --------------------------------------------------------- +// +CFMRadioActionHandler::~CFMRadioActionHandler() + { + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::CFMRadioActionHandler +// --------------------------------------------------------- +// +CFMRadioActionHandler::CFMRadioActionHandler() + { + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::ConstructL +// --------------------------------------------------------- +// +void CFMRadioActionHandler::ConstructL() + { + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::ExecuteActionL +// --------------------------------------------------------- +// +TInt CFMRadioActionHandler::ExecuteActionL( const CLiwMap* aMap ) + { + TInt retValue( KErrNone ); + RBuf command; + CleanupClosePushL( command ); + + retValue = ExtractStringL( aMap, command, KFMRadioCommand); + if ( retValue == KErrNone ) + { + if ( !command.CompareF( KFMRadioCommandValueStepPrevious ) ) + { + StepPrevious(); + } + else if ( !command.CompareF( KFMRadioCommandValueStepNext ) ) + { + StepNext(); + } + else if ( !command.CompareF( KFMRadioCommandValueMute) ) + { + Mute(); + } + else if ( !command.CompareF( KFMRadioCommandValueUnmute ) ) + { + Unmute(); + } + else if ( !command.CompareF( KFMRadioCommandValueSeekUp ) ) + { + SeekUp(); + } + else if ( !command.CompareF( KFMRadioCommandValueSeekDown ) ) + { + SeekDown(); + } + else if ( !command.CompareF( KFMRadioCommandValueStartNowPlaying ) ) + { + StartToNowPlayingL(); + } + else + { + retValue = KErrNotSupported; + } + } + CleanupStack::PopAndDestroy( &command ); + return retValue; + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::StepPrevious +// --------------------------------------------------------- +// +void CFMRadioActionHandler::StepPrevious() + { + RProperty::Set( KFMRadioPSUid, KFMRadioPSControlStepToChannel, EFMRadioPSStepToChannelDown ); + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::StepNext +// --------------------------------------------------------- +// +void CFMRadioActionHandler::StepNext() + { + RProperty::Set( KFMRadioPSUid, KFMRadioPSControlStepToChannel, EFMRadioPSStepToChannelUp ); + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::Mute +// --------------------------------------------------------- +// +void CFMRadioActionHandler::Mute() + { + RProperty::Set( KFMRadioPSUid, KFMRadioPSControlSetRadioMuteState, EFMRadioPSMuteStateOn ); + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::Unmute +// --------------------------------------------------------- +// +void CFMRadioActionHandler::Unmute() + { + RProperty::Set( KFMRadioPSUid, KFMRadioPSControlSetRadioMuteState, EFMRadioPSMuteStateOff ); + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::SeekUp +// --------------------------------------------------------- +// +void CFMRadioActionHandler::SeekUp() + { + //RProperty::Set( KFMRadioPSUid, KFMRadioPSControlSeek, EFMRadioPSSeekUp ); + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::SeekDown +// --------------------------------------------------------- +// +void CFMRadioActionHandler::SeekDown() + { + //RProperty::Set( KFMRadioPSUid, KFMRadioPSControlSeek, EFMRadioPSSeekDown ); + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::StartToNowPlayingL +// --------------------------------------------------------- +// +void CFMRadioActionHandler::StartToNowPlayingL() + { + RWsSession wsSession; + + User::LeaveIfError(wsSession.Connect() ); + CleanupClosePushL( wsSession ); + + TApaTaskList taskList( wsSession ); + TUid appUid = TUid::Uid( KUidFMRadioApplication ); + TApaTask fmRadioTask = taskList.FindApp( appUid ); + + const TInt KFMRadioViewIdLength = 3; + RBuf8 params; + params.CreateL( KFMRadioCommandActivateView().Length() + KFMRadioViewIdLength ); + params.Copy( KFMRadioCommandActivateView ); + params.Append( _L(" ") ); + params.AppendNum( KFMRadioMainViewId.iUid ); + params.CleanupClosePushL(); + + if ( !fmRadioTask.Exists() ) + { + RApaLsSession apaSession; + CleanupClosePushL( apaSession ); + + User::LeaveIfError( apaSession.Connect() ); + User::LeaveIfError( apaSession.GetAllApps() ); + + TApaAppInfo appInfo; + User::LeaveIfError( apaSession.GetAppInfo( appInfo, appUid ) ); + + CApaCommandLine* startParams = CApaCommandLine::NewLC(); + startParams->SetExecutableNameL( appInfo.iFullName ); + startParams->SetCommandL( EApaCommandRun ); + startParams->SetTailEndL( params ); + User::LeaveIfError( apaSession.StartApp( *startParams ) ); + CleanupStack::PopAndDestroy( 2, &apaSession ); + } + else + { + User::LeaveIfError( fmRadioTask.SendMessage( appUid, params ) ); + } + CleanupStack::PopAndDestroy( 2 ); + } + +// --------------------------------------------------------- +// CFMRadioActionHandler::ExtractStringLC +// --------------------------------------------------------- +// +TInt CFMRadioActionHandler::ExtractStringL( const CLiwMap* aMap, RBuf& aString, const TDesC8& aMapName ) + { + TInt err( KErrNotFound ); + TLiwVariant variant; + variant.PushL(); + TPtrC tempString( KNullDesC ); + if ( aMap->FindL( aMapName, variant ) ) + { + variant.Get( tempString ); + aString.Close(); + aString.CreateL( tempString ); + err = KErrNone; + } + CleanupStack::PopAndDestroy( &variant ); + return err; + } + +/** Provides a key-value pair table, that is used to identify the correct construction function for the requested interface. */ +const TImplementationProxy KFMRadioActionHandlerImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( KFMRadioActionHandlerImplementationUid, CFMRadioActionHandler::NewL ) + }; + +const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ); + +// --------------------------------------------------------------------------- +// Returns the implementations provided by this ECOM plugin DLL. +// --------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( KFMRadioActionHandlerImplementationTable ) / sizeof( TImplementationProxy ); + return KFMRadioActionHandlerImplementationTable; + }