phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberMatchStrategy.cpp
branchRCL_3
changeset 85 38bb213f60ba
parent 68 9da50d567e3c
--- a/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberMatchStrategy.cpp	Wed Sep 15 11:56:55 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberMatchStrategy.cpp	Wed Oct 13 14:15:33 2010 +0300
@@ -30,8 +30,8 @@
 #include <MVPbkSingleContactOperationObserver.h>
 #include <RLocalizedResourceFile.h>
 #include <VPbkDataCaging.hrh>
-#include <vpbkeng.rsg>
-#include <vpbkfieldtypeselectors.rsg>
+#include <VPbkEng.rsg>
+#include <VPbkFieldTypeSelectors.rsg>
 #include <CVPbkFieldTypeSelector.h>
 #include <CVPbkFieldFilter.h>
 #include <barsread.h>
@@ -80,6 +80,7 @@
         ~CVPbkPhoneNumberMatchStrategyImpl();
 
     public: // Interface
+        CContactPhoneNumberParser* GetParser();
         void MatchL(const TDesC& aPhoneNumber);
         TInt MaxMatchDigits() const;
         TArray<MVPbkContactStore*> StoresToMatch() const;
@@ -772,6 +773,11 @@
         }
     }
 
+CContactPhoneNumberParser* CVPbkPhoneNumberMatchStrategyImpl::GetParser()
+    {
+    return iParser;
+    }
+
 // Removes non-digit chars except plus form the beginning
 // Checks if number matches to one of defined types
 //
@@ -786,11 +792,19 @@
     const TChar KAsterisk = TChar('*');
     const TChar KHash = TChar('#');
     
-    HBufC* numberBuf = HBufC::NewL( aNumber.Length() );
+    TInt format;
+    
+    HBufC* numberBuf = NULL;
+    TRAPD(err, numberBuf = HBufC::NewL( aNumber.Length() ) );
+    // Error was found when Phone allocated memory for numberBuf
+    if( err != KErrNone )
+        {
+        return ( format = EUnknown );
+        }
     TPtr number = numberBuf->Des();
-    if ( iParser )
+    if ( GetParser() )
         {
-        iParser->ExtractRawNumber( aNumber, number );
+        GetParser()->ExtractRawNumber( aNumber, number );
         }
     TInt pos = aNumber.Find( number );
     
@@ -804,8 +818,6 @@
         aNumber.Copy( number );
         }
     delete numberBuf;
-    
-	TInt format;
 	
     if ( !aNumber.Match( KTwoZerosPattern ) && aNumber.Length() > 2 && aNumber[2] != KZero )
         {
@@ -1159,13 +1171,18 @@
         CVPbkContactManager& aContactManager,
         MVPbkContactFindObserver& aObserver)
     {
-    if (aConfig.iMatchMode == EVPbkSequentialMatch)
+    // We do not support yet CVPbkPhoneNumberMatchStrategy::EVPbkBestMatchingFlag flag
+    // Skip it from the configuration
+    TConfig config = aConfig;
+    config.iMatchFlags &= ~CVPbkPhoneNumberMatchStrategy::EVPbkBestMatchingFlag;
+
+    if (config.iMatchMode == EVPbkSequentialMatch)
         {
-        return CVPbkPhoneNumberSequentialMatchStrategy::NewL(aConfig, aContactManager, aObserver);
+        return CVPbkPhoneNumberSequentialMatchStrategy::NewL(config, aContactManager, aObserver);
         }
     else
         {
-        return CVPbkPhoneNumberParallelMatchStrategy::NewL(aConfig, aContactManager, aObserver);
+        return CVPbkPhoneNumberParallelMatchStrategy::NewL(config, aContactManager, aObserver);
         }
    }
 
@@ -1178,7 +1195,24 @@
     {
     InitMatchingL();
 
-    iImpl->MatchL(aPhoneNumber);
+    // The client might be using CVPbkPhoneNumberMatchStrategy::EVPbkBestMatchingFlag
+    // flag, therefore the special chars could not be stripped off from the number
+    // The flag is not supported yet, therefore we need to strip off the special chars
+    HBufC* numberBuf = HBufC::NewL( aPhoneNumber.Length() );
+    CleanupStack::PushL( numberBuf );
+    TPtr number = numberBuf->Des();
+    if ( iImpl->GetParser() )
+        {
+        iImpl->GetParser()->ExtractRawNumber( aPhoneNumber, number );
+        }
+    else
+        {
+        number.Copy( aPhoneNumber );
+        }
+
+    iImpl->MatchL(number);
+
+    CleanupStack::PopAndDestroy(); // numberBuf
     }
 
 void CVPbkPhoneNumberMatchStrategy::BaseConstructL(