emailcontacts/contactactionservice/src/cfscactionutils.cpp
branchRCL_3
changeset 80 726fba06891a
parent 73 c8382f7b54ef
--- a/emailcontacts/contactactionservice/src/cfscactionutils.cpp	Wed Sep 15 11:52:37 2010 +0300
+++ b/emailcontacts/contactactionservice/src/cfscactionutils.cpp	Wed Oct 13 14:11:15 2010 +0300
@@ -31,7 +31,9 @@
 #include <centralrepository.h>
 #include <CoreApplicationUIsSDKCRKeys.h> 
 #include <settingsinternalcrkeys.h>
+//<cmail> Header neither in Cmail nor in the platform
 #include <crcseprofileregistry.h>
+//</cmail>
 #include <NetworkHandlingDomainPSKeys.h>
 #include <MVPbkStoreContact.h>
 #include <MVPbkStoreContactFieldCollection.h>
@@ -40,8 +42,10 @@
 #include <TVPbkFieldVersitProperty.h>
 #include <MVPbkContactFieldData.h>
 #include <MVPbkContactFieldTextData.h>
+//<cmail>
 #include "fscactionplugincrkeys.h"
 #include "fsccontactactionservicedefines.h"
+//</cmail>
 #include <FscActionUtils.rsg>
 #include <barsread.h>
 #include <Pbk2ContactNameFormatterFactory.h>
@@ -52,8 +56,11 @@
 #include <CVPbkFieldTypeSelector.h>
 #include <CVPbkFieldFilter.h>
 #include <commonphoneparser.h>
-#include <bautils.h>
+#include <bautils.h> // Fix for EMZG-7M23KX
+//<cmail> hardcoded paths removal
 #include <data_caging_path_literals.hrh>
+//</cmail>
+
 #include "cfscactionutils.h"
 #include "cfsccontactaction.h"
 #include "mfscreasoncallback.h"
@@ -80,11 +87,15 @@
 const TUint32 KPoCDefaultSettings = 0x199;
 
 const TInt KMaxLengthOfNumber = 100;
-const TInt KMaxLengthOfAddrData = 255;
-const TInt KMaxLengthOfName = 256; // same as max addr len + extra whitespace
+
+//Fix for: ECWG-7QYAVS
+const TInt KMaxLengthOfName = 100;
+//end for fix
 
 _LIT( KSpace, " " );
+//<cmail> hard coded path removed
 _LIT( KFscRscFileName, "fscactionutils.rsc" );
+//</cmail>
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -124,7 +135,9 @@
     delete iRep;
     if ( iRCSEProfileRegistry != NULL )
         {
+        //<cmail>
         delete iRCSEProfileRegistry;
+        //</cmail>
         }
     }
 
@@ -147,6 +160,7 @@
     FUNC_LOG;
     HBufC* noteText = NULL;
     
+    // Fix for EMZG-7M23KX
     TInt offset = FindAndAddResourceFileL();
     
     if ( aContactName )
@@ -175,6 +189,7 @@
     FUNC_LOG;
     HBufC* noteText = NULL;
     
+    // Fix for EMZG-7M23KX
     TInt offset = FindAndAddResourceFileL();
     
     noteText = StringLoader::LoadL( aNote, aCounter );
