uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewplugin.cpp
branchRCL_3
changeset 29 9a48e301e94b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewplugin.cpp	Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,447 @@
+/*
+* 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 details view plugin
+*
+*/
+
+
+#include "cvimpstdetailsviewplugin.h"
+
+#include "cvimpstdetailsviewcontainer.h"
+#include "cvimpstdetailsviewlistboxmodel.h"
+#include "cvimpstdetailsviewmenuhandler.h"
+#include "vimpstdetailsviewpluginuids.hrh"
+#include "cvimpstdetailsviewbrandhandler.h"
+#include "cvimpstdetailscontacthandler.h"
+
+#include "vimpstdetailsview.hrh"
+#include <vimpstui.mbg>
+#include <conversations.mbg>
+#include <vimpstdetailsviewpluginrsc.rsg>
+#include "cvimpstdetailspresencehandler.h"
+
+#include <imconnectionproviderconsts.h>
+
+#include <bautils.h>
+#include <AknIconUtils.h>
+#include <AiwServiceHandler.h>
+#include <AknsUtils.h>
+#include <e32property.h>
+#include <StringLoader.h>
+// cca 
+#include <ccappviewpluginakncontainer.h>
+#include <mccapppluginparameter.h>
+#include <mccaparameter.h>
+
+// settings
+#include 	<spsettings.h>
+#include 	<spentry.h>
+#include 	<spproperty.h>
+
+// Virtual Phonebook
+#include <CVPbkContactLinkArray.h>
+
+#include "uiservicetabtracer.h"
+// meco service uid
+#define KMECOIMPLEMENTATIONUID 0x20012423
+_LIT(KVIMPSTDetailsViewDllResFileName, "\\resource\\vimpstdetailsviewpluginrsc.rsc");
+_LIT8( KEMbmConversationsQgnDefaultImage,  "default_brand_image");
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::NewL
+// ---------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewPlugin* CVIMPSTDetailsViewPlugin::NewL(TInt aServiceId)
+	{
+	CVIMPSTDetailsViewPlugin* self = new(ELeave) CVIMPSTDetailsViewPlugin(aServiceId);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::~CVIMPSTDetailsViewPlugin
+// ---------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewPlugin::~CVIMPSTDetailsViewPlugin()
+	{
+	TRACER_AUTO;
+	delete iMenuHandler;
+	TRACE("iMenuHandler deleted");
+	delete iBrandHandler;
+	TRACE("iBrandHandler deleted");
+	delete iPresenceHandler;
+	TRACE("iPresenceHandler deleted");
+	delete iContactHandler;
+
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::CVIMPSTDetailsViewPlugin()
+// ---------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewPlugin::CVIMPSTDetailsViewPlugin(TInt aServiceId) : iFocusedListIndex(0),
+iServiceId (aServiceId)
+	{
+	}
+	
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::ConstructL()
+	{	
+	iBrandHandler = CVIMPSTDetailsViewBrandHandler::NewL( iServiceId );
+	}
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::PreparePluginViewL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::PreparePluginViewL(
+			MCCAppPluginParameter& aPluginParameter)
+	{
+	// check parameter version
+	TRACER_AUTO;
+	if (aPluginParameter.Version() != 1)
+		{
+		User::Leave(KErrNotSupported);
+		}
+	
+	if (aPluginParameter.CCAppLaunchParameter().ContactDataFlag() ==
+		MCCAParameter::EContactLink)
+		{
+		iLaunchParameter = &aPluginParameter.CCAppLaunchParameter();
+		}
+	
+	PrepareViewResourcesL();
+
+	HBufC* serviceName = HBufC::NewLC( KVIMPST_MAX_LENGTH );
+	TPtr serviceNamePtr = serviceName->Des() ;
+	iBrandHandler->GetServiceNameL( serviceNamePtr );
+	 //initialize the presence cache.
+	iPresenceHandler = CVIMPSTDetailsPresenceHandler::NewL( serviceNamePtr,*this, 
+	                                                        iBrandHandler->ServiceSupportedL() );	
+	
+	iContactHandler = CVIMPSTDetailsContactHandler::NewL( *iLaunchParameter , 
+														  *this,
+														  iBrandHandler->ServiceStoreUriL(),														  
+														  serviceNamePtr,
+														  iServiceId);
+
+	TRACE("iContactHandler created");
+	CleanupStack::PopAndDestroy(); // serviceName
+
+	}
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::ImplementationUid
+// ---------------------------------------------------------------------------
+//
+TUid CVIMPSTDetailsViewPlugin::ImplementationUid()
+	{
+	return TUid::Uid(KVIMPSTDetailsViewPluginImplmentationUid );
+	}
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::ProvideBitmapLC
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::ProvideBitmapLC(
+					TCCAppIconType aIconType, CFbsBitmap*& aBitmap, CFbsBitmap*& aBitmapMask)
+	{
+	if (ECCAppTabIcon == aIconType)
+		{
+		CFbsBitmap* bmp = NULL;
+		CFbsBitmap* bmpMask = NULL;
+		
+		// Create icon array
+		iBrandHandler->LoadBitMapLC(
+								bmp,
+								bmpMask,
+								EMbmConversationsQgn_prop_im_imsg,
+								EMbmConversationsQgn_prop_im_imsg_mask
+								);
+
+		aBitmap = bmp;
+		aBitmapMask = bmpMask;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::ProvideBitmapL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::ProvideBitmapL(
+		TCCAppIconType aIconType, CAknIcon& aIcon)
+
+    {
+	TRACER_AUTO;
+    if (ECCAppTabIcon == aIconType)
+        {
+        CFbsBitmap* bmp = NULL;
+        CFbsBitmap* bmpMask = NULL;
+        CGulIcon* tabIcon = iBrandHandler->LoadBrandBitmapL(KEMbmConversationsQgnDefaultImage);
+        if(tabIcon)
+            {
+            bmp = tabIcon->Bitmap();
+            bmpMask = tabIcon->Mask();
+            aIcon.SetBitmap(bmp); // ownership transfer to aIcon
+            aIcon.SetMask(bmpMask); // ownership transfer to aIcon
+            // this is remove the memory leak
+            tabIcon->SetBitmapsOwnedExternally( ETrue );
+            delete tabIcon ;
+            }
+        }
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::NewContainerL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::NewContainerL()
+	{
+	if( iBrandHandler && iLaunchParameter )
+		{
+		iContainer = new (ELeave) CVIMPSTDetailsViewContainer( Id(), 
+														   *iBrandHandler,
+														   *iPresenceHandler,
+														   iFocusedListIndex );	
+		}
+
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::DynInitMenuPaneL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::DynInitMenuPaneL(TInt aResourceId,
+	CEikMenuPane* aMenuPane)
+	{
+	if (!iMenuHandler)
+		{
+		iMenuHandler = CVIMPSTDetailsViewMenuHandler::NewL(*this,
+		                                        iContactHandler->StoreType() );
+		}
+	iMenuHandler->DynInitMenuPaneL(aResourceId, aMenuPane);
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::HandleCommandL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::HandleCommandL(TInt aCommand)
+	{
+	// CCApp handles the "Exit"- and "Back"-commands,
+	// rest to menuhandler
+	CCCAppViewPluginAknView::HandleCommandL(aCommand);
+
+	iMenuHandler->HandleCommandL(aCommand);
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::Id
+// ---------------------------------------------------------------------------
+//
+TUid CVIMPSTDetailsViewPlugin::Id() const
+	{
+	return TUid::Uid(KVIMPSTDetailsViewPluginImplmentationUid + iServiceId);
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::PrepareViewResourcesL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::PrepareViewResourcesL()
+	{
+	// Ignore codescanner warning generated here : " Leaving function called before BaseConstructL "
+    TRACER_AUTO;
+	TFileName fileName(KVIMPSTDetailsViewDllResFileName);
+    BaflUtils::NearestLanguageFile(iCoeEnv->FsSession(), fileName);
+   	iResourceLoader.OpenL(fileName);
+    BaseConstructL(R_VIMPSTDETAILSVIEW_MAINVIEW);
+ 
+    }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::DoActivateL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::DoActivateL(
+	const TVwsViewId& aPrevViewId,
+	TUid aCustomMessageId,
+	const TDesC8& aCustomMessage)
+	{
+	TRACER_AUTO;
+	CCCAppViewPluginAknView::DoActivateL(aPrevViewId, aCustomMessageId,
+	aCustomMessage);
+	TRACE("calling GetContactData");
+	GetContactDataL();
+
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::DoDeactivate
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::DoDeactivate()
+	{
+	TRACER_AUTO;
+	if( iContactHandler )
+		{
+		iContactHandler->CancelOngoingRequest();	
+		}
+	TRACE("ongoing request canceled");
+	if (iContainer)
+		{
+		iFocusedListIndex = static_cast<CVIMPSTDetailsViewContainer*>
+							(iContainer)->ListBoxModel().FocusedFieldIndex();
+		}
+	TRACE("calling base class Deactivate");
+	CCCAppViewPluginAknView::DoDeactivate();
+	// not woned by this class
+	iContainer = NULL;
+
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::GetContactDataL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::GetContactDataL()
+	{
+
+	TRACER_AUTO;
+	if (iLaunchParameter && iContactHandler )
+		{
+		// todo: pass launchparameter to listbox model?
+		HBufC& contactData = iLaunchParameter->ContactDataL();
+
+		HBufC8* buf = HBufC8::NewLC(contactData.Length());
+		buf->Des().Copy(contactData);
+		TPtrC8 bufDes(buf->Des());
+	
+		CVPbkContactLinkArray* links = CVPbkContactLinkArray::NewLC( bufDes, iContactHandler->ContactStoresL() );
+		CleanupStack::Pop(links);
+		TRACE("links created");
+		CleanupStack::PopAndDestroy(buf);
+		TRACE("buffer destroyed");
+		TUid launchUid = iLaunchParameter->LaunchedViewUid();
+		if(  launchUid.iUid != (KVIMPSTDetailsViewPluginImplmentationUid+iServiceId) && iContactHandler->StoreType() == EStoreServer )
+			{
+				TRACE("service store set link called from pbk");
+			// launch from other than service tab
+			// ETrue, read xsp id from pbk store and search in service store and show 
+			// incase of xsp store , need to find the details from xsp store
+			iContactHandler->SetLinks( links , ETrue );
+			}
+		else
+			{
+			TRACE("set linkcalled from service tab/CV");
+			iContactHandler->SetLinks( links , EFalse );
+			 //make sure this is set to null after view is changed
+			// cannot be set it to null in dodeactivate call. as ilaunchparameter is not
+			//owned by us. might get destryoed by cca
+			iLaunchParameter->SetLaunchedViewUid(TUid::Null()); 
+			}
+		}
+
+	}
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::SetTitleL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::SetTitleL()
+	{
+	TRACER_AUTO;
+	HBufC* title = NULL;
+	
+	if( iContainer && iContactHandler )
+		{
+		title = static_cast<CVIMPSTDetailsViewContainer*>
+								(iContainer)->GetTitleTextLC( iContactHandler->StoreType() );	
+		}
+	if( !title )
+		{
+                if(iContactHandler) 	
+                  {	
+		title = iContactHandler->GetDisplayNameLC();
+                  } 
+   		}
+	 // Forward the SetTitleL-call to base-class
+	if( title )
+		{
+		CCCAppViewPluginAknView::SetTitleL( *title );
+		CleanupStack::PopAndDestroy(); // title	
+		}
+	}
+	
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::HandlePresenceChangedL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::HandlePresenceChangedL()
+	{
+	if( iContainer )
+		{
+		static_cast<CVIMPSTDetailsViewContainer*>
+								(iContainer)->PresenceChangedL();	
+		}
+
+	}    
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::HandleContactReadyL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::HandleContactReadyL( MVPbkStoreContact& aContact )
+	{
+	TRACER_AUTO;
+	if( iContainer )
+		{
+		// read the service name for servic eid - iServiceId
+		// pass to CreatePresentation
+		HBufC* serviceName = HBufC::NewLC( KVIMPST_MAX_LENGTH );
+        TPtr serviceNamePtr = serviceName->Des() ;
+        iBrandHandler->GetServiceNameL( serviceNamePtr );
+        
+		static_cast<CVIMPSTDetailsViewContainer*>
+					(iContainer)->CreatePresentationL( aContact ,*serviceName, iContactHandler->StoreType() );
+	    // delete service name
+		CleanupStack::PopAndDestroy();//serviceName
+		}
+	SetTitleL(); // call only after presentation is created	
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::HandleContactUnavailableL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPlugin::HandleContactUnavailableL()
+	{
+	if( iContainer )
+		{
+		static_cast<CVIMPSTDetailsViewContainer*>
+					(iContainer)->CreateEmptyPresentationL();
+		}
+	SetTitleL(); // call only after presentation is created
+	}	
+			
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewPlugin::GetContactHandler
+// --------------------------------------------------------------------------
+//
+CVIMPSTDetailsContactHandler* CVIMPSTDetailsViewPlugin::GetContactHandler()
+    {
+    return iContactHandler;
+    }
+// End of File
+
+