diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengsessionmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musengsessionmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,186 @@ +/* +* 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 "musengsessionmanager.h" +#include "musenglivesession.h" +#include "musengclipsession.h" +#include "musengreceivesession.h" +#include "musengtwowaysession.h" +#include "musengtwowayrecvsession.h" +#include "mussessionproperties.h" +#include "muspropertywatch.h" +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager* CMusEngSessionManager::NewL() + { + CMusEngSessionManager* self = new( ELeave )CMusEngSessionManager(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::~CMusEngSessionManager() + { + delete iUseCaseWatch; + delete iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::CMusEngSessionManager() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::ConstructL() + { + TInt useCase; + User::LeaveIfError( RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KUseCase, + useCase ) ); + iSession = CreateMusSessionL( + static_cast< MultimediaSharing::TMusUseCase >( useCase ) ); + + iUseCaseWatch = CMusPropertyWatch::NewL( + *this, NMusSessionApi::KCategoryUid, NMusSessionApi::KUseCase ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcSession& CMusEngSessionManager::Session() + { + return *iSession; + } + +// ----------------------------------------------------------------------------- +// If usecase changes while background startup is active, client is +// notified about change by bringing it to foreground and changing current +// active session. Old session is terminated immediately after notification. +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::PropertyChanged( + const TUint /*aKey*/, + const TInt aValue ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngSessionManager::PropertyChanged, val:%d", + aValue ) + + if ( iSession->IsBackgroundStartup() && aValue != iCurrentUseCase ) + { + MUS_LOG( "mus: [ENGINE] Usecase changed!" ) + MLcUiProvider* uiProvider = iSession->LcUiProvider(); + if ( uiProvider ) + { + CMusEngMceSession* newSession = NULL; + TRAP_IGNORE( newSession = CreateMusSessionL( + static_cast< MultimediaSharing::TMusUseCase >( aValue ) ) ); + if ( newSession ) + { + MUS_LOG( "mus: [ENGINE] Set new active session" ) + CMusEngMceSession* oldSession = iSession; + iSession = newSession; + iSession->SetForegroundStatus( ETrue ); + uiProvider->HandleForegroundStatus( ETrue ); + delete oldSession; + } + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngSessionManager::PropertyChanged" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::HandlePropertyError( const TInt /*aReason*/ ) + { + // NOP + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngSessionManager::IsFeatureSupported( TLcFeature aLcFeature ) + { + return ( aLcFeature == ELcShowInvitingNote || + aLcFeature == ELcShowWaitingNote || + aLcFeature == ELcShowAcceptQuery ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession* CMusEngSessionManager::CreateMusSessionL( + MultimediaSharing::TMusUseCase aUseCase ) + { + CMusEngMceSession* session = NULL; + switch ( aUseCase ) + { + case MultimediaSharing::EMusLiveVideo: + { + session = CMusEngLiveSession::NewL(); + break; + } + case MultimediaSharing::EMusClipVideo: + { + session = CMusEngClipSession::NewL(); + break; + } + case MultimediaSharing::EMusReceive: + { + session = CMusEngReceiveSession::NewL(); + break; + } + case MultimediaSharing::EMusTwoWayVideo: + { + session = CMusEngTwoWaySession::NewL(); + break; + } + case MultimediaSharing::EMusReceiveTwoWayVideo: + { + session = CMusEngTwoWayRecvSession::NewL(); + break; + } + default: + User::Leave( KErrNotSupported ); + break; + } + iCurrentUseCase = aUseCase; + return session; + } + +// End of File