--- /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 <coemain.h>
+#include <f32file.h>
+#include <eikenv.h>
+#include <CIMPSSAPSettingsStore.h>
+#include <CIMPSSAPSettings.h>
+
+// 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