From 6c515734bc53a3cbf8d701dbc1f71fbf05f68e17 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 21 Nov 2018 10:21:56 +0100 Subject: [PATCH] Use round images for notifications' contacts' pictures --- .../main/java/org/linphone/LinphoneUtils.java | 45 +++++++++++++++++++ .../notifications/NotificationsManager.java | 31 ++----------- 2 files changed, 48 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneUtils.java b/app/src/main/java/org/linphone/LinphoneUtils.java index 21dec9a2d..6547d7eed 100644 --- a/app/src/main/java/org/linphone/LinphoneUtils.java +++ b/app/src/main/java/org/linphone/LinphoneUtils.java @@ -27,6 +27,11 @@ import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; @@ -812,5 +817,45 @@ public final class LinphoneUtils { } LinphoneManager.getInstance().getMediaScanner().scanFile(new File(appData)); } + + public static Bitmap getRoundBitmapFromUri(Context context, Uri fromPictureUri) { + Bitmap bm; + Bitmap roundBm; + if (fromPictureUri != null) { + try { + bm = MediaStore.Images.Media.getBitmap(context.getContentResolver(), fromPictureUri); + } catch (Exception e) { + bm = BitmapFactory.decodeResource(context.getResources(), R.drawable.topbar_avatar); + } + } else { + bm = BitmapFactory.decodeResource(context.getResources(), R.drawable.topbar_avatar); + } + if (bm != null) { + roundBm = LinphoneUtils.getRoundBitmap(bm); + if (roundBm != null) { + bm.recycle(); + bm = roundBm; + } + } + return bm; + } + + public static Bitmap getRoundBitmap(Bitmap bitmap) { + Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(output); + + final int color = 0xff424242; + final Paint paint = new Paint(); + final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); + + paint.setAntiAlias(true); + canvas.drawARGB(0, 0, 0, 0); + paint.setColor(color); + canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2, paint); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + canvas.drawBitmap(bitmap, rect, rect, paint); + + return output; + } } diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.java b/app/src/main/java/org/linphone/notifications/NotificationsManager.java index 1b876906d..8a6ab59b9 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationsManager.java +++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.java @@ -135,17 +135,7 @@ public class NotificationsManager { notifIntent.putExtra("ChatContactSipUri", conferenceAddress); PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, notifIntent, PendingIntent.FLAG_UPDATE_CURRENT); - Bitmap bm; - if (fromPictureUri != null) { - try { - bm = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), fromPictureUri); - } catch (Exception e) { - bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.chat_group_avatar); - } - } else { - bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.topbar_avatar); - } - + Bitmap bm = LinphoneUtils.getRoundBitmapFromUri(mContext, fromPictureUri); Notifiable notif = mChatNotifMap.get(conferenceAddress); NotifiableMessage notifMessage = new NotifiableMessage(message, fromName, timestamp); if (notif == null) { @@ -175,17 +165,7 @@ public class NotificationsManager { fromName = fromSipUri; } - Bitmap bm; - if (fromPictureUri != null) { - try { - bm = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), fromPictureUri); - } catch (Exception e) { - bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.topbar_avatar); - } - } else { - bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.topbar_avatar); - } - + Bitmap bm = LinphoneUtils.getRoundBitmapFromUri(mContext, fromPictureUri); Notifiable notif = mChatNotifMap.get(fromSipUri); NotifiableMessage notifMessage = new NotifiableMessage(message, fromName, timestamp); if (notif == null) { @@ -277,12 +257,7 @@ public class NotificationsManager { LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(address); Uri pictureUri = contact != null ? contact.getPhotoUri() : null; - Bitmap bm; - try { - bm = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), pictureUri); - } catch (Exception e) { - bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.avatar); - } + Bitmap bm = LinphoneUtils.getRoundBitmapFromUri(mContext, pictureUri); String name = LinphoneUtils.getAddressDisplayName(address); boolean showAnswerAction = call.getState() == Call.State.IncomingReceived || call.getState() == Call.State.IncomingEarlyMedia;