package Ġau . com . dw . content pro vid ert ester Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content .* Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Contacts Contract Ċ import Ġandroid . provider . Contacts Contract . Common Data Kinds . Phone Ċ import Ġandroid . provider . Contacts Contract . Common Data Kinds . Structured Postal Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġandroidx . test . rule . Grant Permission Rule Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertNull Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ Ċ /** Ċ Ġ* ĠInstrument ed Ġtest Ġto Ġcheck Ġhow Ġcontacts Ġdisplay Ġname Ġis Ġgenerated Ġfor Ġthe Ġdatabase . Ċ Ġ* ĠThe Ġdisplay Ġname Ġcan Ġbe Ġused Ġto Ġlink Ġthe Ġvarious Ġcontact Ġdata Ġtables , Ġe . g . Ġphone , Ġemail , Ġaddress , Ġetc . Ċ Ġ* Ċ Ġ* ĠThis Ġshows Ġthe Ġthe Ġdisplay Ġname Ġmay Ġdiffer Ġdepending Ġon Ġwhether Ġa Ġcontact Ġis Ġinserted Ġdirectly Ċ Ġ* Ġ( using ĠContent Resolver . insert ) Ġor Ġusing Ġbatch Ġ( Content Resolver . apply Batch ). Ċ Ġ* Ċ Ġ* ĠHaving Ġblank Ġname Ġ( space Ġonly ): Ċ Ġ* Ġ- Ġboth Ġfirst Ġname Ġand Ġs urname Ġblank Ċ Ġ* Ġ- Ġone Ġname Ġblank Ġand Ġthe Ġother Ġnull Ċ Ġ* Ġmakes Ġthe Ġdisplay Ġname Ġnull Ġinstead Ġof Ġusing Ġthe Ġfirst Ġphone Ġnumber . Ċ Ġ* Ċ Ġ* ĠIt Ġseems Ġonly Ġhaving Ġboth Ġnames Ġnull Ġuses Ġthe Ġphone Ġnumber Ġas Ġdisplay Ġname . Ċ Ġ*/ Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠContact s DisplayName Test ( val Ġcontact Details : ĠName Phone Input , Ġval ĠdisplayName : ĠString ?) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtest FirstName Ġ= Ġ" firstName " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtest S urname Ġ= Ġ" lastName " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSPACE Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtest Combined Name Ġ= Ġtest FirstName Ġ+ ĠSPACE Ġ+ Ġtest S urname ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtest First Phone Ġ= Ġ" 1 1 1 1 1 1 1 " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtest Second Phone Ġ= Ġ" 2 2 2 2 2 2 2 " ĊĠĠĠĠĠĠĠ Ġ// Ġuse Ġin Ġarray Ġas Ġcan 't Ġjust Ġpass Ġnull Ġas Ġexpected Ġvalue Ġsince Ġcan 't Ġinfer Ġtype ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNULL Ġ= Ġ" NULL " ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ĊĠĠĠĠĠĠĠ Ġfun Ġdata () Ġ: ĠCollection < Array < Any >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboth Ġnames , Ġno Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= Ġtest FirstName , Ġs urname Ġ= Ġtest S urname ), Ġtest Combined Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboth Ġnames , Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= Ġtest FirstName , Ġs urname Ġ= Ġtest S urname , Ġfirst Phone Ġ= Ġtest First Phone ), Ġtest Combined Name ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfirst Ġname Ġonly , Ġno Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= Ġtest FirstName ), Ġtest FirstName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfirst Ġname Ġonly , Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= Ġtest FirstName , Ġfirst Phone Ġ= Ġtest First Phone ), Ġtest FirstName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfirst Ġname Ġonly , Ġs urname Ġblank , Ġno Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= Ġtest FirstName , Ġs urname Ġ= ĠSPACE ), Ġtest FirstName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfirst Ġname Ġonly , Ġs urname Ġblank , Ġ, Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= Ġtest FirstName , Ġs urname Ġ= ĠSPACE , Ġfirst Phone Ġ= Ġtest First Phone ), Ġtest FirstName ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġs urname Ġonly , Ġno Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( surname Ġ= Ġtest S urname ), Ġtest S urname ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġs urname Ġonly , Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( surname Ġ= Ġtest S urname , Ġfirst Phone Ġ= Ġtest First Phone ), Ġtest S urname ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġs urname Ġonly , Ġfirst Ġname Ġblank , Ġno Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= ĠSPACE , Ġs urname Ġ= Ġtest S urname ), Ġtest S urname ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġs urname Ġonly , Ġfirst Ġname Ġblank , Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= ĠSPACE , Ġs urname Ġ= Ġtest S urname , Ġfirst Phone Ġ= Ġtest First Phone ), Ġtest S urname ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġnames , Ġno Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input (), ĠNULL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġnames , Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( first Phone Ġ= Ġtest First Phone ), Ġtest First Phone ) Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġnames , Ġboth Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( first Phone Ġ= Ġtest First Phone , Ġsecond Phone Ġ= Ġtest Second Phone ), Ġtest First Phone ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboth Ġnames Ġblank , Ġno Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= ĠSPACE , Ġs urname Ġ= ĠSPACE ), ĠNULL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboth Ġnames Ġblank , Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= ĠSPACE , Ġs urname Ġ= ĠSPACE , Ġfirst Phone Ġ= Ġtest First Phone ), ĠNULL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboth Ġnames Ġblank , Ġboth Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= ĠSPACE , Ġs urname Ġ= ĠSPACE , Ġfirst Phone Ġ= Ġtest First Phone , Ġsecond Phone Ġ= Ġtest Second Phone ), ĠNULL ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfirst Ġname Ġonly Ġblank , Ġno Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= ĠSPACE ), ĠNULL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfirst Ġname Ġonly Ġnames Ġblank , Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= ĠSPACE , Ġfirst Phone Ġ= Ġtest First Phone ), ĠNULL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfirst Ġname Ġonly Ġnames Ġblank , Ġboth Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( firstName Ġ= ĠSPACE , Ġfirst Phone Ġ= Ġtest First Phone , Ġsecond Phone Ġ= Ġtest Second Phone ), ĠNULL ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġs urname Ġonly Ġblank , Ġno Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( surname Ġ= ĠSPACE ), ĠNULL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġs urname Ġonly Ġnames Ġblank , Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( surname Ġ= ĠSPACE , Ġfirst Phone Ġ= Ġtest First Phone ), ĠNULL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġs urname Ġonly Ġnames Ġblank , Ġboth Ġph ones ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Name Phone Input ( surname Ġ= ĠSPACE , Ġfirst Phone Ġ= Ġtest First Phone , Ġsecond Phone Ġ= Ġtest Second Phone ), ĠNULL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġm Runtime Permission Rule : ĠGrant Permission Rule Ġ= ĊĠĠĠĠĠĠĠ ĠGrant Permission Rule . grant ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ CONTACT S , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ CONTACT S ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġlateinit Ġvar Ġcontext Ġ: ĠContext ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠContext Ġof Ġthe Ġapp Ġunder Ġtest . ĊĠĠĠĠĠĠĠ Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context ĊĠĠĠĠĠĠĠ Ġdelete Contacts Batch () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcheck DisplayName () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġraw Contact Id Ġ= Ġinsert Contact ( contact Details ) ĊĠĠĠĠĠĠĠ Ġval ĠdisplayName Retrie ved Ġ= Ġget DisplayName ( raw Contact Id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( NULL . equals ( displayName )) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( displayName Retrie ved ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( displayName , ĠdisplayName Retrie ved ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġtidy Ġup ĊĠĠĠĠĠĠĠ Ġdelete Contact ( raw Contact Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Contact ( contact Details : ĠName Phone Input ): ĠLong ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinsert Ġan Ġempty Ġcontact . ĊĠĠĠĠĠĠĠ Ġval Ġcontent Values Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠ Ġval Ġraw Contact Uri : ĠUri ? Ġ= Ġcontext . getContent Resolver (). insert ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Raw Contacts . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Values ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġnewly Ġcreated Ġcontact Ġraw Ġid . ĊĠĠĠĠĠĠĠ Ġval Ġraw Contact Id Ġ= ĠContent U ris . parse Id ( raw Contact Uri !! ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġinsert Ġnames ĊĠĠĠĠĠĠĠ Ġinsert Name ( contact Details , Ġraw Contact Id ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġinsert Ġphone Ġnumbers ĊĠĠĠĠĠĠĠ Ġif Ġ( contact Details . first Phone Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Phone ( contact Details . first Phone !! , ĠPhone . TYPE _ HOME , Ġraw Contact Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( contact Details . second Phone Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Phone ( contact Details . second Phone !! , ĠPhone . TYPE _ WORK , Ġraw Contact Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġinsert Ġdummy Ġaddress Ġto Ġallow Ġlookup ĊĠĠĠĠĠĠĠ Ġinsert Address (" 1 0 Ġtest Ġstreet ", ĠStruct ured Postal . TYPE _ HOME , Ġraw Contact Id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġraw Contact Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Name ( contact Details : ĠName Phone Input , Ġraw Contact Id : ĠLong ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Values Ġ= ĠContent Values () ĊĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Contacts Contract . Data . RAW _ CONTACT _ ID , Ġraw Contact Id ) ĊĠĠĠĠĠĠĠ Ġ// ĠEach Ġcontact Ġmust Ġhas Ġan Ġmime Ġtype Ġto Ġavoid Ġjava . lang . IllegalArgumentException : Ġmime type Ġis Ġrequired Ġerror . ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Data . MIME TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Common Data Kinds . Structured Name . CONTENT _ ITEM _ TYPE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġput Ġcontact Ġinput Ġnames ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Common Data Kinds . Structured Name . FAMILY _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontact Details . surname ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Common Data Kinds . Structured Name . G IV EN _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontact Details . firstName ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcontext . getContent Resolver (). insert ( Contacts Contract . Data . CONTENT _ URI , Ġcontent Values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Phone ( phoneNumber : ĠString , Ġtype : ĠInt , Ġraw Contact Id : ĠLong ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Values Ġ= ĠContent Values () ĊĊĠĠĠĠĠĠĠ Ġ// ĠEach Ġcontact Ġmust Ġhas Ġan Ġid Ġto Ġavoid Ġjava . lang . IllegalArgumentException : Ġraw _ contact _ id Ġis Ġrequired Ġerror . ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Contacts Contract . Data . RAW _ CONTACT _ ID , Ġraw Contact Id ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEach Ġcontact Ġmust Ġhas Ġan Ġmime Ġtype Ġto Ġavoid Ġjava . lang . IllegalArgumentException : Ġmime type Ġis Ġrequired Ġerror . ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Data . MIME TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPhone . CONTENT _ ITEM _ TYPE ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPut Ġphone Ġnumber Ġvalue Ġand Ġtype . ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Phone . NUMBER , ĠphoneNumber ) ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Phone . TYPE , Ġtype ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInsert Ġnew Ġcontact Ġdata Ġinto Ġphone Ġcontact Ġlist . ĊĠĠĠĠĠĠĠ Ġcontext . getContent Resolver (). insert ( Contacts Contract . Data . CONTENT _ URI , Ġcontent Values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Address ( address : ĠString , Ġtype : ĠInt , Ġraw Contact Id : ĠLong ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Values Ġ= ĠContent Values () ĊĊĠĠĠĠĠĠĠ Ġ// ĠEach Ġcontact Ġmust Ġhas Ġan Ġid Ġto Ġavoid Ġjava . lang . IllegalArgumentException : Ġraw _ contact _ id Ġis Ġrequired Ġerror . ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Contacts Contract . Data . RAW _ CONTACT _ ID , Ġraw Contact Id ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEach Ġcontact Ġmust Ġhas Ġan Ġmime Ġtype Ġto Ġavoid Ġjava . lang . IllegalArgumentException : Ġmime type Ġis Ġrequired Ġerror . ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Data . MIME TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStruct ured Postal . CONTENT _ ITEM _ TYPE ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPut Ġaddress Ġvalue Ġand Ġtype . ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Structured Postal . STRE ET , Ġaddress ) ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Structured Postal . TYPE , Ġtype ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInsert Ġnew Ġcontact Ġdata Ġinto Ġaddress Ġcontact Ġlist . ĊĠĠĠĠĠĠĠ Ġcontext . getContent Resolver (). insert ( Contacts Contract . Data . CONTENT _ URI , Ġcontent Values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġgeneric Ġversion Ċ // ĠĠĠ Ġprivate Ġfun Ġget DisplayName ( raw Contact Id : ĠLong ): ĠString ? Ċ // ĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġvar ĠdisplayName : ĠString ? Ġ= Ġnull Ċ // ĠĠĠĠĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf ( raw Contact Id . toString ()) Ċ // ĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ? Ġ= Ġcontext . content Resolver . query ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Data . CONTENT _ URI , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠPhone . RAW _ CONTACT _ ID Ġ+ Ġ" Ġ= Ġ?", Ġselection Args , Ġnull Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġcursor ?. moveTo First () Ċ // ĠĠĠĠĠĠĠ ĠdisplayName Ġ= Ġcursor ?. getString ( cursor . getColumnIndex ( Phone . DISPLAY _ NAME )) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġcursor ?. close () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠdisplayName Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġversion Ġthat Ġlooks Ġup Ġaddress Ġtable ĊĠĠĠ Ġprivate Ġfun Ġget DisplayName ( raw Contact Id : ĠLong ): ĠString ? ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠdisplayName : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf ( raw Contact Id . toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ? Ġ= Ġcontext . content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Data . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStruct ured Postal . RAW _ CONTACT _ ID Ġ+ Ġ" Ġ= Ġ?", Ġselection Args , Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcursor ?. moveTo First () ĊĠĠĠĠĠĠĠ ĠdisplayName Ġ= Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠ Ġprintln (" display Ġname =" Ġ+ ĠdisplayName ) ĊĠĠĠĠĠĠĠ Ġprintln (" primary Ġname =" Ġ+ Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME _ PRIMARY ))) ĊĠĠĠĠĠĠĠ Ġprintln (" alt Ġname =" Ġ+ Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME _ ALTER NATIVE ))) ĊĠĠĠĠĠĠĠ Ġprintln (" source Ġname =" Ġ+ Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME _ SOURCE ))) ĊĊĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠdisplayName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Contact ( raw Contact Id : ĠLong ) ĊĠĠĠ Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Resolver : ĠContent Resolver Ġ= Ġcontext . getContent Resolver () ĊĊĠĠĠĠĠĠĠ Ġ// ************************ ******* Ġdelete Ġdata Ġtable Ġrelated Ġdata Ġ********************************* ******* ĊĠĠĠĠĠĠĠ Ġ// ĠData Ġtable Ġcontent Ġprocess Ġuri . ĊĠĠĠĠĠĠĠ Ġval Ġdata Content Uri Ġ= ĠContact s Contract . Data . CONTENT _ URI ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġdata Ġtable Ġwhere Ġclause . ĊĠĠĠĠĠĠĠ Ġval Ġdata Where Clause Buf Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġdata Where Clause Buf . append ( Contacts Contract . Data . RAW _ CONTACT _ ID ) ĊĠĠĠĠĠĠĠ Ġdata Where Clause Buf . append (" Ġ= Ġ") ĊĠĠĠĠĠĠĠ Ġdata Where Clause Buf . append ( raw Contact Id ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDelete Ġall Ġthis Ġcontact Ġrelated Ġdata Ġin Ġdata Ġtable . ĊĠĠĠĠĠĠĠ Ġcontent Resolver . delete ( data Content Uri , Ġdata Where Clause Buf . toString (), Ġnull ) ĊĊĊĠĠĠĠĠĠĠ Ġ// ******************************** Ġdelete Ġraw _ contacts Ġtable Ġrelated Ġdata Ġ********************************* ****** ĊĠĠĠĠĠĠĠ Ġ// Ġraw _ contacts Ġtable Ġcontent Ġprocess Ġuri . ĊĠĠĠĠĠĠĠ Ġval Ġraw Contact Uri Ġ= ĠContact s Contract . Raw Contacts . CONTENT _ URI ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġraw _ contacts Ġtable Ġwhere Ġclause . ĊĠĠĠĠĠĠĠ Ġval Ġraw Contact Where Clause Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġraw Contact Where Clause . append ( Contacts Contract . Raw Contacts ._ ID ) ĊĠĠĠĠĠĠĠ Ġraw Contact Where Clause . append (" Ġ= Ġ") ĊĠĠĠĠĠĠĠ Ġraw Contact Where Clause . append ( raw Contact Id ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDelete Ġraw _ contacts Ġtable Ġrelated Ġdata . ĊĠĠĠĠĠĠĠ Ġcontent Resolver . delete ( raw Contact Uri , Ġraw Contact Where Clause . toString (), Ġnull ) ĊĊĊĠĠĠĠĠĠĠ Ġ// ******************************** Ġdelete Ġcontacts Ġtable Ġrelated Ġdata Ġ********************************* ****** ĊĠĠĠĠĠĠĠ Ġ// Ġcontacts Ġtable Ġcontent Ġprocess Ġuri . ĊĠĠĠĠĠĠĠ Ġval Ġcontact Uri Ġ= ĠContact s Contract . Contacts . CONTENT _ URI ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġcontacts Ġtable Ġwhere Ġclause . ĊĠĠĠĠĠĠĠ Ġval Ġcontact Where Clause Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġcontact Where Clause . append ( Contacts Contract . Contacts ._ ID ) ĊĠĠĠĠĠĠĠ Ġcontact Where Clause . append (" Ġ= Ġ") ĊĠĠĠĠĠĠĠ Ġcontact Where Clause . append ( raw Contact Id ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDelete Ġraw _ contacts Ġtable Ġrelated Ġdata . ĊĠĠĠĠĠĠĠ Ġcontent Resolver . delete ( contact Uri , Ġcontact Where Clause . toString (), Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcheck DisplayName Batch Version () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġclear Ġall Ġcontacts Ġfirst , Ġsince Ġcan 't Ġget Ġraw Ġcontacts Ġid Ġusing Ġbatch . ĊĠĠĠĠĠĠĠ Ġdelete Contacts Batch () ĊĊĠĠĠĠĠĠĠ Ġinsert Contact Batch ( contact Details ) ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġdisplay Ġname Ġfrom Ġfirst Ġrecord , Ġas Ġthe Ġcontact Ġjust Ġinserted Ġshould Ġbe Ġthe Ġonly Ġone ĊĠĠĠĠĠĠĠ Ġval ĠdisplayName Retrie ved Ġ= Ġget DisplayName Batch () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( NULL . equals ( displayName )) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( displayName Retrie ved ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( displayName , ĠdisplayName Retrie ved ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġtidy Ġup ĊĠĠĠĠĠĠĠ Ġdelete Contacts Batch () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Contact Batch ( contact Details : ĠName Phone Input ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoperations Ġ= ĠArrayList < Content Provider Operation >() ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġnew Ġcontact ĊĠĠĠĠĠĠĠ ĠContent Provider Operation . new Insert ( Contacts Contract . Raw Contacts . CONTENT _ URI ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlocal Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Contacts Contract . Raw Contacts . ACCOUNT _ NAME , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Contacts Contract . Raw Contacts . ACCOUNT _ TYPE , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperations . add ( build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġinsert Ġnames ĊĠĠĠĠĠĠĠ Ġinsert Name Batch ( contact Details , Ġoperations ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġinsert Ġphone Ġnumbers ĊĠĠĠĠĠĠĠ Ġif Ġ( contact Details . first Phone Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Phone Batch ( contact Details . first Phone !! , ĠPhone . TYPE _ HOME , Ġoperations ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( contact Details . second Phone Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Phone Batch ( contact Details . second Phone !! , ĠPhone . TYPE _ WORK , Ġoperations ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġinsert Ġdummy Ġaddress Ġto Ġallow Ġlookup ĊĠĠĠĠĠĠĠ Ġinsert Address Batch (" 1 0 Ġtest Ġstreet ", ĠStruct ured Postal . TYPE _ HOME , Ġoperations ) ĊĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . apply Batch ( Contacts Contract . AUTH ORITY , Ġoperations ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Name Batch ( contact Details : ĠName Phone Input , Ġoperations : ĠArrayList < Content Provider Operation >) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠContent Provider Operation . new Insert ( Contacts Contract . Data . CONTENT _ URI ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value Back Reference ( Contacts Contract . Data . RAW _ CONTACT _ ID , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Contacts Contract . Data . MIME TYPE , ĠContact s Contract . Common Data Kinds . Structured Name . CONTENT _ ITEM _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Contacts Contract . Common Data Kinds . Structured Name . G IV EN _ NAME , Ġcontact Details . firstName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Contacts Contract . Common Data Kinds . Structured Name . FAMILY _ NAME , Ġcontact Details . surname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperations . add ( build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Phone Batch ( phoneNumber : ĠString , Ġtype : ĠInt , Ġoperations : ĠArrayList < Content Provider Operation >) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠContent Provider Operation . new Insert ( Contacts Contract . Data . CONTENT _ URI ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value Back Reference ( Contacts Contract . Data . RAW _ CONTACT _ ID , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Contacts Contract . Data . MIME TYPE , ĠPhone . CONTENT _ ITEM _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Phone . NUMBER , ĠphoneNumber ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Phone . TYPE , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperations . add ( build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Address Batch ( address : ĠString , Ġtype : ĠInt , Ġoperations : ĠArrayList < Content Provider Operation >) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠContent Provider Operation . new Insert ( Contacts Contract . Data . CONTENT _ URI ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value Back Reference ( Contacts Contract . Data . RAW _ CONTACT _ ID , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Contacts Contract . Data . MIME TYPE , ĠStruct ured Postal . CONTENT _ ITEM _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Structured Postal . STRE ET , Ġaddress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Value ( Structured Postal . TYPE , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperations . add ( build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget DisplayName Batch (): ĠString ? ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠdisplayName : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ? Ġ= Ġcontext . content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContact s Contract . Data . CONTENT _ URI , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġcursor ?. moveTo First () ĊĠĠĠĠĠĠĠ ĠdisplayName Ġ= Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠ Ġprintln (" display Ġname =" Ġ+ ĠdisplayName ) ĊĠĠĠĠĠĠĠ Ġprintln (" primary Ġname =" Ġ+ Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME _ PRIMARY ))) ĊĠĠĠĠĠĠĠ Ġprintln (" alt Ġname =" Ġ+ Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME _ ALTER NATIVE ))) ĊĠĠĠĠĠĠĠ Ġprintln (" source Ġname =" Ġ+ Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME _ SOURCE ))) ĊĊĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠdisplayName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Contacts Batch () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Resolver Ġ= Ġcontext . content Resolver ĊĠĠĠĠĠĠĠ Ġval Ġoperations Ġ= Ġjava . util . ArrayList < Content Provider Operation >() ĊĠĠĠĠĠĠĠ Ġoperations . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent Provider Operation . new Delete ( Contacts Contract . Raw Contacts . CONTENT _ URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcontent Resolver . apply Batch ( Contacts Contract . AUTH ORITY , Ġoperations ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshow All Display Names For Addresses () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ? Ġ= Ġcontext . content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStruct ured Postal . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( cursor !!. moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstreet Ġ= Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . STRE ET )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" street Ġname Ġis Ġ" Ġ+ Ġstreet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdisplayName Ġ= Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdisplayName Primary Ġ= Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME _ PRIMARY )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdisplayName Alt Ġ= Ġcursor ?. getString ( cursor . getColumnIndex ( Structured Postal . DISPLAY _ NAME _ ALTER NATIVE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== ĠdisplayName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" display Ġname Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( "" . equals ( displayName . trim ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" display Ġname Ġis Ġspace ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" display Ġname Ġis Ġ" Ġ+ ĠdisplayName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget DisplayName From V Card () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp DisplayName : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval ĠfirstName : ĠString ? Ġ= Ġcontact Details . firstName ĊĠĠĠĠĠĠĠ Ġval Ġs urname : ĠString ? Ġ= Ġcontact Details . surname ĊĊĠĠĠĠĠĠĠ Ġif Ġ( firstName Ġ== Ġnull Ġ&& Ġs urname Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboth Ġnames Ġare Ġnull , Ġthen Ġuse Ġfirst Ġphone Ġnumber Ġif Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contact Details . first Phone Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp DisplayName Ġ= Ġcontact Details . first Phone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaggregated Name : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( firstName Ġ!= Ġnull Ġ&& Ġs urname Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggregated Name Ġ= ĠfirstName Ġ+ Ġ" Ġ" Ġ+ Ġs urname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( surname Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggregated Name Ġ= ĠfirstName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( firstName Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggregated Name Ġ= Ġs urname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( ag gregated Name !!. trim (). length Ġ== Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp DisplayName Ġ= Ġaggregated Name . trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( NULL . equals ( displayName )) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( temp DisplayName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( displayName , Ġtemp DisplayName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠName Phone Input ( ĊĠĠĠ Ġvar ĠfirstName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġs urname : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġfirst Phone : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġsecond Phone : ĠString ? Ġ= Ġnull Ċ )