@@ -195,6 +210,7 @@
     {
     FUNC_LOG;
     
+    // Fix for EMZG-7M23KX
     TInt offset = FindAndAddResourceFileL();
     
     HBufC* noteText = NULL;
@@ -253,38 +269,102 @@
 HBufC* CFscActionUtils::GetContactNameL( MVPbkStoreContact& aStoreContact )
     {
     FUNC_LOG;
-
-    TBuf<KMaxLengthOfName> contactName;
+    HBufC* contactName = HBufC::NewLC( KMaxLengthOfName + 1 ); // one ' ' char
     
+    // Search for the contact name
+    // Fix for EMZG-7M23KX
     TInt offset = FindAndAddResourceFileL();
     
-    TInt err( KErrNone );
-    TRAP( err, AppendFieldToContactL( 
-            contactName, R_FSC_FIRST_NAME_SELECTOR, aStoreContact ) );
-    if ( err == KErrNone )
+    TResourceReader selectorReader;
+    CCoeEnv::Static()->CreateResourceReaderLC( selectorReader,
+            R_FSC_FIRST_NAME_SELECTOR );
+
+    CVPbkFieldTypeSelector* fieldTypeSelector = CVPbkFieldTypeSelector::NewL(
+            selectorReader, iContactManager.FieldTypes() );
+    CleanupStack::PopAndDestroy(); // selectorReader
+
+    CVPbkFieldFilter::TConfig config(
+            const_cast<MVPbkStoreContactFieldCollection&> (
+                    aStoreContact.Fields() ), fieldTypeSelector, NULL );
+
+    CVPbkFieldFilter* fieldFilter = CVPbkFieldFilter::NewL( config );
+    TInt fieldCount = fieldFilter->FieldCount();
+    const MVPbkStoreContactField* field = NULL;
+    if ( fieldCount == 1 )
         {
-        TRAP( err, AppendFieldToContactL( 
-                contactName, R_FSC_LAST_NAME_SELECTOR, aStoreContact, 
-                ETrue ) );
-        }
-    if ( err == KErrNone && contactName.Length() <= 0 )
-        {
-        // If no first or last name was found, try to append company name
-        TRAP_IGNORE( AppendFieldToContactL( 
-                contactName, R_FSC_COMPANY_NAME_SELECTOR, aStoreContact ) );
+        field = fieldFilter->FieldAtLC(0);
+        contactName->Des().Append(
+                MVPbkContactFieldTextData::Cast( 
+                        field->FieldData() ).Text() );
+        CleanupStack::PopAndDestroy();//field
         }
 
-    // If there was an error or the contact name is zero length, use
-    // pre-defined unnamed string instead..
-    if ( err != KErrNone || contactName.Length() <= 0 )
+    delete fieldFilter;
+    delete fieldTypeSelector;
+
+    // Search for the contact second name
+    CCoeEnv::Static()->CreateResourceReaderLC( selectorReader,
+            R_FSC_LAST_NAME_SELECTOR );
+    fieldTypeSelector = CVPbkFieldTypeSelector::NewL( selectorReader,
+            iContactManager.FieldTypes() );
+    CleanupStack::PopAndDestroy();//selectorReader
+    config.iFieldSelector = fieldTypeSelector;
+
+    fieldFilter = CVPbkFieldFilter::NewL( config );
+    fieldCount = fieldFilter->FieldCount();
+    if ( fieldCount == 1 )
         {
+        field = fieldFilter->FieldAtLC(0);
+        if ( contactName->Des().Length() > 0 )
+            {
+            contactName->Des().Append( KSpace );
+            }
+        contactName->Des().Append(
+                MVPbkContactFieldTextData::Cast( 
+                        field->FieldData() ).Text() );
+        CleanupStack::PopAndDestroy();//field
+        }
+
+    // If first or second name hasn't been found -> find company name
+    if ( contactName->Des().Length() <= 0 )
+        {
+        delete fieldFilter;
+        delete fieldTypeSelector;
+
+        CCoeEnv::Static()->CreateResourceReaderLC( selectorReader,
+                R_FSC_COMPANY_NAME_SELECTOR );
+        fieldTypeSelector = CVPbkFieldTypeSelector::NewL( selectorReader,
+                iContactManager.FieldTypes() );
+        CleanupStack::PopAndDestroy();//selectorReader
+        config.iFieldSelector = fieldTypeSelector;
+
+        fieldFilter = CVPbkFieldFilter::NewL( config );
+        fieldCount = fieldFilter->FieldCount();
+        if ( fieldCount == 1 )
+            {
+            field = fieldFilter->FieldAtLC(0);
+            contactName->Des().Append(
+                    MVPbkContactFieldTextData::Cast(
+                            field->FieldData() ).Text() );
+            CleanupStack::PopAndDestroy();//field
+            }
+        }
+    // no first or second name, nor company name -> return "unnamed" string
+    if ( contactName->Des().Length() <= 0 )
+        {
+        //append (Unnamed)
         HBufC* unnamed = StringLoader::LoadL( R_QTN_FS_UNNAMED );
-        contactName.Zero();
-        contactName.Append( *unnamed );
+        contactName->Des().Append( *unnamed );
         delete unnamed;
         }
+
+    delete fieldFilter;
+    delete fieldTypeSelector;
+    CleanupStack::Pop( contactName );
+
     CCoeEnv::Static()->DeleteResourceFile( offset );
-    return contactName.AllocL();
+
+    return contactName;
     }
 
 // ---------------------------------------------------------------------------
@@ -308,6 +388,7 @@
     CFscFieldPropertyArray* fieldProperties =
             CFscFieldPropertyArray::NewL( iContactManager.FieldTypes() );
 
+    // Fix for EMZG-7M23KX
     TInt offset = FindAndAddResourceFileL();
 
     // Create resource reader for new resource
@@ -359,6 +440,7 @@
             {
             defaultPrioritiesArray.Append( EVPbkDefaultTypeSms );
             defaultPrioritiesArray.Append( EVPbkDefaultTypeMms );
+            // Fix for ELWG-7SPH5H 
             params.SetUseDefaultDirectly( ETrue );
             break;
             }
@@ -436,8 +518,10 @@
             }
 
         // Format phone number
