diff -r 000000000000 -r 094583676ce7 wvuing/wvvariant/Src/CCAOpBrandVariant21.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvvariant/Src/CCAOpBrandVariant21.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,309 @@ +/* +* Copyright (c) 2006 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: Concrete implementation of res.file& bitmap changing feature. +* +*/ + + + +// INCLUDE FILES +#include "CCAOpBrandVariant21.h" +#include "CAlternator.h" +#include +#include +#include +#include +#include + +// CONSTANTS +_LIT( KChatAppModuleIdForBranding, "IMApp" ); + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCAOpBrandVariant21::CCAOpBrandVariant21 +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCAOpBrandVariant21::CCAOpBrandVariant21() + { + } + +// ----------------------------------------------------------------------------- +// CCAOpBrandVariant21::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CCAOpBrandVariant21::ConstructL() + { + + + TBuf< KMaxPath > brandRoot; + + //we try to find branding from C: and Z: only, no MMC! + _LIT( KCDrive, "C:" ); + + brandRoot.Zero(); + brandRoot.Append( KCDrive() ); + + TBuf< KMaxPath > privatePath; + CEikonEnv::Static()->FsSession().PrivatePath( privatePath ); + + brandRoot.Append( privatePath ); + + iAlternator = CAlternator::InstanceL( brandRoot ); + } + +// ----------------------------------------------------------------------------- +// CCAOpBrandVariant21::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CCAOpBrandVariant21* CCAOpBrandVariant21::NewL() + { + CCAOpBrandVariant21* self = new( ELeave ) CCAOpBrandVariant21; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + + +// Destructor +CCAOpBrandVariant21::~CCAOpBrandVariant21() + { + iCoeEnv->DeleteResourceFile( iAppResFileOffset ); + iCoeEnv->DeleteResourceFile( iEngResFileOffset ); + iCoeEnv->DeleteResourceFile( iPresenceResFileOffset ); + iCoeEnv->DeleteResourceFile( iVariationResFileOffset ); + + // added 31.7.03 by kikangas to support 2.1 release + if ( iOrigCommUiResource.Length() > 0 ) + { + iCoeEnv->DeleteResourceFile( iCommUiResFileOffset ); + } + } + +void CCAOpBrandVariant21::RemoveAppResourceL( CCoeEnv* aCoeEnv, + TInt& aAppResFileOffset ) + { + aCoeEnv->DeleteResourceFile( aAppResFileOffset ); + aAppResFileOffset = NULL; + } + +void CCAOpBrandVariant21::RetrieveSavedSettingsL( CCoeEnv* aCoeEnv, + const TDesC& aOrigAppResPath, + const TDesC& aOrigEngResPath, + const TDesC& aOrigPresenceResPath, + const TDesC& aOrigVariationResPath, + const TDesC& aOrigCommUiResPath, + TDes& aBitmapPath ) + { + iCoeEnv = aCoeEnv; + + // store original paths + iOrigAppResource = aOrigAppResPath; + iOrigEngResource = aOrigEngResPath; + iOrigPresenceResource = aOrigPresenceResPath; + iOrigVariationResource = aOrigVariationResPath; + iOrigCommUiResource = aOrigCommUiResPath; + iOrigBitmapPath = aBitmapPath; + + CIMPSSAPSettingsStore* sapStore = CIMPSSAPSettingsStore::NewL(); + CleanupStack::PushL( sapStore ); + + // if there are no SAPs then don't try the get default + if ( sapStore->SAPCountL( EIMPSIMAccessGroup ) > 0 ) + { + CIMPSSAPSettings* sap = CIMPSSAPSettings::NewLC(); + sapStore->GetDefaultL( sap, EIMPSIMAccessGroup ); + HBufC* server = sap->SAPName().AllocLC(); + + ActivateBrandL( *server, aBitmapPath ); + CleanupStack::PopAndDestroy( 2, sap ); // server, sap + } + else + { + // loads original resource files + TBuf<1> empty; + ActivateBrandL( empty, aBitmapPath ); + } + CleanupStack::PopAndDestroy( sapStore ); + } + +void CCAOpBrandVariant21::ActivateBrandL( const TDesC& aServer, TDes& aBitmapPath ) + { +#ifdef _DEBUG + RDebug::Print( _L( "iAlternator->ChangeResourceL" ) ); +#endif + // last tried server + iServerName = aServer; + + // APPLICATION RESOURCE + TParsePtrC parseApp( iOrigAppResource ); + // if ok, removes the previous resource and adds new one + TInt err = iAlternator->ChangeResourceL( KChatAppModuleId, + aServer, + parseApp.NameAndExt(), + iAppResFileOffset ); + // if not ok + if ( err ) + { + // delete the old one + CEikonEnv::Static()->DeleteResourceFile( iAppResFileOffset ); + // load original app resource + // Code scanner warning Id 53 "not using + // BaflUtils::NearestLanguageFile() when loading a resource file" + // is not applicable to this case. + iAppResFileOffset = + CEikonEnv::Static()->AddResourceFileL( + iOrigAppResource ); // CSI: 53 # See above + } + + + // ENGINE RESOURCE + TParsePtrC parseEng( iOrigEngResource ); + // if ok, removes the previous resource and adds new one + err = iAlternator->ChangeResourceL( KChatAppModuleId, + aServer, + parseEng.NameAndExt(), + iEngResFileOffset ); + // if not ok + if ( err ) + { + // delete the old one + CEikonEnv::Static()->DeleteResourceFile( iEngResFileOffset ); + // load original eng resource + // Code scanner warning Id 53 "not using + // BaflUtils::NearestLanguageFile() when loading a resource file" + // is not applicable to this case. + iEngResFileOffset = + CEikonEnv::Static()->AddResourceFileL( + iOrigEngResource ); // CSI: 53 # See above + + } + + // Presence resource + TParsePtrC parsePresence( iOrigPresenceResource ); + // if ok, removes the previous resource and adds new one + err = iAlternator->ChangeResourceL( KChatAppModuleId, + aServer, + parsePresence.NameAndExt(), + iPresenceResFileOffset ); + // if not ok + if ( err ) + { + // delete the old one + CEikonEnv::Static()->DeleteResourceFile( iPresenceResFileOffset ); + // load original presence resource + // Code scanner warning Id 53 "not using + // BaflUtils::NearestLanguageFile() when loading a resource file" + // is not applicable to this case. + iPresenceResFileOffset = + CEikonEnv::Static()->AddResourceFileL( + iOrigPresenceResource ); // CSI: 53 # See above + } + + // Variation resource + TParsePtrC parseVariation( iOrigVariationResource ); + // if ok, removes the previous resource and adds new one + err = iAlternator->ChangeResourceL( KChatAppModuleId, + aServer, + parseVariation.NameAndExt(), + iVariationResFileOffset ); + // if not ok + if ( err ) + { + // delete the old one + CEikonEnv::Static()->DeleteResourceFile( iVariationResFileOffset ); + // load original presence resource + // Code scanner warning Id 53 "not using + // BaflUtils::NearestLanguageFile() when loading a resource file" + // is not applicable to this case. + iVariationResFileOffset = + CEikonEnv::Static()->AddResourceFileL( + iOrigVariationResource ); // CSI: 53 # See above + } + + // BITMAP + _LIT( KMif, ".mif" ); + _LIT( KMbm, ".mbm" ); + TParsePtrC parseBitmap( iOrigBitmapPath ); + TFileName myFile; + myFile.Zero(); + myFile.Append( parseBitmap.Name() ); + myFile.Append( KMif() ); + + iBrandedBitmaps = EFalse; + + if ( iAlternator->ChangeBitmapFileL( KChatAppModuleId, aServer, myFile ) + == KErrNone ) + { + // set branded bitmap + aBitmapPath.Zero(); + aBitmapPath.Append( iAlternator->CurrentBitmapFileL( KChatAppModuleId, + aServer, + myFile ) ); + iBrandedBitmaps = ETrue; + } + else + { + //take 2 with mbm + myFile.Zero(); + myFile.Append( parseBitmap.Name() ); + myFile.Append( KMbm() ); + + if ( iAlternator->ChangeBitmapFileL( KChatAppModuleId, aServer, myFile ) + == KErrNone ) + { + // set branded bitmap + aBitmapPath.Zero(); + aBitmapPath.Append( iAlternator->CurrentBitmapFileL( + KChatAppModuleId, aServer, myFile ) ); + iBrandedBitmaps = ETrue; + } + else + { + // else set to app defaults!! + aBitmapPath.Zero(); + aBitmapPath.Append( iOrigBitmapPath ); + } + } + } + +void CCAOpBrandVariant21::DeleteResource( CCoeEnv* aCoeEnv ) + { + aCoeEnv->DeleteResourceFile( iAppResFileOffset ); + } + +TBool CCAOpBrandVariant21::BrandBitmapsActivatedL() const + { + return iBrandedBitmaps; + } + +void CCAOpBrandVariant21::CurrentResourceFileL( const TDesC& aServer, + const TDesC& aResourceFile, + TDes& aFullPath ) + { + iAlternator->GetCurrentResourceFileL( KChatAppModuleIdForBranding, + aServer, + aResourceFile, + aFullPath ); + } + +// End of File