--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/srvsrc/aknssrviconconfigmap.cpp Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2008 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: Contains icon configuration information.
+*
+*/
+
+#include <centralrepository.h>
+
+#include "aknssrviconconfigmap.h"
+
+// @todo - we should get this from somewhere.
+const TUid KUidIconCaptionRepository = { 0x1028583d };
+
+// Highest 8 bit tell the application number which has been configured.
+// This is basically a running series, starting from zero.
+const TUint32 KAknsSrvAppBits = 0xFF000000;
+
+// Lowest 16 bits tell the language variant strings and icons.
+const TUint32 KAknsSrvLanguageBits = 0x0000FFFF;
+
+// Partial key to find the configured apps.
+const TUint32 KAknsSrvUidKey = 0x00FFFFFF;
+
+// How many icons have been configured for this application.
+const TUint8 KAknsSrvIconCount = 0x02;
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// Symbian 1st phase constructor.
+// ---------------------------------------------------------------------------
+//
+CAknsSrvIconConfigMap* CAknsSrvIconConfigMap::NewL()
+ {
+ CAknsSrvIconConfigMap* self = new( ELeave ) CAknsSrvIconConfigMap;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CAknsSrvIconConfigMap::~CAknsSrvIconConfigMap()
+ {
+ DeleteCurrentIconMap();
+ }
+
+// ---------------------------------------------------------------------------
+// Checks if the given application UID is found from array.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvIconConfigMap::IsIconConfiguredL(
+ TUid aApplicationUid, TBool& aIsConfigured )
+ {
+ if ( iCurrentLanguage != User::Language() )
+ {
+ CreateAndParseRepositoryL();
+ }
+
+ TInt found = iAppUidArray.Find( aApplicationUid.iUid );
+ if ( found == KErrNotFound )
+ {
+ aIsConfigured = EFalse;
+ }
+ else
+ {
+ aIsConfigured = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Destroys the application array.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvIconConfigMap::DeleteCurrentIconMap()
+ {
+ iAppUidArray.Reset();
+ iAppUidArray.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// Reads and parses cenrep configuration file.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvIconConfigMap::ReadAndParseConfigFileL( CRepository* aRepository )
+ {
+ DeleteCurrentIconMap();
+
+ RArray<TUint32> appUidKeys;
+ CleanupClosePushL( appUidKeys );
+
+ // Find all appUID keys that have been configured.
+ // error ignored, array is empty in error cases
+ aRepository->FindL( KAknsSrvUidKey, ~KAknsSrvAppBits, appUidKeys );
+ TInt appCount = appUidKeys.Count();
+
+ for (TInt appIndex = 0; appIndex < appCount; appIndex++)
+ {
+ TUint32 key = appUidKeys[appIndex];
+ TInt appUidVal = 0;
+ User::LeaveIfError( aRepository->Get( key, appUidVal ) );
+
+ RArray<TUint32> applicationKeys;
+ // error ignored, array is empty in error cases
+ // Find all configuration keys for this appUid.
+ aRepository->FindL( key, KAknsSrvAppBits, applicationKeys );
+ TInt appKeyCount = applicationKeys.Count();
+
+ for (TInt appKeyIndex = 0; appKeyIndex < appKeyCount; appKeyIndex++)
+ {
+ // Each application might have the following configured for each language
+ // - [0..1] short caption (bits 32..25)
+ // - [0..1] long caption (bits 24..17)
+ // - [0..1] number of icons (bits 16..9)
+ // - [0..n] path of icon filename (bits 8..1)
+ TUint32 applicationConfigKey = applicationKeys[appKeyIndex];
+ TUint8 iconNumberblock = applicationConfigKey >> 16;
+
+ if ( iconNumberblock == KAknsSrvIconCount )
+ {
+ TLanguage language =
+ static_cast<TLanguage>(applicationConfigKey & KAknsSrvLanguageBits);
+ TInt noOfIcons = 0;
+ User::LeaveIfError( aRepository->Get( applicationConfigKey, noOfIcons ) );
+ if ( (noOfIcons > 0 ) && language == iCurrentLanguage )
+ {
+ iAppUidArray.Append( appUidVal );
+ break; // once appUid has been added, we can skip to next app.
+ }
+ }
+ }
+ }
+ iAppUidArray.Sort();
+ CleanupStack::PopAndDestroy(&appUidKeys);
+ }
+
+// ---------------------------------------------------------------------------
+// Creates, reads and parses central repository.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvIconConfigMap::CreateAndParseRepositoryL()
+ {
+ CRepository* iconRepository = CRepository::NewLC( KUidIconCaptionRepository );
+ ReadAndParseConfigFileL( iconRepository );
+ CleanupStack::PopAndDestroy( iconRepository );
+ }
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CAknsSrvIconConfigMap::CAknsSrvIconConfigMap()
+ {
+ iCurrentLanguage = User::Language();
+ }
+
+// ---------------------------------------------------------------------------
+// Symbian second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvIconConfigMap::ConstructL()
+ {
+ TRAP_IGNORE( CreateAndParseRepositoryL() );
+ }
+
+// End of file