+        //Fix for: MHOA-7SQF6T
         CommonPhoneParser::ParsePhoneNumber( aNumber,
                             CommonPhoneParser::EPlainPhoneNumber );
+        //end for fix
         }
 
     // Destroy objects
@@ -485,8 +569,10 @@
             }
 
         // Format phone number
+        //Fix for: MHOA-7SQF6T
         CommonPhoneParser::ParsePhoneNumber( aNumber,
                             CommonPhoneParser::EPlainPhoneNumber );
+        //end for fix
         }
 
     // Destroy objects
@@ -538,8 +624,10 @@
         }
 
     // Format phone number
+    //Fix for: MHOA-7SQF6T
     CommonPhoneParser::ParsePhoneNumber( aVoipAddress,
                         CommonPhoneParser::EPlainPhoneNumber );
+    //end for fix
     
     // Destroy objects
     delete selectedField;
@@ -567,6 +655,7 @@
     TInt ret = KErrNone;
     
     // Search for conference number
+    // Fix for EMZG-7M23KX
     TInt offset = FindAndAddResourceFileL();
     TResourceReader selectorReader;
     CCoeEnv::Static()->CreateResourceReaderLC( selectorReader,
@@ -736,7 +825,7 @@
     }
 
 // ---------------------------------------------------------------------------
-// CFscActionUtils::GetMessageAddressL
+// CFscActionUtils::GetEmailAddressL
 // ---------------------------------------------------------------------------
 //
 TInt CFscActionUtils::GetMessageAddressL( MVPbkStoreContact& aStoreContact,
@@ -769,8 +858,7 @@
         TPtrC msgAddress = MVPbkContactFieldTextData::Cast(
                 selectedField->FieldData() ).Text();
         
-        if ( msgAddress.Length() && 
-             msgAddress.Length() <= KMaxLengthOfAddrData )
+        if ( msgAddress.Length() )
             {
             aMsgAddress.Copy( msgAddress );
             }
@@ -819,8 +907,7 @@
         TPtrC emailAddress = MVPbkContactFieldTextData::Cast(
                 selectedField->FieldData() ).Text();
         
-        if ( emailAddress.Length() && 
-             emailAddress.Length() <= KMaxLengthOfAddrData )
+        if ( emailAddress.Length() )
             {
             aEmailAddress.Copy( emailAddress );
             }
@@ -866,11 +953,13 @@
     TBool available( EFalse );
 
     // Search for the contact name
+    // Fix for EMZG-7M23KX  
     TInt offset = FindAndAddResourceFileL();
     
     TResourceReader selectorReader;
     CVPbkFieldTypeSelector* fieldTypeSelector = NULL;
     CVPbkFieldFilter* fieldFilter = NULL;
+    TInt fieldCount = 0;
     TInt selector = 0;
 
     switch ( aContactNumberType )
@@ -936,16 +1025,15 @@
         fieldTypeSelector = CVPbkFieldTypeSelector::NewL( selectorReader,
                 iContactManager.FieldTypes() );
         CleanupStack::PopAndDestroy(); // selectorReader
-        CleanupStack::PushL( fieldTypeSelector );
-        
+
         CVPbkFieldFilter::TConfig config(
                 const_cast<MVPbkStoreContactFieldCollection&> (
                         aStoreContact.Fields() ), fieldTypeSelector, NULL);
 
         fieldFilter = CVPbkFieldFilter::NewL( config );
-        CleanupStack::PushL( fieldFilter );
+        fieldCount = fieldFilter->FieldCount();
         
-        if ( fieldFilter->FieldCount() )
+        if ( fieldCount )
             {
             if ( selector == R_FSC_CONF_NUMBER_SELECTOR )
                 {
@@ -954,7 +1042,7 @@
                 field = fieldFilter->FieldAtLC(0);
                 confNum.Append( MVPbkContactFieldTextData::Cast( 
                         field->FieldData() ).Text() );
-                CleanupStack::PopAndDestroy(); // field
+                CleanupStack::PopAndDestroy();//field
                 
                 if ( CommonPhoneParser::IsValidPhoneNumber( confNum, 
                         CommonPhoneParser::EContactCardNumber ) )
@@ -967,7 +1055,9 @@
                 available = ETrue;
                 }
             }
-        CleanupStack::PopAndDestroy( 2 ); // fieldFilter, fieldTypeSelector
+
+        delete fieldFilter;
+        delete fieldTypeSelector;
         }
     
     CCoeEnv::Static()->DeleteResourceFile( offset );
