@@ -8,6 +8,9 @@ import android.provider.ContactsContract
88import androidx.core.net.toUri
99import com.bnyro.contacts.R
1010import com.bnyro.contacts.enums.IntentActionType
11+ import com.bnyro.contacts.obj.ContactData
12+ import com.bnyro.contacts.obj.TranslatedType
13+ import com.bnyro.contacts.obj.ValueWithType
1114
1215object IntentHelper {
1316 fun launchAction (context : Context , type : IntentActionType , argument : String ) {
@@ -67,4 +70,43 @@ object IntentHelper {
6770 val intent = Intent (Intent .ACTION_VIEW , Uri .parse(url))
6871 context.startActivity(intent)
6972 }
73+
74+ fun extractContactFromIntent (intent : Intent ): ContactData {
75+ val name = intent.getStringExtra(ContactsContract .Intents .Insert .NAME )
76+ ? : intent.getStringExtra(ContactsContract .Intents .Insert .PHONETIC_NAME )
77+
78+ return ContactData (
79+ displayName = name,
80+ firstName = name?.split(" " )?.firstOrNull(),
81+ surName = name?.split(" " , limit = 2 )?.lastOrNull(),
82+ organization = intent.getStringExtra(ContactsContract .Intents .Insert .COMPANY ),
83+ numbers = extractIntentValue(intent, ContactsContract .Intents .Insert .PHONE , ContactsContract .Intents .Insert .PHONE_TYPE ) +
84+ extractIntentValue(intent, ContactsContract .Intents .Insert .SECONDARY_PHONE , ContactsContract .Intents .Insert .SECONDARY_PHONE_TYPE ) +
85+ extractIntentValue(intent, ContactsContract .Intents .Insert .TERTIARY_PHONE , ContactsContract .Intents .Insert .TERTIARY_PHONE_TYPE ),
86+ emails = extractIntentValue(intent, ContactsContract .Intents .Insert .EMAIL , ContactsContract .Intents .Insert .EMAIL_TYPE ) +
87+ extractIntentValue(intent, ContactsContract .Intents .Insert .SECONDARY_EMAIL , ContactsContract .Intents .Insert .SECONDARY_EMAIL_TYPE ) +
88+ extractIntentValue(intent, ContactsContract .Intents .Insert .TERTIARY_EMAIL , ContactsContract .Intents .Insert .TERTIARY_EMAIL_TYPE ),
89+ notes = extractIntentValue(intent, ContactsContract .Intents .Insert .NOTES ),
90+ addresses = extractIntentValue(intent, ContactsContract .Intents .Insert .POSTAL )
91+ )
92+ }
93+
94+ private fun extractIntentValue (
95+ intent : Intent ,
96+ key : String ,
97+ typeKey : String? = null,
98+ types : List <TranslatedType > = emptyList()
99+ ): List <ValueWithType > {
100+ val entry = intent.getStringExtra(key) ? : return emptyList()
101+
102+ val type = if (typeKey != null ) {
103+ val typeIdentifier = intent.getStringExtra(typeKey)
104+
105+ types.firstOrNull {
106+ it.vcardType?.value?.uppercase() == typeIdentifier
107+ }?.id
108+ } else null
109+
110+ return listOf (ValueWithType (entry, type ? : 0 ))
111+ }
70112}
0 commit comments