diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfwplugins/cenrepsourceplugin/src/cenrephandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfwplugins/cenrepsourceplugin/src/cenrephandler.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,215 @@ +/* +* Copyright (c) 2007-2007 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: CCenRepHandler class implementation. +* +*/ + + +#include +#include +#include + +#include "cenrephandler.h" +#include "cenrepattributesmasked.h" +#include "cenrepattributesnonmasked.h" +#include "cenreptrace.h" +// #include "cenrepsourceplugintester.h" + +// ======== LOCAL FUNCTIONS ========= + +// ======== MEMBER FUNCTIONS ======== + +CCenRepHandler* CCenRepHandler::NewL( + MCFContextInterface& aCF, + CCFContextSourceSettingArray& aSettings, + TInt aIndex) + { + FUNC_LOG; + + CCenRepHandler* self = new (ELeave) CCenRepHandler(); + CleanupStack::PushL( self ); + self->ConstructL( aCF, aSettings, aIndex); + CleanupStack::Pop( self ); + return self; + } + +void CCenRepHandler::ConstructL( MCFContextInterface& aCF, + CCFContextSourceSettingArray& aSettings, + TInt aIndex ) + { + FUNC_LOG; + + TUid repositoryUid = TUid::Null(); + TUint32 repositoryInt( 0 ); + + const RKeyValueArray& attrArray = aSettings.Item( aIndex ).Attributes(); + TInt attrCount = attrArray.Count(); + + // Find attribute values + for( TInt i = 0; i < attrCount; i++ ) + { + if ( attrArray[i]->Key().CompareF( KUID ) == KErrNone ) + { + TInt err = CCenRepAttributes::ConvertToHex( attrArray[i]->Value(), + repositoryInt ); + User::LeaveIfError( err ); + repositoryUid = TUid::Uid( repositoryInt ); + } + else if ( attrArray[i]->Key().CompareF( KMode ) == KErrNone ) + { + if ( attrArray[i]->Value().CompareF( KMasked ) == KErrNone ) + { + iCenRepAttributes = CCenRepAttributesMasked::NewL( aCF, aSettings ); + } + else if ( attrArray[i]->Value().CompareF( KNonMasked ) == KErrNone ) + { + iCenRepAttributes = CCenRepAttributesNonMasked::NewL( aCF, aSettings ); + } + else + { + User::Leave( KErrNotSupported ); + } + iKey = iCenRepAttributes->InitCenRepKeyL( aIndex ); + } + } + + iCrep = CRepository::NewL( repositoryUid ); + + QueryAndUpdateContext(); + + // Test + + /* + iTester = CCenRepSourcePluginTester::NewL( this ); + iTester->StartTimer(); + */ + + TInt err = iCrep->NotifyRequest( iKey, iStatus ); + if( err == KErrNone ) + { + SetActive(); + } + } + +CCenRepHandler::CCenRepHandler(): + CActive( CActive::EPriorityStandard ) + { + FUNC_LOG; + + CActiveScheduler::Add( this ); + } + +CCenRepHandler::~CCenRepHandler() + { + FUNC_LOG; + + Cancel(); + delete iCenRepAttributes; + delete iCrep; + // delete iTester; + } + +// --------------------------------------------------------------------------- +// CCenRepHandler::RunL +// --------------------------------------------------------------------------- +// +void CCenRepHandler::RunL() + { + FUNC_LOG; + + TInt err( KErrGeneral ); + + // Test + /* + vvalue = 0x1; + iCenRepAttributes->UpdateContext( vvalue ); + + vvalue = 0xb; + iCenRepAttributes->UpdateContext( vvalue ); + */ + // End of test + + TInt tmpStat = iStatus.Int(); + INFO_1( "CCenRepHandler::RunL: iStatus == %d", tmpStat ); + + if ( tmpStat > 0 ) + { + QueryAndUpdateContext(); + err = iCrep->NotifyRequest( iKey, iStatus ); + } + else + { + err = iCrep->NotifyRequest( iKey, iStatus ); + } + + INFO_1( "Error code of Central Repository NotifyRequest access: %d", err ); + + if ( err != KErrAlreadyExists ) + { + User::LeaveIfError( err ); + } + + SetActive(); + } + +// --------------------------------------------------------------------------- +// CCenRepHandler::RunError +// --------------------------------------------------------------------------- +// +TInt CCenRepHandler::RunError( TInt aError ) + { + FUNC_LOG; + + INFO_1( "CCenRepHandler::RunError: aError == %d", aError ); + + // Avoid Panic in CActiveScheduler + aError = KErrNone; + + return aError; + } + +// --------------------------------------------------------------------------- +// CCenRepHandler::DoCancel +// --------------------------------------------------------------------------- +// +void CCenRepHandler::DoCancel() + { + FUNC_LOG; + + iCrep->NotifyCancel( iKey ); + } + +// --------------------------------------------------------------------------- +// CCenRepHandler::QueryAndUpdateContext +// --------------------------------------------------------------------------- +// +void CCenRepHandler::QueryAndUpdateContext() + { + FUNC_LOG; + + TInt value( 0 ); + + TInt err = iCrep->Get( iKey, value ); + + INFO_1( "Error code of Central Repository get access: %d", err ); + + if( err == KErrNone ) + { + TRAPD( updateErr, iCenRepAttributes->UpdateContextL( value ) ); + + INFO_1( "Leave code of CenRepAttributes->UpdateContextL: %d", updateErr ); + + updateErr = updateErr; // Make compiler happy + } + }