mmserv/tms/tmsserver/src/cspcenreplistener.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 23:19:48 +0200
branchRCL_3
changeset 3 4f62049db6ac
parent 0 71ca22bcf22a
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
 * 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;

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

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

// -----------------------------------------------------------------------------
// TMSCenRepListener::Get
// -----------------------------------------------------------------------------
//
gint TMSCenRepListener::Get(gint& aValue)
    {
    TRACE_PRN_FN_ENT;
    gint status = iRepository->Get(iMonitorSetting, aValue);
    TRACE_PRN_FN_EXT;
    return status;
    }

// -----------------------------------------------------------------------------
// TMSCenRepListener::Set
// -----------------------------------------------------------------------------
//
gint TMSCenRepListener::Set(gint aValue)
    {
    TRACE_PRN_FN_ENT;
    gint status = iRepository->Set(iMonitorSetting, aValue);
    TRACE_PRN_FN_EXT;
    return status;

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

// -----------------------------------------------------------------------------
// TMSCenRepListener::RunError
// -----------------------------------------------------------------------------
//
gint TMSCenRepListener::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;
    }

// -----------------------------------------------------------------------------
// TMSCenRepListener::RunL
// -----------------------------------------------------------------------------
//
void TMSCenRepListener::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
    if (iStatus.Int() == KErrNone)
        {
        SubmitNotifyRequestL();
        }

    // The loudspeaker volume has changed in repository.
    // Retrieve the current volume from repository.
    gint volume;
    Get(volume);
    iObserver->HandleNotifyCenRepL(iUid, iMonitorSetting, volume);
    TRACE_PRN_FN_EXT;
    }

// -----------------------------------------------------------------------------
// TMSCenRepListener::TMSCenRepListener
// -----------------------------------------------------------------------------
//
TMSCenRepListener::TMSCenRepListener(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;
    }

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

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

// End of file