phonebookui/Phonebook2/spbcontentprovider/src/spbphonenumberparser.cpp
branchRCL_3
changeset 14 81f8547efd4f
parent 3 04ab22b956c2
child 45 34879f5cfc63
equal deleted inserted replaced
3:04ab22b956c2 14:81f8547efd4f
   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(