internetradio2.0/uisrc/irsystemeventcollector.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-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:  Implementation of CIRSystemEventCollector
*
*/


#include <e32cmn.h>
#include <UiklafInternalCRKeys.h>
#include <centralrepository.h>

#include "iraccessoryobserver.h"
#include "irdiskspacewatcher.h"
//#include "irrepositorymanager.h"
#include "irsystemeventcollector.h"
#include "irsystemeventdetector.h"
#include "irdebug.h"

// Constants
const TInt KIRObserverArrayGranularity( 2 );
const TInt KIR_DEFAULT_CRITICAL_LEVEL = 3145728;	// 3MB
const TInt KThree =3;  
// ---------------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------------
//
CIRSystemEventCollector::CIRSystemEventCollector() : 
    iSystemEventObservers( KIRObserverArrayGranularity )
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::CIRSystemEventCollector" );
    }

// ---------------------------------------------------------------------------
// Second-phase constructor
// ---------------------------------------------------------------------------
//
void CIRSystemEventCollector::ConstructL()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::ConstructL - Entering" );
    iSystemEventDetector = CIRSystemEventDetector::NewL( *this );

    iHeadsetObserver = CIRAccessoryObserver::NewL();
    iHeadsetObserver->SetObserver( this );

    TInt criticalLevel = 0;

	CRepository* cenrep = CRepository::NewLC(KCRUidUiklaf );
	TInt err = cenrep->Get(KUikOODDiskCriticalThreshold, criticalLevel);
	CleanupStack::PopAndDestroy(cenrep);
	if(err != KErrNone)
		{
		criticalLevel = KIR_DEFAULT_CRITICAL_LEVEL;
		IRLOG_WARNING( "CIRSystemEventCollector::ConstructL - Failed to read criticalLevel. Using default 3MB" );
		}
    criticalLevel = criticalLevel * KThree;
    iDiskSpaceWatcher = CIRDiskSpaceWatcher::NewL( static_cast<TInt64>( criticalLevel ), *this );
    iDiskSpaceWatcher->StartObservingDriveL( KVRDefaultDrive );

	IRRDEBUG3("CIRSystemEventCollector::ConstructL - DiskSpaceWather started. driveNum=%d, criticalLevel=%d ", KVRDefaultDrive, criticalLevel );

    IRLOG_DEBUG( "CIRSystemEventCollector::ConstructL - Exiting" );
    }

// ---------------------------------------------------------------------------
// Two-phased constructor
// ---------------------------------------------------------------------------
//
EXPORT_C CIRSystemEventCollector* CIRSystemEventCollector::NewL()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::NewL - Entering" );
    CIRSystemEventCollector* self = new( ELeave ) CIRSystemEventCollector;
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop(self);
    IRLOG_DEBUG( "CIRSystemEventCollector::NewL - Exiting" );
    return self;
    }

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
CIRSystemEventCollector::~CIRSystemEventCollector()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::~CIRSystemEventCollector - Entering" );
    delete iSystemEventDetector;
    delete iHeadsetObserver;
    
    if( iDiskSpaceWatcher )
	    {
	    delete iDiskSpaceWatcher;
	    iDiskSpaceWatcher = NULL;
	    }

    iSystemEventObservers.Close();
    IRLOG_DEBUG( "CIRSystemEventCollector::~CIRSystemEventCollector - Exiting" );
    }

// ---------------------------------------------------------------------------
// Adds a system event observer
// ---------------------------------------------------------------------------
//
EXPORT_C void CIRSystemEventCollector::AddObserverL( MIRSystemEventObserver* aHeadsetObserver )
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::AddObserverL - Entering" );
    iSystemEventObservers.AppendL( aHeadsetObserver );
    IRLOG_DEBUG( "CIRSystemEventCollector::AddObserverL - Exiting" );
    }

// ---------------------------------------------------------------------------
// Removes a system event observer
// ---------------------------------------------------------------------------
//
 EXPORT_C void CIRSystemEventCollector::RemoveObserver( MIRSystemEventObserver* aSystemObserver )
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::RemoveObserver - Entering" );
    TInt objectIndex = iSystemEventObservers.Find( aSystemObserver );
    
    if ( objectIndex != KErrNotFound )
        {
        iSystemEventObservers.Remove( objectIndex );
        }
    IRLOG_DEBUG( "CIRSystemEventCollector::RemoveObserver - Exiting" );
    }

// ---------------------------------------------------------------------------
// Getter for mobile network state
// ---------------------------------------------------------------------------
//
EXPORT_C TBool CIRSystemEventCollector::IsMobileNetworkCoverage() const
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::IsMobileNetworkCoverage" );
    return iSystemEventDetector->IsMobileNetworkCoverage();
    }

// ---------------------------------------------------------------------------
// Getter for network state
// ---------------------------------------------------------------------------
//
EXPORT_C TBool CIRSystemEventCollector::IsNetworkCoverage() const
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::IsNetworkCoverage" );
    return iSystemEventDetector->IsNetworkCoverage();
    }

// ---------------------------------------------------------------------------
// Getter for call state
// ---------------------------------------------------------------------------
//
EXPORT_C TBool CIRSystemEventCollector::IsCallActive() const
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::IsCallActive" );
    return iSystemEventDetector->IsCallActive();
    }

// ---------------------------------------------------------------------------
// Getter for audio resource state
// ---------------------------------------------------------------------------
//
EXPORT_C TBool CIRSystemEventCollector::IsAudioResourcesAvailable() const
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::IsAudioResourcesAvailable" );
    return iSystemEventDetector->IsAudioResourcesAvailable();
    }

// ---------------------------------------------------------------------------
// Getter for headset connection status
// ---------------------------------------------------------------------------
EXPORT_C TBool CIRSystemEventCollector::IsHeadsetConnected() const
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::IsHeadsetConnected" );
    return iHeadsetObserver->IsHeadsetConnected();
    }
    
// ---------------------------------------------------------------------------
// Getter disk space state
// ---------------------------------------------------------------------------
EXPORT_C TBool CIRSystemEventCollector::IsDiskSpaceBelowCriticalLevel() const
    {
    return iDiskSpaceWatcher->IsBelowCriticalLevel( KVRDefaultDrive );
    }

// ---------------------------------------------------------------------------
// Getter Vocie UI state
// ---------------------------------------------------------------------------
EXPORT_C TBool CIRSystemEventCollector::IsVoiceUiActive() const
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::IsVoiceUiActive" );
    return iSystemEventDetector->IsVoiceUiActive();
    }

// ---------------------------------------------------------------------------
// Notifies the observers of system event
// ---------------------------------------------------------------------------
//
void CIRSystemEventCollector::NotifyObserversL(TIRSystemEventType aEvent)
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::NotifyObserversL - Entering" );
    for (TInt i = 0 ; i < iSystemEventObservers.Count() ; i++ )
        {
        iSystemEventObservers[i]->HandleSystemEventL( aEvent );
        }
    IRLOG_DEBUG( "CIRSystemEventCollector::NotifyObserversL - Exiting" );
    }
    
// ---------------------------------------------------------------------------
// From class MIRSystemEventDetectorObserver.
// ---------------------------------------------------------------------------
//        
void CIRSystemEventCollector::NetworkUpCallbackL()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::NetworkUpCallbackL - Entering" );
    NotifyObserversL( EIRNetworkCoverageUp );
    IRLOG_DEBUG( "CIRSystemEventCollector::NetworkUpCallbackL - Exiting" );
    }


// ---------------------------------------------------------------------------
// From class MIRSystemEventDetectorObserver.
// ---------------------------------------------------------------------------
//        
void CIRSystemEventCollector::NetworkDownCallbackL()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::NetworkDownCallbackL - Entering" );
    NotifyObserversL( EIRNetworkCoverageDown );
    IRLOG_DEBUG( "CIRSystemEventCollector::NetworkDownCallbackL - Exiting" );
    }


// ---------------------------------------------------------------------------
// From class MIRSystemEventDetectorObserver.
// ---------------------------------------------------------------------------
//        
void CIRSystemEventCollector::CallActivatedCallbackL()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::CallActivatedCallbackL - Entering" );
    NotifyObserversL( EIRCallActivated );
    IRLOG_DEBUG( "CIRSystemEventCollector::CallActivatedCallbackL - Exiting" );
    }


// ---------------------------------------------------------------------------
// From class MIRSystemEventDetectorObserver.
// ---------------------------------------------------------------------------
//        
void CIRSystemEventCollector::CallDeactivatedCallbackL()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::CallDeactivatedCallbackL - Entering" );
    NotifyObserversL( EIRCallDeactivated );
    IRLOG_DEBUG( "CIRSystemEventCollector::CallDeactivatedCallbackL - Exiting" );
    }

    
// ---------------------------------------------------------------------------
// From class MIRSystemEventDetectorObserver.
// ---------------------------------------------------------------------------
//        
void CIRSystemEventCollector::AudioResourcesAvailableL()
    { 
    IRLOG_DEBUG( "CIRSystemEventCollector::AudioResourcesAvailableL - Entering" );
    NotifyObserversL( EIRAudioResourcesAvailable );
    IRLOG_DEBUG( "CIRSystemEventCollector::AudioResourcesAvailableL - Exiting" );
    }

    
// ---------------------------------------------------------------------------
// From class MIRSystemEventDetectorObserver.
// ---------------------------------------------------------------------------
//        
void CIRSystemEventCollector::AudioAutoResumeForbiddenL()
    {    
    IRLOG_DEBUG( "CIRSystemEventCollector::AudioAutoResumeForbiddenL - Entering" );
    NotifyObserversL( EIRAudioAutoResumeForbidden );
    IRLOG_DEBUG( "CIRSystemEventCollector::AudioAutoResumeForbiddenL - Exiting" );
    }
    
// ---------------------------------------------------------------------------
// From class MIRSystemEventDetectorObserver.
// ---------------------------------------------------------------------------
//        
void CIRSystemEventCollector::ErrorCallbackL( TInt /* aError VRDEBUGVAR( aError ) d*/)
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::ErrorCallbackL" );
    // P&S get fail not considered as a critical issue.
	return;
    }

// ---------------------------------------------------------------------------
// From class MIRHeadsetEventObserver.
// ---------------------------------------------------------------------------
//        
void CIRSystemEventCollector::HeadsetConnectedCallbackL()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::HeadsetConnectedCallbackL - Entering" );
    NotifyObserversL( EIRHeadsetConnected );
    IRLOG_DEBUG( "CIRSystemEventCollector::HeadsetConnectedCallbackL - Exiting" );
    }


// ---------------------------------------------------------------------------
// From class MIRHeadsetEventObserver.
// ---------------------------------------------------------------------------
//        
void CIRSystemEventCollector::HeadsetDisconnectedCallbackL()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::HeadsetDisconnectedCallbackL - Entering" );
    NotifyObserversL( EIRHeadsetDisconnected );
    IRLOG_DEBUG( "CIRSystemEventCollector::HeadsetDisconnectedCallbackL - Exiting" );
    }

// ---------------------------------------------------------------------------
// From class MIRDiskSpaceWatcherObserver.
// ---------------------------------------------------------------------------
//
void CIRSystemEventCollector::NotifyLowDiskSpaceL()
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::NotifyLowDiskSpaceL - Entering" );
    NotifyObserversL( EIRLowDiskSpace );
    IRLOG_DEBUG( "CIRSystemEventCollector::NotifyLowDiskSpaceL - Exiting" );
    }

// ---------------------------------------------------------------------------
// From class MIRAudioRoutingObserver.
// ---------------------------------------------------------------------------
//
void CIRSystemEventCollector::AudioRoutingChangedL( TVROutputDestination aOutputDestination )
    {
    IRLOG_DEBUG( "CIRSystemEventCollector::AudioRoutingChangedL - Entering" );
    TIRSystemEventType ev = EIRAudioRoutingHeadset; 
    if(aOutputDestination != EVRHeadset)
        {
        ev = EIRAudioRoutingSpeaker;
        }

    NotifyObserversL( ev );
    IRLOG_DEBUG( "CIRSystemEventCollector::AudioRoutingChangedL - Exiting" );
    }