diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewbrandhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewbrandhandler.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,476 @@ +/* +* 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: Implementation of detailsview contact brand data + * +*/ + + +// INCLUDE FILES +#include "cvimpstdetailsviewbrandhandler.h" + +#include "vimpstdetailsview.hrh" +#include "vimpstui.h" +#include "conversations.h" +#include "tvimpstconsts.h" +#include +#include +// branding server +#include +#include +#include +// system includes +#include +// settings +#include +#include +#include + +#include + + +#include "uiservicetabtracer.h" + +_LIT8(KAppIdForBrand,"xsp"); +_LIT8(KDefaultBrandIdForBrand,"xsp"); + +// ================= MEMBER FUNCTIONS ======================= +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::CVIMPSTDetailsViewBrandHandler() +// --------------------------------------------------------------------------- +// Two-phased constructor. +CVIMPSTDetailsViewBrandHandler* CVIMPSTDetailsViewBrandHandler::NewL(TInt aServiceId ) + { + CVIMPSTDetailsViewBrandHandler* self = new (ELeave) CVIMPSTDetailsViewBrandHandler( aServiceId); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::~CVIMPSTDetailsViewBrandHandler() +// --------------------------------------------------------------------------- +// Destructor +CVIMPSTDetailsViewBrandHandler::~CVIMPSTDetailsViewBrandHandler() + { + if(iBrandingAccess) + { + iBrandingAccess->Close(); + } + delete iBrandingFactory; + iBrandingFactory = NULL; + delete iBrandId; + delete iSettings; + delete iServiceStoreUri; + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::CVIMPSTDetailsViewBrandHandler() +// --------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// +CVIMPSTDetailsViewBrandHandler::CVIMPSTDetailsViewBrandHandler(TInt aServiceId) : + iAppId(KAppIdForBrand), + iServiceId( aServiceId) + { + iBrandingAccess = NULL; + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::ConstructL() +// --------------------------------------------------------------------------- +// Symbian OS default constructor can leave. +void CVIMPSTDetailsViewBrandHandler::ConstructL() + { + TRACER_AUTO; + iBrandId = HBufC8::NewL( KVIMPSTUISPSMaxPropertyLength ); + TPtr8 brandIdPtr( iBrandId->Des() ); + + TInt version = 1 ; // default + + iSettings = CSPSettings::NewL(); + + // ELangInternationalEnglish is selected as Default Brand Language Id. + iLanguageId = ELangInternationalEnglish; + + GetBrandInfoL(iLanguageId, version, brandIdPtr); + + iBrandingFactory = CBSFactory::NewL( KDefaultBrandIdForBrand, iAppId ); + + + //Get the default MBM path + Dll::FileName(iDefaultMbmPath); //get the location of the dll + + TDriveName drive( TParsePtrC( iDefaultMbmPath ).Drive( ) ); // solve drive + + // leave to stack, LC method + HBufC* resourceFilePath = HBufC::NewLC( KMaxResourcePathLength ); + TPtr ptr( resourceFilePath->Des() ); + ptr.Append( KDefaultIconFile() ); // without drive + ptr.Insert( 0, drive ); // insert drive + + // NearestLanguageFile takes only TFileName + iDefaultMbmPath.Zero(); + iDefaultMbmPath.Append( *resourceFilePath ); + + CleanupStack::PopAndDestroy();//resourceFilePath + + // Leaves if no brand for service, therefore trap + PrepareBrandingAccess(); + + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::PrepareBrandingAccess() +// --------------------------------------------------------------------------- +// +TInt CVIMPSTDetailsViewBrandHandler::PrepareBrandingAccess() + { + + TRAPD(err, iBrandingAccess = iBrandingFactory->CreateAccessL( *iBrandId, iLanguageId )); + + return err; + } + + +// --------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::LoadIconsLC +// Loads necessary icons +// (other items were commented in a header). +// --------------------------------------------------------- +// +CAknIconArray* CVIMPSTDetailsViewBrandHandler::LoadIconsLC( ) + { + //Fetching bitmaps from the server. + if( !iBrandingAccess ) + { + if( KErrNone != PrepareBrandingAccess() ) + //brand was not found so load the default data + { + return LoadDefaultIconsLC(iDefaultMbmPath); + } + } + //brand data is available + return LoadBrandIconsLC(); + } + +// --------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::LoadBitMapL +// Loads necessary icons +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CVIMPSTDetailsViewBrandHandler::LoadBitMapLC(CFbsBitmap*& aBitmap, + CFbsBitmap*& aMask, + TInt aBitmapId, + TInt aMaskId ) + { + if( !iBrandingAccess ) + { + if( KErrNone != PrepareBrandingAccess() ) + //brand was not found so load the default data + { + AknIconUtils::CreateIconLC( aBitmap,aMask, iDefaultMbmPath, aBitmapId, aMaskId ); + return; + } + } + //brand data is available + CGulIcon* icon = NULL; + icon = LoadBrandBitmapL( KEMbmConversationsQgnpropservicedefaultavatar ); + aBitmap = icon->Bitmap(); + aMask = icon->Mask(); + // this is remove the memory leak + icon->SetBitmapsOwnedExternally( ETrue ); + delete icon ; + CleanupStack::PushL( aBitmap ); + CleanupStack::PushL( aMask ); + } + +// --------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::LoadBrandIconsLC +// Loads necessary icons +// (other items were commented in a header). +// --------------------------------------------------------- +// +CAknIconArray* CVIMPSTDetailsViewBrandHandler::LoadBrandIconsLC( ) + { + // array granularity is 12, because 12 icons are added to array + CAknIconArray* icons = new( ELeave )CAknIconArray( 12); + CleanupStack::PushL( icons ); + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimfriendoff) );//0 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimfriendon) );//1 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimfriendaway ) );//2 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimfriendbusy ) );//3 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimfriendinvisible ) );//4 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimimsg ) );//5 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimimsgnew ) );//6 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropservicedefaultavatar ) );//7 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropservicefriendrequestreceived ) );//8 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropservicefriendrequestsent ) );//9 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropserviceofffriendrequestreceived ) );//10 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropserviceofffriendrequestsent ) );//11 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimuserblocked ) );//12 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimfriendonmobile ) );//13 + + icons->AppendL( LoadBrandBitmapL(KEMbmConversationsQgnpropimusercallforward ) );//14 + + return icons; + } + +// ----------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::LoadBrandBitmapL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CGulIcon* CVIMPSTDetailsViewBrandHandler::LoadBrandBitmapL( const TDesC8& aId ) + { + + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + + //Fetching bitmaps from the server. + if(!iBrandingAccess) + { + PrepareBrandingAccess(); + } + iBrandingAccess->GetBitmapL( aId, bitmap, mask ); + CleanupStack::PushL( bitmap ); + CleanupStack::PushL( mask ); + // bitmap, mask ownership passed to gulIcon + CGulIcon* icon = CGulIcon::NewL(bitmap, mask); + icon->SetBitmapsOwnedExternally( EFalse ); + CleanupStack::Pop(2); // bitmap, mask + return icon; + } + + +// --------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::LoadDefaultIconsLC +// Loads necessary icons +// (other items were commented in a header). +// --------------------------------------------------------- +// +CAknIconArray* CVIMPSTDetailsViewBrandHandler::LoadDefaultIconsLC( const TDesC& aMbmFile) + { + // array granularity is 5 + CAknIconArray* icons = new( ELeave )CAknIconArray( 5); + CleanupStack::PushL( icons ); + + icons->AppendL( LoadDefaultBitmapL( // 0 + EMbmVimpstuiQgn_prop_im_friend_off, + EMbmVimpstuiQgn_prop_im_friend_off_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 1 + EMbmVimpstuiQgn_prop_im_friend_on, + EMbmVimpstuiQgn_prop_im_friend_on_mask, + aMbmFile ) ); + + icons->AppendL( LoadDefaultBitmapL( // 2 + EMbmVimpstuiQgn_prop_im_friend_away, + EMbmVimpstuiQgn_prop_im_friend_away_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 3 + EMbmVimpstuiQgn_prop_im_friend_busy, + EMbmVimpstuiQgn_prop_im_friend_busy_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 4 + EMbmVimpstuiQgn_prop_im_friend_invisible, + EMbmVimpstuiQgn_prop_im_friend_invisible_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 5 + EMbmVimpstuiQgn_prop_im_imsg, + EMbmVimpstuiQgn_prop_im_imsg_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 6 + EMbmVimpstuiQgn_prop_im_imsg_new, + EMbmVimpstuiQgn_prop_im_imsg_new_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 7 + EMbmVimpstuiQgn_prop_service_default_avatar, + EMbmVimpstuiQgn_prop_service_default_avatar_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 8 + EMbmVimpstuiQgn_prop_service_friend_request_received, + EMbmVimpstuiQgn_prop_service_friend_request_received_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 9 + EMbmVimpstuiQgn_prop_service_friend_request_sent, + EMbmVimpstuiQgn_prop_service_friend_request_sent_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 10 + EMbmVimpstuiQgn_prop_service_off_friend_request_received, + EMbmVimpstuiQgn_prop_service_off_friend_request_received_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 11 + EMbmVimpstuiQgn_prop_service_off_friend_request_sent, + EMbmVimpstuiQgn_prop_service_off_friend_request_sent_mask, + aMbmFile ) ); + icons->AppendL( LoadDefaultBitmapL( // 12 + EMbmVimpstuiQgn_servtab_avatar_blocked, + EMbmVimpstuiQgn_servtab_avatar_blocked_mask, + aMbmFile ) ); //12 + + icons->AppendL( LoadDefaultBitmapL( // 13 + EMbmVimpstuiQgn_prop_im_friend_on_mobile, + EMbmVimpstuiQgn_prop_im_friend_on_mobile_mask, + aMbmFile ) ); + + return icons; + } + +// ----------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::LoadDefaultBitmapL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CGulIcon* CVIMPSTDetailsViewBrandHandler::LoadDefaultBitmapL( TInt aBitmapId, TInt aMaskId, + const TDesC& aFullPath ) + { + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + AknIconUtils::CreateIconLC( bitmap,mask, aFullPath,aBitmapId,aMaskId ); + // bitmap, mask ownership passed to gulIcon + CGulIcon* gulIcon = CGulIcon::NewL( bitmap, mask ); + CleanupStack::Pop( 2 ); // bitmap, mask + return gulIcon; + } + + // --------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::PropertyBrandVersionL() +// --------------------------------------------------------------------------- +// +void CVIMPSTDetailsViewBrandHandler::PropertyReadBrandL( TUint32 aServiceId ,TInt &aBrand, TServicePropertyName aPropertyName ) + { + TRACER_AUTO; + CSPProperty* property = CSPProperty::NewLC(); + iSettings->FindPropertyL( aServiceId, + aPropertyName, + *property ); + if ( property ) + { + property->GetValue( aBrand ); + } + CleanupStack::PopAndDestroy( property ); + + } + +// --------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::GetBrandInfo +// +// --------------------------------------------------------- +TInt CVIMPSTDetailsViewBrandHandler::GetBrandInfoL(TLanguage& aBrandLanguage, + TInt &aBrandVersion, TDes8& aBrandId) + + { + + CSPProperty* property = CSPProperty::NewLC(); + iSettings->FindPropertyL( iServiceId, + EPropertyBrandId, + *property ); + if ( property ) + { + HBufC* brandId = HBufC::NewLC( KVIMPSTUISPSMaxPropertyLength ); + TPtr brandIdPtr( brandId->Des() ); + property->GetValue( brandIdPtr ); + aBrandId.Copy(brandIdPtr); + CleanupStack::PopAndDestroy( brandId ); + } + CleanupStack::PopAndDestroy( property ); + + TInt language = ELangInternationalEnglish; + PropertyReadBrandL( iServiceId, language , EPropertyBrandLanguage ); + aBrandLanguage = ( TLanguage) language; + + PropertyReadBrandL( iServiceId, aBrandVersion , EPropertyBrandVersion) ; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::GetServiceNameL() +// --------------------------------------------------------------------------- +// +void CVIMPSTDetailsViewBrandHandler::GetServiceNameL( TDes& aServiceName ) + { + TRACER_AUTO; + CSPEntry* entry = CSPEntry::NewLC(); + TRAPD( err, iSettings->FindEntryL( iServiceId, *entry ) ); + if ( !err ) + { + aServiceName = entry->GetServiceName(); + } + CleanupStack::PopAndDestroy( entry ); + } + + // --------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::ServiceStoreUriL() +// --------------------------------------------------------------------------- +// +const TDesC& CVIMPSTDetailsViewBrandHandler::ServiceStoreUriL() + { + TRACER_AUTO; + if( !iServiceStoreUri ) + { + iServiceStoreUri = HBufC::NewL( KVIMPST_MAX_LENGTH ); + TPtr serviceStorePtr( iServiceStoreUri->Des() ); + + CSPProperty* property = CSPProperty::NewLC(); + iSettings->FindPropertyL( iServiceId, + EPropertyContactStoreId, + *property ); + + property->GetValue( serviceStorePtr ); + CleanupStack::PopAndDestroy( property ); + } + return *iServiceStoreUri; + } +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewBrandHandler::ServiceSupportedL( ) +// --------------------------------------------------------------------------- +// +TBool CVIMPSTDetailsViewBrandHandler::ServiceSupportedL( ) + { + TRACER_AUTO; + TBool ret = EFalse; + CCch* cchClient = CCch::NewLC(); + if (cchClient) + { + CCchService* service = cchClient->GetService( iServiceId ); + TCchServiceStatus status; + status.SetState(ECCHUninitialized); + TInt err = service->GetStatus( TCCHSubserviceType(ECCHPresenceSub), status ); + if (KErrNone == err) + { + ret = ETrue; + } + CleanupStack::PopAndDestroy(); // cchClient + } + return ret; + } +// End of File