mmserv/tms/tmsserver/src/cspcenreplistener.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:08:46 +0200
changeset 0 71ca22bcf22a
child 3 4f62049db6ac
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
 * Copyright (c) 2009 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:  Central Repository listening
 *
 */

// INCLUDE FILES
#include "cspcenreplistener.h"
#include "mcspcenrepobserver.h"
#include "tmsutility.h"

using namespace TMS;

// -----------------------------------------------------------------------------
// CSPCenRepListener::CSPCenRepListener
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CSPCenRepListener* CSPCenRepListener::NewL(TUid aUid,
        TUint32 aMonitorSetting, MCSPCenRepObserver* aObserver)
    {
    TRACE_PRN_FN_ENT;
    CSPCenRepListener* self = new (ELeave) CSPCenRepListener(aUid,
            aMonitorSetting, aObserver);
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop();
    TRACE_PRN_FN_EXT;
    return self;
    }

// Destructor
CSPCenRepListener::~CSPCenRepListener()
    {
    TRACE_PRN_FN_ENT;
    Cancel();
    delete iRepository;
    TRACE_PRN_FN_EXT;
    }

// -----------------------------------------------------------------------------
// CSPCenRepListener::Get
// -----------------------------------------------------------------------------
//
TInt CSPCenRepListener::Get(TInt& aValue)
    {
    TRACE_PRN_FN_ENT;
    TRACE_PRN_FN_EXT;
    return (iRepository->Get(iMonitorSetting, aValue));

    }

// -----------------------------------------------------------------------------
// CSPCenRepListener::Set
// -----------------------------------------------------------------------------
//
TInt CSPCenRepListener::Set(TInt aValue)
    {
    TRACE_PRN_FN_ENT;
    TRACE_PRN_FN_EXT;
    return (iRepository->Set(iMonitorSetting, aValue));

    }
// -----------------------------------------------------------------------------
// CSPCenRepListener::DoCancel
// -----------------------------------------------------------------------------
//
void CSPCenRepListener::DoCancel()
    {
    TRACE_PRN_FN_ENT;
    iRepository->NotifyCancel(iMonitorSetting);
    TRACE_PRN_FN_EXT;
    }

// -----------------------------------------------------------------------------
// CSPCenRepListener::RunError
// -----------------------------------------------------------------------------
//
TInt CSPCenRepListener::RunError(
#ifdef _DEBUG
        TInt aError // Log the leavecode from RunL
#else
        TInt /*aError*/
#endif
        )
    {
    TRACE_PRN_FN_ENT;
#ifdef _DEBUG
    TRACE_PRN_IF_ERR(aError);
#endif
    TRACE_PRN_FN_EXT;
    return ( KErrNone );
    }

// -----------------------------------------------------------------------------
// CSPCenRepListener::RunL
// -----------------------------------------------------------------------------
//
void CSPCenRepListener::RunL()
    {
    TRACE_PRN_FN_ENT;
    // Don't resubmit the request on error
    // Central repositry completes notifications with id of setting
    // so check only that value of iStatus is negative
    User::LeaveIfError(iStatus.Int() < KErrNone);
    SubmitNotifyRequestL();

    TInt volume;
    // The loudspeaker volume has changed in repository.
    // Retrieve the current volume from repository.
    User::LeaveIfError(Get(volume));

    iObserver->HandleNotifyCenRepL(iUid, iMonitorSetting, volume);
    TRACE_PRN_FN_EXT;
    }

// -----------------------------------------------------------------------------
// CSPCenRepListener::CSPCenRepListener
// -----------------------------------------------------------------------------
//
CSPCenRepListener::CSPCenRepListener(TUid aUid, TUint32 aMonitorSetting,
        MCSPCenRepObserver* aObserver) :
    CActive(EPriorityStandard),
    iUid(aUid),
    iMonitorSetting(aMonitorSetting),
    iObserver(aObserver)
    {
    TRACE_PRN_FN_ENT;
    CActiveScheduler::Add(this);
    TRACE_PRN_FN_EXT;
    }

// -----------------------------------------------------------------------------
// CSPCenRepListener::ConstructL
// -----------------------------------------------------------------------------
//
void CSPCenRepListener::ConstructL()
    {
    TRACE_PRN_FN_ENT;
    // Create repository instance
    iRepository = CRepository::NewL(iUid);
    // Start monitoring
    SubmitNotifyRequestL();
    TRACE_PRN_FN_EXT;
    }

// -----------------------------------------------------------------------------
// CSPCenRepListener::SubmitNotifyRequestL
// -----------------------------------------------------------------------------
//
void CSPCenRepListener::SubmitNotifyRequestL()
    {
    TRACE_PRN_FN_ENT;
    iRepository->NotifyRequest(iMonitorSetting, iStatus);
    SetActive();
    TRACE_PRN_FN_EXT;
    }

// End of file