attempt to read both jabber and xmpp IM fields from address book
This commit is contained in:
parent
fdaab1c27e
commit
4a6df90f0c
|
@ -17,6 +17,21 @@ import eu.siacs.conversations.xmpp.Jid;
|
||||||
|
|
||||||
public class JabberIdContact extends AbstractPhoneContact {
|
public class JabberIdContact extends AbstractPhoneContact {
|
||||||
|
|
||||||
|
private static final String[] PROJECTION = new String[]{ContactsContract.Data._ID,
|
||||||
|
ContactsContract.Data.DISPLAY_NAME,
|
||||||
|
ContactsContract.Data.PHOTO_URI,
|
||||||
|
ContactsContract.Data.LOOKUP_KEY,
|
||||||
|
ContactsContract.CommonDataKinds.Im.DATA
|
||||||
|
};
|
||||||
|
private static final String SELECTION = ContactsContract.Data.MIMETYPE + "=? AND (" + ContactsContract.CommonDataKinds.Im.PROTOCOL + "=? or (" + ContactsContract.CommonDataKinds.Im.PROTOCOL + "=? and " + ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL + "=?))";
|
||||||
|
|
||||||
|
private static final String[] SELECTION_ARGS = {
|
||||||
|
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE,
|
||||||
|
String.valueOf(ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER),
|
||||||
|
String.valueOf(ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM),
|
||||||
|
"XMPP"
|
||||||
|
};
|
||||||
|
|
||||||
private final Jid jid;
|
private final Jid jid;
|
||||||
|
|
||||||
private JabberIdContact(Cursor cursor) throws IllegalArgumentException {
|
private JabberIdContact(Cursor cursor) throws IllegalArgumentException {
|
||||||
|
@ -36,38 +51,26 @@ public class JabberIdContact extends AbstractPhoneContact {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context.checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context.checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
final String[] PROJECTION = new String[]{ContactsContract.Data._ID,
|
try (final Cursor cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, SELECTION_ARGS, null)) {
|
||||||
ContactsContract.Data.DISPLAY_NAME,
|
if (cursor == null) {
|
||||||
ContactsContract.Data.PHOTO_URI,
|
|
||||||
ContactsContract.Data.LOOKUP_KEY,
|
|
||||||
ContactsContract.CommonDataKinds.Im.DATA};
|
|
||||||
|
|
||||||
final String SELECTION = "(" + ContactsContract.Data.MIMETYPE + "=\""
|
|
||||||
+ ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE
|
|
||||||
+ "\") AND (" + ContactsContract.CommonDataKinds.Im.PROTOCOL
|
|
||||||
+ "=\"" + ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER
|
|
||||||
+ "\")";
|
|
||||||
final Cursor cursor;
|
|
||||||
try {
|
|
||||||
cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, null, null);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
final HashMap<Jid, JabberIdContact> contacts = new HashMap<>();
|
final HashMap<Jid, JabberIdContact> contacts = new HashMap<>();
|
||||||
while (cursor != null && cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
try {
|
try {
|
||||||
final JabberIdContact contact = new JabberIdContact(cursor);
|
final JabberIdContact contact = new JabberIdContact(cursor);
|
||||||
final JabberIdContact preexisting = contacts.put(contact.getJid(), contact);
|
final JabberIdContact preexisting = contacts.put(contact.getJid(), contact);
|
||||||
if (preexisting == null || preexisting.rating() < contact.rating()) {
|
if (preexisting == null || preexisting.rating() < contact.rating()) {
|
||||||
contacts.put(contact.getJid(), contact);
|
contacts.put(contact.getJid(), contact);
|
||||||
}
|
}
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (final IllegalArgumentException e) {
|
||||||
Log.d(Config.LOGTAG, "unable to create jabber id contact");
|
Log.d(Config.LOGTAG, "unable to create jabber id contact");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cursor != null) {
|
|
||||||
cursor.close();
|
|
||||||
}
|
|
||||||
return contacts;
|
return contacts;
|
||||||
|
} catch (final Exception e) {
|
||||||
|
Log.d(Config.LOGTAG, "unable to query", e);
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue