diff --git a/CHANGELOG.md b/CHANGELOG.md index 982bd572a6bb5..b9c135ff83da1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ This is the log of notable changes to the Expo client that are developer-facing. - Fixed `Brightness.requestPermissionsAsync` throwing `permission cannot be null or empty` error on Android. ([#7276](https://github.com/expo/expo/pull/7276) by [@lukmccall](https://github.com/lukmccall)) - Fixed `KeepAwake.activateKeepAwake` not working with multiple tags on Android. ([#7197](https://github.com/expo/expo/pull/7197) by [@lukmccall](https://github.com/lukmccall)) +- Fix `Contacts.presentFormAsync` pre-filling. ([#7285](https://github.com/expo/expo/pull/7285) by [@abdelilah](https://github.com/abdelilah) & [@lukmccall](https://github.com/lukmccall)) ## 37.0.0 diff --git a/packages/expo-contacts/android/src/main/java/expo/modules/contacts/Contact.java b/packages/expo-contacts/android/src/main/java/expo/modules/contacts/Contact.java index 163b43a80ee84..21fc40c0eec4c 100644 --- a/packages/expo-contacts/android/src/main/java/expo/modules/contacts/Contact.java +++ b/packages/expo-contacts/android/src/main/java/expo/modules/contacts/Contact.java @@ -1,5 +1,6 @@ package expo.modules.contacts; +import android.net.Uri; import android.util.Log; import android.content.ContentProviderOperation; import android.content.ContentValues; @@ -11,6 +12,8 @@ import android.provider.ContactsContract; import android.text.TextUtils; +import org.jetbrains.annotations.Nullable; + import java.io.ByteArrayOutputStream; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -183,6 +186,15 @@ public String getLastName() { return lastName; } + @Nullable + public String getDisplayName() { + if (displayName == null && firstName != null) { + return lastName == null ? firstName : String.format("%s %s", firstName, lastName).trim(); + } + + return displayName; + } + public Contact(String contactId) { this.contactId = contactId; } @@ -466,7 +478,7 @@ public ArrayList getContentValues() { contactData.add(notes); if (photoUri != null && !photoUri.isEmpty()) { - Bitmap photo = BitmapFactory.decodeFile(photoUri); + Bitmap photo = BitmapFactory.decodeFile(Uri.parse(photoUri).getPath()); if (photo != null) { ContentValues image = new ContentValues(); @@ -495,4 +507,4 @@ public ArrayList getContentValues() { return contactData; } -} \ No newline at end of file +} diff --git a/packages/expo-contacts/android/src/main/java/expo/modules/contacts/ContactsModule.java b/packages/expo-contacts/android/src/main/java/expo/modules/contacts/ContactsModule.java index 35493976b22b4..55d1b6fedec4c 100644 --- a/packages/expo-contacts/android/src/main/java/expo/modules/contacts/ContactsModule.java +++ b/packages/expo-contacts/android/src/main/java/expo/modules/contacts/ContactsModule.java @@ -274,11 +274,7 @@ public void presentFormAsync(String contactId, Map contactData, private void presentForm(Contact contact) { Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI); - if (contact.displayName != null) { - intent.putExtra(ContactsContract.Intents.Insert.NAME, contact.displayName); - } else { - intent.putExtra(ContactsContract.Intents.Insert.NAME, contact.getFirstName()); - } + intent.putExtra(ContactsContract.Intents.Insert.NAME, contact.getDisplayName()); intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contact.getContentValues()); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); @@ -367,6 +363,15 @@ private Contact mutateContact(Contact contact, Map data) { if (data.containsKey("note")) contact.note = (String) data.get("note"); + if (data.containsKey("image")) { + Map photo = (Map) data.get("image"); + + if (photo.containsKey("uri")) { + contact.photoUri = (String) photo.get("uri"); + contact.hasPhoto = true; + } + } + ArrayList results; try {