williamr@4: /* williamr@4: * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). williamr@4: * All rights reserved. williamr@4: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@4: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: * williamr@4: * Initial Contributors: williamr@4: * Nokia Corporation - initial contribution. williamr@4: * williamr@4: * Contributors: williamr@4: * williamr@4: * Description: williamr@4: * Represents a connection to the Phonebook contact database williamr@4: * williamr@4: */ williamr@4: williamr@4: williamr@4: #ifndef __CPBKCONTACTENGINE_H__ williamr@4: #define __CPBKCONTACTENGINE_H__ williamr@4: williamr@4: // INCLUDES williamr@4: #include // CBase williamr@4: #include // TContactItemId williamr@4: #include // MContactDbObserver williamr@4: #include // RFs williamr@4: #include "PbkFields.hrh" // TPbkFieldId williamr@4: williamr@4: williamr@4: // FORWARD DECLARATIONS williamr@4: class CContactDatabase; williamr@4: class MIdleFindObserver; williamr@4: class MPbkContactDbObserver; williamr@4: class CContactGroup; williamr@4: class CPbkFieldsInfo; williamr@4: class CPbkContactItem; williamr@4: class CPbkContactIter; williamr@4: class CPbkContactChangeNotifier; williamr@4: class CPbkIdleFinder; williamr@4: class MPbkCompressUi; williamr@4: class CPbkConstants; williamr@4: class MPbkContactNameFormat; williamr@4: class MPbkFieldDataArray; williamr@4: class CContactViewBase; williamr@4: class CContactItem; williamr@4: class RSharedDataClient; williamr@4: class TResourceReader; williamr@4: class CPbkEngineExtension; williamr@4: class CPbkSortOrderManager; williamr@4: class CPbkSINDHandlerInterface; williamr@4: williamr@4: williamr@4: // CLASS DECLARATION williamr@4: williamr@4: /** williamr@4: * The main entrypoint to the Phonebook contact engine. The Phonebook williamr@4: * contact engine builds on top of the Symbian Contacts model and williamr@4: * implements platform specific functionality and policies that can be williamr@4: * reused and followed by clients to implement functionality that is williamr@4: * better integrated to the platform functionality. Functionality like williamr@4: * contact field typing is implemented by this engine. williamr@4: */ williamr@4: class CPbkContactEngine : williamr@4: public CBase, williamr@4: private MContactDbObserver williamr@4: { williamr@4: public: // Constructors and destructor williamr@4: /** williamr@4: * Creates a new Phonebook engine object and connects to the default williamr@4: * contact database. If the default database does not exist it is williamr@4: * created. williamr@4: * williamr@4: * @param aFs An open file server connection. If !=NULL aFs is used williamr@4: * instead of a locally created RFs connection. aFs must williamr@4: * remain connected for the lifetime of the returned williamr@4: * object. williamr@4: * @return A new instance of this class. williamr@4: * @exception KErrCorrupt if the database is corrupted. williamr@4: */ williamr@4: IMPORT_C static CPbkContactEngine* NewL(RFs* aFs=NULL); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * TESTING ONLY williamr@4: * Creates a new engine object and connects it to a specified williamr@4: * database file. If the database file does not exist it is created. williamr@4: * williamr@4: * @param aFileName The database filename. williamr@4: * @param aReplace If ETrue replaces exisiting file with an empty one. williamr@4: * PLEASE NOTE: all data in the existing file williamr@4: * will be lost! williamr@4: * @param aFs An open file server connection. If !=NULL aFs is used williamr@4: * instead of a locally created RFs connection. aFs must williamr@4: * remain connected for the lifetime of the returned williamr@4: * object. williamr@4: * @return A new instance of this class. williamr@4: * @exception KErrCorrupt if the database is corrupted. williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C static CPbkContactEngine* NewL williamr@4: (const TDesC& aFileName, TBool aReplace=EFalse, RFs* aFs=NULL); williamr@4: williamr@4: /** williamr@4: * Replaces the default contact database and connects to it. See williamr@4: * Symbian Contacs model documentation for CContactDatabase::ReplaceL williamr@4: * for possible leave codes. williamr@4: * PLEASE NOTE: all data in the existing database will be lost! williamr@4: * williamr@4: * @param aFs An open file server connection. If !=NULL aFs is used williamr@4: * instead of a locally created RFs connection. aFs must williamr@4: * remain connected for the lifetime of the returned williamr@4: * object. williamr@4: * @return A new instance of this class. williamr@4: * @see CContactDatabase::ReplaceL williamr@4: */ williamr@4: IMPORT_C static CPbkContactEngine* ReplaceL(RFs* aFs=NULL); williamr@4: williamr@4: /** williamr@4: * Destructor. Destroys this object and closes the contact database williamr@4: * connection. REComSession::FinalClose() is called. Notice that williamr@4: * FinalClose -call releases resource handles of already destroyed ECom williamr@4: * plugins also outside CPbkContactEngine. See REComSession williamr@4: * documentation. williamr@4: */ williamr@4: ~CPbkContactEngine(); williamr@4: williamr@4: public: // Accessors williamr@4: /** williamr@4: * Returns the global Phonebook engine instance, NULL if no instance williamr@4: * created yet. williamr@4: * Note1: Uses thread local storage (TLS), which is slow. Cache the williamr@4: * returned pointer if it is used more than one time! williamr@4: * Note2: Only the first engine instance created in calling thread can williamr@4: * be accessed with this function. williamr@4: * @return Global Phonebook engine instance. williamr@4: */ williamr@4: IMPORT_C static CPbkContactEngine* Static(); williamr@4: williamr@4: /** williamr@4: * Returns the underlying CContactDatabase object. Use only if this class's API williamr@4: * is not enough for your purposes. williamr@4: * williamr@4: * @return The underlying Symbian Contacts model CContactDatabase instance. williamr@4: * @see CContactDatabase williamr@4: */ williamr@4: IMPORT_C CContactDatabase& Database(); williamr@4: williamr@4: /** williamr@4: * Returns the field type info array. williamr@4: * @return All the Phonebook field types. williamr@4: * @see CPbkFieldsInfo williamr@4: */ williamr@4: IMPORT_C const CPbkFieldsInfo& FieldsInfo(); williamr@4: williamr@4: /** williamr@4: * Returns an open file server session. williamr@4: * @return A handle to a file server session. williamr@4: */ williamr@4: IMPORT_C RFs& FsSession() const; williamr@4: williamr@4: public: // Creating contacts williamr@4: /** williamr@4: * Returns a new contact card with default fields. williamr@4: * @return A new empty contact item object. williamr@4: */ williamr@4: IMPORT_C CPbkContactItem* CreateEmptyContactL(); williamr@4: williamr@4: /** williamr@4: * Adds a new contact to the contact database. williamr@4: * williamr@4: * @param aContact The new contact item to add. williamr@4: * @param aImmediateNotify Send notification to observers immediately. williamr@4: * NOTE: send immediately will result in williamr@4: * observers (MPbkContactDbObserver) receiving williamr@4: * the event twice! williamr@4: * @return The id of the new contact item. williamr@4: * @see CContactDatabase::AddNewContactL williamr@4: */ williamr@4: IMPORT_C TContactItemId AddNewContactL williamr@4: (CPbkContactItem& aContact, TBool aImmediateNotify=EFalse); williamr@4: williamr@4: /** williamr@4: * Duplicates a contact in the database. williamr@4: * williamr@4: * @param aId Id of the contact to duplicate. williamr@4: * @param aImmediateNotify Send notification to observers immediately. williamr@4: * NOTE: send immediately will result in williamr@4: * observers (MPbkContactDbObserver) receiving williamr@4: * the event twice! williamr@4: * @return Contact id of the new duplicate. williamr@4: */ williamr@4: IMPORT_C TContactItemId DuplicateContactL williamr@4: (TContactItemId aId, TBool aImmediateNotify=EFalse); williamr@4: williamr@4: public: // Reading contacts williamr@4: /** williamr@4: * Reads a contact and returns a phonebook contact item. williamr@4: * williamr@4: * @param aContactId Contact item id to be read. williamr@4: * @param aFieldTypes Array of types of fields to read in, all williamr@4: * fields are read if NULL (which is default). williamr@4: * NOTE: when using this parameter ReadContactL williamr@4: * may return more fields than expected; for example williamr@4: * if aFieldTypes contains any phonenumber the williamr@4: * method may return all phone number fields williamr@4: * of the contact. williamr@4: * @return A new Phonebook contact item. williamr@4: * @see CContactDatabase::ReadContactL williamr@4: */ williamr@4: IMPORT_C CPbkContactItem* ReadContactL williamr@4: (TContactItemId aContactId, const CPbkFieldIdArray* aFieldTypes=NULL); williamr@4: williamr@4: /** williamr@4: * Same as ReadContactL, but leaves the returned contact item williamr@4: * on the cleanup stack. williamr@4: * williamr@4: * @param aContactId Contact item id to be read. williamr@4: * @param aFieldTypes Array of types of fields to read in, all williamr@4: * fields are read if NULL (which is default). williamr@4: * NOTE: when using this parameter ReadContactL williamr@4: * may return more fields than expected; for example williamr@4: * if aFieldTypes contains any phonenumber the williamr@4: * method may return all phone number fields williamr@4: * of the contact. williamr@4: * @return A new Phonebook contact item. williamr@4: */ williamr@4: IMPORT_C CPbkContactItem* ReadContactLC williamr@4: (TContactItemId aContactId, const CPbkFieldIdArray* aFieldTypes=NULL); williamr@4: williamr@4: /** williamr@4: * Same as ReadContactLC but reads only minimal information. See williamr@4: * Symbian Contacts Model documentation for definition of "minimal" in this williamr@4: * case. williamr@4: * williamr@4: * @param aContactId Contact item id to be read. williamr@4: * @return A new phonebook contact item. Leaves the item on the cleanup stack. williamr@4: * @see CContactDatabase::ReadMinimalContactL williamr@4: */ williamr@4: IMPORT_C CPbkContactItem* ReadMinimalContactLC(TContactItemId aContactId); williamr@4: williamr@4: /** williamr@4: * Returns a Phonebook contact iterator. williamr@4: * @param aUseMinimalRead If ETrue the iterator will use the Symbian williamr@4: * Contacts model CContactDatabase::ReadMinimalContactL, EFalse will read williamr@4: * all the contact fields. Default behaviour is to read all fields. williamr@4: * @see CPbkContactIter::NewL. williamr@4: * @see CContactDatabase::ReadMinimalContactL williamr@4: */ williamr@4: IMPORT_C CPbkContactIter* CreateContactIteratorLC williamr@4: (TBool aUseMinimalRead=EFalse); williamr@4: williamr@4: public: // Modifying contacts williamr@4: /** williamr@4: * Opens a contact and returns a phonebook contact item. williamr@4: * @param aContactId Contact item id to be opened. williamr@4: * @return A Phonebook contact item that is marked as open in the database. williamr@4: * @see CContactDatabase::OpenContactL williamr@4: */ williamr@4: IMPORT_C CPbkContactItem* OpenContactL(TContactItemId aContactId); williamr@4: williamr@4: /** williamr@4: * Same as OpenContactL, but leaves a lock record AND the opened williamr@4: * contact object on the cleanup stack. williamr@4: * Use CleanupStack::PopAndDestroy(2) to close the contact and destroy williamr@4: * the returned object. First pop pops the contact object and second williamr@4: * the lock object. williamr@4: * @param aContactId Contact item id to open. williamr@4: * @return A Phonebook contact item that is marked as open in the database. williamr@4: * @see CContactDatabase::OpenContactLX williamr@4: */ williamr@4: IMPORT_C CPbkContactItem* OpenContactLCX(TContactItemId aContactId); williamr@4: williamr@4: /** williamr@4: * Commit changes to a previously opened contact item into the contact williamr@4: * database. williamr@4: * williamr@4: * @param aContact Contact item to be updated in the database. williamr@4: * @param aImmediateNotify Send notification to observers immediately. williamr@4: * NOTE: send immediately will result in williamr@4: * observers (MPbkContactDbObserver) receiving williamr@4: * the event twice! williamr@4: * @see CContactDatabase::CommitContactL williamr@4: */ williamr@4: IMPORT_C void CommitContactL williamr@4: (CPbkContactItem& aContact, TBool aImmediateNotify=EFalse); williamr@4: williamr@4: /** williamr@4: * Closes a previously opened contact item without saving changes. williamr@4: * @param aContactId Contact item to be closed. williamr@4: * @see CContactDatabase::CloseContactL williamr@4: */ williamr@4: IMPORT_C void CloseContactL(TContactItemId aContactId); williamr@4: williamr@4: public: // Deleting contacts williamr@4: /** williamr@4: * Deletes a contact item from the database. williamr@4: * @param aContactId Contact item to be deleted. williamr@4: * @param aImmediateNotify Send notification to observers immediately. williamr@4: * NOTE: send immediately will result in williamr@4: * observers (MPbkContactDbObserver) receiving williamr@4: * the event twice! williamr@4: * @see CContactDatabase::DeleteContactL williamr@4: */ williamr@4: IMPORT_C void DeleteContactL williamr@4: (TContactItemId aContactId, TBool aImmediateNotify=EFalse); williamr@4: williamr@4: /** williamr@4: * Deletes multiple contact items from the database. williamr@4: * @param aContactIds Contact items to be deleted. williamr@4: * @param aImmediateNotify Send notification to observers immediately. williamr@4: * NOTE: send immediately will result in williamr@4: * observers (MPbkContactDbObserver) receiving williamr@4: * the event twice! williamr@4: * @see CContactDatabase::DeleteContactsL williamr@4: */ williamr@4: IMPORT_C void DeleteContactsL williamr@4: (const CContactIdArray& aContactIds, TBool aImmediateNotify=EFalse); williamr@4: williamr@4: /** williamr@4: * Deletes multiple contacts from the database in an active object williamr@4: * -driven asynchronous background process. williamr@4: * williamr@4: * @param aContactIds Contacts to delete. williamr@4: */ williamr@4: IMPORT_C void DeleteContactsOnBackgroundL williamr@4: (const CContactIdArray& aContactIds); williamr@4: williamr@4: public: // Contact groups williamr@4: /** williamr@4: * Creates a new contact group. williamr@4: * williamr@4: * @param aGroupLabel Group name. williamr@4: * @param aInTransaction See Symbian Contacts Model documentation williamr@4: * for CContactDatabase::CreateContactGroupL documentation. williamr@4: * @see CContactDatabase::CreateContactGroupL williamr@4: */ williamr@4: IMPORT_C CContactGroup* CreateContactGroupL williamr@4: (const TDesC& aGroupLabel,TBool aInTransaction=EFalse); williamr@4: williamr@4: /** williamr@4: * Adds a Contact to a group. williamr@4: * williamr@4: * @param aItemId Contact to be added to group. williamr@4: * @param aGroupId Group where the contact will be added to. williamr@4: * @see CContactDatabase::AddContactToGroupL williamr@4: */ williamr@4: IMPORT_C void AddContactToGroupL williamr@4: (TContactItemId aItemId, TContactItemId aGroupId); williamr@4: williamr@4: /** williamr@4: * Removes a contact from a group williamr@4: * williamr@4: * @param aItemId Contact to be removed from group. williamr@4: * @param aGroupId Group where the contact will be removed from. williamr@4: * @see CContactDatabase::RemoveContactFromGroupL williamr@4: */ williamr@4: IMPORT_C void RemoveContactFromGroupL williamr@4: (TContactItemId aItemId, TContactItemId aGroupId); williamr@4: williamr@4: /** williamr@4: * Reads a Contact group. williamr@4: * williamr@4: * @param aId Group id. williamr@4: * @return Contact group object. williamr@4: * @see CContactDatabase::ReadContactL williamr@4: */ williamr@4: IMPORT_C CContactGroup* ReadContactGroupL(TContactItemId aId); williamr@4: williamr@4: /** williamr@4: * Opens a Contact group for modification. williamr@4: * williamr@4: * @param aId Groups id williamr@4: * @return Contact group object. williamr@4: * @see CContactDatabase::OpenContactL williamr@4: */ williamr@4: IMPORT_C CContactGroup* OpenContactGroupL(TContactItemId aId); williamr@4: williamr@4: /** williamr@4: * Opens a Contact group for modification. Pushes the returned williamr@4: * contact group object and a lock item on the cleanup stack. williamr@4: * williamr@4: * @param aId Groups id williamr@4: * @return Contact group object. williamr@4: * @see CContactDatabase::OpenContactLX williamr@4: */ williamr@4: IMPORT_C CContactGroup* OpenContactGroupLCX(TContactItemId aId); williamr@4: williamr@4: /** williamr@4: * Commits changes to a contact group to the database. williamr@4: * williamr@4: * @param aId Groups id williamr@4: * @param aImmediateNotify Send notification to observers immediately. williamr@4: * NOTE: send immediately will result in williamr@4: * observers (MPbkContactDbObserver) receiving williamr@4: * the event twice! williamr@4: * @see CContactDatabase::CommitContactL williamr@4: */ williamr@4: IMPORT_C void CommitContactGroupL(CContactGroup& aGroup, TBool aImmediateNotify=EFalse); williamr@4: williamr@4: /** williamr@4: * Deletes a contact group from the database. williamr@4: * @param aContactId Contact group to be deleted. williamr@4: * @param aImmediateNotify Send notification to observers immediately. williamr@4: * NOTE: send immediately will result in williamr@4: * observers (MPbkContactDbObserver) receiving williamr@4: * the event twice! williamr@4: * @see CContactDatabase::DeleteContactL williamr@4: */ williamr@4: IMPORT_C void DeleteContactGroupL williamr@4: (TContactItemId aContactId, TBool aImmediateNotify=EFalse); williamr@4: williamr@4: public: // Speed dials williamr@4: /** williamr@4: * Sets a speed dial to a contact field. williamr@4: * williamr@4: * @param aItem Contact item to add speed dial to. williamr@4: * @param aFieldIndex Field index to add Speed dial to. williamr@4: * @param aSpeedDialPosition Speed dial position number to set to williamr@4: * the field. williamr@4: * @see CContactDatabase::SetFieldAsSpeedDialL williamr@4: */ williamr@4: IMPORT_C void SetFieldAsSpeedDialL williamr@4: (CPbkContactItem& aItem, TInt aFieldIndex, TInt aSpeedDialPosition); williamr@4: williamr@4: /** williamr@4: * Returns a speed dial contact. williamr@4: * williamr@4: * @param aSpeedDialPosition Speed dial position number. williamr@4: * @param aPhoneNumber Phone number williamr@4: * @see CContactDatabase::GetSpeedDialFieldL. williamr@4: */ williamr@4: IMPORT_C TContactItemId GetSpeedDialFieldL williamr@4: (TInt aSpeedDialPosition, TDes& aPhoneNumber) const; williamr@4: williamr@4: /** williamr@4: * Removes a speed dial from a contact. williamr@4: * williamr@4: * @param aContactId Contact item to remove the speed dial from. williamr@4: * @param aSpeedDialPosition Speed dial position number to remove. williamr@4: * @see CContactDatabase::RemoveSpeedDialFieldL. williamr@4: */ williamr@4: IMPORT_C void RemoveSpeedDialFieldL williamr@4: (TContactItemId aContactId, TInt aSpeedDialPosition); williamr@4: williamr@4: /** williamr@4: * Returns ETrue if this field has been assigned a speed dial position. williamr@4: * williamr@4: * @param aItem contact Item to check for speed dial. williamr@4: * @param aFieldIndex Index of the field to check. This is an index williamr@4: * into aItem.CardFields(). williamr@4: * @return ETrue if Speed dial exitst, EFalse if not. williamr@4: */ williamr@4: IMPORT_C TBool IsSpeedDialAssigned williamr@4: (const CPbkContactItem& aItem, TInt aFieldIndex) const; williamr@4: williamr@4: public: // Contact views williamr@4: /** williamr@4: * Returns a contact view object containing all the contacts in the williamr@4: * database. williamr@4: * williamr@4: * @return Contact view containing all the contacts in the database. williamr@4: * @see CContactViewBase williamr@4: */ williamr@4: IMPORT_C CContactViewBase& AllContactsView(); williamr@4: williamr@4: /** williamr@4: * Returns a contact view object containing all the groups in the williamr@4: * database. williamr@4: * williamr@4: * @return Contact view containing all the groups in the database. williamr@4: * @see CContactViewBase williamr@4: */ williamr@4: IMPORT_C CContactViewBase& AllGroupsViewL(); williamr@4: williamr@4: /** williamr@4: * Returns a contact view object containing all the contacts in the williamr@4: * database that match a filter. williamr@4: * williamr@4: * @param aFilter Use CContactDatabase::TContactViewFilter. williamr@4: * @see CContactViewBase williamr@4: */ williamr@4: IMPORT_C CContactViewBase& FilteredContactsViewL(TInt aFilter); williamr@4: williamr@4: public: // Events williamr@4: /** williamr@4: * Creates and returns a new CPbkContactChangeNotifier for the williamr@4: * default contact database. The returned object attaches aObserver williamr@4: * to this engine instance as long as the object exists. williamr@4: * williamr@4: * @param aObserver Observer to attach to this object. williamr@4: * @return New CPbkContactChangeNotifier object. Caller is responsible williamr@4: * of the object. williamr@4: * @see CPbkContactChangeNotifier williamr@4: * @see MPbkContactDbObserver williamr@4: */ williamr@4: IMPORT_C CPbkContactChangeNotifier* CreateContactChangeNotifierL williamr@4: (MPbkContactDbObserver* aObserver); williamr@4: williamr@4: public: // Contact name formatting williamr@4: /** williamr@4: * Gets a title text for a contact or localised text for unnamed williamr@4: * contact if contact contains no title. williamr@4: * williamr@4: * @param aItem Contact item for which to make the title. williamr@4: * @return A buffer containing the title or unnamed text if no title williamr@4: * can be generated. Caller is responsible of deleting the williamr@4: * returned buffer. williamr@4: */ williamr@4: IMPORT_C HBufC* GetContactTitleL(const CPbkContactItem& aItem) const; williamr@4: williamr@4: /** williamr@4: * Similar to GetContactTitleL but returns NULL if contact contains no williamr@4: * title. Uses the MPbkFieldDataArray interface to access the field williamr@4: * content. williamr@4: * @param aContactData The contact field data array. williamr@4: * @return Contact title, NULL if field array did not contain any fields williamr@4: * used to for constructing contact titles. williamr@4: * @see CPbkContactEngine::GetContactTitleL williamr@4: */ williamr@4: IMPORT_C HBufC* GetContactTitleOrNullL williamr@4: (const MPbkFieldDataArray& aContactData); williamr@4: williamr@4: /** williamr@4: * Returns ETrue if field is one of the fields used in building the williamr@4: * contact title. williamr@4: * williamr@4: * @param aFieldId The id of the field. williamr@4: * @return ETrue if aFieldId is type of a field used to build contact williamr@4: * titles. williamr@4: * @see GetContactTitleL williamr@4: * @see GetContactTitleOrNullL williamr@4: */ williamr@4: IMPORT_C TBool IsTitleField(TPbkFieldId aFieldId) const; williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Returns the contact name formatter. williamr@4: * williamr@4: * @see MPbkContactNameFormat williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C MPbkContactNameFormat& ContactNameFormat() const; williamr@4: williamr@4: /** williamr@4: * Returns the localised title text to use for unnamed contacts. williamr@4: * @return Localised title text to use for unnamed contacts. williamr@4: */ williamr@4: IMPORT_C const TDesC& UnnamedTitle() const; williamr@4: williamr@4: public: // Searching williamr@4: /** williamr@4: * Call-through for new Phone number matching function in 6.2 version williamr@4: * of class CContactDatabase. If you don't need any other functionality williamr@4: * from CPbkContactEngine than this consider using the CContactDatabase williamr@4: * API directly. See Symbian Contacts Model documentation for williamr@4: * CContactDatabase::MatchPhoneNumberL use. williamr@4: * williamr@4: * @see CContactDatabase::MatchPhoneNumberL(const TDesC&,const TInt) williamr@4: */ williamr@4: IMPORT_C CContactIdArray* MatchPhoneNumberL williamr@4: (const TDesC& aNumber, const TInt aMatchLengthFromRight); williamr@4: williamr@4: /** williamr@4: * Searches all contacts in the database for aText. williamr@4: * williamr@4: * @param aText Text to search. williamr@4: * @param aFieldTypes Phonebook fields types to at least williamr@4: * include in the search. If NULL searches all williamr@4: * fields.
williamr@4: * PLEASE NOTE: The find matches in most williamr@4: * cases also other fields than those specified williamr@4: * in aFieldTypes. Always loop through the williamr@4: * returned contacts to check match in the williamr@4: * required fields. williamr@4: * @return Array of matching contact IDs. williamr@4: * @see CContactDatabase::FindLC. williamr@4: */ williamr@4: IMPORT_C CContactIdArray* FindLC williamr@4: (const TDesC& aText, const CPbkFieldIdArray* aFieldTypes=NULL); williamr@4: williamr@4: /** williamr@4: * Searches all contacts in the database for aText asynchronously. williamr@4: * williamr@4: * @param aText Text to search. williamr@4: * @param aFieldTypes Phonebook fields types to at least williamr@4: * include in the search. If NULL searches all williamr@4: * fields.
williamr@4: * PLEASE NOTE: The find matches in most williamr@4: * cases also other fields than those specified williamr@4: * in aFieldTypes. Always loop through the williamr@4: * returned contacts to check match in the williamr@4: * required fields. williamr@4: * @param aObserver Observer for this operation. williamr@4: * @return CPbkIdleFinder object which is used to access the find williamr@4: * results when complete. Deleting this object will cancel williamr@4: * this asyncronous find operation. williamr@4: * @see CContactDatabase::FindAsyncL. williamr@4: * @see CPbkIdleFinder williamr@4: */ williamr@4: IMPORT_C CPbkIdleFinder* FindAsyncL( williamr@4: const TDesC& aText, williamr@4: const CPbkFieldIdArray* aFieldTypes=NULL, williamr@4: MIdleFindObserver *aObserver=NULL); williamr@4: williamr@4: public: // Phonebook internal API williamr@4: /** williamr@4: * @internal williamr@4: * Sets the compression UI for this engine. williamr@4: * To be called by Phonebook only! williamr@4: * williamr@4: * @see MPbkCompressUi williamr@4: * @see CheckCompress williamr@4: * @see CancelCompress williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C void SetCompressUi(MPbkCompressUi* aCompressiUi); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Checks if the contact database needs a compression. williamr@4: * To be called by Phonebook only! williamr@4: * williamr@4: * @see SetCompressUi williamr@4: * @see CompressL williamr@4: * @see CancelCompress williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C TBool CheckCompress(); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Compresses the database if necessary. To be called by Phonebook only. williamr@4: * williamr@4: * @see SetCompressUi williamr@4: * @see CancelCompress williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C void CompressL(); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Call to cancel any ongoing database compression started with williamr@4: * CheckCompressL(). Calls PbkCompressCanceled() for any registered williamr@4: * compression UI. To be called by Phonebook only. williamr@4: * williamr@4: * @see SetCompressUi williamr@4: * @see CheckCompress williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C void CancelCompress(); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Checks current file system space and amount of wasted space in williamr@4: * Phonebook's database. Compresses the database synchronously if williamr@4: * Phonebook's database can be made smaller by compression. If file williamr@4: * system space is still under critical level after compression, williamr@4: * leaves with KErrDiskFull. williamr@4: * williamr@4: * @exception KErrDiskFull if file system is out of space. williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C void CheckFileSystemSpaceAndCompressL(); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Phonebook name ordering information. williamr@4: * @deprecated williamr@4: */ williamr@4: enum TPbkNameOrder williamr@4: { williamr@4: EPbkNameOrderLastNameFirstName = 0, /// Last name then first name order williamr@4: EPbkNameOrderFirstNameLastName, /// First name then last name order williamr@4: EPbkNameOrderNotDefined /// undefined name order williamr@4: }; williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Sets name display order. williamr@4: * @param aNameOrder The ordering to use williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C void SetNameDisplayOrderL(TPbkNameOrder aNameOrder); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Gets name display order. williamr@4: * @return The name ordering in use williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C TPbkNameOrder NameDisplayOrderL(); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Returns the phonebook constants object. williamr@4: * @return Phonebook constants manager williamr@4: * @deprecated williamr@4: */ williamr@4: IMPORT_C CPbkConstants* Constants(); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Returns the sort order manager of the engine. williamr@4: */ williamr@4: const CPbkSortOrderManager& SortOrderManager() const; williamr@4: williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Sets whether a separator character is shown between williamr@4: * last and first names. williamr@4: * @param aSeparator This parameter should contain the character to be williamr@4: * used as separator. If value is 0 then separator will not be williamr@4: * used between names. williamr@4: */ williamr@4: IMPORT_C void SetNameSeparatorL(TChar aSeparator); williamr@4: williamr@4: /** williamr@4: * @internal williamr@4: * Return info on whether separator character is used between last williamr@4: * and first names. williamr@4: * @return The separator character. Empty (value 0) if there is no williamr@4: * separator. williamr@4: */ williamr@4: IMPORT_C TChar NameSeparator() const; williamr@4: williamr@4: williamr@4: williamr@4: private: // from MContactDbObserver williamr@4: void HandleDatabaseEventL(TContactDbObserverEvent aEvent); williamr@4: williamr@4: private: // Interface for CPbkContactChangeNotifier williamr@4: friend class CPbkContactChangeNotifier; williamr@4: void AddObserverL(MPbkContactDbObserver* aObserver); williamr@4: void RemoveObserver(MPbkContactDbObserver* aObserver); williamr@4: void SendEventToAllObservers(const TContactDbObserverEvent& aEvent); williamr@4: williamr@4: private: // Implementation williamr@4: CPbkContactEngine(); williamr@4: void ConstructL(const TDesC* aFileName, TBool aReplace, RFs* aFs); williamr@4: void ConnectFsL(RFs* aRfs); williamr@4: void ReadResourcesL(TBool& aSettingsVisibility); williamr@4: void CreateDbConnectionL(const TDesC* aFileName, williamr@4: TBool aReplace, williamr@4: TInt& aDbOpenError, williamr@4: TBool aSettingsVisible); williamr@4: void SendImmidiateEventToAllObservers( williamr@4: TContactDbObserverEventType aEventType, williamr@4: TContactItemId aContactId, TBool aSendEvent); williamr@4: void doDeleteContactL(TContactItemId aContactId); williamr@4: class CContactDbConnection; williamr@4: friend class CContactDbConnection; williamr@4: friend class CPbkSharedDataObserver; williamr@4: williamr@4: private: // Data williamr@4: /// Ref: file server connection williamr@4: RFs iFs; williamr@4: /// Own: file server connection williamr@4: RFs iOwnFs; williamr@4: /// Own: Contact database connection object. williamr@4: CContactDbConnection* iDbConnection; williamr@4: /// Own: Observer array williamr@4: CArrayPtr* iObservers; williamr@4: /// Own: fields info array. williamr@4: CPbkFieldsInfo* iPbkFieldsInfo; williamr@4: /// Own: Phonebook constants williamr@4: CPbkConstants* iPbkConstants; williamr@4: /// Own: shared data client williamr@4: RSharedDataClient* iSharedDataClient; williamr@4: /// Own: maximum free space required to delete a contact from the DB williamr@4: TInt iFreeSpaceRequiredToDelete; williamr@4: /// Own: Engine extension interface williamr@4: CPbkEngineExtension* iExtension; williamr@4: /// Is separator used between first- and last-names of contacts williamr@4: TBool iUseSeparator; williamr@4: /// The separator to be used between first- and last-names of contacts williamr@4: TChar iSeparator; williamr@4: /// CPbkSINDHandler instance identifier key. williamr@4: TUid iDtorIDKey; williamr@4: /// Own: SIND Handler williamr@4: CPbkSINDHandlerInterface* iSINDHandler; williamr@4: williamr@4: williamr@4: williamr@4: }; williamr@4: williamr@4: #endif // __CPBKCONTACTENGINE_H__ williamr@4: williamr@4: // End of File