query recipients also from crypto provider, if available
This commit is contained in:
parent
688169077d
commit
fca4630177
1 changed files with 46 additions and 0 deletions
|
@ -21,6 +21,7 @@ import com.fsck.k9.R;
|
||||||
import com.fsck.k9.mail.Address;
|
import com.fsck.k9.mail.Address;
|
||||||
import com.fsck.k9.view.RecipientSelectView.Recipient;
|
import com.fsck.k9.view.RecipientSelectView.Recipient;
|
||||||
import com.fsck.k9.view.RecipientSelectView.RecipientCryptoStatus;
|
import com.fsck.k9.view.RecipientSelectView.RecipientCryptoStatus;
|
||||||
|
import timber.log.Timber;
|
||||||
|
|
||||||
|
|
||||||
public class RecipientLoader extends AsyncTaskLoader<List<Recipient>> {
|
public class RecipientLoader extends AsyncTaskLoader<List<Recipient>> {
|
||||||
|
@ -58,6 +59,13 @@ public class RecipientLoader extends AsyncTaskLoader<List<Recipient>> {
|
||||||
private static final int INDEX_CONTACT_ID_FOR_NICKNAME = 0;
|
private static final int INDEX_CONTACT_ID_FOR_NICKNAME = 0;
|
||||||
private static final int INDEX_NICKNAME = 1;
|
private static final int INDEX_NICKNAME = 1;
|
||||||
|
|
||||||
|
private static final String[] PROJECTION_CRYPTO_ADDRESSES = {
|
||||||
|
"address",
|
||||||
|
"uid_address"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final int INDEX_USER_ID = 1;
|
||||||
|
|
||||||
private static final String[] PROJECTION_CRYPTO_STATUS = {
|
private static final String[] PROJECTION_CRYPTO_STATUS = {
|
||||||
"address",
|
"address",
|
||||||
"uid_key_status",
|
"uid_key_status",
|
||||||
|
@ -120,6 +128,10 @@ public class RecipientLoader extends AsyncTaskLoader<List<Recipient>> {
|
||||||
fillContactDataFromEmailContentUri(contactUri, recipients, recipientMap);
|
fillContactDataFromEmailContentUri(contactUri, recipients, recipientMap);
|
||||||
} else if (query != null) {
|
} else if (query != null) {
|
||||||
fillContactDataFromQuery(query, recipients, recipientMap);
|
fillContactDataFromQuery(query, recipients, recipientMap);
|
||||||
|
|
||||||
|
if (cryptoProvider != null) {
|
||||||
|
fillContactDataFromCryptoProvider(query, recipients, recipientMap);
|
||||||
|
}
|
||||||
} else if (lookupKeyUri != null) {
|
} else if (lookupKeyUri != null) {
|
||||||
fillContactDataFromLookupKey(lookupKeyUri, recipients, recipientMap);
|
fillContactDataFromLookupKey(lookupKeyUri, recipients, recipientMap);
|
||||||
} else {
|
} else {
|
||||||
|
@ -137,6 +149,40 @@ public class RecipientLoader extends AsyncTaskLoader<List<Recipient>> {
|
||||||
return recipients;
|
return recipients;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void fillContactDataFromCryptoProvider(String query, List<Recipient> recipients,
|
||||||
|
Map<String, Recipient> recipientMap) {
|
||||||
|
Cursor cursor;
|
||||||
|
try {
|
||||||
|
Uri queryUri = Uri.parse("content://" + cryptoProvider + ".provider.exported/autocrypt_status");
|
||||||
|
cursor = getContext().getContentResolver().query(queryUri, PROJECTION_CRYPTO_ADDRESSES, null,
|
||||||
|
new String[] { "%" + query + "%" }, null);
|
||||||
|
|
||||||
|
if (cursor == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
Timber.e(e, "Couldn't obtain recipients from crypto provider!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (cursor.moveToNext()) {
|
||||||
|
String uid = cursor.getString(INDEX_USER_ID);
|
||||||
|
Address[] addresses = Address.parseUnencoded(uid);
|
||||||
|
|
||||||
|
for (Address address : addresses) {
|
||||||
|
if (recipientMap.containsKey(address.getAddress())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Recipient recipient = new Recipient(address);
|
||||||
|
recipients.add(recipient);
|
||||||
|
recipientMap.put(address.getAddress(), recipient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor.close();
|
||||||
|
}
|
||||||
|
|
||||||
private void fillContactDataFromAddresses(Address[] addresses, List<Recipient> recipients,
|
private void fillContactDataFromAddresses(Address[] addresses, List<Recipient> recipients,
|
||||||
Map<String, Recipient> recipientMap) {
|
Map<String, Recipient> recipientMap) {
|
||||||
for (Address address : addresses) {
|
for (Address address : addresses) {
|
||||||
|
|
Loading…
Reference in a new issue