svgtopt/SVGTPlugin/src/RepositoryVolumeListener.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:46 +0100
branchRCL_3
changeset 39 1902ade171ab
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201026 Kit: 201035

/*
* 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:  AO that completes on a change in the volume property.  Used for 
*                the new Central Repository Server.  Used in EKA2 builds only
*
*/


//#include <SharedDataClient.h>


#include "RepositoryVolumeListener.h"
//#include <SharedDataKeys.h> //include this file when KSDUidMediaVolumeControl and KMediaVolume will be needed
//#include "epocdebug.h"
#include <browseruisdkcrkeys.h>
#include "MRepositoryVolumeObserver.h"

CRepositoryVolumeListener* CRepositoryVolumeListener::NewL(MRepositoryVolumeObserver* aObserver)
    {
    CRepositoryVolumeListener* self = new(ELeave) CRepositoryVolumeListener;
    CleanupStack::PushL(self);
    self->ConstructL(aObserver);
    CleanupStack::Pop(self);
    return self;
    }

CRepositoryVolumeListener::CRepositoryVolumeListener() : CActive(CActive::EPriorityStandard)
    {
    iState = EUnableToConnect;
    CActiveScheduler::Add(this) ; // add to active scheduler
    }

void CRepositoryVolumeListener::ConstructL(MRepositoryVolumeObserver* aObserver)
    {
    //
    // Open a connection to the Central Repository...
    iCenRepos = CRepository::NewL(KCRUidBrowser);

    if ( iCenRepos->NotifyRequest(KBrowserMediaVolumeControl, iStatus) == KErrNone )
        {
        iState = EConnected;	
        SetActive();
        }
    else
        {
        iState = EUnableToConnect;
        }

    iObserver = aObserver;
    }

CRepositoryVolumeListener::~CRepositoryVolumeListener()
    {
	Cancel();
	delete iCenRepos;  // close the client session
    }

//
// Get the current volume
TInt CRepositoryVolumeListener::GetCurrentVolume()
    {
    TInt currentVolume = 0;

    if ( iState == EUnableToConnect )
        {
    	//
    	// Connection to CenRepos not available so return the default volume
    	currentVolume = GetDefaultVolume();
        }
    else
        {
    	//
    	// Get the current volume
    	if ( iCenRepos->Get(KBrowserMediaVolumeControl, currentVolume) != KErrNone )
            {
            // Error retrieving value... return default value
            //PLAYEROUTPUT("*ERROR* CRepositoryVolumeListener::GetCurrentVolume() - Unable to retreive volume value");
            currentVolume = GetDefaultVolume();
            }
        }
    
    return currentVolume;
    }

//
// Return the default volume in this case 2/3 of the max support by the system
TInt CRepositoryVolumeListener::GetDefaultVolume()
    {
    TInt defaultVol = 0;

    #if defined(__WINS__)
        defaultVol = WINS_DEFAULT_VOLUME;
    #else
        defaultVol = HW_DEFAULT_VOLUME;
    #endif

    return defaultVol;
    }

void CRepositoryVolumeListener::DoCancel()
    {
    iCenRepos->NotifyCancel(KBrowserMediaVolumeControl);
    }

//
// Activated when the watched value updates.
void CRepositoryVolumeListener::RunL()
    {
    TInt currentVolume = 0;

    if (EUnableToConnect == iState)
        {
        return;
        }

    //
    // Get the current volume
    if ( iCenRepos->Get(KBrowserMediaVolumeControl, currentVolume) == KErrNone )
        {
        //
        // Inform the observer
        iObserver->VolumeChanged(currentVolume);
        if ( iCenRepos->NotifyRequest(KBrowserMediaVolumeControl, iStatus) == KErrNone )
            {
            SetActive();
            }
        else
            {
            iState = EUnableToConnect;
            }
        }
    else
        {
        //
        // error
        iState = EUnableToConnect;		
        }

    }