os/mm/devsoundextensions/mmextfw/custominterfaceutility/CustomInterfaceBuilder/src/CustomInterfaceBuilder.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). 
sl@0
     3
* All rights reserved.
sl@0
     4
* This component and the accompanying materials are made available
sl@0
     5
* under the terms of "Eclipse Public License v1.0"
sl@0
     6
* which accompanies this distribution, and is available
sl@0
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     8
*
sl@0
     9
* Initial Contributors:
sl@0
    10
* Nokia Corporation - initial contribution.
sl@0
    11
*
sl@0
    12
* Contributors:
sl@0
    13
*
sl@0
    14
* Description:   CustomInterface Builder
sl@0
    15
*
sl@0
    16
*/
sl@0
    17
sl@0
    18
sl@0
    19
#include <CustomInterfaceBuilder.h>
sl@0
    20
#include <sounddevice.h>
sl@0
    21
#include <MessageHandlerFactory.h>
sl@0
    22
#include "AdaptationCustomInterfaceBuilder.h"
sl@0
    23
#include "CustomInterfaceBuilderTypes.h"
sl@0
    24
sl@0
    25
#include "RestrictedAudioOutputMessageHandler.h"
sl@0
    26
#include "AudioOutputMessageTypes.h"
sl@0
    27
sl@0
    28
const TUid KUidCustomInterfaceBuilderImpl = {0x10207A8E};
sl@0
    29
sl@0
    30
EXPORT_C CCustomInterfaceBuilder* CCustomInterfaceBuilder::NewL(CMMFObjectContainer& aObjectContainer,
sl@0
    31
                                                                CMMFDevSound&        aDevSound)
sl@0
    32
	{
sl@0
    33
	CCustomInterfaceBuilder* self = new(ELeave) CCustomInterfaceBuilder(aObjectContainer,
sl@0
    34
	                                                                    aDevSound);
sl@0
    35
	CleanupStack::PushL(self);
sl@0
    36
	self->ConstructL();
sl@0
    37
	CleanupStack::Pop(self);
sl@0
    38
	return self;
sl@0
    39
	}
sl@0
    40
sl@0
    41
EXPORT_C CCustomInterfaceBuilder* CCustomInterfaceBuilder::NewL(CMMFObjectContainer& aObjectContainer,
sl@0
    42
                                                                MCustomInterface& aCustomInterface)
sl@0
    43
	{
sl@0
    44
	CCustomInterfaceBuilder* self = new(ELeave) CCustomInterfaceBuilder(aObjectContainer,
sl@0
    45
	                                                                    aCustomInterface);
sl@0
    46
	CleanupStack::PushL(self);
sl@0
    47
	self->ConstructL();
sl@0
    48
	CleanupStack::Pop(self);
sl@0
    49
	return self;
sl@0
    50
	}
sl@0
    51
sl@0
    52
CCustomInterfaceBuilder::CCustomInterfaceBuilder(CMMFObjectContainer& aObjectContainer,
sl@0
    53
                                                 CMMFDevSound&        aDevSound) :
sl@0
    54
    CMMFObject(KUidCustomInterfaceBuilderImpl),
sl@0
    55
    iDevSound(&aDevSound),
sl@0
    56
	iObjectContainer(aObjectContainer),
sl@0
    57
	iSecureCustomInterfaces(EFalse)
sl@0
    58
	{
sl@0
    59
	}
sl@0
    60
sl@0
    61
CCustomInterfaceBuilder::CCustomInterfaceBuilder(CMMFObjectContainer& aObjectContainer,
sl@0
    62
                                                 MCustomInterface& aCustomInterface) :
sl@0
    63
    CMMFObject(KUidCustomInterfaceBuilderImpl),
sl@0
    64
	iCustomInterface(&aCustomInterface),
sl@0
    65
	iObjectContainer(aObjectContainer),
sl@0
    66
	iSecureCustomInterfaces(EFalse)
sl@0
    67
	{
sl@0
    68
	}
sl@0
    69
sl@0
    70
void CCustomInterfaceBuilder::ConstructL()
sl@0
    71
	{
sl@0
    72
	}
sl@0
    73
sl@0
    74
CCustomInterfaceBuilder::~CCustomInterfaceBuilder()
sl@0
    75
	{
sl@0
    76
	}
sl@0
    77
sl@0
    78
