Update contrib.
2 * Copyright (c) 2004 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: Implementation of the RoomLevel proxy class
27 #include "RoomLevelProxy.h"
28 #include "RoomLevelEventObserver.h"
29 #include <CustomInterfaceUtility.h>
30 #include "EnvironmentalReverbProxy.h"
33 // ============================ MEMBER FUNCTIONS ===============================
35 // -----------------------------------------------------------------------------
36 // CRoomLevelProxy::CRoomLevelProxy
37 // C++ default constructor can NOT contain any code, that
39 // -----------------------------------------------------------------------------
41 CRoomLevelProxy::CRoomLevelProxy(
42 TMMFMessageDestinationPckg aMessageHandler,
43 MCustomCommand& aCustomCommand,
44 CCustomInterfaceUtility* aCustomInterfaceUtility )
45 : iCustomCommand(&aCustomCommand),
46 iMessageHandler(aMessageHandler),
47 iCustomInterfaceUtility(aCustomInterfaceUtility)
53 CRoomLevelProxy::~CRoomLevelProxy()
56 // Remove the custom interface message handler before we destroy the proxy.
58 ((CEnvironmentalReverbProxy*)iClientReverb)->RoomLevelDetached(*this);
59 if (iCustomInterfaceUtility)
60 iCustomInterfaceUtility->RemoveCustomInterface(iMessageHandler);
61 delete iRoomLevelEventObserver;
62 delete iCustomInterfaceUtility;
66 // -----------------------------------------------------------------------------
67 // CRoomLevelProxy::NewL
68 // Static function for creating an instance of the Environmental RoomLevel object.
69 // -----------------------------------------------------------------------------
71 EXPORT_C CRoomLevelProxy* CRoomLevelProxy::NewL(
72 TMMFMessageDestinationPckg aMessageHandler,
73 MCustomCommand& aCustomCommand,
74 CCustomInterfaceUtility* aCustomInterfaceUtility )
76 CRoomLevelProxy* self = new (ELeave) CRoomLevelProxy(aMessageHandler, aCustomCommand, aCustomInterfaceUtility);
77 CleanupStack::PushL(self);
79 CleanupStack::Pop(self);
84 // -----------------------------------------------------------------------------
85 // CRoomLevelProxy::ConstructL
86 // -----------------------------------------------------------------------------
88 void CRoomLevelProxy::ConstructL()
91 RDebug::Print(_L("CRoomLevelProxy::ConstructL"));
93 iRoomLevelEventObserver = CRoomLevelEventObserver::NewL(iMessageHandler, *iCustomCommand, *this);
95 // sends a message to fetch initial data.
96 TEfRoomLevelDataPckg dataPckgFrom;
97 iCustomCommand->CustomCommandSync(iMessageHandler, (TInt)ERoomInitialize, KNullDesC8, KNullDesC8, dataPckgFrom);
98 SetEffectData(dataPckgFrom);
103 // -----------------------------------------------------------------------------
104 // CRoomLevelProxy::ApplyL
105 // Apply the Environmental RoomLevel settings.
106 // -----------------------------------------------------------------------------
108 EXPORT_C void CRoomLevelProxy::ApplyL()
111 RDebug::Print(_L("CRoomLevelProxy::Apply"));
114 if ( !iHaveUpdateRights )
116 User::Leave(KErrAccessDenied);
119 iRoomLevelData.iEnabled = iEnabled;
120 iRoomLevelData.iEnforced = iEnforced;
121 iRoomLevelData.iHaveUpdateRights = iHaveUpdateRights;
122 iCustomCommand->CustomCommandSync(iMessageHandler, (TInt)ERoomApply, DoEffectData(), KNullDesC8);
126 // -----------------------------------------------------------------------------
127 // CRoomLevelProxy::StartObserver
128 // Starts the event observer. The event observer monitors asynchronous events
129 // from the message handler.
130 // -----------------------------------------------------------------------------
132 void CRoomLevelProxy::StartObserver()
135 RDebug::Print(_L("CRoomLevelProxy::StartObserver"));
138 iRoomLevelEventObserver->Start();
141 // -----------------------------------------------------------------------------
142 // CRoomLevelProxy::RoomLevelEvent
143 // Checks which data member has changed and notify the observers.
144 // -----------------------------------------------------------------------------
146 void CRoomLevelProxy::RoomLevelEvent(
147 const TDesC8& aBuffer )
150 RDebug::Print(_L("CRoomLevelProxy::RoomLevelEvent"));
153 TEfRoomLevelDataPckg dataPckgFrom;
154 dataPckgFrom.Copy(aBuffer);
155 TEfRoomLevel newRoomLevelData = dataPckgFrom();
159 if ( newRoomLevelData.iEnabled != iRoomLevelData.iEnabled )
161 iRoomLevelData.iEnabled = newRoomLevelData.iEnabled;
162 iEnabled = newRoomLevelData.iEnabled;
163 if ( iRoomLevelData.iEnabled )
165 event = MAudioEffectObserver::KEnabled;
169 event = MAudioEffectObserver::KDisabled;
172 else if ( newRoomLevelData.iEnforced != iRoomLevelData.iEnforced )
174 iRoomLevelData.iEnforced = newRoomLevelData.iEnforced;
175 iEnforced = newRoomLevelData.iEnforced;
176 if ( iRoomLevelData.iEnforced )
178 event = MAudioEffectObserver::KEnforced;
182 event = MAudioEffectObserver::KNotEnforced;
185 else if ( newRoomLevelData.iHaveUpdateRights != iRoomLevelData.iHaveUpdateRights )
187 iRoomLevelData.iHaveUpdateRights = newRoomLevelData.iHaveUpdateRights;
188 iHaveUpdateRights = newRoomLevelData.iHaveUpdateRights;
189 if ( iRoomLevelData.iHaveUpdateRights )
191 event = MAudioEffectObserver::KGainedUpdateRights;
195 event = MAudioEffectObserver::KLostUpdateRights;
199 else if ( newRoomLevelData.iEnvironmentalReverbId != iRoomLevelData.iEnvironmentalReverbId )
201 iRoomLevelData.iEnvironmentalReverbId = newRoomLevelData.iEnvironmentalReverbId;
202 // event = MRoomLevelObserver::KRoomLevelChanged;
205 else if ( newRoomLevelData.iStreamRoomLevel != iRoomLevelData.iStreamRoomLevel )
207 iRoomLevelData.iStreamRoomLevel = newRoomLevelData.iStreamRoomLevel;
208 event = MRoomLevelObserver::KRoomLevelChanged;
210 else if ( newRoomLevelData.iStreamMinRoomLevel != iRoomLevelData.iStreamMinRoomLevel )
212 iRoomLevelData.iStreamMinRoomLevel = newRoomLevelData.iStreamMinRoomLevel;
213 // event = MRoomLevelObserver::KMinRoomLevelChanged;
215 else if ( newRoomLevelData.iStreamMaxRoomLevel != iRoomLevelData.iStreamMaxRoomLevel )
217 iRoomLevelData.iStreamMaxRoomLevel = newRoomLevelData.iStreamMaxRoomLevel;
218 // event = MRoomLevelObserver::KMinRoomLevelChanged;
225 for ( TInt i = 0; i < iObservers.Count(); i++ )
227 iObservers[i]->EffectChanged(this, event);
232 // -----------------------------------------------------------------------------
233 // CRoomLevelProxy::AttachReverb
234 // Set room level's reverb ID
235 // -----------------------------------------------------------------------------
237 TInt CRoomLevelProxy::AttachReverb(CEnvironmentalReverb& aReverb)
240 iRoomLevelData.iEnvironmentalReverbId = ((CEnvironmentalReverbProxy&)aReverb).GetUniqueId();
241 TRAP(err,(((CEnvironmentalReverbProxy&)(aReverb)).RoomLevelAttached(*this)));
248 // -----------------------------------------------------------------------------
249 // CRoomLevelProxy::DettachReverb
251 // -----------------------------------------------------------------------------
253 TInt CRoomLevelProxy::DettachReverb(CEnvironmentalReverb& aReverb)
255 TInt status(KErrNone);
256 iClientReverb = NULL;
257 if ( iCustomInterfaceUtility )
259 iCustomInterfaceUtility->RemoveCustomInterface(iMessageHandler);
261 TRAP(status,(((CEnvironmentalReverbProxy&)(aReverb)).RoomLevelDetached(*this)));
265 // ========================== OTHER EXPORTED FUNCTIONS =========================