diff -r 5586b4d2ec3e -r 0d28c1c5b6dd phonebookengines/contactsmodel/cntplsql/src/cplcontactsfile.cpp --- a/phonebookengines/contactsmodel/cntplsql/src/cplcontactsfile.cpp Wed Apr 14 15:45:35 2010 +0300 +++ b/phonebookengines/contactsmodel/cntplsql/src/cplcontactsfile.cpp Tue Apr 27 16:23:35 2010 +0300 @@ -105,6 +105,7 @@ Close(); delete iItemManager; delete iConfigureStr; + iSqlDatabaseObservers.Reset(); } @@ -340,7 +341,13 @@ Close the database. */ void CPplContactsFile::Close(TBool aNotify) - { + { + // Close the resource which depends on iDatabase before it will be closed. + for (TInt i = 0; i < iSqlDatabaseObservers.Count(); i++ ) + { + iSqlDatabaseObservers[i]->OnCloseL(); + } + iDatabase.Close(); iFileIsOpen = EFalse; @@ -437,3 +444,36 @@ return BaflUtils::FileExists(iLocalFs, fileName); } + +/** + * Add an observer for monitoring RSqlDatabase. + * + * @param aSqlDatabaseObserver The observer for monitoring RSqlDatabase. + * + * @return None + */ +void CPplContactsFile::AddSqlDBObserverL( + MLplSqlDatabaseObserver& aSqlDatabaseObserver ) + { + iSqlDatabaseObservers.AppendL( &aSqlDatabaseObserver ); + } + + +/** + * Remove an RSqlDatabase observer. + * + * @param aSqlDatabaseObserver The observer is to be removed. + * + * @return None + */ +void CPplContactsFile::RemoveSqlDBObserverL( + MLplSqlDatabaseObserver& aSqlDatabaseObserver ) + { + TInt id = iSqlDatabaseObservers.Find( &aSqlDatabaseObserver ); + if ( id != KErrNotFound ) + { + iSqlDatabaseObservers.Remove( id ); + } + } + +