void CCustomInterfaceBuilder::HandleRequest(TMMFMessage& aMessage)
sl@0
    79
	{
sl@0
    80
	ASSERT(aMessage.Destination().InterfaceId() == KUidCustomInterfaceBuilderImpl);
sl@0
    81
	TRAPD(error,DoHandleRequestL(aMessage));
sl@0
    82
	if(error)
sl@0
    83
		{
sl@0
    84
		aMessage.Complete(error);
sl@0
    85
		}
sl@0
    86
	}
sl@0
    87
sl@0
    88
void CCustomInterfaceBuilder::DoHandleRequestL(TMMFMessage& aMessage)
sl@0
    89
	{
sl@0
    90
	switch( aMessage.Function() )
sl@0
    91
		{
sl@0
    92
		case ECibBuild:
sl@0
    93
			DoBuildL(aMessage);
sl@0
    94
			break;
sl@0
    95
		case ECibRemove:
sl@0
    96
			DoRemoveL(aMessage);
sl@0
    97
			break;
sl@0
    98
sl@0
    99
		default:
sl@0
   100
			User::Leave(KErrNotSupported);
sl@0
   101
sl@0
   102
		}
sl@0
   103
sl@0
   104
	}
sl@0
   105
sl@0
   106
void CCustomInterfaceBuilder::DoBuildL(TMMFMessage& aMessage)
sl@0
   107
	{
sl@0
   108
	TPckgBuf<TUid> uidPckg;
sl@0
   109
	aMessage.ReadData1FromClientL(uidPckg);
sl@0
   110
	TUid interfaceId = uidPckg();
sl@0
   111
	//only KUidRestrictedAudioOutput is blocked here. 
sl@0
   112
    //KUidAudioOutput will be blocked in messageHandler for specific commands.
sl@0
   113
	if( iSecureCustomInterfaces && interfaceId==KUidRestrictedAudioOutput )
sl@0
   114
	    {
sl@0
   115
	    User::Leave( KErrNotSupported );
sl@0
   116
	    }
sl@0
   117
sl@0
   118
	TMMFMessageDestination handle;
sl@0
   119
	
sl@0
   120
	TAny* customInterface = GetCustomInterfaceL(interfaceId);
sl@0
   121
	if(customInterface)
sl@0
   122
		{
sl@0
   123
		CMMFObject* messageHandler = CMessageHandlerFactory::Create(interfaceId, customInterface,iObjectContainer);
sl@0
   124
		if(messageHandler)
sl@0
   125
			{
sl@0
   126
			iObjectContainer.AddMMFObject(*messageHandler);
sl@0
   127
			handle = messageHandler->Handle();
sl@0
   128
			}
sl@0
   129
		}
sl@0
   130
	TMMFMessageDestinationPckg handlePckg(handle);
sl@0
   131
	aMessage.WriteDataToClient(handlePckg);
sl@0
   132
	aMessage.Complete(KErrNone);
sl@0
   133
	}
sl@0
   134
	
sl@0
   135
void CCustomInterfaceBuilder::DoRemoveL(TMMFMessage& aMessage)
sl@0
   136
	{
sl@0
   137
	TMMFMessageDestinationPckg handlePckg;
sl@0
   138
	aMessage.ReadData1FromClientL(handlePckg);
sl@0
   139
sl@0
   140
	CMMFObject* messageHandler = NULL;
sl@0
   141
sl@0
   142
	if ( iObjectContainer.FindMMFObject(handlePckg(), messageHandler) == KErrNone )
sl@0
   143
		{
sl@0
   144
		iObjectContainer.RemoveAndDestroyMMFObject(*messageHandler);
sl@0
   145
		}
sl@0
   146
	aMessage.Complete(KErrNone);
sl@0
   147
		
sl@0
   148
sl@0
   149
	}
sl@0
   150
sl@0
   151
TAny* CCustomInterfaceBuilder::GetCustomInterfaceL(TUid aInterfaceId)
sl@0
   152
	{
sl@0
   153
	TAny* customInterface = NULL;
sl@0
   154
    if (iDevSound)
sl@0
   155
        {
sl@0
   156
        customInterface = iDevSound->CustomInterface(aInterfaceId);
sl@0
   157
        }
sl@0
   158
    else if (iCustomInterface)
sl@0
   159
        {
sl@0
   160
        customInterface = iCustomInterface->CustomInterface(aInterfaceId);
sl@0
   161
        }
sl@0
   162
	return customInterface;
sl@0
   163
	}
sl@0
   164
sl@0
   165
EXPORT_C void CCustomInterfaceBuilder::SetSecureCustomInterfaces( const TBool aSecure )
sl@0
   166
    {
sl@0
   167
    iSecureCustomInterfaces = aSecure;
sl@0
   168
    }