--- a/phonebookui/Phonebook2/spbcontentprovider/src/spbphonenumberparser.cpp Fri Feb 19 22:40:27 2010 +0200
+++ b/phonebookui/Phonebook2/spbcontentprovider/src/spbphonenumberparser.cpp Fri Mar 12 15:41:25 2010 +0200
@@ -134,6 +134,9 @@
// was the default number found?
if( number.Length() == 0 )
{
+ CDesC16Array* phoneNumberArray = new (ELeave) CDesC16ArraySeg(8);
+ CleanupStack::PushL( phoneNumberArray );
+
// get contact fields
MVPbkStoreContactFieldCollection& fields = aContact.Fields();
const TInt fieldCount = fields.FieldCount();
@@ -147,39 +150,46 @@
const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
if( fieldType )
{
+ const TInt fieldTypeResId = fieldType->FieldTypeResId();
// if one of the number fields
- if( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEHOME ||
- fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEHOME ||
- fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VIDEONUMBERHOME ||
- fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEWORK ||
- fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEWORK ||
- fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VIDEONUMBERWORK ||
- fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEGEN ||
- fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ||
- fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VIDEONUMBERGEN ||
- fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_CARPHONE )
+ if( fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEGEN ||
+ fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEHOME ||
+ fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEWORK ||
+ fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ||
+ fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEHOME ||
+ fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEWORK ||
+ fieldTypeResId == R_VPBK_FIELD_TYPE_CARPHONE ||
+ fieldTypeResId == R_VPBK_FIELD_TYPE_ASSTPHONE ||
+ fieldTypeResId == R_VPBK_FIELD_TYPE_PAGERNUMBER )
{
- numberCount++;
- // if only one number, store it
- if( numberCount == 1 )
- {
- const MVPbkContactFieldTextData* textData =
- &MVPbkContactFieldTextData::Cast( field.FieldData() );
- number.CreateL( textData->Text() );
- }
+ const MVPbkContactFieldTextData* textData =
+ &MVPbkContactFieldTextData::Cast( field.FieldData() );
+ const TPtrC phoneNumber( textData->Text() );
+
+ // we need count phonenumbers same way how this is implemented in CCA
+ // so that we show same count for phonenumbers in names list
+ // CCA uses descriptor folded compare for phonenumbers
+ TInt dummy = 0;
+ if( 0 != phoneNumberArray->FindIsq( phoneNumber, dummy, ECmpFolded ) )
+ {
+ // phone number doesn't exist
+ phoneNumberArray->InsertIsqL( phoneNumber, ECmpFolded );
+ }
}
}
}
}
+ numberCount = phoneNumberArray->Count();
+ // if only one number, store it
+ if( numberCount == 1 )
+ {
+ number.CreateL( (*phoneNumberArray)[0] );
+ }
+ CleanupStack::PopAndDestroy( phoneNumberArray );
}
// no number was found
- if( number.Length() == 0 )
- {
- iContent.PhoneNumberUpdatedL( KNullDesC,
- CSpbContentProvider::ETypePhoneNumber );
- }
- else if( numberCount > 1 )
+ if( numberCount > 1 )
{
// contact has multiple numbers and no default
TBuf<12> count;