From 5480a829adb58459ab74b87b34b4d6ed2b841bec Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 31 Jan 2019 15:05:04 +0100 Subject: [PATCH] More fixes & improvements regarding contacts --- .../java/org/linphone/LinphoneActivity.java | 31 +++------- .../org/linphone/contacts/AndroidContact.java | 4 +- .../contacts/AsyncContactsLoader.java | 28 +--------- .../contacts/ContactEditorFragment.java | 8 +++ .../linphone/contacts/ContactsManager.java | 33 +++++++++-- .../linphone/contacts/LinphoneContact.java | 56 +++++++++++++++++++ 6 files changed, 104 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneActivity.java b/app/src/main/java/org/linphone/LinphoneActivity.java index 2a1e47d14..d9f9382c1 100644 --- a/app/src/main/java/org/linphone/LinphoneActivity.java +++ b/app/src/main/java/org/linphone/LinphoneActivity.java @@ -205,13 +205,7 @@ public class LinphoneActivity extends LinphoneGenericActivity Manifest.permission.WRITE_SYNC_SETTINGS, getPackageName()) != PackageManager.PERMISSION_GRANTED) { checkSyncPermission(); - } else { - if (LinphoneService.isReady()) - ContactsManager.getInstance().initializeSyncAccount(this); } - } else { - if (LinphoneService.isReady() && !ContactsManager.getInstance().contactsFetchedOnce()) - ContactsManager.getInstance().initializeContactManager(this); } setContentView(R.layout.main); @@ -1360,15 +1354,13 @@ public class LinphoneActivity extends LinphoneGenericActivity readContactsI = i; } + if (readContactsI >= 0 + && grantResults[readContactsI] == PackageManager.PERMISSION_GRANTED) { + ContactsManager.getInstance().enableContactsAccess(); + } switch (requestCode) { case PERMISSIONS_REQUEST_SYNC: - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - ContactsManager.getInstance().initializeSyncAccount(this); - } else { - if (!ContactsManager.getInstance().contactsFetchedOnce()) { - ContactsManager.getInstance().initializeContactManager(this); - } - } + ContactsManager.getInstance().initializeContactManager(this); break; case PERMISSIONS_RECORD_AUDIO_ECHO_CANCELLER: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { @@ -1388,13 +1380,6 @@ public class LinphoneActivity extends LinphoneGenericActivity ((SettingsFragment) mFragment).startEchoTester(); break; } - if (readContactsI >= 0 - && grantResults[readContactsI] == PackageManager.PERMISSION_GRANTED) { - ContactsManager.getInstance().enableContactsAccess(); - if (!ContactsManager.getInstance().contactsFetchedOnce()) { - ContactsManager.getInstance().initializeContactManager(this); - } - } } @Override @@ -1474,10 +1459,7 @@ public class LinphoneActivity extends LinphoneGenericActivity permissionsList.add(Manifest.permission.READ_CONTACTS); } } else { - if (!ContactsManager.getInstance().contactsFetchedOnce()) { - ContactsManager.getInstance().enableContactsAccess(); - ContactsManager.getInstance().fetchContactsAsync(); - } + ContactsManager.getInstance().enableContactsAccess(); } if (permissionsList.size() > 0) { @@ -1486,6 +1468,7 @@ public class LinphoneActivity extends LinphoneGenericActivity ActivityCompat.requestPermissions( this, permissions, PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE); } + ContactsManager.getInstance().initializeContactManager(this); } @Override diff --git a/app/src/main/java/org/linphone/contacts/AndroidContact.java b/app/src/main/java/org/linphone/contacts/AndroidContact.java index c307f8729..f85042b99 100644 --- a/app/src/main/java/org/linphone/contacts/AndroidContact.java +++ b/app/src/main/java/org/linphone/contacts/AndroidContact.java @@ -579,7 +579,7 @@ class AndroidContact implements Serializable { String linphoneRawId = findLinphoneRawContactId(); if (linphoneRawId == null) { Log.i("[Contact] Linphone RAW ID not found for contact " + mAndroidId); - createRawLinphoneContactFromExistingAndroidContact(fullName); + createRawLinphoneContactFromExistingAndroidContact(); } else { Log.i( "[Contact] Linphone RAW ID found for contact " @@ -593,7 +593,7 @@ class AndroidContact implements Serializable { } } - private void createRawLinphoneContactFromExistingAndroidContact(String fullName) { + private void createRawLinphoneContactFromExistingAndroidContact() { addChangesToCommit( ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValue( diff --git a/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java b/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java index 7dd8376c3..7feb9666b 100644 --- a/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java +++ b/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java @@ -42,7 +42,7 @@ import org.linphone.utils.LinphoneUtils; class AsyncContactsLoader extends AsyncTask { @SuppressLint("InlinedApi") - private static final String[] PROJECTION = { + public static final String[] PROJECTION = { ContactsContract.Data.CONTACT_ID, ContactsContract.Contacts.LOOKUP_KEY, ContactsContract.Contacts.DISPLAY_NAME_PRIMARY, @@ -132,13 +132,6 @@ class AsyncContactsLoader extends AsyncTask(); + while (c.moveToNext()) { + syncValuesFromAndroidCusor(c); + } + c.close(); + } + } + + public void syncValuesFromAndroidCusor(Cursor c) { + String displayName = + c.getString(c.getColumnIndex(ContactsContract.Data.DISPLAY_NAME_PRIMARY)); + String mime = c.getString(c.getColumnIndex(ContactsContract.Data.MIMETYPE)); + String data1 = c.getString(c.getColumnIndex("data1")); + String data2 = c.getString(c.getColumnIndex("data2")); + String data3 = c.getString(c.getColumnIndex("data3")); + String data4 = c.getString(c.getColumnIndex("data4")); + String lookupKey = c.getString(c.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); + + setAndroidLookupKey(lookupKey); + setFullName(displayName); + + if (ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE.equals(mime)) { + addNumberOrAddress(new LinphoneNumberOrAddress(data1, data4)); + } else if (ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE.equals(mime) + || LinphoneManager.getInstance() + .getContext() + .getString(R.string.linphone_address_mime_type) + .equals(mime)) { + addNumberOrAddress(new LinphoneNumberOrAddress(data1, true)); + } else if (ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE.equals(mime)) { + setOrganization(data1, false); + } else if (ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE.equals(mime)) { + setFirstNameAndLastName(data2, data3, false); + } + } + public void save() { saveChangesCommited(); + syncValuesFromAndroidContact(LinphoneActivity.instance()); createOrUpdateFriend(); }