@@ -1043,7 +1133,7 @@
         TInt err = cenRep->Get( KPoCDefaultSettings, settingsId );
         if ( err == KErrNone )
             {
-            result = ( settingsId != KErrNotFound );
+            result = (settingsId != KErrNotFound );
             }
         delete cenRep;
         }
@@ -1064,7 +1154,9 @@
         {
         RArray<TUint32> ids;
         CleanupClosePushL( ids );
+        //<cmail>
         iRCSEProfileRegistry->GetAllIdsL( ids );
+        //</cmail>
         configured = ids.Count() > 0;
         CleanupStack::PopAndDestroy( &ids );
         }
@@ -1159,8 +1251,15 @@
 
     if ( FeatureManager::FeatureSupported( KFeatureIdCommonVoip ) )
         {
+        //<cmail>
         TRAP_IGNORE( iRCSEProfileRegistry = CRCSEProfileRegistry::NewL() );
+        //</cmail>
         }
+    
+    //<cmail>
+    //iRCSEProfileRegistry = NULL;
+    //</cmail>
+
     }
 
 // ---------------------------------------------------------------------------
@@ -1192,6 +1291,7 @@
     return fileName;
     }
 
+// Fix for EMZG-7M23KX
 // ---------------------------------------------------------------------------
 // CFscActionUtils::FindAndAddResourceFileL
 // ---------------------------------------------------------------------------
@@ -1199,10 +1299,14 @@
 TInt CFscActionUtils::FindAndAddResourceFileL()
     {
     FUNC_LOG;
+    //<cmail> hardcoded removed
     TFileName resourceFileName( KDC_RESOURCE_FILES_DIR );
-    resourceFileName.Append( KFscRscFileName );
+    resourceFileName.Append(KFscRscFileName);
+    //</cmail>
     BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), resourceFileName );
-    return CCoeEnv::Static()->AddResourceFileL( resourceFileName );
+    TInt offset = CCoeEnv::Static()->AddResourceFileL( resourceFileName );
+    
+    return offset;
     }
 // ---------------------------------------------------------------------------
 // CFscActionUtils::CloseSelectDialogL
@@ -1217,58 +1321,6 @@
         }
     }
 
-// ---------------------------------------------------------------------------
-// CFscActionUtils::AppendFieldToContactL
-// ---------------------------------------------------------------------------
-//
-void CFscActionUtils::AppendFieldToContactL( TDes& aContact,
-        TInt aFieldResourceId,
-        MVPbkStoreContact& aStoreContact,
-        TBool aAddSpace )
-    {
-    FUNC_LOG;
-
-    TResourceReader selectorReader;
-    CCoeEnv::Static()->CreateResourceReaderLC( selectorReader,
-            aFieldResourceId );
-
-    CVPbkFieldTypeSelector* fieldTypeSelector = CVPbkFieldTypeSelector::NewL(
-            selectorReader, iContactManager.FieldTypes() );
-    CleanupStack::PopAndDestroy(); // selectorReader
-    CleanupStack::PushL( fieldTypeSelector );
-
-    CVPbkFieldFilter::TConfig config(
-            const_cast<MVPbkStoreContactFieldCollection&> (
-                    aStoreContact.Fields() ), fieldTypeSelector, NULL );
-
-    CVPbkFieldFilter* fieldFilter = CVPbkFieldFilter::NewL( config );
-    CleanupStack::PushL( fieldFilter );
 
-    if ( fieldFilter->FieldCount() == 1 )
-        {
-        if ( aAddSpace && aContact.Length() > 0 )
-            {
-            if ( aContact.Length() < KMaxLengthOfName )
-                {
-                aContact.Append( KSpace );
-                }
-            else
-                {
-                User::Leave( KErrOverflow );
-                }
-            }
-        MVPbkStoreContactField* field = fieldFilter->FieldAtLC( 0 );
-        TPtrC castFieldText = MVPbkContactFieldTextData::Cast( 
-                field->FieldData() ).Text();
+// ======== GLOBAL FUNCTIONS ========
 
-        if ( ( aContact.Length() + castFieldText.Length() ) > KMaxLengthOfName )
-            {
-            User::Leave( KErrOverflow );
-            }
-
-        aContact.Append( castFieldText );
-        CleanupStack::PopAndDestroy( field );
-        }
-    CleanupStack::PopAndDestroy( 2 ); // fieldFilter, fieldTypeSelector    
-    }
-