diff -r 000000000000 -r 72b543305e3a messagingappbase/msgavkon/muiu_internal/flagger/src/MuiuFlagger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/msgavkon/muiu_internal/flagger/src/MuiuFlagger.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,238 @@ +/* +* 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: MuiuFlagger implementation +* +*/ + + + + +// INCLUDE FILES +#include +#include // Feature Manager +#include // CRepository +#include "MuiuFlagger.h" // CMuiuFlags + + +// EXTERNAL DATA STRUCTURES +// EXTERNAL FUNCTION PROTOTYPES +// CONSTANTS +const TInt KMuiuFlaggerMaxFlags = 64; +_LIT( KMuiuFlaggerPanic, "MuiuFlagger" ); + +// MACROS +// LOCAL CONSTANTS AND MACROS +// MODULE DATA STRUCTURES +// LOCAL FUNCTION PROTOTYPES +// FORWARD DECLARATIONS + +// ============================ MEMBER FUNCTIONS ============================== + + +// ------------------------------ CONSTRUCTORS -------------------------------- + + +// ---------------------------------------------------------------------------- +// CMuiuFlags::CMuiuFlags() +// ---------------------------------------------------------------------------- +// +CMuiuFlags::CMuiuFlags() + { + } + +// ---------------------------------------------------------------------------- +// CMuiuFlags::~CMuiuFlags() +// ---------------------------------------------------------------------------- +// +EXPORT_C CMuiuFlags::~CMuiuFlags() + { + } + +// ---------------------------------------------------------------------------- +// CMuiuFlags::NewL() +// ---------------------------------------------------------------------------- +// +EXPORT_C CMuiuFlags* CMuiuFlags::NewL( + const TMuiuGlobalFeatureArray* aGlobalFeatures, + const TMuiuLocalFeatureArray* aLocalFeatures, + const TMuiuFlagArray* aFlags ) + { + CMuiuFlags* self = NewLC( aGlobalFeatures, aLocalFeatures, aFlags ); + CleanupStack::Pop( self ); + + return self; + } + +// ---------------------------------------------------------------------------- +// CMuiuFlags::NewLC() +// ---------------------------------------------------------------------------- +// +EXPORT_C CMuiuFlags* CMuiuFlags::NewLC( + const TMuiuGlobalFeatureArray* aGlobalFeatures, + const TMuiuLocalFeatureArray* aLocalFeatures, + const TMuiuFlagArray* aFlags ) + { + CMuiuFlags* self = new ( ELeave ) CMuiuFlags(); + + CleanupStack::PushL( self ); + self->ConstructL( aGlobalFeatures, aLocalFeatures, aFlags ); + + return self; + } + + +// ---------------------------------------------------------------------------- +// CMuiuFlags::ConstructL() +// ---------------------------------------------------------------------------- +// +void CMuiuFlags::ConstructL( + const TMuiuGlobalFeatureArray* aGlobalFeatures, + const TMuiuLocalFeatureArray* aLocalFeatures, + const TMuiuFlagArray* aFlags ) + { + if ( aGlobalFeatures ) + { + PrepareGlobalFeaturesL( *aGlobalFeatures ); + } + + // Local features + if ( aLocalFeatures ) + { + PrepareLocalFeaturesL( *aLocalFeatures ); + } + + // Normal flags + if ( aFlags ) + { + PrepareGeneralFlags( *aFlags ); + } + } + + +// ----------------------------- FLAG HANDLERS -------------------------------- + + +// ---------------------------------------------------------------------------- +// CMuiuFlags::PrepareGlobalFeaturesL() +// ---------------------------------------------------------------------------- +// +void CMuiuFlags::PrepareGlobalFeaturesL( + const TMuiuGlobalFeatureArray& aGlobalFeatures ) + { + TUint64 feature = aGlobalFeatures.Count(); + + // Compare the number of given features against the maximum number + // of featureflags possible. Panic if the number of flags has been + // exceeded. + __ASSERT_ALWAYS( + feature <= KMuiuFlaggerMaxFlags, + User::Panic( KMuiuFlaggerPanic, KErrOverflow ) ); + + FeatureManager::InitializeLibL(); + + // Check all the features in array from feature manager and set + // the flags in the same order as in the array + while ( feature-- > 0 ) + { + ChangeGF( feature, + FeatureManager::FeatureSupported( + aGlobalFeatures[feature] ) ); + } + + FeatureManager::UnInitializeLib(); + } + +// ---------------------------------------------------------------------------- +// CMuiuFlags::PrepareLocalFeaturesL() +// ---------------------------------------------------------------------------- +// +void CMuiuFlags::PrepareLocalFeaturesL( + const TMuiuLocalFeatureArray& aLocalFeatures ) + { + TUint64 feature = aLocalFeatures.Count(); + + // Compare the number of given features against the maximum number + // of featureflags possible. Panic if the number of flags has been + // exceeded. + __ASSERT_ALWAYS( + feature <= KMuiuFlaggerMaxFlags, + User::Panic( KMuiuFlaggerPanic, KErrOverflow ) ); + + TInt value = 0; + + // Get Next CenRep session + while ( feature-- > 0 ) + { + // Create temporary structure for the feature + TMuiuLocalFeatureItem localFeature = aLocalFeatures[feature]; + + // Create the connection + CRepository* cenrep = + CRepository::NewLC( localFeature.iUid ); + + // Get the value from repository + User::LeaveIfError( + cenrep->Get( localFeature.iKeyId, value ) ); + + // Define the feature flag + if ( !localFeature.iIsFlag ) + { + // The value in iFlag is actually an index, so roll on to right + // and mask the other flags + ChangeLF( feature, ( value >> localFeature.iFlag ) & 0x01 ); + } + else + { + // The value in iFlag is a real flag, so do the normal + // and -operation and check if the bit is on + ChangeLF( feature, ( value & localFeature.iFlag ) > 0 ); + } + + // Destroy the object + CleanupStack::PopAndDestroy( cenrep ); + cenrep = NULL; + } + } + + +// ---------------------------------------------------------------------------- +// CMuiuFlags::PrepareGeneralFlags() +// ---------------------------------------------------------------------------- +// +void CMuiuFlags::PrepareGeneralFlags( + const TMuiuFlagArray& aFlags ) + { + TUint64 feature = aFlags.Count(); + + // Compare the number of given features against the maximum number + // of featureflags possible. Panic if the number of flags has been + // exceeded. + __ASSERT_ALWAYS( + feature <= KMuiuFlaggerMaxFlags, + User::Panic( KMuiuFlaggerPanic, KErrOverflow ) ); + + // Check all the flags in array and set the flags in the + // same order as in the array + while ( feature-- > 0 ) + { + ChangeFlag( feature, + FeatureManager::FeatureSupported( + aFlags[feature] ) ); + } + } + + +// End of File + +