devsoundextensions/globalaudiosettings/src/AudioClientsListManagerAO.cpp
changeset 0 b8ed18f6c07b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsoundextensions/globalaudiosettings/src/AudioClientsListManagerAO.cpp	Thu Oct 07 22:34:12 2010 +0100
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2004 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:   This file contains implementation of Audio Clients List Manager.
+*
+*/
+
+
+
+
+#include "AudioClientsListManagerAO.h"
+#include <AudioClientsListPSKeys.h>
+#include <AudioClientsListPSData.h>
+#include <MAudioClientsListObserver.h>
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::CAudioClientsListManagerAO
+//
+// -----------------------------------------------------------------------------
+//
+CAudioClientsListManagerAO::CAudioClientsListManagerAO(
+                                CGlobalAudioSettings& aGlobalAudioSettings,
+                                RPointerArray<MAudioClientsListObserver>& aArray, 
+                                TUint32 aKey )
+:CActive(CActive::EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioClientsListObserverArray(aArray),
+ iKey(aKey)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::~CAudioClientsListManagerAO
+//
+// -----------------------------------------------------------------------------
+//
+CAudioClientsListManagerAO::~CAudioClientsListManagerAO()
+    { 
+    Cancel();
+    iActiveAudioClients.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CAudioClientsListManagerAO* CAudioClientsListManagerAO::NewL(
+                                                CGlobalAudioSettings& aGlobalAudioSettings,
+                                                RPointerArray<MAudioClientsListObserver>& aArray,
+                                                TUint32 aKey )
+    {
+    CAudioClientsListManagerAO* self = new (ELeave) CAudioClientsListManagerAO(aGlobalAudioSettings,aArray,aKey);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CAudioClientsListManagerAO::ConstructL()
+    {
+    User::LeaveIfError( iActiveAudioClients.Attach(
+                                KPSUidMMFAudioServer,
+                                iKey,
+                                EOwnerThread ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::MonitorStart
+//
+// -----------------------------------------------------------------------------
+//
+TInt CAudioClientsListManagerAO::MonitorStart()
+    {
+    TInt status(KErrAlreadyExists);
+    if ( !IsActive() )
+        {
+        SetActive();	
+        iActiveAudioClients.Subscribe(iStatus);
+        status = KErrNone;
+        }
+  
+    return status;
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::MonitorStop
+//
+// -----------------------------------------------------------------------------
+//
+TInt CAudioClientsListManagerAO::MonitorStop()
+    {
+    TInt status(KErrNone);
+    if ( IsActive() )
+        {
+        Cancel();
+        }
+    return status;
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::GetAudioClientsList
+//
+// -----------------------------------------------------------------------------
+//
+TInt CAudioClientsListManagerAO::GetAudioClientsList(
+                        CGlobalAudioSettings::TAudioClientListType aType,
+                        RArray<TProcessId>& aList )
+    {
+    TInt status(KErrNone);
+    aList.Reset();
+    switch ( aType )
+        {
+        case CGlobalAudioSettings::EActiveAudioClients:
+            {
+            TAudioClientList audioClientListPckg;
+            status = iActiveAudioClients.Get( KPSUidMMFAudioServer,
+                                              KAudioPolicyAudioClients,
+                                              audioClientListPckg );
+            if ( status == KErrNone )
+                {
+                for ( TInt index = 0; index < audioClientListPckg().iNumOfProcesses; index++ )
+                    {
+                    status = aList.Append((audioClientListPckg().iProcessList)[index]);
+                    if ( status != KErrNone )
+                        {
+                        aList.Reset();
+                        break;
+                        }
+                    }
+                }
+            }
+            break;
+            
+         case CGlobalAudioSettings::EPausedAudioClients:
+            {
+            TAudioPolicyProcessIdList audioClientListPckg;
+            status = iActiveAudioClients.Get(KPSUidMMFAudioServer,
+                                             KAudioPolicyApplicationAudioStatePaused,
+                                             audioClientListPckg );
+            if ( status == KErrNone )
+                {
+                for ( TInt index = 0; index < audioClientListPckg().iNumOfProcesses; index++ )
+                    {
+                    status = aList.Append((audioClientListPckg().iProcessList)[index]);
+                    if ( status != KErrNone )
+                        {
+                        aList.Reset();
+                        break;
+                        }
+                    }
+                }
+            }
+            break;
+              
+        default:
+            status = KErrNotFound;
+            break;
+        };
+    return status;
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::RunL
+//
+// -----------------------------------------------------------------------------
+//
+void CAudioClientsListManagerAO::RunL()
+    {
+    TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CAudioClientsListManagerAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone ) 
+        {
+        MonitorStart();
+        // Go through the array and notify every observer
+      	switch(iKey)
+      		{ 
+      		case KAudioPolicyAudioClients:
+      			{      		
+        		for (TInt index = 0; index < iAudioClientsListObserverArray.Count(); index++)
+            		{            	                		
+            		iAudioClientsListObserverArray[index]->Event( iGlobalAudioSettings,
+                                    MAudioClientsListObserver::KActiveAudioClientsListChanged);        
+            		}
+      			}
+      			break;
+      	 	case KAudioPolicyApplicationAudioStatePaused:
+      			{
+      			for (TInt index = 0; index < iAudioClientsListObserverArray.Count(); index++)
+            		{            		       		
+            		iAudioClientsListObserverArray[index]->Event( iGlobalAudioSettings,
+                                    MAudioClientsListObserver::KPausedAudioClientsListChanged);
+            		}
+      			}
+      			break;
+      		default:
+      	  		break;	
+        
+        	} //end swith(iKey)
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::DoCancel
+//
+// -----------------------------------------------------------------------------
+//
+void CAudioClientsListManagerAO::DoCancel()
+    {
+    iActiveAudioClients.Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioClientsListManagerAO::RunError
+//
+// -----------------------------------------------------------------------------
+//
+TInt CAudioClientsListManagerAO::RunError(TInt /*aError*/)
+    {
+    // Observer callback has leaving code!!!. Ignore it.
+    return KErrNone;
+    }
+
+// End of file