diff -r 000000000000 -r f979ecb2b13e searchfw/plugins/contactsplugin/src/contactssearchplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchfw/plugins/contactsplugin/src/contactssearchplugin.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,406 @@ +/* +* Copyright (c) 2006-2007 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: Plugin for contactsplugin information search. +* +*/ + + + + +//SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include +#include +#include +#include +#include +#include + +//USER INCLUDES +#include "contactssearchplugin.h" +#include "contactssearchplugindefines.h" +#include "contactssearchresource.rsg" + +//FORWARD DECLARATION +class CVwsSessionWrapper; + + + +// ------------------------------------------------------ +// 1st phase constructor +// ------------------------------------------------------ +CContactSearchPlugin* CContactSearchPlugin::NewL() +{ + CContactSearchPlugin* self = new ( ELeave ) CContactSearchPlugin(); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; +} + + +// ------------------------------------------------------ +// Desstructor +// ------------------------------------------------------ +CContactSearchPlugin::~CContactSearchPlugin() + { + if(iContactsCaption) + { + delete iContactsCaption; + iContactsCaption = NULL; + } + + if(iSimCaption) + { + delete iSimCaption; + iSimCaption = NULL; + } + + if(iPhoneMemoryCaption) + { + delete iPhoneMemoryCaption; + iPhoneMemoryCaption= NULL; + } + + if(iViewSrvSession) + { + delete iViewSrvSession; + iViewSrvSession = NULL; + } + + } + + + +// ------------------------------------------------------ +// Creates a content searcher and ownership is transfered +// to calling function +// ------------------------------------------------------ +// +MSearchContentSearcher* CContactSearchPlugin::ContentSearcherL( + const RArray& aContentIdArray, const CSearchCondition& aCondition, + MSearchPluginObserver& aObserver ) +{ + + for( TInt j = 0; j < aContentIdArray.Count(); j++ ) + { + // create the iImagesSearcher + if( (aContentIdArray[j].iUid == KSearchCClassContactsUid.iUid )) + { + iContactsSearcher = NULL; + iContactsSearcher = CContactsSearcher::NewL( aContentIdArray, + aCondition, this->PluginId(),aObserver); + return iContactsSearcher; + } + } + return NULL; +} + + +// ------------------------------------------------------ +// Gets supported contents +// ------------------------------------------------------ +// +void CContactSearchPlugin::GetSupportedContentL( + RPointerArray& aContent ) +{ + + CSearchContent* content = NULL; + CSearchIconInfo* icon = NULL; + + content = CSearchContent::NewL( CSearchContent::ETypeContentClass ); + CleanupStack::PushL( content ); + + + content->SetContentId( KSearchCClassContactsUid ); + content->SetSubContentId(0 ); + content->SetPluginId( this->PluginId() ); + + + + RFs fsSession; + _LIT( KContactsMifFileName, "contactssearchplugin.mif" ); + + TPtrC driveLetter = TParsePtrC( RProcess().FileName() ).Drive(); + TFileName mifFileName( driveLetter ); + mifFileName.Append( KDC_APP_BITMAP_DIR ); + mifFileName.Append( KContactsMifFileName ); + + icon = CSearchIconInfo::NewL(); + CleanupStack::PushL( icon ); + icon->SetSkinId( KAknsIIDQgnPropFmgrFileApps ); + icon->SetIconFileL( mifFileName ); + + //Set the correct prop_file_images_sub and mask + icon->SetIconIndex( EMbmContactssearchpluginQgn_prop_search_contacts ); + icon->SetIconMaskIndex( EMbmContactssearchpluginQgn_prop_search_contacts_mask ); + CleanupStack::Pop( icon ); + content->SetIconInfo( icon ); + + + + content->SetCaptionL( *iContactsCaption ); + + aContent.Append( content ); + + CleanupStack::Pop( content ); + + CSearchContent* simContent = NULL; + simContent = CSearchContent::NewL( CSearchContent::ETypeContentFolder ); + CleanupStack::PushL( simContent ); + + // Icon for sim contacts + CSearchIconInfo* simIconInfo = CSearchIconInfo::NewL(); + CleanupStack::PushL( simIconInfo ); + + if( simIconInfo ) + { + simIconInfo->SetIconFileL( mifFileName ); + simIconInfo->SetIconIndex( EMbmContactssearchpluginQgn_prop_search_contacts ); + simIconInfo->SetIconMaskIndex( EMbmContactssearchpluginQgn_prop_search_contacts_mask ); + simIconInfo->SetSkinId( KAknsIIDQgnIndiCdrReminder ); + } + + if( simIconInfo && simContent ) + simContent->SetIconInfo( simIconInfo ); + + if(simContent && content ) + { + simContent->SetContentId( KSearchCClassContactsUid ); + simContent->SetSubContentId( KSearchCFolderSIMUid.iUid ); + simContent->SetPluginId( this->PluginId() ); + // set caption "SIM contacts" + simContent->SetCaptionL( *iSimCaption ); + content->AddChildL( simContent ); + } + + CleanupStack::Pop( simIconInfo ); + CleanupStack::Pop( simContent ); + + CSearchContent* phoneContent = NULL; + phoneContent = CSearchContent::NewL( CSearchContent::ETypeContentFolder ); + CleanupStack::PushL( phoneContent ); + + // Icon for Phone contacts + CSearchIconInfo* phoneIconInfo = CSearchIconInfo::NewL(); + CleanupStack::PushL( phoneIconInfo ); + + if( phoneIconInfo ) + { + phoneIconInfo->SetIconFileL( mifFileName ); + phoneIconInfo->SetIconIndex( EMbmContactssearchpluginQgn_prop_search_contacts ); + phoneIconInfo->SetIconMaskIndex( EMbmContactssearchpluginQgn_prop_search_contacts_mask ); + phoneIconInfo->SetSkinId( KAknsIIDQgnIndiCdrReminder ); + } + + if( phoneIconInfo && phoneContent ) + phoneContent->SetIconInfo( phoneIconInfo ); + + if(phoneContent && content) + { + phoneContent->SetContentId( KSearchCClassContactsUid ); + phoneContent->SetSubContentId( KSearchCFolderPhoneUid.iUid); + phoneContent->SetPluginId( this->PluginId() ); + + // set caption "Phone contacts" + phoneContent->SetCaptionL( *iPhoneMemoryCaption ); + content->AddChildL( phoneContent ); + } + + CleanupStack::Pop( phoneIconInfo ); + CleanupStack::Pop( phoneContent ); + + +} + + + + +// ------------------------------------------------------ +// Returns if the given content is supported or not +// ------------------------------------------------------ +// +TBool CContactSearchPlugin::IsSupportedContent( TUid aContentId ) +{ + if( KSearchCClassContactsUid.iUid == aContentId.iUid + || KSearchCFolderPhoneUid.iUid == aContentId.iUid + || KSearchCFolderSIMUid.iUid == aContentId.iUid ) + { + return ETrue; + } + + return EFalse; +} + + +// ------------------------------------------------------ +// Launches the application corresponding to document id +// ------------------------------------------------------ +// +void CContactSearchPlugin::LaunchApplicationL( const TDesC8& aLaunchInfo ) +{ + + + //if(aDocumentId.PluginId() == this->PluginId() ) + { + + // if( KErrNone == err) + { + // Write parameters in a buffer + TBuf8<80> param; + + // MVPbkContactLink* launchContact = + // iContactsSearcher->GetContactLinkAtIndexLC(myArrayIndex); + //if(launchContact) + { + + RDesWriteStream stream( param ); + stream.PushL(); + stream.WriteInt8L( 1 ); // opcode Version + stream.WriteInt8L( 1 ); // opcode EFocusedContact + HBufC8* buf = HBufC8::NewLC(aLaunchInfo.Length()); + buf->Des().Append(aLaunchInfo); + + //HBufC8* buf = launchContact->PackLC(); // pack the contact link + stream.WriteUint16L( buf->Length() ); // write link length + stream.WriteL( *buf ,buf->Length() ); + // write the actual link buffer + CleanupStack::PopAndDestroy(); // cleanup buf + stream.WriteInt32L( 4 ); // opcode EFocusedFieldIndex + stream.WriteInt16L( KFocussedFieldIndex ); // field index 3 + stream.CommitL(); + CleanupStack::PopAndDestroy(); + //CleanupStack::PopAndDestroy(); // cleanup stream + + // Make view id with Phonebook's app UID3 and Contact Info View's id + const TVwsViewId viewId( TUid::Uid(KPbk2UID3), TUid::Uid(4) ); + + // Activate the view + iViewSrvSession->ActivateView( viewId, TUid::Uid( 0x102072a0 ), param ); + + } + //else + { + // User::Leave( KErrNotFound ); + } + } + + } + +} + + +// ------------------------------------------------------ +// Constructor +// ------------------------------------------------------ +// +CContactSearchPlugin::CContactSearchPlugin( ) +{ + + +} + + +// ------------------------------------------------------ +// 2nd phase constructor +// ------------------------------------------------------ +// +void CContactSearchPlugin::ConstructL() +{ + RResourceFile resourceFile; + HBufC* resourceFileName = HBufC::NewL( KMaxFileName ); + TPtr resourceFileNamePtr = resourceFileName->Des(); + + TPtrC driveLetter = TParsePtrC( RProcess().FileName() ).Drive(); + RFs fsSession; + User::LeaveIfError( fsSession.Connect() ); + //Read resource file + resourceFileNamePtr.Copy( driveLetter ); + resourceFileNamePtr.Append( KDC_ECOM_RESOURCE_DIR ); + resourceFileNamePtr.Append( KResoureFileName ); + + CleanupClosePushL( resourceFile ); + TFileName fileName = resourceFileName->Des(); + BaflUtils::NearestLanguageFile( fsSession,fileName ); + resourceFile.OpenL(fsSession,fileName ); + resourceFile.ConfirmSignatureL(0); + + // Fetch the caption "contacts" + { + + + HBufC8* readBuffer = resourceFile.AllocReadLC( R_QTN_SEARCH_TYPES_CONTACTS ); + + const TPtrC16 ptrReadBuffer( ( TText16*) readBuffer->Ptr(), + ( readBuffer->Length()+1 )>>1 ); + + iContactsCaption = ptrReadBuffer.AllocL(); + CleanupStack::PopAndDestroy( readBuffer ); + + } + // Fetch the caption "SIM Contacts" + { + + HBufC8* readBuffer = resourceFile.AllocReadLC( R_QTN_SEARCH_SUBFOLDERS_SIM ); + + const TPtrC16 ptrReadBuffer( ( TText16*) readBuffer->Ptr(), + ( readBuffer->Length()+1 )>>1 ); + + iSimCaption = ptrReadBuffer.AllocL(); + CleanupStack::PopAndDestroy( readBuffer ); + + } + //Fetch the caption "Phone contacts" + { + + HBufC8* readBuffer = resourceFile.AllocReadLC( R_QTN_SEARCH_SUBFOLDERS_PHONE ); + + const TPtrC16 ptrReadBuffer( ( TText16*) readBuffer->Ptr(), + ( readBuffer->Length()+1 )>>1 ); + + iPhoneMemoryCaption = ptrReadBuffer.AllocL(); + + CleanupStack::PopAndDestroy( readBuffer ); + + } + CleanupStack::Pop( ); + resourceFile.Close(); + delete resourceFileName; + resourceFileName = NULL; + fsSession.Close(); + + //Create the view session + iViewSrvSession = CVwsSessionWrapper::NewL(); +} + + + +