Use round images for notifications' contacts' pictures

This commit is contained in:
Sylvain Berfini 2018-11-21 10:21:56 +01:00
parent 0048482d1c
commit 6c515734bc
2 changed files with 48 additions and 28 deletions

View file

@ -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;
}
}

View file

@ -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;