sl@0: /* sl@0: * Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: CustomInterface Builder sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include "AdaptationCustomInterfaceBuilder.h" sl@0: #include "CustomInterfaceBuilderTypes.h" sl@0: sl@0: #include "RestrictedAudioOutputMessageHandler.h" sl@0: #include "AudioOutputMessageTypes.h" sl@0: sl@0: const TUid KUidCustomInterfaceBuilderImpl = {0x10207A8E}; sl@0: sl@0: EXPORT_C CCustomInterfaceBuilder* CCustomInterfaceBuilder::NewL(CMMFObjectContainer& aObjectContainer, sl@0: CMMFDevSound& aDevSound) sl@0: { sl@0: CCustomInterfaceBuilder* self = new(ELeave) CCustomInterfaceBuilder(aObjectContainer, sl@0: aDevSound); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: EXPORT_C CCustomInterfaceBuilder* CCustomInterfaceBuilder::NewL(CMMFObjectContainer& aObjectContainer, sl@0: MCustomInterface& aCustomInterface) sl@0: { sl@0: CCustomInterfaceBuilder* self = new(ELeave) CCustomInterfaceBuilder(aObjectContainer, sl@0: aCustomInterface); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CCustomInterfaceBuilder::CCustomInterfaceBuilder(CMMFObjectContainer& aObjectContainer, sl@0: CMMFDevSound& aDevSound) : sl@0: CMMFObject(KUidCustomInterfaceBuilderImpl), sl@0: iDevSound(&aDevSound), sl@0: iObjectContainer(aObjectContainer), sl@0: iSecureCustomInterfaces(EFalse) sl@0: { sl@0: } sl@0: sl@0: CCustomInterfaceBuilder::CCustomInterfaceBuilder(CMMFObjectContainer& aObjectContainer, sl@0: MCustomInterface& aCustomInterface) : sl@0: CMMFObject(KUidCustomInterfaceBuilderImpl), sl@0: iCustomInterface(&aCustomInterface), sl@0: iObjectContainer(aObjectContainer), sl@0: iSecureCustomInterfaces(EFalse) sl@0: { sl@0: } sl@0: sl@0: void CCustomInterfaceBuilder::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CCustomInterfaceBuilder::~CCustomInterfaceBuilder() sl@0: { sl@0: } sl@0: sl@0: void CCustomInterfaceBuilder::HandleRequest(TMMFMessage& aMessage) sl@0: { sl@0: ASSERT(aMessage.Destination().InterfaceId() == KUidCustomInterfaceBuilderImpl); sl@0: TRAPD(error,DoHandleRequestL(aMessage)); sl@0: if(error) sl@0: { sl@0: aMessage.Complete(error); sl@0: } sl@0: } sl@0: sl@0: void CCustomInterfaceBuilder::DoHandleRequestL(TMMFMessage& aMessage) sl@0: { sl@0: switch( aMessage.Function() ) sl@0: { sl@0: case ECibBuild: sl@0: DoBuildL(aMessage); sl@0: break; sl@0: case ECibRemove: sl@0: DoRemoveL(aMessage); sl@0: break; sl@0: sl@0: default: sl@0: User::Leave(KErrNotSupported); sl@0: sl@0: } sl@0: sl@0: } sl@0: sl@0: void CCustomInterfaceBuilder::DoBuildL(TMMFMessage& aMessage) sl@0: { sl@0: TPckgBuf uidPckg; sl@0: aMessage.ReadData1FromClientL(uidPckg); sl@0: TUid interfaceId = uidPckg(); sl@0: //only KUidRestrictedAudioOutput is blocked here. sl@0: //KUidAudioOutput will be blocked in messageHandler for specific commands. sl@0: if( iSecureCustomInterfaces && interfaceId==KUidRestrictedAudioOutput ) sl@0: { sl@0: User::Leave( KErrNotSupported ); sl@0: } sl@0: sl@0: TMMFMessageDestination handle; sl@0: sl@0: TAny* customInterface = GetCustomInterfaceL(interfaceId); sl@0: if(customInterface) sl@0: { sl@0: CMMFObject* messageHandler = CMessageHandlerFactory::Create(interfaceId, customInterface,iObjectContainer); sl@0: if(messageHandler) sl@0: { sl@0: iObjectContainer.AddMMFObject(*messageHandler); sl@0: handle = messageHandler->Handle(); sl@0: } sl@0: } sl@0: TMMFMessageDestinationPckg handlePckg(handle); sl@0: aMessage.WriteDataToClient(handlePckg); sl@0: aMessage.Complete(KErrNone); sl@0: } sl@0: sl@0: void CCustomInterfaceBuilder::DoRemoveL(TMMFMessage& aMessage) sl@0: { sl@0: TMMFMessageDestinationPckg handlePckg; sl@0: aMessage.ReadData1FromClientL(handlePckg); sl@0: sl@0: CMMFObject* messageHandler = NULL; sl@0: sl@0: if ( iObjectContainer.FindMMFObject(handlePckg(), messageHandler) == KErrNone ) sl@0: { sl@0: iObjectContainer.RemoveAndDestroyMMFObject(*messageHandler); sl@0: } sl@0: aMessage.Complete(KErrNone); sl@0: sl@0: sl@0: } sl@0: sl@0: TAny* CCustomInterfaceBuilder::GetCustomInterfaceL(TUid aInterfaceId) sl@0: { sl@0: TAny* customInterface = NULL; sl@0: if (iDevSound) sl@0: { sl@0: customInterface = iDevSound->CustomInterface(aInterfaceId); sl@0: } sl@0: else if (iCustomInterface) sl@0: { sl@0: customInterface = iCustomInterface->CustomInterface(aInterfaceId); sl@0: } sl@0: return customInterface; sl@0: } sl@0: sl@0: EXPORT_C void CCustomInterfaceBuilder::SetSecureCustomInterfaces( const TBool aSecure ) sl@0: { sl@0: iSecureCustomInterfaces = aSecure; sl@0: }