internetradio2.0/activeidleengsrc/iractiveidleeng.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 19 Apr 2010 14:01:53 +0300
changeset 0 09774dfdd46b
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* Copyright (c) 2006-2007 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:  ?Description
*
*/


#include "irmetadata.h"
#include "irpubsubkeys.h"

#include "iractiveidleeng.h"
#include "iractiveidleengnotifyhandler.h"
#include "iractiveidleengpubsub.h"
#include "irdebug.h"


// ---------------------------------------------------------------------------
// CIRActiveIdleEng::CIRActiveIdleEng
// Default Constructor.
// ---------------------------------------------------------------------------
//
CIRActiveIdleEng::CIRActiveIdleEng( MIRActiveIdleEngNotifyHandler& aObserver )
    : iObserver( aObserver )
    {
    }

// ---------------------------------------------------------------------------
// CIRActiveIdleEng::ConstructL
// Second-phase constructor
// ---------------------------------------------------------------------------
//
void CIRActiveIdleEng::ConstructL()
    {
    IRLOG_DEBUG( "CIRActiveIdleEng::ConstructL" );	
    //Subscriber for application running state 
    User::LeaveIfError(iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
    	NewL( *this, KUidActiveInternetRadioApp, KIRPSDataApplicationRunning , 
    	RProperty::EInt) ) );
    //Subsciber for meta data
    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
    	NewL( *this, KUidActiveInternetRadioApp, KIRPSMetaData, 
    	RProperty::ELargeText)));
    //Subsciber for the volume level 
    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
    	NewL( *this, KUidActiveInternetRadioApp, KIRPSVolume , 
    	RProperty::EInt) ) );
    //Subsciber for the key KIRPSPlayStop at stop state
    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
    	NewL( *this, KUidActiveInternetRadioApp, KIRPSPlayStop ,
    	RProperty::EInt) ) );
    //Subsciber for the channel name
     User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
    	NewL( *this, KUidActiveInternetRadioApp, KIRPSDataChannel, 
    	RProperty::ELargeText) ) );
    //Subscriber for favourite channel preset index 
    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
    	NewL( *this, KUidActiveInternetRadioApp, KIRPSPresetIndex ,
    	RProperty::EInt) ) );
    
    //Subscriber for favourite channel preset index 
    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
    	NewL( *this, KUidActiveInternetRadioApp, KIRPSBufferingState ,
    	RProperty::EInt) ) );
    IRLOG_DEBUG( "CIRActiveIdleEng::ConstructL - Exiting." );	
    }

// ---------------------------------------------------------------------------
// CIRActiveIdleEng::SecondConstructL()
// Finalizes the construction of the object
// ---------------------------------------------------------------------------
//
EXPORT_C void CIRActiveIdleEng::SecondConstructL()
	{
	
	IRLOG_DEBUG( "CIRActiveIdleEng::SecondConstructL" );
	for ( TInt i = 0; i < iPropertyObserverArray.Count(); i++ )
		{
		iPropertyObserverArray[i]->SecondConstructL();	
		}
	IRLOG_DEBUG( "CIRActiveIdleEng::SecondConstructL - Exiting." );
	}

// ---------------------------------------------------------------------------
// CIRActiveIdleEng::NewL
// Static constructor.
// ---------------------------------------------------------------------------
//
EXPORT_C CIRActiveIdleEng* CIRActiveIdleEng::NewL( 
	MIRActiveIdleEngNotifyHandler& aObserver )
    {
    IRLOG_DEBUG( "CIRActiveIdleEng::NewL" );
    CIRActiveIdleEng* self = new ( ELeave ) CIRActiveIdleEng( aObserver );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
	IRLOG_DEBUG( "CIRActiveIdleEng::NewL - Exiting." );
    return self;
    }

// ---------------------------------------------------------------------------
// CIRActiveIdleEng::~CIRActiveIdleEng()
// standard C++ destructor
// ---------------------------------------------------------------------------
//
EXPORT_C CIRActiveIdleEng::~CIRActiveIdleEng()
    {
    IRLOG_DEBUG( "CIRActiveIdleEng::~CIRActiveIdleEng" );
    iPropertyObserverArray.ResetAndDestroy();
    iPropertyObserverArray.Close();
    IRLOG_DEBUG( "CIRActiveIdleEng::~CIRActiveIdleEng - Exiting." );
    }

// ---------------------------------------------------------------------------
// CIRActiveIdleEng::HandlePropertyChangeL
// Invoked when any listened P&S key is changed.
// ---------------------------------------------------------------------------
void CIRActiveIdleEng::HandlePropertyChangeL( const TUid& aCategory,
											TUint aKey,const TDesC8& aText ) 
	{
	IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeL" );
	if ( aCategory == KUidActiveInternetRadioApp )
		{
		if( aKey == KIRPSDataChannel )
			{
			iObserver.HandleChannelChangeL();
			}
		else if( aKey == KIRPSMetaData )
			{
			CIRMetaData* metaData = CIRMetaData::NewL( aText );
			CleanupStack::PushL( metaData );
			iObserver.HandleMetaDataReceivedL( *metaData );
			CleanupStack::PopAndDestroy( metaData );
			}
		else
			{
			// To avoid PC lint error
			}
		}
	IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeL - Exiting." );
	}

// ---------------------------------------------------------------------------
// CIRActiveIdleEng::HandlePropertyChangeL
// Invoked when any listened P&S key is changed.
// ---------------------------------------------------------------------------
//
void CIRActiveIdleEng::HandlePropertyChangeL( 
	const TUid& aCategory, TUint aKey, TInt aValue )
	{
	IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeL" );
	if ( aCategory == KUidActiveInternetRadioApp )
		{
		if( aKey == KIRPSDataApplicationRunning)
			{
			iObserver.HandleApplicationRunningStateChangeL( 
				static_cast<TIRPSApplicationRunningState>( aValue ) );				
			}
		else if( aKey == KIRPSVolume)
			{
			iObserver.HandleVolumeChangeL( aValue );
			}
		else if( aKey == KIRPSPlayStop)
			{
			iObserver.HandlePlayStopL( static_cast<TIRStopPlayState>( aValue ) );
			}	   
		else if( aKey == KIRPSBufferingState)
			{
			IRRDEBUG2("CIRActiveIdleEng::HandlePropertyChangeL KIRPSBufferingState=%d ",aValue);
			iObserver.HandleBufferingStateL(static_cast<TIRBufferingState>(aValue));
			}	   
		else
			{
			// To avoid PC lint error
			}
		}
	IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeL - Exiting." );
	}

// ---------------------------------------------------------------------------
// CIRActiveIdleEng::HandlePropertyChangeErrorL
// Invoked when an error has occured while fetching the new value of any listened P&S key.
// ---------------------------------------------------------------------------
//
void CIRActiveIdleEng::HandlePropertyChangeErrorL( const TUid& /*aCategory*/,
	TUint /*aKey*/, TInt aError )
    {
    IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeErrorL" );
    if (aError < 0)
    	{
    	HandlePropertyChangeL(KUidActiveInternetRadioApp, 
    		KIRPSDataApplicationRunning, EIRPSApplicationClosing);
    	}
    IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeErrorL" );
    }