132 CleanupStack::PopAndDestroy(); //attribute |
132 CleanupStack::PopAndDestroy(); //attribute |
133 |
133 |
134 // was the default number found? |
134 // was the default number found? |
135 if( number.Length() == 0 ) |
135 if( number.Length() == 0 ) |
136 { |
136 { |
|
137 CDesC16Array* phoneNumberArray = new (ELeave) CDesC16ArraySeg(8); |
|
138 CleanupStack::PushL( phoneNumberArray ); |
|
139 |
137 // get contact fields |
140 // get contact fields |
138 MVPbkStoreContactFieldCollection& fields = aContact.Fields(); |
141 MVPbkStoreContactFieldCollection& fields = aContact.Fields(); |
139 const TInt fieldCount = fields.FieldCount(); |
142 const TInt fieldCount = fields.FieldCount(); |
140 // check fields |
143 // check fields |
141 for ( TInt i = 0; i < fieldCount; ++i ) |
144 for ( TInt i = 0; i < fieldCount; ++i ) |
145 if( field.FieldData().DataType() == EVPbkFieldStorageTypeText ) |
148 if( field.FieldData().DataType() == EVPbkFieldStorageTypeText ) |
146 { |
149 { |
147 const MVPbkFieldType* fieldType = field.BestMatchingFieldType(); |
150 const MVPbkFieldType* fieldType = field.BestMatchingFieldType(); |
148 if( fieldType ) |
151 if( fieldType ) |
149 { |
152 { |
|
153 const TInt fieldTypeResId = fieldType->FieldTypeResId(); |
150 // if one of the number fields |
154 // if one of the number fields |
151 if( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEHOME || |
155 if( fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEGEN || |
152 fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEHOME || |
156 fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEHOME || |
153 fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VIDEONUMBERHOME || |
157 fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEWORK || |
154 fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEWORK || |
158 fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEGEN || |
155 fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEWORK || |
159 fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEHOME || |
156 fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VIDEONUMBERWORK || |
160 fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEWORK || |
157 fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEGEN || |
161 fieldTypeResId == R_VPBK_FIELD_TYPE_CARPHONE || |
158 fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEGEN || |
162 fieldTypeResId == R_VPBK_FIELD_TYPE_ASSTPHONE || |
159 fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VIDEONUMBERGEN || |
163 fieldTypeResId == R_VPBK_FIELD_TYPE_PAGERNUMBER ) |
160 fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_CARPHONE ) |
|
161 { |
164 { |
162 numberCount++; |
165 const MVPbkContactFieldTextData* textData = |
163 // if only one number, store it |
166 &MVPbkContactFieldTextData::Cast( field.FieldData() ); |
164 if( numberCount == 1 ) |
167 const TPtrC phoneNumber( textData->Text() ); |
165 { |
168 |
166 const MVPbkContactFieldTextData* textData = |
169 // we need count phonenumbers same way how this is implemented in CCA |
167 &MVPbkContactFieldTextData::Cast( field.FieldData() ); |
170 // so that we show same count for phonenumbers in names list |
168 number.CreateL( textData->Text() ); |
171 // CCA uses descriptor folded compare for phonenumbers |
169 } |
172 TInt dummy = 0; |
|
173 if( 0 != phoneNumberArray->FindIsq( phoneNumber, dummy, ECmpFolded ) ) |
|
174 { |
|
175 // phone number doesn't exist |
|
176 phoneNumberArray->InsertIsqL( phoneNumber, ECmpFolded ); |
|
177 } |
170 } |
178 } |
171 } |
179 } |
172 } |
180 } |
173 } |
181 } |
|
182 numberCount = phoneNumberArray->Count(); |
|
183 // if only one number, store it |
|
184 if( numberCount == 1 ) |
|
185 { |
|
186 number.CreateL( (*phoneNumberArray)[0] ); |
|
187 } |
|
188 CleanupStack::PopAndDestroy( phoneNumberArray ); |
174 } |
189 } |
175 |
190 |
176 // no number was found |
191 // no number was found |
177 if( number.Length() == 0 ) |
192 if( numberCount > 1 ) |
178 { |
|
179 iContent.PhoneNumberUpdatedL( KNullDesC, |
|
180 CSpbContentProvider::ETypePhoneNumber ); |
|
181 } |
|
182 else if( numberCount > 1 ) |
|
183 { |
193 { |
184 // contact has multiple numbers and no default |
194 // contact has multiple numbers and no default |
185 TBuf<12> count; |
195 TBuf<12> count; |
186 count.Num( numberCount ); |
196 count.Num( numberCount ); |
187 iContent.PhoneNumberUpdatedL( |
197 iContent.PhoneNumberUpdatedL( |