fixed avatar in notification

iNPUTmice created

Change summary

src/eu/siacs/conversations/entities/Contact.java        |  2 
src/eu/siacs/conversations/persistance/FileBackend.java | 45 +++++++---
src/eu/siacs/conversations/utils/UIHelper.java          |  4 
3 files changed, 32 insertions(+), 19 deletions(-)

Detailed changes

src/eu/siacs/conversations/entities/Contact.java 🔗

@@ -321,7 +321,7 @@ public class Contact implements ListItem {
 	@Override
 	public Bitmap getImage(int size, Context context) {
 		if (this.avatar!=null) {
-			Bitmap bm = BitmapFactory.decodeFile(FileBackend.getAvatarPath(context, avatar));
+			Bitmap bm = FileBackend.getAvatar(avatar, size, context);
 			if (bm==null) {
 				return UIHelper.getContactPicture(this, size, context, false);
 			} else {

src/eu/siacs/conversations/persistance/FileBackend.java 🔗

@@ -30,6 +30,7 @@ import eu.siacs.conversations.entities.Conversation;
 import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.services.ImageProvider;
 import eu.siacs.conversations.utils.CryptoHelper;
+import eu.siacs.conversations.utils.UIHelper;
 import eu.siacs.conversations.xmpp.jingle.JingleFile;
 import eu.siacs.conversations.xmpp.pep.Avatar;
 
@@ -330,26 +331,30 @@ public class FileBackend {
 			InputStream is = context.getContentResolver()
 					.openInputStream(image);
 			Bitmap input = BitmapFactory.decodeStream(is, null, options);
-			int w = input.getWidth();
-			int h = input.getHeight();
-
-			float scale = Math.max((float) size / h, (float) size / w);
-
-			float outWidth = scale * w;
-			float outHeight = scale * h;
-			float left = (size - outWidth) / 2;
-			float top = (size - outHeight) / 2;
-			RectF target = new RectF(left, top, left + outWidth, top
-					+ outHeight);
-
-			Bitmap output = Bitmap.createBitmap(size, size, input.getConfig());
-			Canvas canvas = new Canvas(output);
-			canvas.drawBitmap(input, null, target, null);
-			return output;
+			return cropCenterSquare(input, size);
 		} catch (FileNotFoundException e) {
 			return null;
 		}
 	}
+	
+	public static Bitmap cropCenterSquare(Bitmap input, int size) {
+		int w = input.getWidth();
+		int h = input.getHeight();
+
+		float scale = Math.max((float) size / h, (float) size / w);
+
+		float outWidth = scale * w;
+		float outHeight = scale * h;
+		float left = (size - outWidth) / 2;
+		float top = (size - outHeight) / 2;
+		RectF target = new RectF(left, top, left + outWidth, top
+				+ outHeight);
+
+		Bitmap output = Bitmap.createBitmap(size, size, input.getConfig());
+		Canvas canvas = new Canvas(output);
+		canvas.drawBitmap(input, null, target, null);
+		return output;
+	}
 
 	private int calcSampleSize(Uri image, int size)
 			throws FileNotFoundException {
@@ -395,4 +400,12 @@ public class FileBackend {
 			return resId;
 		}
 	}
+
+	public static Bitmap getAvatar(String avatar, int size, Context context) {
+		Bitmap bm = BitmapFactory.decodeFile(FileBackend.getAvatarPath(context, avatar));
+		if (bm==null) {
+			return null;
+		}
+		return cropCenterSquare(bm, UIHelper.getRealPx(size, context));
+	}
 }

src/eu/siacs/conversations/utils/UIHelper.java 🔗

@@ -15,6 +15,7 @@ import eu.siacs.conversations.entities.Contact;
 import eu.siacs.conversations.entities.Conversation;
 import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.entities.MucOptions.User;
+import eu.siacs.conversations.persistance.FileBackend;
 import eu.siacs.conversations.ui.ConversationActivity;
 import eu.siacs.conversations.ui.ManageAccountActivity;
 import android.app.Activity;
@@ -376,8 +377,7 @@ public class UIHelper {
 		} else if (unread.size() == 1) {
 			Conversation conversation = unread.get(0);
 			targetUuid = conversation.getUuid();
-			mBuilder.setLargeIcon(UIHelper.getContactPicture(conversation, 64,
-					context, true));
+			mBuilder.setLargeIcon(conversation.getImage(context, 64));
 			mBuilder.setContentTitle(conversation.getName(useSubject));
 			if (notify) {
 				mBuilder.setTicker(conversation.getLatestMessage()