devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingBase/src/TelephonyAudioRoutingProxy.cpp
changeset 0 b8ed18f6c07b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingBase/src/TelephonyAudioRoutingProxy.cpp	Thu Oct 07 22:34:12 2010 +0100
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2006 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:   Handles client-side telephony audio routing requests.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32svr.h>
+#include <e32std.h>
+
+#include "TelephonyAudioRouting.h"
+#include "TelephonyAudioRoutingProxy.h"
+#include "TelephonyAudioRoutingClientServer.h"
+#include "TelephonyAudioRoutingSession.h"
+#include "MTelephonyAudioRoutingObserver.h"
+
+
+    
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CTelephonyAudioRoutingProxy::CTelephonyAudioRoutingProxy(
+	MTelephonyAudioRoutingObserver& aObserver)
+	: 	iObserver(aObserver),
+		iAvailableOutputs(0, NULL, NULL)
+    {
+   
+    }
+    
+    
+// -----------------------------------------------------------------------------
+// CTelephonyAudioRoutingProxy::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CTelephonyAudioRoutingProxy::ConstructL()
+	{
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ConstructL"),this);
+	User::LeaveIfError(iSession.ConnectL(*this, iObserver));	
+
+	// Make sure session is set up with default values from server for its local variables:
+	iSession.GetDefaultValuesL();
+	
+	CTelephonyAudioRouting::TAudioOutput audioOutput = Output();
+
+	// Get stored values for audio output and array and store values in local variables:
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ConstructL, current iAudioOutput retrieved from server: %d"), audioOutput);	
+	
+	TArray<CTelephonyAudioRouting::TAudioOutput> availableOutputArray = AvailableOutputs();
+	TInt count = availableOutputArray.Count();
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t ConstructL: Count = %d "), count);
+	for(TInt i = 0; i < count; i++)
+	{
+		TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t ConstructL: availableOutputs[i] = %d "),availableOutputArray[i]);
+	}	
+
+	iSession.NotifyIfOutputChanged();
+	iSession.NotifyIfAvailableOutputsChanged();
+
+	}
+
+// Two-phased constructor.
+EXPORT_C CTelephonyAudioRoutingProxy* CTelephonyAudioRoutingProxy::NewL(MTelephonyAudioRoutingObserver& aObserver)
+    {
+	CTelephonyAudioRoutingProxy* self = new(ELeave) CTelephonyAudioRoutingProxy(aObserver);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+    }
+
+
+// Destructor
+CTelephonyAudioRoutingProxy::~CTelephonyAudioRoutingProxy()
+    { 
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::~CTelephonyAudioRoutingProxy[%x]"),this);    
+    iSession.Close();
+    }
+
+
+
+// ---------------------------------------------------------
+// CTelephonyAudioRoutingProxy::AvailableOutputs
+// Provides caller with an array of available audio outputs
+// ---------------------------------------------------------
+//
+const TArray<CTelephonyAudioRouting::TAudioOutput>& CTelephonyAudioRoutingProxy::AvailableOutputs()
+	{
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::AvailableOutputs"),this);
+	
+	TRAP_IGNORE(iSession.GetAvailableOutputsL());  // Session will get values from Server and store in its iAvailableOutputs
+		
+	TInt count = (iSession.AvailableOutputs()).Count();	
+	
+	iAvailableOutputs = (iSession.AvailableOutputs()).Array();
+	
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::AvailableOutputs: Count = %d "), count);
+	for(TInt i = 0; i < count; i++)
+	{
+		TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::AvailableOutputs: availableOutputs[i] = %d "),iAvailableOutputs[i]);
+	}			
+	return iAvailableOutputs;
+	}
+	
+// ---------------------------------------------------------
+// CTelephonyAudioRoutingProxy::Output
+// Provides caller with the current audio output setting.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRoutingProxy::Output()
+	{
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::Output"),this);
+	
+	TAudioOutput audioOutput = (iSession.CurrentAudioOutputPkg())();
+
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::Output: iSession's Audio Output = %d"),audioOutput);		
+	return audioOutput;
+	}
+
+// ---------------------------------------------------------
+// CTelephonyAudioRoutingProxy::SetOutputL
+// Allows caller to set audio output to a particular value.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+void CTelephonyAudioRoutingProxy::SetOutputL(TAudioOutput aOutput)
+	{
+		TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::SetOutput"),this);	
+		TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetOutput with: %d"), aOutput);	
+
+		TBool validOutput = ETrue;
+		// Verify request is valid: (not necessary for ENone or ENotActive)
+		if ((aOutput != CTelephonyAudioRouting::ENotActive) && (aOutput != CTelephonyAudioRouting::ENone))
+		{
+			validOutput = ValidateOutputRequest(aOutput);
+		}
+			
+		if (validOutput)
+		{
+    		iSession.SetOutput(aOutput, iShowNote); 
+    		// Reset iShowNote once it's sent
+    		iShowNote = EFalse;   	
+		}
+		else
+		{
+			TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetOutput: Error: Requested output not in array"));
+			// reset session's iOkToGetShowNoteMode flag, since it errored
+			iSession.ResetShowNoteMode();			
+			User::Leave(KErrHardwareNotAvailable);		
+		}
+	}
+	
+// ---------------------------------------------------------
+// CTelephonyAudioRoutingProxy::PreviousOutput
+// Provides caller with current value of previous audio output value.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRoutingProxy::PreviousOutput()
+	{
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::PreviousOutput"), this);
+	TAudioOutput prevOutput = (iSession.PreviousAudioOutputPkg())();
+
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::PreviousOutput: iSession's Previous Audio Output = %d"),prevOutput);		
+	return prevOutput;	
+	}	
+	
+// ---------------------------------------------------------
+// CTelephonyAudioRoutingProxy::ValidateOutputRequest
+// Checks that output requested is in list of available outputs.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+TBool CTelephonyAudioRoutingProxy::ValidateOutputRequest(TAudioOutput aOutput)
+	{
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ValidateOutputRequest"),this);		
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ValidateOutputRequest for: %d"),aOutput);
+	
+	TArray<CTelephonyAudioRouting::TAudioOutput> availableOutputs = (iSession.AvailableOutputs()).Array();
+	
+	TBool found = EFalse;	
+	TInt count = availableOutputs.Count();
+	for(TInt i = 0; i < count; i++)
+		{
+			if (aOutput == availableOutputs[i])
+			{
+				found = ETrue;
+				break;
+			}
+		}
+		return found;		
+	}	
+	
+	
+// ---------------------------------------------------------
+// CTelephonyAudioRoutingProxy::ShowNoteMode
+// Provides caller with the current ShowNoteMode setting in server.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CTelephonyAudioRoutingProxy::ShowNoteMode()
+	{
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ShowNoteMode"),this);
+	
+	TPckgBuf<TBool> showNoteModePkg = iSession.ShowNoteMode();
+	TBool showNoteMode = showNoteModePkg();
+	
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ShowNoteMode: = %d"), showNoteMode);		
+	return showNoteMode;
+	}
+
+	
+// ---------------------------------------------------------
+// CTelephonyAudioRoutingProxy::SetShowNote
+// 
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+TInt CTelephonyAudioRoutingProxy::SetShowNote( TBool aMode )
+	{
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::SetShowNote"),this);		
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetShowNote With: %d"),aMode);	
+
+	// Note: Will set aMode on a GetShowNote call after SetOutputComplete called
+	iShowNote = aMode; 	
+	return KErrNone;
+	}
+// ---------------------------------------------------------
+// CTelephonyAudioRoutingProxy::GetShowNote
+// 
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+TInt CTelephonyAudioRoutingProxy::GetShowNote( TBool& aMode )
+	{
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::GetShowNote"),this);
+
+	// Check with session if Ok to retrieve iShowNoteMode from server:
+	TBool okToGetShowNoteMode = iSession.OkToGetShowNoteMode();
+	
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t GetShowNote: Session: Ok to get show note = %d"),okToGetShowNoteMode);	
+	
+	if (okToGetShowNoteMode)
+	{
+		aMode = ShowNoteMode();	
+	}
+	else
+	{
+		aMode = EFalse;
+		TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::GetShowNote: (Not OK to Get Value from Server) Returning ShowNoteMode = %d"), aMode);			
+	}
+		
+	// reset session's iOkToGetShowNoteMode flag once it has been retrieved
+	iSession.ResetShowNoteMode();
+
+	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::GetShowNote: Returning ShowNoteMode = %d"), aMode);		
+
+	return KErrNone;
+	}
+// End of File