From 0920f80d037307d81c4ca0c23e190a4477b550c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=E1=BA=A1nh=20L=C3=AA?= Date: Fri, 25 Jul 2025 23:12:26 +0700 Subject: [PATCH 1/3] add namespace android gradle --- android/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/android/build.gradle b/android/build.gradle index 2feed78f..5cdcf125 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -22,6 +22,7 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { + namespace 'flutter.plugins.contactsservice.contactsservice' compileSdkVersion 30 defaultConfig { From 8a9799cfdb8839f493f31f4da5e673bda230fd11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=E1=BA=A1nh=20L=C3=AA?= Date: Fri, 25 Jul 2025 23:22:27 +0700 Subject: [PATCH 2/3] fix cursor --- .../contactsservice/ContactsServicePlugin.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/flutter/plugins/contactsservice/contactsservice/ContactsServicePlugin.java b/android/src/main/java/flutter/plugins/contactsservice/contactsservice/ContactsServicePlugin.java index 8c69de78..11bc38e1 100644 --- a/android/src/main/java/flutter/plugins/contactsservice/contactsservice/ContactsServicePlugin.java +++ b/android/src/main/java/flutter/plugins/contactsservice/contactsservice/ContactsServicePlugin.java @@ -296,7 +296,9 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent intent) Log.e(LOG_TAG, "onActivityResult - cursor.moveToFirst() returns false"); finishWithResult(FORM_OPERATION_CANCELED); }}else{return true;} - cursor.close(); + if (cursor != null) { + cursor.close(); + } return true; } From 6958a841b82a86662afb599215a5a7c6c407af23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=E1=BA=A1nh=20L=C3=AA?= Date: Fri, 25 Jul 2025 23:31:40 +0700 Subject: [PATCH 3/3] fix cursor --- .../ContactsServicePlugin.java | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/android/src/main/java/flutter/plugins/contactsservice/contactsservice/ContactsServicePlugin.java b/android/src/main/java/flutter/plugins/contactsservice/contactsservice/ContactsServicePlugin.java index 11bc38e1..d58ea3e5 100644 --- a/android/src/main/java/flutter/plugins/contactsservice/contactsservice/ContactsServicePlugin.java +++ b/android/src/main/java/flutter/plugins/contactsservice/contactsservice/ContactsServicePlugin.java @@ -271,7 +271,7 @@ void finishWithResult(Object result) { @Override public boolean onActivityResult(int requestCode, int resultCode, Intent intent) { - if(requestCode == REQUEST_OPEN_EXISTING_CONTACT || requestCode == REQUEST_OPEN_CONTACT_FORM) { + if (requestCode == REQUEST_OPEN_EXISTING_CONTACT || requestCode == REQUEST_OPEN_CONTACT_FORM) { try { Uri ur = intent.getData(); finishWithResult(getContactByIdentifier(ur.getLastPathSegment())); @@ -286,19 +286,27 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent intent) finishWithResult(FORM_OPERATION_CANCELED); return true; } - Uri contactUri = intent.getData(); - if (intent != null){ - Cursor cursor = contentResolver.query(contactUri, null, null, null, null); - if (cursor.moveToFirst()) { - String id = contactUri.getLastPathSegment(); - getContacts("openDeviceContactPicker", id, false, false, false, localizedLabels, this.result); - } else { - Log.e(LOG_TAG, "onActivityResult - cursor.moveToFirst() returns false"); - finishWithResult(FORM_OPERATION_CANCELED); - }}else{return true;} - if (cursor != null) { - cursor.close(); + + Cursor cursor = null; + + try { + if (intent != null) { + Uri contactUri = intent.getData(); + cursor = contentResolver.query(contactUri, null, null, null, null); + if (cursor != null && cursor.moveToFirst()) { + String id = contactUri.getLastPathSegment(); + getContacts("openDeviceContactPicker", id, false, false, false, localizedLabels, this.result); + } else { + Log.e(LOG_TAG, "onActivityResult - cursor.moveToFirst() returns false"); + finishWithResult(FORM_OPERATION_CANCELED); + } + } + } finally { + if (cursor != null) { + cursor.close(); + } } + return true; } @@ -306,6 +314,7 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent intent) return false; } + void openExistingContact(Contact contact) { String identifier = contact.identifier; try {