diff -r 2eacb6118286 -r ba76fc04e6c2 phoneapp/phoneuiutils/src/cphonerecoverysystem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiutils/src/cphonerecoverysystem.cpp Fri Jun 04 10:19:18 2010 +0100 @@ -0,0 +1,279 @@ +/* +* Copyright (c) 2002 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: Recovery system. +* +*/ + + +// INCLUDE FILES +#include + +#include "phoneui.pan" +#include "cphonerecoverysystem.h" +#include "ctelerecoverysystem.h" +#include "cphonetimer.h" +#include "phoneconstants.h" + +const TInt KEmptySlot = 0; +const TInt KErrNoSpace = -1; + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CPhoneRecoverySystem::Instance +// Initializes the singleton object +// (other items were commented in a header). +// --------------------------------------------------------- +// +EXPORT_C CPhoneRecoverySystem* CPhoneRecoverySystem::Instance() + { + CPhoneRecoverySystem* instance = static_cast + ( CCoeEnv::Static ( KUidRecoverySystemSingleton ) ); + + if ( !instance ) + { + TRAPD( err, instance = CPhoneRecoverySystem::NewL() ); + if ( err ) + { + Panic( EPhoneUtilsCouldNotCreateSingleton ); + } + } + return instance; + } + +// --------------------------------------------------------- +// CPhoneRecoverySystem::CPhoneRecoverySystem +// --------------------------------------------------------- +// +CPhoneRecoverySystem::CPhoneRecoverySystem() : + CCoeStatic( KUidRecoverySystemSingleton, EThread ) + { + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::NewL +// ----------------------------------------------------------------------------- +// +CPhoneRecoverySystem* CPhoneRecoverySystem::NewL() + { + CPhoneRecoverySystem* self = new (ELeave) CPhoneRecoverySystem(); + return self; + } + +// ----------------------------------------------------------------------------- +// CTeUtlFactoryImpl::CreateRecoverySystemL +// +// ----------------------------------------------------------------------------- +// +CTeleRecoverySystem* CPhoneRecoverySystem::CreateRecoverySystemL() + { + return CTeleRecoverySystem::NewL(); + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::~CPhoneRecoverySystem +// ----------------------------------------------------------------------------- +// +CPhoneRecoverySystem::~CPhoneRecoverySystem() + { + RemoveAllIdsFromContainer(); + delete iRecoverySystem; + iRecoverySystem = NULL; + } + + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::AddL +// ----------------------------------------------------------------------------- +// +EXPORT_C TRecoveryId CPhoneRecoverySystem::AddL( + TCallBack aCallBack, + TRecoveryPriority aPriority, + CTeleRecoverySystem::TRecoveryState aState ) + { + if ( !iRecoverySystem ) + { + iRecoverySystem = CreateRecoverySystemL(); + } + + TRecoveryId id = iRecoverySystem->AddL( + aCallBack, + aPriority, + aState ); + + try + { + AddIdToContainer( id ); + } + catch( TInt exception ) + { + __ASSERT_DEBUG( EFalse, Panic( EPhoneUtilsBufferOverflow ) ); + } + + return id; + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::Add +// ----------------------------------------------------------------------------- +// +TRecoveryId CPhoneRecoverySystem::Add( + TCallBack aCallBack, + TRecoveryPriority aPriority, + CTeleRecoverySystem::TRecoveryState aState ) + { + return iRecoverySystem->Add( + aCallBack, + aPriority, + aState ); + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::Remove +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneRecoverySystem::Remove( TRecoveryId aId ) + { + CPhoneRecoverySystem* instance = static_cast + ( CCoeEnv::Static( KUidRecoverySystemSingleton ) ); + + if ( instance ) + { + instance->RemoveId( aId ); + } + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::RemoveId +// ----------------------------------------------------------------------------- +// +void CPhoneRecoverySystem::RemoveId( TRecoveryId aId ) + { + if ( iRecoverySystem ) + { + iRecoverySystem->Remove( aId ); + RemoveFromContainer( aId ); + } + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::SetState +// ----------------------------------------------------------------------------- +// +void CPhoneRecoverySystem::SetState( TRecoveryId aId, CTeleRecoverySystem::TRecoveryState aState ) + { + iRecoverySystem->SetState( + aId, + aState ); + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::ResetPending +// ----------------------------------------------------------------------------- +// +void CPhoneRecoverySystem::ResetPending() + { + iRecoverySystem->ResetPending(); + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::RecoverNow +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CPhoneRecoverySystem::RecoverNow( TRecoveryId aId, + TRecoveryPriority aPriority, + TBool aAllSteps ) + { + __ASSERT_DEBUG( iRecoverySystem, Panic( EPhoneUtilsInvariant ) ); + + if ( !iRecoverySystem ) + { + TRAPD( error, iRecoverySystem = CreateRecoverySystemL() ) + if( error != KErrNone ) + { + return error; + } + } + return iRecoverySystem->RecoverNow( aId, aPriority, aAllSteps ); + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::EnablePreconditionL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneRecoverySystem::EnablePreconditionL() + { + __ASSERT_DEBUG( iRecoverySystem, Panic( EPhoneUtilsInvariant ) ); + + if ( !iRecoverySystem ) + { + iRecoverySystem = CreateRecoverySystemL(); + } + + iRecoverySystem->EnablePrecondition(); + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::AddIdToContainer +// ----------------------------------------------------------------------------- +// +void CPhoneRecoverySystem::AddIdToContainer( TRecoveryId aId ) + { + __ASSERT_DEBUG( iIdContainer.Count() == KIdContainerSize, Panic( EPhoneUtilsInvariant ) ); + for( TInt i = 0; i < KIdContainerSize; i++ ) + { + if( iIdContainer[ i ] == KEmptySlot ) + { + iIdContainer[ i ] = aId; + return; + } + } + + // All slots checked, no space - throw exception + throw KErrNoSpace; + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::RemoveFromContainer +// ----------------------------------------------------------------------------- +// +void CPhoneRecoverySystem::RemoveFromContainer( TRecoveryId aId ) + { + __ASSERT_DEBUG( iIdContainer.Count() == KIdContainerSize, Panic( EPhoneUtilsInvariant ) ); + for( TInt i = 0; i < KIdContainerSize; i++ ) + { + if( iIdContainer[ i ] == aId ) + { + iIdContainer[ i ] = KEmptySlot; + } + } + } + +// ----------------------------------------------------------------------------- +// CPhoneRecoverySystem::RemoveAllIdsFromContainer +// ----------------------------------------------------------------------------- +// +void CPhoneRecoverySystem::RemoveAllIdsFromContainer() + { + __ASSERT_DEBUG( iIdContainer.Count() == KIdContainerSize, Panic( EPhoneUtilsInvariant ) ); + for( TInt i = 0; i < KIdContainerSize; i++ ) + { + if( iIdContainer[ i ] != KEmptySlot ) + { + RemoveId( iIdContainer[ i ] ); + } + } + } + +// End of File