diff -r 73a1feb507fb -r bc78a40cd63c mmsharing/mmshui/src/musuicallbackservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshui/src/musuicallbackservice.cpp Wed Sep 01 12:31:01 2010 +0100 @@ -0,0 +1,183 @@ +/* +* Copyright (c) 2005-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: Asynchronous callback service provider. +* +*/ + + + +#include "musuicallbackservice.h" +#include "musuicallbackobserver.h" // callback observer interface +#include "muslogger.h" + + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CMusUiCallbackService* CMusUiCallbackService::NewL( + MMusUiCallbackObserver& aCallbackObserver ) + { + CMusUiCallbackService* self = + new ( ELeave ) CMusUiCallbackService( + aCallbackObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// Destructor. +// ----------------------------------------------------------------------------- +// +CMusUiCallbackService::~CMusUiCallbackService() + { + // Cancel active object + MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::~CMusUiCallbackService" ); + Cancel(); + MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::~CMusUiCallbackService" ); + } + + +// ----------------------------------------------------------------------------- +// C++ default constructor. +// ----------------------------------------------------------------------------- +// +CMusUiCallbackService::CMusUiCallbackService( + MMusUiCallbackObserver& aCallbackObserver ) + : CActive( EPriorityStandard ), + iCallbackObserver( aCallbackObserver ), + iEventId( EMusUiAsyncUninitialized ) + { + CActiveScheduler::Add( this ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiCallbackService::ConstructL() + { + } + + +// ----------------------------------------------------------------------------- +// Buffer a request to trigger an event. +// ----------------------------------------------------------------------------- +// +void CMusUiCallbackService::AsyncEventL( TMusUiAsyncEvent aEventId ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::AsyncEventL" ); + iEventId = aEventId; + Activate(); + MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::AsyncEventL" ); + } + + +// ----------------------------------------------------------------------------- +// Cancels the active request. +// ----------------------------------------------------------------------------- +// +void CMusUiCallbackService::Cancel() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::Cancel" ); + CActive::Cancel(); + iStatus = NULL; + MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::Cancel" ); + } + +// ----------------------------------------------------------------------------- +// Check what event is currently pending. +// ----------------------------------------------------------------------------- +// +TMusUiAsyncEvent CMusUiCallbackService::CurrentEvent() const + { + if ( IsActive() ) + { + return iEventId; + } + return EMusUiAsyncUninitialized; + } + +// ----------------------------------------------------------------------------- +// From CActive. Called when a request completes. +// ----------------------------------------------------------------------------- +// +void CMusUiCallbackService::RunL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::RunL" ); + if ( iEventId ) + { + // Copy the id from member to local so the member can be cleared. + TMusUiAsyncEvent eventId = iEventId; + iEventId = EMusUiAsyncUninitialized; + // Issue the call to the observer interface. + iCallbackObserver.HandleAsyncEventL( eventId ); + MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::RunL returns" ); + return; + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::RunL" ); + } + + +// ----------------------------------------------------------------------------- +// From CActive. Called when a leave occurres in RunL. +// ----------------------------------------------------------------------------- +// +TInt CMusUiCallbackService::RunError( TInt aError ) + { + MUS_LOG1( "mus: [MUSUI ] CMusUiCallbackService::RunError [%d]", + aError ); + iCallbackObserver.HandleAsyncError( aError ); + + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// From CActive. Called when a request is cancelled. +// ----------------------------------------------------------------------------- +// +void CMusUiCallbackService::DoCancel() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::DoCancel" ); + MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::DoCancel" ); + } + + +// ----------------------------------------------------------------------------- +// Activate the object. +// ----------------------------------------------------------------------------- +// +void CMusUiCallbackService::Activate() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::Activate" ); + // Call SetActive() so RunL() will be called by the active scheduler + if ( IsActive() ) + { + Cancel(); + } + SetPriority( EPriorityHigh ); + SetActive(); + iStatus = KRequestPending; + TRequestStatus* stat = &iStatus; + User::RequestComplete( stat, KErrNone ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::Activate" ); + } + +