From 80064f6040cab219702d8221a052eace5f47661c Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Mon, 23 Apr 2018 21:13:12 +0200 Subject: support contact shortcuts * support contact shortcuts * make ShortcutActivity extends AbstractSearchableListItemActivity * Draw the app icon in the corner of the icon and modify the name of the widget * updated label and icon size --- .../pixart/messenger/services/AvatarService.java | 35 ++++++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'src/main/java/de/pixart/messenger/services/AvatarService.java') diff --git a/src/main/java/de/pixart/messenger/services/AvatarService.java b/src/main/java/de/pixart/messenger/services/AvatarService.java index e7096a558..766c2e240 100644 --- a/src/main/java/de/pixart/messenger/services/AvatarService.java +++ b/src/main/java/de/pixart/messenger/services/AvatarService.java @@ -1,6 +1,8 @@ package de.pixart.messenger.services; +import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; @@ -21,6 +23,7 @@ import java.util.Locale; import java.util.Set; import de.pixart.messenger.Config; +import de.pixart.messenger.R; import de.pixart.messenger.entities.Account; import de.pixart.messenger.entities.Bookmark; import de.pixart.messenger.entities.Contact; @@ -80,21 +83,47 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { } public Bitmap getRoundedShortcut(final Contact contact) { + return getRoundedShortcut(contact, false); + } + + public Bitmap getRoundedShortcutWithIcon(final Contact contact) { + return getRoundedShortcut(contact, true); + } + + private Bitmap getRoundedShortcut(final Contact contact, boolean withIcon) { DisplayMetrics metrics = mXmppConnectionService.getResources().getDisplayMetrics(); int size = Math.round(metrics.density * 48); Bitmap bitmap = get(contact, size); Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); - final Paint paint = new Paint(); - final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); + drawAvatar(bitmap, canvas, paint); + if (withIcon) { + drawIcon(canvas, paint); + } + return output; + } + private void drawAvatar(Bitmap bitmap, Canvas canvas, Paint paint) { + final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); 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; + } + + private void drawIcon(Canvas canvas, Paint paint) { + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inSampleSize = 3; + Resources resources = mXmppConnectionService.getResources(); + Bitmap icon = BitmapFactory.decodeResource(resources, R.drawable.ic_launcher, opts); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); + + int left = canvas.getWidth() - icon.getWidth(); + int top = canvas.getHeight() - icon.getHeight(); + final Rect rect = new Rect(left, top, left + icon.getWidth(), top + icon.getHeight()); + canvas.drawBitmap(icon, null, rect, paint); } public Bitmap get(final MucOptions.User user, final int size, boolean cachedOnly) { -- cgit v1.2.3