diff -r 75a71fdb4c92 -r 7d11f9a6646f customization/ThemesAdapter/src/ThemesList.cpp --- a/customization/ThemesAdapter/src/ThemesList.cpp Tue Feb 02 00:03:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,803 +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 List -* -*/ - - -#include "ThemesList.h" - -#include -#include // For TImplementationProxy definition -#include -#include -#include -#include -#include - -#include "FileCoderB64.h" -#include "aminstalloptions.h" -#include "debug.h" - -#ifdef RD_MULTIPLE_DRIVE -#include -#endif //RD_MULTIPLE_DRIVEs - -_LIT8( KSlash, "/" ); -_LIT8(KCol,":"); -const TInt KPostTimeOut = 10000000; // 10 seconds - - -// ------------------------------------------------------------------------------------------------ -// CThemesList* CThemesList::NewL( ) -// ------------------------------------------------------------------------------------------------ -CThemesList* CThemesList::NewL( ) //sf-MSmlDmCallback* aDmCallback ) - { - RDEBUG("CThemesList::NewL(): begin"); - - CThemesList* self = NewLC(); - CleanupStack::Pop(); - return self; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList* CThemesList::NewLC( ) -// ------------------------------------------------------------------------------------------------ -CThemesList* CThemesList::NewLC( ) //sf-MSmlDmCallback* aDmCallback ) - { - CThemesList* self = new( ELeave ) CThemesList(); - CleanupStack::PushL( self ); - self->ConstructL( ); - return self; - } - - -// ------------------------------------------------------------------------------------------------ -// CThemesList::CThemesList() -// ------------------------------------------------------------------------------------------------ -CThemesList::CThemesList( ) //sf-MSmlDmCallback* aDmCallback ) -//sf- : iCallBack( aDmCallback ) - : iDirty( ETrue ) - , iAknsSrv( ) - , iSkins( 0 ) - , iInstallOptions() - { - GetDefaultInstallOptions( iInstallOptions ); - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::ConstructL() -// ------------------------------------------------------------------------------------------------ -void CThemesList::ConstructL( ) - { - User::LeaveIfError( iAknsSrv.Connect() ); - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::~CThemesList() -// ------------------------------------------------------------------------------------------------ -CThemesList::~CThemesList() - { - if (iSkins) - { - iSkins->ResetAndDestroy(); - delete iSkins; - } - iAknsSrv.Close(); - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::GetInstalledPIDListL() -// ------------------------------------------------------------------------------------------------ - -MSmlDmAdapter::TError CThemesList::GetInstalledPIDListL( const CArrayFix& aPreviousList, CDesC8ArrayFlat& themes, CDesC8Array& aNewThemes ) - { - TInt i = 0; - TInt pos = 0; - - CheckUpdatesL(); - - CDesC8ArrayFlat* luids = new (ELeave) CDesC8ArrayFlat( 32 ); - CleanupStack::PushL( luids ); - - // Create list of existing themes - for (i = 0 ; i < aPreviousList.Count() ; i++) - { - themes.AppendL( aPreviousList[i].iURISeg ); - luids->AppendL( aPreviousList[i].iURISegLUID ); - } - - // Find and add missing themes - - for (i = 0 ; i < iSkins->Count() ; i++) - { - TAknsPkgIDBuf pidBuf; - TBuf8 name; - - TAknsPkgID pid = (*iSkins)[i]->PID(); - pid.CopyToDes( pidBuf ); - name.Copy( pidBuf ); - - if (luids->Find( name, pos ) != 0) - { - // not found - // Check that current "name" is not in use - if (themes.Find( name, pos ) != 0) - { - // not found - // add it to both current and new themes - // themes->AppendL( name ); - aNewThemes.AppendL( name ); - } - } - } - - // Fill result -#if 0 - for (i = 0 ; i < themes->Count() ; i++) - { - if (i > 0) - { - aList.InsertL( aList.Size(), KSlash ); - } - aList.InsertL( aList.Size(), (*themes)[i] ); - } - -#endif - // Cleanup - CleanupStack::PopAndDestroy( luids ); - //CleanupStack::PopAndDestroy( themes ); - - return MSmlDmAdapter::EOk; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::GetThemeIdL() -// ------------------------------------------------------------------------------------------------ -MSmlDmAdapter::TError CThemesList::GetThemeIdL( const TDesC8& aPID, CBufBase& aResult ) - { - MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound; - - CAknsSrvSkinInformationPkg* theme = FindThemeL( aPID ); - if (theme != 0) - { - TAknsPkgIDBuf pid; - theme->PID().CopyToDes( pid ); - TBuf8 pid8; - pid8.Copy( pid ); - aResult.InsertL( aResult.Size(), pid8 ); - ret = MSmlDmAdapter::EOk; - } - - return ret; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::GetThemeNameL() -// ------------------------------------------------------------------------------------------------ -MSmlDmAdapter::TError CThemesList::GetThemeNameL( const TDesC8& aPID, CBufBase& aResult ) - { - MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound; - - CAknsSrvSkinInformationPkg* theme = FindThemeL( aPID ); - if (theme != 0) - { - TDesC& name = theme->Name(); - HBufC8* buf = HBufC8::NewLC( name.Length() ); - buf->Des().Copy( name ); - aResult.InsertL( aResult.Size(), *buf ); - CleanupStack::PopAndDestroy( buf ); - ret = MSmlDmAdapter::EOk; - } - - return ret; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::GetThemeVersionL() -// ------------------------------------------------------------------------------------------------ -MSmlDmAdapter::TError CThemesList::GetThemeVersionL( const TDesC8& aPID, CBufBase& /*aResult*/ ) - { - MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound; - - CAknsSrvSkinInformationPkg* theme = FindThemeL( aPID ); - if (theme != 0) - { - // Empty version, not supported (yet?) - ret = MSmlDmAdapter::EOk; - } - - return ret; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::GetActiveThemeL() -// ------------------------------------------------------------------------------------------------ -MSmlDmAdapter::TError CThemesList::GetActiveThemeL( CBufBase& aResult ) - { - MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk; - TInt errCode = KErrNone; - TAknsPkgID pid = KAknsNullPkgID; - TAknsPkgIDBuf buf; - - CRepository* skinsRepository = CRepository::NewLC( KCRUidPersonalisation ); - - errCode = skinsRepository->Get( KPslnActiveSkinUid, buf ); - if( errCode == KErrNone ) - { - TRAP( errCode, pid.SetFromDesL( buf ) ); - } - if( errCode != KErrNone ) - { -//sf- pid.Set( KAknsPIDDefaultSystemSkin ); -//sf- changes to KAknsPIDS60DefaltSystemSkin and -//sf- to KAknsPIDProductDefaultSystemSkin -//sf- and the product default should be used (because variation might be done). -//sf- Starting from S60 3.1 wk50 or wk52 -//sf- But: CenRep key should always hold a value so this code is not necessary. - } - - pid.CopyToDes( buf ); - - CleanupStack::PopAndDestroy( skinsRepository ); - skinsRepository = 0; - - TBuf8 buf8; - buf8.Copy( buf ); - - aResult.InsertL( aResult.Size(), buf8 ); - - return ret; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::SetActiveThemeL() -// ------------------------------------------------------------------------------------------------ -MSmlDmAdapter::TError CThemesList::SetActiveThemeL( const TDesC8& aPID ) - { - MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk; - TInt errCode = KErrNone; - - CAknsSrvSkinInformationPkg* theme = FindThemeL( aPID ); - if (theme == 0) - { - errCode = KErrNotFound; - } - if (errCode == KErrNone) - { - errCode = iAknsSrv.SetAllDefinitionSets( theme->PID() ); - } - if (errCode == KErrNone) - { - // Save settings to repository - TAknsPkgIDBuf pidBuf; - theme->PID().CopyToDes( pidBuf ); - - TAknSkinSrvSkinPackageLocation location = - LocationFromPath( theme->IniFileDirectory() ); - - CRepository* skinsRepository = CRepository::NewLC( KCRUidPersonalisation ); - - errCode = skinsRepository->Set( KPslnActiveSkinUid, pidBuf ); - errCode = skinsRepository->Set( KPslnActiveSkinLocation, location ); - - CleanupStack::PopAndDestroy( skinsRepository ); - } - - if (errCode != KErrNone) - { - ret = MSmlDmAdapter::EError; - } - - return ret; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::SetInstallOptionsL() -// ------------------------------------------------------------------------------------------------ -MSmlDmAdapter::TError CThemesList::SetInstallOptionsL( const TDesC8& aOptions ) - { - MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk; - TInt errCode = KErrNone; - - GetDefaultInstallOptions( iInstallOptions ); - - if (aOptions.Length() > 0) - { - TRAP( errCode, InstallOptionsParser::ParseOptionsL( aOptions, iInstallOptions ) ); - } - if (errCode != KErrNone) - { - ret = MSmlDmAdapter::EError; - } - - return ret; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::InstallThemeL() -// ------------------------------------------------------------------------------------------------ -MSmlDmAdapter::TError CThemesList::InstallThemeL( const TDesC& aFileName, TDes8& aSisPkgUid, TDes8& aThemePkgId ) - { - MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk; - TInt errCode = KErrNone; - - CDesC8Array* pkgUidsOrg = InstalledPackagesL( ); - CleanupStack::PushL( pkgUidsOrg ); - CDesC8Array* thmPidsOrg = InstalledThemesL( ); - CleanupStack::PushL( thmPidsOrg ); - - // Install using options if given and otherwise with default options - SwiUI::RSWInstLauncher installer; - User::LeaveIfError( installer.Connect() ); - CleanupClosePushL( installer ); - - SwiUI::TInstallOptionsPckg optPckg( iInstallOptions ); - errCode = installer.SilentInstall( aFileName, optPckg ); - CleanupStack::PopAndDestroy( &installer ); - - // Retrieve new list of installed packages and themes - CDesC8Array* pkgUidsNew = InstalledPackagesL( ); - CleanupStack::PushL( pkgUidsNew ); - CDesC8Array* thmPidsNew = InstalledThemesL( ); - CleanupStack::PushL( thmPidsNew ); - - // Try to find sis package uid and theme package id - CDesC8Array* pkgUidsDif = FindNewItemsL( *pkgUidsOrg, *pkgUidsNew ); - CleanupStack::PushL( pkgUidsDif ); - - CDesC8Array* thmPidsDif = FindNewItemsL( *thmPidsOrg, *thmPidsNew ); - CleanupStack::PushL( thmPidsDif ); - - if (pkgUidsDif->Count() == 1) - { - aSisPkgUid = (*pkgUidsDif)[0]; - } - if (thmPidsDif->Count() > 0) - { - aThemePkgId = (*thmPidsDif)[0]; - } - RDEBUG_2( " CThemesList::InstallThemeL : SISPKGUID %X", &(aSisPkgUid) ); - RDEBUG_2( " CThemesList::InstallThemeL : THEMEPKGUID %X", &(aThemePkgId) ); - - // Cleanup - CleanupStack::PopAndDestroy( thmPidsDif ); - CleanupStack::PopAndDestroy( pkgUidsDif ); - CleanupStack::PopAndDestroy( thmPidsNew ); - CleanupStack::PopAndDestroy( pkgUidsNew ); - CleanupStack::PopAndDestroy( thmPidsOrg ); - CleanupStack::PopAndDestroy( pkgUidsOrg ); - - // Convert error code - if (errCode != KErrNone) - { - ret = MSmlDmAdapter::EError; - } - - return ret; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::DeleteThemeL() -// ------------------------------------------------------------------------------------------------ -MSmlDmAdapter::TError CThemesList::DeleteThemeL( const TDesC8& aThemeId, const TUid& aPkgUid,HBufC8* aLuid) - { - MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk; - TInt errCode = KErrNone; - - CAknsSrvSkinInformationPkg* theme = FindThemeL( aThemeId ); - if (theme != NULL) - { - // Save settings to repository - TAknsPkgIDBuf pidBuf; - TAknsPkgID themepid = theme->PID(); - themepid.CopyToDes(pidBuf); - - CRepository* skinsRepository = CRepository::NewLC( - KCRUidPersonalisation); - - TAknsPkgIDBuf repBuf; - errCode = skinsRepository->Get(KPslnActiveSkinUid, repBuf); - if (errCode == KErrNone) - { - TAknsPkgID activepid = KAknsNullPkgID; - activepid.SetFromDesL(repBuf); - - //Comparing the UIds of the active theme and the theme to be deleted - if (themepid.Uid() == activepid.Uid()) - { - // deleted theme is active theme, deactive it first - TInt count = iSkins->Count(); - if (count > 1) - { - pidBuf.Zero(); - CAknsSrvSkinInformationPkg* defaultTheme = (*iSkins)[0]; - defaultTheme->PID().CopyToDes(pidBuf); - TBuf8 pidBuf8; - pidBuf8.Copy(pidBuf); - errCode = SetActiveThemeL(pidBuf8); - - if (errCode == KErrNone) - { - TRequestStatus timeoutStatus /*= KRequestPending*/; - - RTimer timeout; - User::LeaveIfError(timeout.CreateLocal()); - CleanupClosePushL(timeout); - timeout.After(timeoutStatus, KPostTimeOut); - - User::WaitForRequest(timeoutStatus); - - if (timeoutStatus.Int() == KRequestPending) - { - timeout.Cancel(); - User::WaitForRequest(timeoutStatus); - } - CleanupStack::PopAndDestroy(&timeout); - } - } - else - { - errCode = KErrGeneral; - } - } - - CleanupStack::PopAndDestroy(skinsRepository); - } - - } - else - { - errCode = KErrNotFound; - } - - - if( errCode == KErrNone ) - { - iDirty = ETrue; - - // Uninstall silent - SwiUI::RSWInstLauncher installer; - User::LeaveIfError( installer.Connect() ); - CleanupClosePushL( installer ); - - //Silent uninstall not working because of getting wrong package name - //So we used SilentCustomUninstall which uses index and pkgUid to get correct package name - - TInt idx( KErrNotFound ); - SwiUI::TOpUninstallIndexParam params; - params.iUid = aPkgUid; - TPtrC8 ptr1 = aLuid->Des(); - idx= ptr1.Find(KCol); - if(idx != KErrNotFound) - { - TPtrC8 ptr = ptr1.Right((ptr1.Length()-idx)-1); - TLex8 lex(ptr); - lex.Val(params.iIndex); - } - else - { - ret = MSmlDmAdapter::ENotFound; - } - - SwiUI::TOpUninstallIndexParamPckg pckg( params ); - SwiUI::TOperation operation( SwiUI::EOperationUninstallIndex ); - - SwiUI::TUninstallOptions uninstallOptions; - SwiUI::TUninstallOptionsPckg optPckg( uninstallOptions ); - - errCode = installer.SilentCustomUninstall( operation, optPckg, pckg,SwiUI::KSisxMimeType() ); - RDEBUG_2("CThemesList::DeleteThemeL Uninstall silent : errCode %X",errCode ); - - CleanupStack::PopAndDestroy( &installer ); - } - - if (errCode == KErrNotFound) - { - ret = MSmlDmAdapter::ENotFound; - } - else if (errCode != KErrNone) - { - ret = MSmlDmAdapter::EError; - } - - return ret; - } - - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Internal methods -// -/////////////////////////////////////////////////////////////////////////////////////////////////// - - -// ------------------------------------------------------------------------------------------------ -// CThemesList::CheckUpdatesL() -// ------------------------------------------------------------------------------------------------ -void CThemesList::CheckUpdatesL() - { - if (iDirty) - { - LoadSkinsL(); - iDirty = EFalse; - } - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::LoadSkinsL() -// ------------------------------------------------------------------------------------------------ -void CThemesList::LoadSkinsL() - { - // Cleanup old list - if (iSkins) - { - iSkins->ResetAndDestroy(); - delete iSkins; - iSkins = 0; - } - - // Drives z and c case EAknsSrvPhone: - // drive e case EAknsSrvMMC: - // all drives case EAknsSrvAll: - iSkins = iAknsSrv.EnumerateSkinPackagesL( EAknsSrvAll ); - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList:: -// ------------------------------------------------------------------------------------------------ -CAknsSrvSkinInformationPkg* CThemesList::FindThemeL( const TDesC8& aPID ) - { - CheckUpdatesL(); - - CAknsSrvSkinInformationPkg* theme = 0; - TInt i = 0; - TAknsPkgID pid = KAknsNullPkgID; - - TAknsPkgIDBuf pidBuf; - pidBuf.Copy( aPID ); - - TRAPD( err, pid.SetFromDesL( pidBuf ) ); - - if (err == KErrNone) - { - for (i = 0 ; i < iSkins->Count() ; i++) - { - if ((*iSkins)[i]->PID() == pid) - { - theme = (*iSkins)[i]; - break; - } - } - } - - return theme; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList::GetDefaultInstallOptions() -// ------------------------------------------------------------------------------------------------ -void CThemesList::GetDefaultInstallOptions( SwiUI::TInstallOptions &aOptions ) - { - SwiUI::TInstallOptions defaultOptions; - - // Return options - aOptions = defaultOptions; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList:: -// ------------------------------------------------------------------------------------------------ -TAknSkinSrvSkinPackageLocation CThemesList::LocationFromPath( const TDesC& aPath ) - { -#ifndef RD_MULTIPLE_DRIVE - TBuf<1> driveLetterBuf; - driveLetterBuf.CopyUC( aPath.Left(1) ); - if( driveLetterBuf.Compare( _L("E") ) == 0 ) - { - return EAknsSrvMMC; - } - return EAknsSrvPhone; -#else - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - - TInt drive = EDriveC; - TUint driveStatus = 0; - TInt err = RFs::CharToDrive( aPath[0], drive ); - err = DriveInfo::GetDriveStatus( fs, drive, driveStatus ); - CleanupStack::PopAndDestroy(); // fs - if ( driveStatus & DriveInfo::EDriveExternallyMountable ) - { - RDEBUG("CThemesList::LocationFromPath(): from MMC"); - return EAknsSrvMMC; - } - - - RDEBUG("CThemesList::LocationFromPath(): from Phone"); - return EAknsSrvPhone; - -#endif //RD_MULTIPLE_DRIVE - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList:: -// ------------------------------------------------------------------------------------------------ -CDesC8Array* CThemesList::InstalledPackagesL( ) - { - CDesC8ArrayFlat* packages = new (ELeave) CDesC8ArrayFlat( 32 ); - CleanupStack::PushL( packages ); - - RArray< TUid > uids; - CleanupClosePushL( uids ); - - RPointerArray< Swi::CSisRegistryPackage > pkgs; - CleanupClosePushL( pkgs ); - - Swi::RSisRegistrySession reg; - User::LeaveIfError( reg.Connect() ); - CleanupClosePushL( reg ); - - reg.InstalledUidsL( uids ); - reg.InstalledPackagesL( pkgs ); - - TInt i = 0; - TInt count = uids.Count(); - for (i = 0 ; i < count ; i++) - { - TBuf8 uidBuf8; - uidBuf8.Copy( uids[i].Name() ); - - RDEBUG8_3( "uid[%d]=%S", i, &uidBuf8 ); - } - - count = pkgs.Count(); - for (i = 0 ; i < count ; i++) - { - TPtrC uidName = pkgs[i]->Uid().Name(); - TPtrC name = pkgs[i]->Name(); - TPtrC vendor = pkgs[i]->Vendor(); - - RDEBUG_5( "pkg[%d]: uid=%S, idx=%d, name=%S", i, - &uidName, - pkgs[i]->Index(), - &name ); - - - TBuf uidBuf; - uidBuf = pkgs[i]->Uid().Name(); - uidBuf.Append( _L(":") ); - uidBuf.AppendNum( pkgs[i]->Index() ); - - TBuf8 uidBuf8; - uidBuf8.Copy( uidBuf ); - - packages->AppendL( uidBuf8 ); - } - - CleanupStack::PopAndDestroy( ® ); - - pkgs.ResetAndDestroy(); - CleanupStack::PopAndDestroy( &pkgs ); - CleanupStack::PopAndDestroy( &uids ); - - CleanupStack::Pop( packages ); - return packages; - } - - -// ------------------------------------------------------------------------------------------------ -// CThemesList:: -// ------------------------------------------------------------------------------------------------ -CDesC8Array* CThemesList::InstalledThemesL( ) - { - LoadSkinsL(); - - CDesC8ArrayFlat* themes = new (ELeave) CDesC8ArrayFlat( 32 ); - CleanupStack::PushL( themes ); - - TInt i = 0; - TInt count = iSkins->Count(); - - for (i = 0 ; i < count ; i++) - { - TAknsPkgIDBuf pidBuf; - TBuf8 pidBuf8; - - TAknsPkgID pid = (*iSkins)[i]->PID(); - pid.CopyToDes( pidBuf ); - pidBuf8.Copy( pidBuf ); - - themes->AppendL( pidBuf8 ); - - TPtrC directory = (*iSkins)[i]->Directory(); - TPtrC iniFileDirectory = (*iSkins)[i]->IniFileDirectory(); - TPtrC name = (*iSkins)[i]->Name(); - TPtrC idleStateWallPaperImageFileName = (*iSkins)[i]->IdleStateWallPaperImageFileName(); - TPtrC pinboarWallPaperImageFileName = (*iSkins)[i]->PinboarWallPaperImageFileName(); - TInt idleStateWallPaperImageIndex = (*iSkins)[i]->IdleStateWallPaperImageIndex(); - TInt pinboardWallPaperImageIndex = (*iSkins)[i]->PinboardWallPaperImageIndex(); - TBool isDeletable = (*iSkins)[i]->IsDeletable(); - TBool isCopyable = (*iSkins)[i]->IsCopyable(); - TAknsPkgID colorSchemePID = (*iSkins)[i]->ColorSchemePID(); - TBool hasIconset = (*iSkins)[i]->HasIconset(); - TAknsSkinSrvSkinProtectionType protectionType = (*iSkins)[i]->ProtectionType(); - TBool isCorrupted = (*iSkins)[i]->IsCorrupted(); - TDesC& fullName = (*iSkins)[i]->FullName(); - - - TAknsPkgIDBuf colorSchemeBuf; - colorSchemePID.CopyToDes( colorSchemeBuf ); - - RDEBUG_4( "skin[%d]: pid=%S, name=%S", i, &pidBuf, &name ); - RDEBUG_2( " directory=%S", &directory ); - RDEBUG_2( " iniFileDirectory=%S", &iniFileDirectory ); - RDEBUG_2( " name=%S", &name ); - RDEBUG_2( " idleStateWallPaperImageFileName=%S", &idleStateWallPaperImageFileName ); - RDEBUG_2( " pinboarWallPaperImageFileName=%S", &pinboarWallPaperImageFileName ); - RDEBUG_2( " idleStateWallPaperImageIndex=%d", idleStateWallPaperImageIndex ); - RDEBUG_2( " pinboardWallPaperImageIndex=%d", pinboardWallPaperImageIndex ); - RDEBUG_2( " isDeletable=%d", isDeletable ); - RDEBUG_2( " isCopyable=%d", isCopyable ); - RDEBUG_2( " colorSchemePID=%S", &colorSchemeBuf ); - RDEBUG_2( " hasIconset=%d", hasIconset ); - RDEBUG_2( " protectionType=%d", protectionType ); - RDEBUG_2( " isCorrupted=%d", isCorrupted ); - RDEBUG_2( " fullName=%S", &fullName ); - } - - themes->Sort(); - - CleanupStack::Pop( themes ); - return themes; - } - -// ------------------------------------------------------------------------------------------------ -// CThemesList:: -// ------------------------------------------------------------------------------------------------ -CDesC8Array* CThemesList::FindNewItemsL( const CDesC8Array& aItemsOrg, const CDesC8Array& aItemsNew ) - { - CDesC8Array* result = new (ELeave) CDesC8ArrayFlat( 16 ); - CleanupStack::PushL( result ); - - TInt i = 0; - TInt count = aItemsNew.Count(); - for (i = 0 ; i < count ; i++) - { - result->AppendL( aItemsNew[ i ] ); - } - - result->Sort(); - - count = aItemsOrg.Count(); - for (i = 0 ; i < count ; i++) - { - TInt idx = -1; - if (result->FindIsq( aItemsOrg[ i ], idx, ECmpNormal ) == 0) - { - result->Delete( idx ); - } - } - - result->Compress( ); - - CleanupStack::Pop( result ); - return result; - } - -// ------------------------------------------------------------------------------------------------ -// EOF -// ------------------------------------------------------------------------------------------------