os/mm/devsoundextensions/mmextfw/custominterfaceutility/CustomInterfaceBuilder/src/CustomInterfaceBuilder.cpp
Update contrib.
2 * Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
14 * Description: CustomInterface Builder
19 #include <CustomInterfaceBuilder.h>
20 #include <sounddevice.h>
21 #include <MessageHandlerFactory.h>
22 #include "AdaptationCustomInterfaceBuilder.h"
23 #include "CustomInterfaceBuilderTypes.h"
25 #include "RestrictedAudioOutputMessageHandler.h"
26 #include "AudioOutputMessageTypes.h"
28 const TUid KUidCustomInterfaceBuilderImpl = {0x10207A8E};
30 EXPORT_C CCustomInterfaceBuilder* CCustomInterfaceBuilder::NewL(CMMFObjectContainer& aObjectContainer,
31 CMMFDevSound& aDevSound)
33 CCustomInterfaceBuilder* self = new(ELeave) CCustomInterfaceBuilder(aObjectContainer,
35 CleanupStack::PushL(self);
37 CleanupStack::Pop(self);
41 EXPORT_C CCustomInterfaceBuilder* CCustomInterfaceBuilder::NewL(CMMFObjectContainer& aObjectContainer,
42 MCustomInterface& aCustomInterface)
44 CCustomInterfaceBuilder* self = new(ELeave) CCustomInterfaceBuilder(aObjectContainer,
46 CleanupStack::PushL(self);
48 CleanupStack::Pop(self);
52 CCustomInterfaceBuilder::CCustomInterfaceBuilder(CMMFObjectContainer& aObjectContainer,
53 CMMFDevSound& aDevSound) :
54 CMMFObject(KUidCustomInterfaceBuilderImpl),
55 iDevSound(&aDevSound),
56 iObjectContainer(aObjectContainer),
57 iSecureCustomInterfaces(EFalse)
61 CCustomInterfaceBuilder::CCustomInterfaceBuilder(CMMFObjectContainer& aObjectContainer,
62 MCustomInterface& aCustomInterface) :
63 CMMFObject(KUidCustomInterfaceBuilderImpl),
64 iCustomInterface(&aCustomInterface),
65 iObjectContainer(aObjectContainer),
66 iSecureCustomInterfaces(EFalse)
70 void CCustomInterfaceBuilder::ConstructL()
74 CCustomInterfaceBuilder::~CCustomInterfaceBuilder()
78 void CCustomInterfaceBuilder::HandleRequest(TMMFMessage& aMessage)
80 ASSERT(aMessage.Destination().InterfaceId() == KUidCustomInterfaceBuilderImpl);
81 TRAPD(error,DoHandleRequestL(aMessage));
84 aMessage.Complete(error);
88 void CCustomInterfaceBuilder::DoHandleRequestL(TMMFMessage& aMessage)
90 switch( aMessage.Function() )
100 User::Leave(KErrNotSupported);
106 void CCustomInterfaceBuilder::DoBuildL(TMMFMessage& aMessage)
108 TPckgBuf<TUid> uidPckg;
109 aMessage.ReadData1FromClientL(uidPckg);
110 TUid interfaceId = uidPckg();
111 //only KUidRestrictedAudioOutput is blocked here.
112 //KUidAudioOutput will be blocked in messageHandler for specific commands.
113 if( iSecureCustomInterfaces && interfaceId==KUidRestrictedAudioOutput )
115 User::Leave( KErrNotSupported );
118 TMMFMessageDestination handle;
120 TAny* customInterface = GetCustomInterfaceL(interfaceId);
123 CMMFObject* messageHandler = CMessageHandlerFactory::Create(interfaceId, customInterface,iObjectContainer);
126 iObjectContainer.AddMMFObject(*messageHandler);
127 handle = messageHandler->Handle();
130 TMMFMessageDestinationPckg handlePckg(handle);
131 aMessage.WriteDataToClient(handlePckg);
132 aMessage.Complete(KErrNone);
135 void CCustomInterfaceBuilder::DoRemoveL(TMMFMessage& aMessage)
137 TMMFMessageDestinationPckg handlePckg;
138 aMessage.ReadData1FromClientL(handlePckg);
140 CMMFObject* messageHandler = NULL;
142 if ( iObjectContainer.FindMMFObject(handlePckg(), messageHandler) == KErrNone )
144 iObjectContainer.RemoveAndDestroyMMFObject(*messageHandler);
146 aMessage.Complete(KErrNone);
151 TAny* CCustomInterfaceBuilder::GetCustomInterfaceL(TUid aInterfaceId)
153 TAny* customInterface = NULL;
156 customInterface = iDevSound->CustomInterface(aInterfaceId);
158 else if (iCustomInterface)
160 customInterface = iCustomInterface->CustomInterface(aInterfaceId);
162 return customInterface;
165 EXPORT_C void CCustomInterfaceBuilder::SetSecureCustomInterfaces( const TBool aSecure )
167 iSecureCustomInterfaces = aSecure;