Fix saving XMPP URIs in phone Contact Book

Previously XMPP URIs were saved as non functional e-mails in Android built-in
Contact Book. This change saves them as a special IM field that is used
directly by other applications (e.g. Conversations).
This commit is contained in:
Wiktor Kwapisiewicz 2018-09-06 10:36:21 +02:00
parent e6be72d3ec
commit 5c55c1a166
No known key found for this signature in database
GPG Key ID: B97A1EE09DB417EC
1 changed files with 21 additions and 8 deletions

View File

@ -41,6 +41,7 @@ import android.net.Uri;
import android.os.Build;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.Data;
import android.support.v4.content.ContextCompat;
import android.util.Patterns;
@ -785,17 +786,29 @@ public class ContactHelper {
*/
private void writeContactEmail(ArrayList<ContentProviderOperation> ops,
long rawContactId, long masterKeyId) {
ContentProviderOperation deleteOp = selectByRawContactAndItemType(
ContentProviderOperation deleteEmailOp = selectByRawContactAndItemType(
ContentProviderOperation.newDelete(Data.CONTENT_URI), rawContactId, Email.CONTENT_ITEM_TYPE).build();
ops.add(deleteOp);
ops.add(deleteEmailOp);
ContentProviderOperation deleteJabberOp = selectByRawContactAndItemType(
ContentProviderOperation.newDelete(Data.CONTENT_URI), rawContactId, Im.CONTENT_ITEM_TYPE).build();
ops.add(deleteJabberOp);
for (UserId userId : keyRepository.getUserIds(masterKeyId)) {
ContentProviderOperation insertOp =
referenceRawContact(ContentProviderOperation.newInsert(Data.CONTENT_URI), rawContactId)
.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
.withValue(Email.DATA, userId.email())
.build();
ops.add(insertOp);
if (userId.email() != null) {
ContentProviderOperation.Builder builder = referenceRawContact(
ContentProviderOperation.newInsert(Data.CONTENT_URI), rawContactId);
if (userId.email().startsWith("xmpp:")) {
builder = builder.withValue(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE)
.withValue(Im.PROTOCOL, Im.PROTOCOL_JABBER)
.withValue(Im.DATA, userId.email().substring(5));
} else {
builder = builder.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
.withValue(Email.DATA, userId.email());
}
ops.add(builder.build());
}
}
}