diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 11b0da36ef..e24b28ce56 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -483,6 +483,10 @@ public class ServiceSynchronize extends LifecycleService { return notifications; boolean pro = Helper.isPro(this); + boolean contacts = + (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) + == PackageManager.PERMISSION_GRANTED); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); // https://developer.android.com/training/notify-user/group @@ -491,6 +495,30 @@ public class ServiceSynchronize extends LifecycleService { String summary = getResources().getQuantityString( R.plurals.title_notification_unseen, messages.size(), messages.size()); + Map messageFrom = new HashMap<>(); + for (TupleMessageEx message : messages) { + String from = null; + if (!TextUtils.isEmpty(message.avatar) && contacts) { + Cursor cursor = null; + try { + cursor = getContentResolver().query( + Uri.parse(message.avatar), + new String[]{ContactsContract.Contacts.DISPLAY_NAME}, + null, null, null); + if (cursor != null && cursor.moveToNext()) + from = cursor.getString(0); + } finally { + if (cursor != null) + cursor.close(); + } + } + + if (from == null) + from = MessageHelper.formatAddressesShort(message.from); + + messageFrom.put(message, from); + } + // Build pending intent Intent view = new Intent(this, ActivityView.class); view.setAction("unified"); @@ -532,7 +560,6 @@ public class ServiceSynchronize extends LifecycleService { else builder = new Notification.Builder(this, channelName); - builder .setSmallIcon(R.drawable.baseline_email_white_24) .setContentTitle(getResources().getQuantityString(R.plurals.title_notification_unseen, messages.size(), messages.size())) @@ -569,7 +596,7 @@ public class ServiceSynchronize extends LifecycleService { DateFormat df = SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.SHORT); StringBuilder sb = new StringBuilder(); for (EntityMessage message : messages) { - sb.append("").append(MessageHelper.formatAddressesShort(message.from)).append(""); + sb.append("").append(messageFrom.get(message)).append(""); if (!TextUtils.isEmpty(message.subject)) sb.append(": ").append(message.subject); sb.append(" ").append(df.format(message.received)); @@ -640,7 +667,7 @@ public class ServiceSynchronize extends LifecycleService { mbuilder .addExtras(args) .setSmallIcon(R.drawable.baseline_email_white_24) - .setContentTitle(MessageHelper.formatAddresses(message.from)) + .setContentTitle(messageFrom.get(message)) .setSubText(message.accountName + " ยท " + folderName) .setContentIntent(piContent) .setWhen(message.received) @@ -676,8 +703,7 @@ public class ServiceSynchronize extends LifecycleService { } if (!TextUtils.isEmpty(message.avatar)) { - if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) - == PackageManager.PERMISSION_GRANTED) { + if (contacts) { Cursor cursor = null; try { cursor = getContentResolver().query(