--- a/customization/ThemesAdapter/src/ThemesAdapter.cpp Tue Feb 02 00:03:17 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1276 +0,0 @@
-/*
-* 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: DM Themes Adapter
-*
-*/
-
-
-/*
-
-./Customization -+--> Themes -+--> AvailableThemes -+--> <X> * -+--> ID
- | |
- | |--> Name
- | |
- | |--> Version
- | |
- | |--> Data
- | |
- | |--> InstallOptions
- |
- |--> ActiveTheme
-
-*/
-
-
-#include <badesca.h>
-#include <fbs.h>
-#include <imcvcodc.h>
-#include "debug.h"
-#include "ThemesAdapter.h"
-#include "ThemesList.h"
-#include "nsmldmuri.h"
-#include <implementationproxy.h> // For TImplementationProxy definition
-#include <f32file.h>
-#include <e32def.h>
-#include "FileCoderB64.h"
-#include "aminstalloptions.h"
-#include "AknsSrvClient.h"
-#include <AknSkinsInternalCRKeys.h>
-#include <centralrepository.h>
-#include <utf.h>
-//#ifdef __SAP_POLICY_MANAGEMENT
-#include <PolicyEngineXACML.h>
-#include <SettingEnforcementInfo.h>
-//#endif
-#include <featmgr.h>
-
-
-_LIT( KThemesAdapterTmpInstallPath, "c:\\system\\temp\\DMTheme.sis" );
-_LIT8(KOpenBrace, "(");
-_LIT8(KCloseBrace, ")");
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter* CThemesAdapter::NewL( )
-// ------------------------------------------------------------------------------------------------
-CThemesAdapter* CThemesAdapter::NewL( MSmlDmCallback* aDmCallback )
- {
- RDEBUG("CThemesAdapter::NewL(): begin");
-
- CThemesAdapter* self = NewLC( aDmCallback );
- CleanupStack::Pop();
- return self;
- }
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter* CThemesAdapter::NewLC( )
-// ------------------------------------------------------------------------------------------------
-CThemesAdapter* CThemesAdapter::NewLC( MSmlDmCallback* aDmCallback )
- {
- RDEBUG("CThemesAdapter::NewLC(): begin");
- CThemesAdapter* self = new( ELeave ) CThemesAdapter( aDmCallback );
- CleanupStack::PushL( self );
- self->ConstructL( );
- return self;
- }
-
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::CThemesAdapter()
-// ------------------------------------------------------------------------------------------------
-CThemesAdapter::CThemesAdapter( MSmlDmCallback* aDmCallback )
- : CTARMDmAdapter( aDmCallback )
- , iCallBack( aDmCallback )
- , iThemes( 0 )
- {
- RDEBUG("CThemesAdapter::CThemesAdapter(): begin");
- }
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::ConstructL()
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::ConstructL( )
- {
- TRAPD( errf, FeatureManager::InitializeLibL() );
- if( errf != KErrNone )
- {
- User::Leave(errf);
- }
-
- if(FeatureManager::FeatureSupported(KFeatureIdSapThemesAdapter))
- {
- RDEBUG("CThemesAdapter::ConstructL(): begin");
- iThemes = CThemesList::NewL();
- }
- else
- {
- FeatureManager::UnInitializeLib();
- User::Leave( KErrNotSupported );
- }
- }
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::~CThemesAdapter()
-// ------------------------------------------------------------------------------------------------
-
-
-CThemesAdapter::~CThemesAdapter()
- {
- RDEBUG("CThemesAdapter::~CThemesAdapter(): begin");
-
- FeatureManager::UnInitializeLib();
- delete iThemes;
- delete iActiveTheme;
- }
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::DDFVersionL()
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::DDFVersionL( CBufBase& aDDFVersion )
- {
- RDEBUG("CThemesAdapter::DDFVersionL(): begin");
- aDDFVersion.InsertL( 0, KThemesAdapterDDFVersion );
- }
-
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::DDFStructureL()
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
- {
- RDEBUG( "CThemesAdapter::DDFStructureL(): begin" );
-
- TSmlDmAccessTypes accessTypesGet;
- accessTypesGet.SetGet();
-
- TSmlDmAccessTypes accessTypesAddGet;
- accessTypesAddGet.SetAdd();
- accessTypesAddGet.SetGet();
-
- TSmlDmAccessTypes accessTypesGetReplace;
- accessTypesGetReplace.SetGet();
- accessTypesGetReplace.SetReplace();
-
- TSmlDmAccessTypes accessTypesDeleteGetReplace;
- accessTypesDeleteGetReplace.SetDelete();
- accessTypesDeleteGetReplace.SetGet();
- accessTypesDeleteGetReplace.SetReplace();
-//sf- For testing:
- accessTypesDeleteGetReplace.SetAdd();
-//sf- For testing ends.
-
- TSmlDmAccessTypes accessTypesReplace;
- accessTypesReplace.SetReplace();
-
- /*
- Node: ./Customization
- This interior node is the common parent to all customization..
- Status: Required
- Occurs: One
- Format: Node
- Access Types: Get
- Values: N/A
- */
- // Customization
- MSmlDmDDFObject& customization = aDDF.AddChildObjectL( KThemesAdapterCustomization );
- FillNodeInfoL(customization, accessTypesGet, MSmlDmDDFObject::EOne, MSmlDmDDFObject::EPermanent,
- MSmlDmDDFObject::ENode, KThemesAdapterCustomizationD, ETrue );
-
- /*
- Node: ./Customization/Themes
-
- Status: Required
- Occurs: One
- Format: Node
- Access Types: Get
- Values: N/A
- */
- MSmlDmDDFObject& themes = customization.AddChildObjectL( KThemesAdapterThemes );
- FillNodeInfoL( themes, accessTypesGet, MSmlDmDDFObject::EOne, MSmlDmDDFObject::EPermanent,
- MSmlDmDDFObject::ENode, KThemesAdapterThemesD, ETrue );
-
- /*
- Node: ./Customization/Themes/AvailableThemes
-
- Status: Required
- Occurs: One
- Format: Node
- Access Types: Add, Get
- Values: N/A
- */
- MSmlDmDDFObject& availableThemes = themes.AddChildObjectL( KThemesAdapterAvailableThemes);
- FillNodeInfoL( availableThemes, accessTypesAddGet, MSmlDmDDFObject::EOne, MSmlDmDDFObject::EPermanent,
- MSmlDmDDFObject::ENode, KThemesAdapterAvailableThemesD, ETrue );
-
- /*
- Node: ./Customization/Themes/AvailableThemes/<X>
-
- Status: Required
- Occurs: Zero or more
- Format: Node
- Access Types: Delete, Get, Replace
- Values: N/A
- */
- MSmlDmDDFObject& oneCurTheme = availableThemes.AddChildObjectGroupL();
- FillNodeInfoL( oneCurTheme, accessTypesDeleteGetReplace, MSmlDmDDFObject::EZeroOrMore, MSmlDmDDFObject::EDynamic,
- MSmlDmDDFObject::ENode, KThemesAdapterDynamicNodeD, ETrue );
-
- /*
- Node: ./Customization/Themes/AvailableThemes/<X>/ID
-
- Status: Required
- Occurs: One
- Format: Chr
- Access Types: Get
- Values: N/A
- */
- MSmlDmDDFObject& id = oneCurTheme.AddChildObjectL( KThemesAdapterXId );
- FillNodeInfoL( id, accessTypesGet, MSmlDmDDFObject::EOne, MSmlDmDDFObject::EPermanent,
- MSmlDmDDFObject::EChr, KThemesAdapterXIdD, ETrue );
-
- /*
- Node: ./Customization/Themes/AvailableThemes/<X>/Name
-
- Status: Optional
- Occurs: One
- Format: Chr
- Access Types: Get, Replace
- Values: N/A
- */
- MSmlDmDDFObject& name = oneCurTheme.AddChildObjectL( KThemesAdapterXName );
- FillNodeInfoL( name, accessTypesGetReplace, MSmlDmDDFObject::EZeroOrOne, MSmlDmDDFObject::EPermanent,
- MSmlDmDDFObject::EChr, KThemesAdapterXNameD, ETrue );
-
- /*
- Node: ./Customization/Themes/AvailableThemes/<X>/Version
-
- Status: Optional
- Occurs: One
- Format: Chr
- Access Types: Get, Replace
- Values: N/A
- */
- MSmlDmDDFObject& version = oneCurTheme.AddChildObjectL( KThemesAdapterXVersion );
- FillNodeInfoL( version, accessTypesGetReplace, MSmlDmDDFObject::EZeroOrOne, MSmlDmDDFObject::EPermanent,
- MSmlDmDDFObject::EChr, KThemesAdapterXVersionD, ETrue );
-
- /*
- Node: ./Customization/Themes/AvailableThemes/<X>/Data
-
- Status: Required
- Occurs: One
- Format: Chr
- Access Types: Get
- Values: N/A
- */
- MSmlDmDDFObject& data = oneCurTheme.AddChildObjectL( KThemesAdapterXData );
- FillNodeInfoL( data, accessTypesReplace, MSmlDmDDFObject::EOne, MSmlDmDDFObject::EPermanent,
- MSmlDmDDFObject::EBin, KThemesAdapterXDataD, ETrue );
-
-
- /*
- Node: ./Customization/Themes/AvailableThemes/<X>/InstallOptions
-
- Status: ?
- Occurs: One
- Format: Chr
- Access Types: Get
- Values: N/A
- */
- MSmlDmDDFObject& installOptions = oneCurTheme.AddChildObjectL( KThemesAdapterXInstallOptions );
- FillNodeInfoL( installOptions, accessTypesReplace, MSmlDmDDFObject::EOne, MSmlDmDDFObject::EPermanent,
- MSmlDmDDFObject::EXml, KThemesAdapterXInstallOptionsD, ETrue );
-
-
- /*
- Node: ./Customization/Themes/ActiveTheme
-
- Status: Required
- Occurs: One
- Format: Chr
- Access Types: Get, Replace
- Values: N/A
- */
- MSmlDmDDFObject& activeTheme = themes.AddChildObjectL( KThemesAdapterActiveTheme );
- FillNodeInfoL( activeTheme, accessTypesGetReplace, MSmlDmDDFObject::EOne, MSmlDmDDFObject::EPermanent,
- MSmlDmDDFObject::EChr, KThemesAdapterActiveThemeD, ETrue );
-
- }
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::UpdateLeafObjectL()
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& /*aLUID*/, const TDesC8& aObject, const TDesC8& /*aType*/, const TInt aStatusRef )
- {
- RDEBUG( "CThemesAdapter::UpdateLeafObjectL(): begin" );
-
- TError ret = EOk ;
-
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
- TNodeId nodeId = NodeId( uriPtrc );
-#else
- TNodeId nodeId = NodeId( aURI );
-#endif
-
- switch( nodeId )
- {
- case ENodeXName:
- if (aObject.Length() > 0)
- {
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- iCallBack->SetMappingL( uriPtrc, aObject );
-#else
- iCallBack->SetMappingL( aURI, aObject );
-#endif
- }
- else
- {
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- iCallBack->SetMappingL( uriPtrc, _L8(" ") );
-#else
- iCallBack->SetMappingL( aURI, _L8(" ") );
-#endif
- }
- break;
-
- case ENodeXVersion:
- if (aObject.Length() > 0)
- {
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- iCallBack->SetMappingL( uriPtrc, aObject );
-#else
- iCallBack->SetMappingL( aURI, aObject );
-#endif
- }
- else
- {
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- iCallBack->SetMappingL( uriPtrc, _L8(" ") );
-#else
- iCallBack->SetMappingL( aURI, _L8(" ") );
-#endif
- }
- break;
-
- case ENodeXData:
- {
- RFs fs;
- User::LeaveIfError( fs.Connect() );
- CleanupClosePushL( fs );
-
- TFileCoderB64 decoder;
- TPtrC fileName( KThemesAdapterTmpInstallPath );
-
- TBool isEncoded = TFileCoderB64::CheckB64Encode( aObject );
- if( isEncoded )
- {
- decoder.DecodeToL( aObject, fileName );
- }
- else
- {
- // aData is original data, save it to fileName
- RFile file;
- User::LeaveIfError( file.Replace( fs, fileName, EFileWrite));
- CleanupClosePushL( file );
- file.Write( aObject );
-
- CleanupStack::PopAndDestroy(); // file
- }
-
- TBuf8<KMaxUidName+20> sisPkgUid;
- TBuf8<KAknsPkgIDDesSize> themePkgId;
-
- // Install using options if given and otherwise with default options
- ret = iThemes->InstallThemeL( fileName, sisPkgUid, themePkgId );
-
- // Set LUIDs for theme and theme/id
- if (ret == KErrNone)
- {
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 parentURI = NSmlDmURI::ParentURI( uriPtrc );
-#else
- TPtrC8 parentURI = NSmlDmURI::ParentURI( aURI );
-#endif
- HBufC8* dataURI = HBufC8::NewLC( parentURI.Length() + KThemesAdapterXData().Length() + 1 );
- HBufC8* idURI = HBufC8::NewLC( parentURI.Length() + KThemesAdapterXId().Length() + 1 );
- dataURI->Des().Copy( parentURI );
- dataURI->Des().Append( KSlash );
- dataURI->Des().Append( KThemesAdapterXData );
- idURI->Des().Copy( parentURI );
-
- iCallBack->SetMappingL( *dataURI, sisPkgUid );
- iCallBack->SetMappingL( *idURI, themePkgId );
-
- CleanupStack::PopAndDestroy( idURI );
- CleanupStack::PopAndDestroy( dataURI );
-
- if( iActiveTheme != NULL )
- {
- TPtrC8 pid = NSmlDmURI::LastURISeg( *iActiveTheme );
- HBufC8* themeRef = HBufC8::NewLC( KThemesAdapterActiveThemeRef().Length() + pid.Length() + 1 );
- themeRef->Des().Copy( KThemesAdapterActiveThemeRef );
- themeRef->Des().Append( pid );
- HBufC8* luid = iCallBack->GetLuidAllocL( *themeRef );
- CleanupStack::PushL( luid );
-
- if (luid->Length() > 1)
- {
- pid.Set( *luid );
- ret = iThemes->SetActiveThemeL( pid );
- delete iActiveTheme;
- iActiveTheme = NULL;
- }
-
- CleanupStack::PopAndDestroy( luid );
- CleanupStack::PopAndDestroy( themeRef );
-
- }
-
- }
-
- // Remove temporary installations file
- fs.Delete( fileName );
- CleanupStack::PopAndDestroy( &fs );
- }
- break;
-
- case ENodeXInstallOptions:
- ret = iThemes->SetInstallOptionsL( aObject );
- break;
-
- case ENodeActiveTheme:
- {
- if( iActiveTheme != NULL )
- {
- delete iActiveTheme;
- iActiveTheme = NULL;
- }
- iActiveTheme = aObject.AllocL();
- TPtrC8 pid = NSmlDmURI::LastURISeg( aObject );
- HBufC8* themeRef = HBufC8::NewLC( KThemesAdapterActiveThemeRef().Length() + pid.Length() + 1 );
- themeRef->Des().Copy( KThemesAdapterActiveThemeRef );
- themeRef->Des().Append( pid );
- HBufC8* luid = iCallBack->GetLuidAllocL( *themeRef );
- CleanupStack::PushL( luid );
-
- if (luid->Length() > 1)
- {
- pid.Set( *luid );
- }
- ret = iThemes->SetActiveThemeL( pid );
- if( ret == MSmlDmAdapter::EOk )
- {
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- iCallBack->SetMappingL( uriPtrc, *themeRef );
-#else
- iCallBack->SetMappingL( aURI, *themeRef );
-#endif
- }
- else
- {
- ret = EError;
- }
-
- delete iActiveTheme;
- iActiveTheme = NULL;
-
- CleanupStack::PopAndDestroy( luid );
- CleanupStack::PopAndDestroy( themeRef );
- }
- break;
-
- default:
- ret = EError;
- break;
- }
-
- iCallBack->SetStatusL( aStatusRef, ret );
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_UpdateLeafObjectL( const TDesC8& /*aURI*/, const TDesC8& /*aLUID*/, RWriteStream*& /*aStream*/, const TDesC8& /*aType*/, TInt aStatusRef )
- {
- RDEBUG( "CThemesAdapter::UpdateLeafObjectL(...RWriteStream...): begin" );
- TError ret = EError ;
- iCallBack->SetStatusL( aStatusRef, ret );
- }
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::DeleteObjectL( const TDesC& aURI, const TDesC& aLUID )
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_DeleteObjectL( const TDesC8& aURI, const TDesC8& /*aLUID*/, const TInt aStatusRef)
- {
- RDEBUG( "CThemesAdapter::DeleteObjectL(): begin" );
-
- TError ret = EOk ;
-
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
- TNodeId nodeId = NodeId( uriPtrc );
-#else
- TNodeId nodeId = NodeId( aURI );
-#endif
-
- switch( nodeId )
- {
- case ENodeX:
- {
- TUint pkgUid = 0;
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- HBufC8* dataURI = HBufC8::NewLC( uriPtrc.Length() + KThemesAdapterXData().Length() + 1 );
- dataURI->Des().Append( uriPtrc );
-#else
- HBufC8* dataURI = HBufC8::NewLC( aURI.Length() + KThemesAdapterXData().Length() + 1 );
- dataURI->Des().Append( aURI );
-#endif
-
- HBufC8* themeId = iCallBack->GetLuidAllocL( *dataURI );
- CleanupStack::PushL( themeId );
-
- dataURI->Des().Append( KSlash );
- dataURI->Des().Append( KThemesAdapterXData );
- HBufC8* luid = iCallBack->GetLuidAllocL( *dataURI );
- CleanupStack::PushL( luid );
-
- if (luid->CompareF(KNullDesC8) == 0 )
- {
- ret = ENotFound;
- CleanupStack::PopAndDestroy( 3 ); //luid, themeId, dataURI
- break;
- }
-
- TLex8 parser( *luid );
- if ((parser.Get() == '[') &&
- (parser.Val( pkgUid, EHex ) == KErrNone) &&
- (parser.Get() == ']'))
- {
- //luid for getting index
- ret = iThemes->DeleteThemeL( *themeId, TUid::Uid( pkgUid ),luid);
- }
- else
- {
- ret = ENotAllowed;
- }
-
- CleanupStack::PopAndDestroy( 3 );
-
- }
- break;
-
- default:
- ret = EError;
- break;
- }
-
- iCallBack->SetStatusL( aStatusRef, ret );
- }
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::GetLeafObjectL( const TDesC& aURI, const TDesC& aLUID, const TDesC& aType, CBufBase& aObject, TError& aRet )
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::GetLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, const TDesC8& /*aType*/, CBufBase& aResult, TError& aRet )
- {
- RDEBUG("CThemesAdapter::GetLeafObjectL(): begin");
- aRet = EOk;
-
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
- TNodeId nodeId = NodeId( uriPtrc );
- TPtrC8 parentURI = NSmlDmURI::ParentURI( uriPtrc );
-#else
- TNodeId nodeId = NodeId( aURI );
- TPtrC8 parentURI = NSmlDmURI::ParentURI( aURI );
-#endif
-
- TPtrC8 pid = NSmlDmURI::LastURISeg( parentURI );
-
- HBufC8* parentLUID = iCallBack->GetLuidAllocL(parentURI);
- CleanupStack::PushL(parentLUID);
-
- //Check for Active theme; if it is not, then only check for DM installed parent node
- if (nodeId != ENodeActiveTheme && parentLUID->CompareF(KNullDesC8) == 0)
- {
- aRet = ENotFound;
- }
-
- if (aRet == EOk)
- {
- HBufC8* trimmedLUID = aLUID.AllocL();
- CleanupStack::PushL(trimmedLUID);
- trimmedLUID->Des().Trim();
-
- switch (nodeId)
- {
- case ENodeXId:
- if (trimmedLUID->Length() > 0 && *trimmedLUID != *parentLUID)
- {
- aResult.InsertL(aResult.Size(), aLUID);
- }
- else
- {
- if (parentLUID->Length() > 1)
- {
- pid.Set(*parentLUID);
- }
- aRet = iThemes->GetThemeIdL(pid, aResult);
- }
- break;
-
- case ENodeXName:
- {
-
- if (trimmedLUID->Length() > 0 && *trimmedLUID != *parentLUID)
- {
- aResult.InsertL(aResult.Size(), aLUID);
- }
- if (parentLUID->Length() > 1)
- {
- pid.Set(*parentLUID);
- aResult.InsertL(aResult.Size(), KOpenBrace);
- aRet = iThemes->GetThemeNameL(pid, aResult);
- aResult.InsertL(aResult.Size(), KCloseBrace);
- }
- }
- break;
-
- case ENodeXVersion:
- if (trimmedLUID->Length() > 0 && *trimmedLUID != *parentLUID)
- {
- aResult.InsertL(aResult.Size(), aLUID);
- }
- else
- {
- if (parentLUID->Length() > 1)
- {
- pid.Set(*parentLUID);
- }
- aRet = iThemes->GetThemeVersionL(pid, aResult);
- }
- break;
-
- case ENodeActiveTheme:
- {
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
- HBufC8* luid = iCallBack->GetLuidAllocL( uriPtrc );
-#else
- HBufC8* luid = iCallBack->GetLuidAllocL(aURI);
-#endif
- CleanupStack::PushL(luid);
-
- HBufC8* themePID = iCallBack->GetLuidAllocL(aLUID);
- CleanupStack::PushL(themePID);
- // Get the current active theme UID
- TAknsPkgIDBuf buf;
- CRepository* skinsRepository = CRepository::NewLC(
- KCRUidPersonalisation);
- TInt errCode = skinsRepository->Get(KPslnActiveSkinUid, buf);
-
- HBufC16* themePID16 = HBufC16::NewLC(themePID->Length());
- themePID16->Des().Copy(themePID->Des());
-
- if (themePID16->Compare(buf) == 0)
- {
- RDEBUG("CThemesAdapter::GetLeafObjectL(): UIDs MATCH ");
- aResult.InsertL(aResult.Size(), *luid);
- aResult.InsertL(aResult.Size(), KOpenBrace);
- aRet = iThemes->GetThemeNameL(*themePID, aResult);
- aResult.InsertL(aResult.Size(), KCloseBrace);
- }
- else
- {
- //means Active theme set by DM server is changed to some other theme
- //manually from settings
- RDEBUG(
- "CThemesAdapter::GetLeafObjectL(): UIDs Doesn't MATCH ");
- HBufC8* buf8 = HBufC8::NewLC(KAknsPkgIDDesSize);
- buf8->Des().Copy(buf);
- aRet = iThemes->GetThemeNameL(*buf8, aResult);
- CleanupStack::PopAndDestroy(buf8);
- }
- CleanupStack::PopAndDestroy(themePID16);
- CleanupStack::PopAndDestroy(skinsRepository);
- CleanupStack::PopAndDestroy(themePID);
- CleanupStack::PopAndDestroy(luid);
- }
- break;
-
- default:
- aRet = EError;
- break;
- }
-
- CleanupStack::PopAndDestroy(trimmedLUID);
- }
- CleanupStack::PopAndDestroy( parentLUID );
- }
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::FetchLeafObjectL( const TDesC& aURI, const TDesC& aLUID, const TDesC& aType, CBufBase& aObject )
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_FetchLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, const TDesC8& aType, const TInt aResultsRef, const TInt aStatusRef )
- {
- RDEBUG("CThemesAdapter::FetchLeafObjectL(): begin");
-
- TError ret = EOk ;
-
- CBufBase *result = CBufFlat::NewL( 128 );
- CleanupStack::PushL( result );
-
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
- GetLeafObjectL( uriPtrc, aLUID, aType, *result, ret );
-#else
- GetLeafObjectL( aURI, aLUID, aType, *result, ret );
-#endif
-
- if (ret == EOk)
- {
- iCallBack->SetResultsL( aResultsRef, *result, KThemesAdapterTextPlain() );
- }
-
- iCallBack->SetStatusL( aStatusRef, ret );
-
- CleanupStack::PopAndDestroy( result );
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_FetchLeafObjectSizeL( const TDesC8& aURI, const TDesC8& aLUID, const TDesC8& aType, TInt aResultsRef, TInt aStatusRef )
- {
- RDEBUG("CThemesAdapter::FetchLeafObjectSizeL(): begin");
-
- TError ret = EOk ;
-
- CBufBase *result = CBufFlat::NewL( 128 );
- CleanupStack::PushL( result );
-
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
- GetLeafObjectL( uriPtrc, aLUID, aType, *result, ret );
-#else
- GetLeafObjectL( aURI, aLUID, aType, *result, ret );
-#endif
-
- if (ret == EOk)
- {
- TBuf8<20> len;
- len.AppendNum( result->Size() );
- result->Reset();
- result->InsertL( 0, len );
-
- iCallBack->SetResultsL( aResultsRef, *result, KThemesAdapterTextPlain() );
- }
-
- iCallBack->SetStatusL( aStatusRef, ret );
-
- CleanupStack::PopAndDestroy( result );
- }
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::ChildURIListL( const TDesC& aURI, const TDesC& aParentLUID, const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList, CArrayFix<TPtrC>& aCurrentURISegmentList )
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_ChildURIListL( const TDesC8& aURI, const TDesC8& /*aLUID*/, const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList, const TInt aResultsRef, const TInt aStatusRef )
- {
- RDEBUG("CThemesAdapter::ChildURIListL(): begin");
-
- TError ret = EOk ;
-
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
- TNodeId nodeId = NodeId( uriPtrc );
-#else
- TNodeId nodeId = NodeId( aURI );
-#endif
-
- CBufBase *currentList = CBufFlat::NewL( 128 );
- CleanupStack::PushL( currentList );
-
-
-
-
- switch (nodeId)
- {
- case ENodeCustomization:
- currentList->InsertL(currentList->Size(), KThemesAdapterThemes);
- break;
-
- case ENodeThemes:
- currentList->InsertL(currentList->Size(),
- KThemesAdapterAvailableThemes);
- currentList->InsertL(currentList->Size(), KSlash);
- currentList->InsertL(currentList->Size(),
- KThemesAdapterActiveTheme);
- break;
-
- case ENodeAvailableThemes:
- {
- CDesC8ArrayFlat* newThemes = new (ELeave) CDesC8ArrayFlat(16);
- CleanupStack::PushL(newThemes);
-
- CDesC8ArrayFlat* themes = new (ELeave) CDesC8ArrayFlat(32);
- CleanupStack::PushL(themes);
-
- iThemes->GetInstalledPIDListL(aPreviousURISegmentList, *themes,
- *newThemes);
-
- SyncWithAvkonSkinDB(*themes);
- //get actual theme names and send to DM server
- TInt i = 0;
- TPtrC8 pid;
- for (i = 0; i < themes->Count(); i++)
- {
-
- HBufC8* themeRef = HBufC8::NewLC(
- KThemesAdapterActiveThemeRef().Length()
- + (*themes)[i].Length() + 1);
- themeRef->Des().Copy(KThemesAdapterActiveThemeRef);
- themeRef->Des().Append((*themes)[i]);
- HBufC8* luid = iCallBack->GetLuidAllocL(*themeRef);
- CleanupStack::PushL(luid);
-
- if (luid->Length() > 1)
- {
- if (currentList->Size() > 0)
- {
- currentList->InsertL(currentList->Size(), KSlash);
- }
- pid.Set(*luid);
- currentList->InsertL(currentList->Size(), (*themes)[i]);
- currentList->InsertL(currentList->Size(), KOpenBrace);
- TInt ret = iThemes->GetThemeNameL(pid, *currentList);
- currentList->InsertL(currentList->Size(), KCloseBrace);
- }
- CleanupStack::PopAndDestroy(luid);
- CleanupStack::PopAndDestroy(themeRef);
- }
- for (i = 0; i < newThemes->Count(); i++)
- {
- if (currentList->Size() > 0)
- {
- currentList->InsertL(currentList->Size(), KSlash);
- }
- pid.Set((*newThemes)[i]);
- TInt ret = iThemes->GetThemeNameL(pid, *currentList);
- }
-
- CleanupStack::PopAndDestroy(themes);
- CleanupStack::PopAndDestroy(newThemes);
- }
- break;
-
- case ENodeX:
- {
- //Determine whether the node is DM installed node
- HBufC8* lUID = iCallBack->GetLuidAllocL(aURI);
-
- if (lUID->CompareF(KNullDesC8) == 0)
- {
- ret = ENotFound;
- }
-
- delete lUID;
-
- if (ret == EOk)
- {
- currentList->InsertL(currentList->Size(), KThemesAdapterXId);
- currentList->InsertL(currentList->Size(), KSlash);
- currentList->InsertL(currentList->Size(), KThemesAdapterXName);
- currentList->InsertL(currentList->Size(), KSlash);
- currentList->InsertL(currentList->Size(),
- KThemesAdapterXVersion);
- currentList->InsertL(currentList->Size(), KSlash);
- currentList->InsertL(currentList->Size(), KThemesAdapterXData);
- currentList->InsertL(currentList->Size(), KSlash);
- currentList->InsertL(currentList->Size(),
- KThemesAdapterXInstallOptions);
- }
-
- break;
- }
-
- case ENodeXId:
- // No children, leave list empty
- break;
-
- case ENodeXName:
- // No children, leave list empty
- break;
-
- case ENodeXVersion:
- // No children, leave list empty
- break;
-
- case ENodeXData:
- // No children, leave list empty
- break;
-
- case ENodeXInstallOptions:
- // No children, leave list empty
- break;
-
- case ENodeActiveTheme:
- // No children, leave list empty
- break;
-
- case ENodeUnknown:
- ret = ENotFound;
- break;
-
- default:
- break;
- }
- if( ret == EOk )
- {
- iCallBack->SetResultsL( aResultsRef, *currentList, KNullDesC8 );
- }
-
- iCallBack->SetStatusL(aStatusRef, ret);
-
- CleanupStack::PopAndDestroy(currentList); //currentList
- }
-
-
-// ------------------------------------------------------------------------------------------------
-// CThemesAdapter::AddNodeObjectL( const TDesC& aURI, const TDesC& aParentLUID )
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_AddNodeObjectL( const TDesC8& aURI, const TDesC8& /*aParentLUID*/, const TInt aStatusRef )
- {
- RDEBUG("CThemesAdapter::AddNodeObjectL(): begin");
-
- TError ret = EOk ;
-
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
- TPtrC8 parentURI = NSmlDmURI::ParentURI( uriPtrc );
-#else
- TPtrC8 parentURI = NSmlDmURI::ParentURI( aURI );
-#endif
-
- TNodeId parentNodeId = NodeId( parentURI );
-
-
- HBufC8* parentLUID = iCallBack->GetLuidAllocL( parentURI );
- CleanupStack::PushL( parentLUID );
-
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- HBufC8* trimmedLUID = iCallBack->GetLuidAllocL( uriPtrc );
-#else
- HBufC8* trimmedLUID = iCallBack->GetLuidAllocL( aURI );
-#endif
-
- CleanupStack::PushL( trimmedLUID );
- trimmedLUID->Des().Trim();
-
- switch( parentNodeId )
- {
- case ENodeAvailableThemes:
- // Set LUID mapping to make this new node permanent
- if ( trimmedLUID->Length() > 0 && *trimmedLUID != *parentLUID)
- {
- ret = EAlreadyExists;
- }
- else
- {
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- iCallBack->SetMappingL( uriPtrc, _L8(" ") );
-#else
- iCallBack->SetMappingL( aURI, _L8(" ") );
-#endif
- }
- break;
-
- default:
- ret = EError;
- break;
- }
-
- // Cleanup
- CleanupStack::Pop( trimmedLUID );
- CleanupStack::Pop( parentLUID );
-
- iCallBack->SetStatusL( aStatusRef, ret );
- }
-
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_ExecuteCommandL( const TDesC8& /*aURI*/, const TDesC8& /*aLUID*/, const TDesC8& /*aArgument*/, const TDesC8& /*aType*/, TInt aStatusRef )
- {
- RDEBUG("CThemesAdapter::ExecuteCommandL(): begin");
- //Not supported
- TError ret = EError;
- iCallBack->SetStatusL( aStatusRef, ret );
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_ExecuteCommandL( const TDesC8& /*aURI*/, const TDesC8& /*aLUID*/, RWriteStream*& /*aStream*/, const TDesC8& /*aType*/, TInt aStatusRef )
- {
- RDEBUG("CThemesAdapter::ExecuteCommandL(...RWriteStream...): begin");
- //Not supported
- TError ret = EError;
- iCallBack->SetStatusL( aStatusRef, ret );
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::_CopyCommandL( const TDesC8& /*aTargetURI*/, const TDesC8& /*aTargetLUID*/, const TDesC8& /*aSourceURI*/, const TDesC8& /*aSourceLUID*/, const TDesC8& /*aType*/, TInt aStatusRef )
- {
- RDEBUG("CThemesAdapter::CopyCommandL(): begin");
- //Not supported
- TError ret = EError;
- iCallBack->SetStatusL( aStatusRef, ret );
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::StartAtomicL()
- {
- RDEBUG("CThemesAdapter::StartAtomicL(): begin");
- //Not supported
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::CommitAtomicL()
- {
- RDEBUG("CThemesAdapter::CommitAtomicL(): begin");
- //Not supported
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::RollbackAtomicL()
- {
- RDEBUG("CThemesAdapter::RollbackAtomicL(): begin");
- //Not supported
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-TBool CThemesAdapter::StreamingSupport( TInt& /*aItemSize*/ )
- {
- RDEBUG("CThemesAdapter::StreamingSupport(): begin");
- return EFalse;
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-#ifdef __TARM_SYMBIAN_CONVERGENCY
-void CThemesAdapter::StreamCommittedL( RWriteStream& /*aStream*/ )
-#else
-void CThemesAdapter::StreamCommittedL()
-#endif
- {
- RDEBUG("CThemesAdapter::StreamCommittedL(): begin");
- RDEBUG("CThemesAdapter::StreamCommittedL(): end");
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-void CThemesAdapter::CompleteOutstandingCmdsL()
- {
- RDEBUG("CThemesAdapter::CompleteOutstandingCmdsL(): begin");
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-//#ifdef __SAP_POLICY_MANAGEMENT
-TPtrC8 CThemesAdapter::PolicyRequestResourceL( const TDesC8& /*aURI*/ )
- {
- if(!FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement ))
- {
- User::Leave(KErrNotSupported);
- }
- RDEBUG("CThemesAdapter::PolicyRequestResourceL(): begin");
- return PolicyEngineXACML::KCustomizationManagement();
- }
-//#endif
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-CThemesAdapter::TNodeId CThemesAdapter::NodeId( const TDesC8& aURI )
- {
- TNodeId id = ENodeUnknown;
-
-#ifdef __TARM_SYMBIAN_CONVERGENCY
- TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
- TInt cnt( NSmlDmURI::NumOfURISegs( uriPtrc ) );
- TPtrC8 app( NSmlDmURI::LastURISeg( uriPtrc ) );
-#else
- TInt cnt( NSmlDmURI::NumOfURISegs( aURI ) );
- TPtrC8 app( NSmlDmURI::LastURISeg( aURI ) );
-#endif
-
- if ( cnt == 1 )
- {
- // /Customization (G)
- if (app == KThemesAdapterCustomization)
- {
- id = ENodeCustomization;
- }
- }
- else if ( cnt == 2 )
- {
- // /Customization/Themes (G)
- if (app == KThemesAdapterThemes)
- {
- id = ENodeThemes;
- }
- }
- else if ( cnt == 3 )
- {
- // /Customization/Themes/AvailableThemes (AG)
- // /Customization/Themes/ActiveTheme (GR)
- if (app == KThemesAdapterAvailableThemes)
- {
- id = ENodeAvailableThemes;
- }
- else if (app == KThemesAdapterActiveTheme)
- {
- id = ENodeActiveTheme;
- }
- }
- else if (cnt == 4)
- {
- // /Customization/Themes/CurrentThemes/<X> (DGR)
- id = ENodeX;
- }
- else if (cnt == 5)
- {
- // /Customization/Themes/CurrentThemes/<X>/ID (G)
- // /Customization/Themes/CurrentThemes/<X>/Name (GR)
- // /Customization/Themes/CurrentThemes/<X>/Version (GR)
- // /Customization/Themes/CurrentThemes/<X>/Data (R)
- // /Customization/Themes/CurrentThemes/<X>/InstallOptions (R)
- if (app == KThemesAdapterXId)
- {
- id = ENodeXId;
- }
- else if (app == KThemesAdapterXName)
- {
- id = ENodeXName;
- }
- else if (app == KThemesAdapterXVersion)
- {
- id = ENodeXVersion;
- }
- else if (app == KThemesAdapterXData)
- {
- id = ENodeXData;
- }
- else if (app == KThemesAdapterXInstallOptions)
- {
- id = ENodeXInstallOptions;
- }
- }
-
- return id;
- }
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-const TImplementationProxy ImplementationTable[] =
- {
- { {KThemesAdapterImplUid}, (TProxyNewLPtr)CThemesAdapter::NewL }
- };
-
-// ------------------------------------------------------------------------------------------------
-//
-// ------------------------------------------------------------------------------------------------
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
- {
- aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
- return ImplementationTable;
- }
-
-// -------------------------------------------------------------------------------------
-// CThemesAdapter::FillNodeInfoL()
-// Fills the node info in ddf structure
-// -------------------------------------------------------------------------------------
-void CThemesAdapter::FillNodeInfoL( MSmlDmDDFObject& aNode,TSmlDmAccessTypes aAccTypes,
- MSmlDmDDFObject::TOccurence aOccurrence, MSmlDmDDFObject::TScope aScope,
- MSmlDmDDFObject::TDFFormat aFormat,const TDesC8& aDescription,TBool /*aObjectGroup*/)
- {
- aNode.SetAccessTypesL(aAccTypes);
- aNode.SetOccurenceL(aOccurrence);
- aNode.SetScopeL(aScope);
- aNode.SetDFFormatL(aFormat);
- if(aFormat!=MSmlDmDDFObject::ENode)
- {
- aNode.AddDFTypeMimeTypeL(KThemesAdapterTextPlain);
- }
- aNode.SetDescriptionL(aDescription);
- }
-
-// -------------------------------------------------------------------------------------
-// CThemesAdapter::IsImage()
-// Checks whether the given mime type is image format (that we support)
-// -------------------------------------------------------------------------------------
-TBool CThemesAdapter::IsImage(const TDesC& aMime)
- {
-
- if (aMime == _L("image/jpeg") || aMime == _L("image/gif"))
- {
- return ETrue;
- }
- return ETrue ;
- //return EFalse;
- }
-void CThemesAdapter::SyncWithAvkonSkinDB(CDesC8ArrayFlat& themes)
- {
- TInt i = 0;
- TPtrC8 pid;
- for (i=0; i<themes.Count(); i++)
- {
- HBufC8* themeRef = HBufC8::NewLC(KThemesAdapterActiveThemeRef().Length() + themes[i].Length() + 1);
- themeRef->Des().Copy(KThemesAdapterActiveThemeRef);
- themeRef->Des().Append(themes[i]);
- HBufC8* luid = iCallBack->GetLuidAllocL( *themeRef);
- CleanupStack::PushL(luid);
-
- if (luid->Length() > 1)
- {
- pid.Set( *luid);
- }
- CBufBase *themeName = CBufFlat::NewL( 128);
- CleanupStack::PushL(themeName);
- TInt ret = iThemes->GetThemeNameL(pid, *themeName);
- if (themeName->Size()== 0)
- {
- iCallBack->SetMappingL( *themeRef, KNullDesC8);
- }
- CleanupStack::PopAndDestroy(themeName);
- CleanupStack::PopAndDestroy(luid);
- CleanupStack::PopAndDestroy(themeRef);
- }
- }