--- /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