taskswitcher/server/src/hsrunningappsession.cpp
author Jaakko Haukipuro (Nokia-MS/Oulu) <Jaakko.Haukipuro@nokia.com>
Thu, 16 Sep 2010 12:11:40 +0100
changeset 117 c63ee96dbe5f
permissions -rw-r--r--
Missing activityfw and taskswitcher components - fix for Bug 3670

/*
* 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:
*
*/
#include "hsrunningappsession.h"
#include "tstaskmonitorglobals.h"

#include "hsdataobservertask.h"
#include "hsdataprovidertask.h"
#include "tsdatatask.h"

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CRunningAppSession::CRunningAppSession(MTsDataObserverStorage& observerStorage,
                                       const MTsDataProvider& dataProvider)
:
    mObserverStorage(observerStorage),
    mDataProvider(dataProvider)
{
    // No implementation required
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CRunningAppSession::~CRunningAppSession()
{
    mObserverStorage.Invalidate(this);
    mDataStorages.Close();
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CRunningAppSession* CRunningAppSession::NewL(MTsDataObserverStorage& observerStorage, 
                                             const MTsDataProvider& dataProvider,
                                             const TArray<MTsDataStorage*> &dataStorages)
{
    CRunningAppSession* self = new (ELeave) CRunningAppSession(observerStorage, 
                                                               dataProvider);
    CleanupStack::PushL(self);
    self->ConstructL(dataStorages);
    CleanupStack::Pop(self);
    return self;
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CRunningAppSession::ConstructL(const TArray<MTsDataStorage*> &dataStorages)
{
    for (TInt iter(0); iter < dataStorages.Count(); ++iter) {
        mDataStorages.AppendL(dataStorages[iter]);
    }
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CRunningAppSession::ServiceL(const RMessage2& message)
{
    switch (message.Function()) {
    case SubscribeRunningAppChanges:
        CHsDataObserverTask::ExecuteLD(mObserverStorage, message);
        break;
    
    case CancelSubscribeRunningAppChanges:
        mObserverStorage.Cancel(message);
        break;
    
    case GetRunningAppInfo:
    case FlushData:
        HsDataProviderTask::ExecuteL(mDataProvider, message);
        break;
        
    case RegisterScreenshotMessage:
    case UnregisterScreenshotMessage:
    case VisibilityChange:
    case OpenTaskMessage:
    case CloseTaskMessage:
        TsDataTask::ExecuteL(mDataStorages.Array(), message);
        break;
    
    default:
        message.Complete(CServer2::EBadMessageNumber);
    }
}