phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardplugin.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardplugin.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,554 @@
+/*
+* Copyright (c) 2009-2009 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 MyCard plugin
+*
+*/
+
+
+#include "ccappmycardplugin.h"
+#include "ccappmycardcontainer.h"
+#include "ccappmycardcommon.h"
+#include "ccappmycardpluginuids.hrh"
+#include "ccappmycard.h"
+#include "ccappmycard.hrh"
+#include <spbcontactdatamodel.h>
+#include <ccappmycardpluginrsc.rsg>
+#include <Pbk2UIControls.rsg>
+#include <data_caging_path_literals.hrh>
+#include <mccappengine.h>
+#include <bautils.h>
+#include <AknsUtils.h>
+#include <AiwServiceHandler.h>
+#include <MVPbkContactLink.h>
+#include <AiwContactAssignDataTypes.h>
+#include <avkon.hrh>
+#include <aknappui.h>
+#include <s32mem.h>
+#include <CPbk2CommandHandler.h>
+#include <Pbk2Commands.hrh>		//pbk2cmdsend
+#include <Pbk2DataCaging.hrh>	
+#include <TPbk2ContactEditorParams.h>
+#include <CPbk2GeneralConfirmationQuery.h>
+#include <CPbk2PresentationContact.h>
+#include <CPbk2PresentationContactFieldCollection.h>
+#include <StringLoader.h>
+#include <AknQueryDialog.h>
+#include <mccapppluginparameter.h>
+#include <mccaparameter.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkFieldType.h>
+#include <TVPbkFieldVersitProperty.h>
+
+// ---------------------------------------------------------------------------
+// Constants
+// ---------------------------------------------------------------------------
+
+/// MyCard own resource file
+_LIT( KMyCardResourceFileName,          "ccappmycardpluginrsc.rsc" );
+/// Phonebook2 UI controls resource file
+_LIT( KMyCardPbk2UiControlsResFileName, "pbk2uicontrols.rsc" );
+// pbk2 common ui
+_LIT( KPbk2CommonUiDllResFileName,   	"Pbk2CommonUi.rsc"  );
+// pbk2 commands
+_LIT( KPbk2CommandsDllResFileName,   	"Pbk2Commands.rsc");
+
+
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::NewL
+// ---------------------------------------------------------------------------
+//
+CCCAppMyCardPlugin* CCCAppMyCardPlugin::NewL()
+    {
+    CCA_DP(KMyCardLogFile, 
+        CCA_L("==== NEW INSTANCE============================================"));
+    CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardPlugin::NewL()"));
+    
+    CCCAppMyCardPlugin* self = new ( ELeave ) CCCAppMyCardPlugin();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    
+    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::NewL()"));
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::~CCCAppMyCardPlugin
+// ---------------------------------------------------------------------------
+//
+CCCAppMyCardPlugin::~CCCAppMyCardPlugin()
+    {
+    CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardPlugin::~CCCAppMyCardPlugin()"));
+    
+    iPbk2UiControlResource.Close();
+    
+    iCommonUiResourceFile.Close();
+    
+    iCommandsResourceFile.Close();
+    
+    delete iModel;
+
+    delete iMyCard;
+    
+    delete iCommandHandler;
+    
+    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::~CCCAppMyCardPlugin()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::CCCAppMyCardPlugin()
+// ---------------------------------------------------------------------------
+//
+CCCAppMyCardPlugin::CCCAppMyCardPlugin() :
+    iPbk2UiControlResource( *iCoeEnv ),
+    iCommonUiResourceFile( *iCoeEnv ),
+    iCommandsResourceFile( *iCoeEnv )
+    {
+    CCA_DP(KMyCardLogFile, CCA_L("CCCAppMyCardPlugin::CCCAppMyCardPlugin()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::ConstructL()
+    {
+    CCA_DP(KMyCardLogFile, CCA_L("CCCAppMyCardPlugin::ConstructL()"));
+    // ConstructL should be as light as possible.
+
+    //prepare view resources before creating command handler and mycard (was called on PreparePluginViewL before)
+    PrepareViewResourcesL();
+    
+    iMyCard = CCCAppMyCard::NewL( *this );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::MyCard
+// ---------------------------------------------------------------------------
+//
+CCCAppMyCard& CCCAppMyCardPlugin::MyCard()
+    {
+    return *iMyCard;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::Model
+// ---------------------------------------------------------------------------
+//
+CSpbContactDataModel& CCCAppMyCardPlugin::Model()
+    {
+    return *iModel;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::PreparePluginViewL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::PreparePluginViewL(
+    MCCAppPluginParameter& aPluginParameter )
+    {
+    CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardPlugin::PreparePluginViewL()"));
+
+    iModel = CSpbContactDataModel::NewL( 
+        iMyCard->ContactManager(), *iCoeEnv, R_MYCARD_CLIP_FIELD_SELECTOR );
+    
+    BaseConstructL( R_CCAMYCARD_VIEW );
+    MCCAParameter& param = aPluginParameter.CCAppLaunchParameter();
+    if( param.ContactDataFlag() == MCCAParameter::EContactLink )
+        {
+        HBufC& data = param.ContactDataL();
+        HBufC8* data8 = HBufC8::NewLC( data.Size() );
+        data8->Des().Copy( data );
+        CVPbkContactLinkArray* array = CVPbkContactLinkArray::NewLC( 
+            *data8, iMyCard->ContactManager().ContactStoresL() );
+        if( array->Count() )
+            {
+            iMyCard->SetLinkL( array->At( 0 ) );
+            }
+        CleanupStack::PopAndDestroy( 2 ); // data, array
+        }
+    else if( param.ContactDataFlag() == MCCAParameter::EContactDataModel )
+        {
+        HBufC& cntData = param.ContactDataL();
+        TPtrC8 data( (TUint8*)cntData.Ptr(), cntData.Size() );
+        RDesReadStream stream( data );
+        CleanupClosePushL( stream );
+        iModel->InternalizeL( stream );
+        CleanupStack::PopAndDestroy(); // strean
+
+        MVPbkContactLink* link = iModel->ContactLink();
+        if( link )
+            {
+            iMyCard->SetLinkL( *link );
+            }
+        else
+            {
+            // model without a link means that mycard does not exist.
+            iMyCard->ForceCreateMyCard();
+            }
+        }
+    
+    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::PreparePluginViewL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::DoActivateL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::DoActivateL(
+    const TVwsViewId& aPrevViewId,
+    TUid aCustomMessageId,
+    const TDesC8& aCustomMessage )
+    {
+    CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardPlugin::DoActivateL()"));
+
+    // Forward the activation-call to base-class
+    CCCAppViewPluginAknView::DoActivateL(
+        aPrevViewId, aCustomMessageId, aCustomMessage );
+    
+    iMyCard->FetchMyCardL(); 
+    
+    // Set view title
+    HBufC* title = iCoeEnv->AllocReadResourceLC( R_QTN_CCA_TITLE_MY_CARD );
+    SetTitleL( *title );
+    CleanupStack::PopAndDestroy( title );
+
+    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::DoActivateL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::DoDeactivate
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::DoDeactivate()
+    {
+    CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardPlugin::DoDeactivate()"));
+
+    // Forward the deactivation-call to base-class
+    CCCAppViewPluginAknView::DoDeactivate();
+
+    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::DoDeactivate()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::ProvideBitmapL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::ProvideBitmapL(
+    TCCAppIconType aIconType,
+    CAknIcon& aIcon )
+    {
+    CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardPlugin::ProvideBitmapL()"));
+
+    if ( ECCAppTabIcon == aIconType )
+        {
+        // CCA expects to always receive real icons. MyCard does not have
+        // tab icon defined, so provide some dummy icons.
+        aIcon.SetBitmap( new(ELeave) CFbsBitmap );
+        aIcon.SetMask( new(ELeave) CFbsBitmap );
+        }
+
+    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::ProvideBitmapL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::CCCAppViewPluginBaseExtension
+// ---------------------------------------------------------------------------
+//
+TAny* CCCAppMyCardPlugin::CCCAppViewPluginBaseExtension( TUid aExtensionUid )
+    {
+    if ( aExtensionUid == KMCCAppViewPluginBaseExtension2Uid )
+        {
+        return static_cast<MCCAppViewPluginBase2*>( this );
+        }
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::HandleCommandL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::HandleCommandL( TInt aCommand )
+    {
+    CCA_DP(KMyCardLogFile, 
+        CCA_L("->CCCAppMyCardPlugin::HandleCommandL command=%d"), aCommand );
+                
+    switch( aCommand )
+        {                
+        case ECCAppMyCardCmdEdit:
+            {            
+            TInt index;            
+            MVPbkStoreContact& storeContact = iMyCard->StoreContact();
+            
+            TRAPD( err,
+                {
+                index = iMyCard->PresentationContactL().PresentationFields().StoreIndexOfField( 0 );                        
+        
+                MVPbkBaseContactField* field = storeContact.Fields().FieldAtLC( index );
+                                        
+                const MVPbkFieldType* type = field->BestMatchingFieldType();
+                const TArray<TVPbkFieldVersitProperty> fieldProperty = type->VersitProperties();
+    
+                if( fieldProperty.Count() )
+                    {
+                    const TVPbkFieldVersitProperty property = fieldProperty[0];
+                        
+                    if( property.Name() == EVPbkVersitNameADR )
+                        {
+                        index = KErrNotSupported;
+                        }            
+                    }                       
+                                                 
+                if( field )
+                    {
+                    CleanupStack::PopAndDestroy( field );
+                    }
+            
+                EditL( index );
+                } );
+            
+            if( err != KErrNone )
+                {
+                HandleError( err );                
+                }
+            break;
+            }
+        case ECCappMyCardCmdSendVCard:
+        	{
+        	SendBusinessCardL();
+        	break;
+        	}
+        case ECCappMyCardCmdDelete: 
+        	{
+            HBufC* prompt = 
+                StringLoader::LoadLC( R_QTN_PHOB_MY_CARD_CLEAR_CONFIRM );
+            CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+            if( dlg->ExecuteLD( R_PBK2_GENERAL_CONFIRMATION_QUERY, *prompt ) )
+                {
+                iMyCard->PresentationContactL().DeleteL( *iMyCard );                
+                }
+            CleanupStack::PopAndDestroy( prompt );
+        	break;
+        	}        	
+        default:
+            {
+            // Forward rest to base class
+            CCCAppViewPluginAknView::HandleCommandL( aCommand );
+            }
+        }
+    
+    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::HandleCommandL()"));
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::EditL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::EditL( TInt aFocusedFieldIndex )
+	{
+	iMyCard->EditContactL(  aFocusedFieldIndex );
+	}
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::HandleError
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::HandleError( TInt aError )
+    {
+    CCoeEnv::Static()->HandleError( aError );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::NewContainerL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::NewContainerL()
+    {
+    iOwnContainer = new (ELeave) CCCAppMyCardContainer( *this );
+    iContainer = iOwnContainer;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::PluginBusy
+// ---------------------------------------------------------------------------
+//
+TBool CCCAppMyCardPlugin::PluginBusy()
+    {
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::Id
+// ---------------------------------------------------------------------------
+//
+TUid CCCAppMyCardPlugin::Id() const
+    {
+    return TUid::Uid( KCCAMyCardPluginImplmentationUid );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::PrepareViewResourcesL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::PrepareViewResourcesL()
+    {
+    CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardPlugin::PrepareViewResourcesL()"));
+    
+    // MyCard own resource file
+    TFileName fileName( KDC_RESOURCE_FILES_DIR );
+    fileName.Append( KMyCardResourceFileName );
+    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+    iResourceLoader.OpenL( fileName );
+    
+    /// Phonebook 2 UI controls resource
+    fileName.Copy( KDC_RESOURCE_FILES_DIR );
+    fileName.Append( KMyCardPbk2UiControlsResFileName );
+    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+    iPbk2UiControlResource.OpenL( fileName );
+    
+    // commands
+    fileName.Copy( KDC_RESOURCE_FILES_DIR );
+    fileName.Append( KPbk2CommandsDllResFileName );
+    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+    iCommandsResourceFile.OpenL( fileName );
+    
+    // common ui
+    fileName.Copy( KDC_RESOURCE_FILES_DIR );
+	fileName.Append( KPbk2CommonUiDllResFileName );
+	BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+	iCommonUiResourceFile.OpenL( fileName );
+	
+    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardPlugin::PrepareViewResourcesL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::CommandHandlerL
+// ---------------------------------------------------------------------------
+//
+CPbk2CommandHandler* CCCAppMyCardPlugin::CommandHandlerL()
+	{
+	// create command handler if not created yet
+	if( !iCommandHandler )
+		{
+		// command handler
+		iCommandHandler = CPbk2CommandHandler::NewL();
+		}
+	return iCommandHandler;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardPlugin::SendBusinessCardL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::SendBusinessCardL()
+	{
+	// send business card
+	CommandHandlerL()->HandleCommandL( EPbk2CmdSend, *iOwnContainer, NULL );
+	}
+
+// ---------------------------------------------------------------------------
+// ProcessCommandL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::ProcessCommandL(TInt aCommandId)
+     {
+     TInt err = KErrNone;
+     
+     switch(aCommandId)
+         {
+         case ECCAppMyCardCmdStylusViewImageCmd:             
+             TRAP( err, ViewImageCmdL() );             
+             break;             
+             
+         case ECCAppMyCardCmdStylusChangeImageCmd:
+             TRAP( err, ChangeImageCmdL() );             
+             break;
+             
+         case ECCAppMyCardCmdStylusRemoveImageCmd:
+             TRAP( err, RemoveImageCmdL() );             
+             break;
+             
+         case ECCAppMyCardCmdStylusAddImageCmd:
+             TRAP( err, AddImageCmdL() );             
+             break;
+             
+         case ECCAppMyCardCmdStylusCopyDetailCmd:             
+              TRAP( err, CopyDetailL() );              
+              break;                        
+             
+         default:
+             CAknView::ProcessCommandL( aCommandId );
+             break;
+         }
+     
+      if( err != KErrNone )
+         {
+         HandleError( err );
+         }
+     }
+
+// --------------------------------------------------------------------------- 
+// CCCAppMyCardPlugin::RemoveImageCmdL
+// --------------------------------------------------------------------------- 
+// 
+void CCCAppMyCardPlugin::RemoveImageCmdL() 
+    { 
+	CommandHandlerL()->HandleCommandL( EPbk2CmdRemoveImage, *iOwnContainer, NULL );
+    } 
+
+// --------------------------------------------------------------------------- 
+// CCCAppMyCardPlugin::AddImageCmdL
+// --------------------------------------------------------------------------- 
+// 
+void CCCAppMyCardPlugin::AddImageCmdL() 
+    { 
+	CommandHandlerL()->HandleCommandL( EPbk2CmdAddImage, *iOwnContainer, NULL );
+    } 
+ 
+// --------------------------------------------------------------------------- 
+// CCCAppMyCardPlugin::ViewImageCmdL
+// --------------------------------------------------------------------------- 
+// 
+void CCCAppMyCardPlugin::ViewImageCmdL() 
+    { 
+	CommandHandlerL()->HandleCommandL( EPbk2CmdViewImage, *iOwnContainer, NULL );
+    } 
+
+// --------------------------------------------------------------------------- 
+// CCCAppMyCardPlugin::ChangeImageCmdL
+// --------------------------------------------------------------------------- 
+// 
+void CCCAppMyCardPlugin::ChangeImageCmdL() 
+    { 
+	CommandHandlerL()->HandleCommandL( EPbk2CmdChangeImage, *iOwnContainer, NULL );
+    } 
+
+// ---------------------------------------------------------------------------
+// CCCAppMyCardContainer::CopyDetailL
+// ---------------------------------------------------------------------------
+//
+void CCCAppMyCardPlugin::CopyDetailL()
+    {
+    CommandHandlerL()->HandleCommandL( EPbk2CmdCopyDetail, *iOwnContainer, NULL );
+    }
+
+void CCCAppMyCardPlugin::EnableOptionsMenu( TBool aEnable )
+    {
+    Cba()->MakeCommandVisibleByPosition( 
+           CEikButtonGroupContainer::ELeftSoftkeyPosition, aEnable );
+    }
+// End of File