uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewbrandhandler.cpp
changeset 0 5e5d6b214f4f
child 14 9fdee5e1da30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewbrandhandler.cpp	Tue Feb 02 10:12:18 2010 +0200
@@ -0,0 +1,470 @@
+/*
+* 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 	<vimpstui.mbg>
+#include    <conversations.mbg>
+// branding server
+#include 	<cbsfactory.h>
+#include 	<mbsaccess.h>
+#include 	<mbselement.h>
+// system includes
+#include    <AknIconUtils.h>
+// settings
+#include 	<spsettings.h>
+#include 	<spentry.h>
+#include 	<spproperty.h>
+
+#include    <cch.h>
+#include "vimpstdebugtrace.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()
+	{
+	
+	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 ) 
+    {
+    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 )
+    {
+    CSPEntry* entry = CSPEntry::NewLC();
+    TRAPD( err, iSettings->FindEntryL( iServiceId, *entry ) );
+    if ( !err )
+        {
+        aServiceName = entry->GetServiceName();
+        }
+    CleanupStack::PopAndDestroy( entry );    
+    }
+ 
+ // ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewBrandHandler::ServiceStoreUriL()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CVIMPSTDetailsViewBrandHandler::ServiceStoreUriL()
+    {
+    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( )
+    {
+    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