change icon size

This commit is contained in:
Daniel Gultsch 2018-04-04 09:33:31 +02:00
parent 044ea5c5a9
commit c86bc08c23
1 changed files with 34 additions and 32 deletions

View File

@ -48,7 +48,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
private static final String PREFIX_GENERIC = "generic"; private static final String PREFIX_GENERIC = "generic";
final private ArrayList<Integer> sizes = new ArrayList<>(); final private ArrayList<Integer> sizes = new ArrayList<>();
final private HashMap<String,Set<String>> conversationDependentKeys = new HashMap<>(); final private HashMap<String, Set<String>> conversationDependentKeys = new HashMap<>();
protected XmppConnectionService mXmppConnectionService = null; protected XmppConnectionService mXmppConnectionService = null;
@ -58,7 +58,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
private Bitmap get(final Contact contact, final int size, boolean cachedOnly) { private Bitmap get(final Contact contact, final int size, boolean cachedOnly) {
if (contact.isSelf()) { if (contact.isSelf()) {
return get(contact.getAccount(),size,cachedOnly); return get(contact.getAccount(), size, cachedOnly);
} }
final String KEY = key(contact, size); final String KEY = key(contact, size);
Bitmap avatar = this.mXmppConnectionService.getBitmapCache().get(KEY); Bitmap avatar = this.mXmppConnectionService.getBitmapCache().get(KEY);
@ -72,30 +72,30 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
avatar = mXmppConnectionService.getFileBackend().getAvatar(contact.getAvatar(), size); avatar = mXmppConnectionService.getFileBackend().getAvatar(contact.getAvatar(), size);
} }
if (avatar == null) { if (avatar == null) {
avatar = get(contact.getDisplayName(), contact.getJid().asBareJid().toString(), size, cachedOnly); avatar = get(contact.getDisplayName(), contact.getJid().asBareJid().toString(), size, cachedOnly);
} }
this.mXmppConnectionService.getBitmapCache().put(KEY, avatar); this.mXmppConnectionService.getBitmapCache().put(KEY, avatar);
return avatar; return avatar;
} }
public Bitmap getRoundedShortcut(final Contact contact) { public Bitmap getRoundedShortcut(final Contact contact) {
return getRoundedShortcut(contact,false); return getRoundedShortcut(contact, false);
} }
public Bitmap getRoundedShortcutWithIcon(final Contact contact){ public Bitmap getRoundedShortcutWithIcon(final Contact contact) {
return getRoundedShortcut(contact,true); return getRoundedShortcut(contact, true);
} }
private Bitmap getRoundedShortcut(final Contact contact,boolean withIcon) { private Bitmap getRoundedShortcut(final Contact contact, boolean withIcon) {
DisplayMetrics metrics = mXmppConnectionService.getResources().getDisplayMetrics(); DisplayMetrics metrics = mXmppConnectionService.getResources().getDisplayMetrics();
int size = Math.round(metrics.density * 48); int size = Math.round(metrics.density * 48);
Bitmap bitmap = get(contact,size); Bitmap bitmap = get(contact, size);
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output); Canvas canvas = new Canvas(output);
final Paint paint = new Paint(); final Paint paint = new Paint();
drawAvatar(bitmap, canvas, paint); drawAvatar(bitmap, canvas, paint);
if(withIcon){ if (withIcon) {
drawIcon(canvas, paint); drawIcon(canvas, paint);
} }
return output; return output;
@ -112,14 +112,16 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
private void drawIcon(Canvas canvas, Paint paint) { private void drawIcon(Canvas canvas, Paint paint) {
BitmapFactory.Options opts = new BitmapFactory.Options(); BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 3; opts.inSampleSize = 2;
Resources resources = mXmppConnectionService.getResources(); Resources resources = mXmppConnectionService.getResources();
Bitmap icon = BitmapFactory.decodeResource(resources, R.drawable.ic_launcher, opts); Bitmap icon = BitmapFactory.decodeResource(resources, R.drawable.ic_launcher, opts);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
int left = canvas.getWidth() - icon.getWidth(); int iconSize = Math.round(canvas.getHeight() / 2.6f);
int top = canvas.getHeight() - icon.getHeight();
final Rect rect = new Rect(left, top, left + icon.getWidth(), top + icon.getHeight()); int left = canvas.getWidth() - iconSize;
int top = canvas.getHeight() - iconSize;
final Rect rect = new Rect(left, top, left + iconSize, top + iconSize);
canvas.drawBitmap(icon, null, rect, paint); canvas.drawBitmap(icon, null, rect, paint);
} }
@ -161,7 +163,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
key(contact, size)); key(contact, size));
} }
} }
for(Conversation conversation : mXmppConnectionService.findAllConferencesWith(contact)) { for (Conversation conversation : mXmppConnectionService.findAllConferencesWith(contact)) {
clear(conversation); clear(conversation);
} }
} }
@ -199,12 +201,12 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
} }
public Bitmap get(ListItem item, int size) { public Bitmap get(ListItem item, int size) {
return get(item,size,false); return get(item, size, false);
} }
public Bitmap get(ListItem item, int size, boolean cachedOnly) { public Bitmap get(ListItem item, int size, boolean cachedOnly) {
if (item instanceof Contact) { if (item instanceof Contact) {
return get((Contact) item, size,cachedOnly); return get((Contact) item, size, cachedOnly);
} else if (item instanceof Bookmark) { } else if (item instanceof Bookmark) {
Bookmark bookmark = (Bookmark) item; Bookmark bookmark = (Bookmark) item;
if (bookmark.getConversation() != null) { if (bookmark.getConversation() != null) {
@ -220,7 +222,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
} }
public Bitmap get(Conversation conversation, int size) { public Bitmap get(Conversation conversation, int size) {
return get(conversation,size,false); return get(conversation, size, false);
} }
public Bitmap get(Conversation conversation, int size, boolean cachedOnly) { public Bitmap get(Conversation conversation, int size, boolean cachedOnly) {
@ -242,7 +244,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
return; return;
} }
LruCache<String, Bitmap> cache = this.mXmppConnectionService.getBitmapCache(); LruCache<String, Bitmap> cache = this.mXmppConnectionService.getBitmapCache();
for(String key : keys) { for (String key : keys) {
cache.remove(key); cache.remove(key);
} }
keys.clear(); keys.clear();
@ -250,7 +252,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
} }
} }
private Bitmap get(MucOptions mucOptions, int size, boolean cachedOnly) { private Bitmap get(MucOptions mucOptions, int size, boolean cachedOnly) {
final String KEY = key(mucOptions, size); final String KEY = key(mucOptions, size);
Bitmap bitmap = this.mXmppConnectionService.getBitmapCache().get(KEY); Bitmap bitmap = this.mXmppConnectionService.getBitmapCache().get(KEY);
if (bitmap != null || cachedOnly) { if (bitmap != null || cachedOnly) {
@ -259,9 +261,9 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
final List<MucOptions.User> users = mucOptions.getUsersRelevantForNameAndAvatar(); final List<MucOptions.User> users = mucOptions.getUsersRelevantForNameAndAvatar();
if (users.size() == 0) { if (users.size() == 0) {
Conversation c = mucOptions.getConversation(); Conversation c = mucOptions.getConversation();
bitmap = getImpl(c.getName().toString(),c.getJid().asBareJid().toString(),size); bitmap = getImpl(c.getName().toString(), c.getJid().asBareJid().toString(), size);
} else { } else {
bitmap = getImpl(users,size); bitmap = getImpl(users, size);
} }
this.mXmppConnectionService.getBitmapCache().put(KEY, bitmap); this.mXmppConnectionService.getBitmapCache().put(KEY, bitmap);
return bitmap; return bitmap;
@ -274,7 +276,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
return bitmap; return bitmap;
} }
bitmap = getImpl(users, size); bitmap = getImpl(users, size);
this.mXmppConnectionService.getBitmapCache().put(KEY,bitmap); this.mXmppConnectionService.getBitmapCache().put(KEY, bitmap);
return bitmap; return bitmap;
} }
@ -335,7 +337,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
StringBuilder builder = new StringBuilder("TILE_"); StringBuilder builder = new StringBuilder("TILE_");
builder.append(conversation.getUuid()); builder.append(conversation.getUuid());
for(MucOptions.User user : users) { for (MucOptions.User user : users) {
builder.append("\0"); builder.append("\0");
builder.append(emptyOnNull(user.getRealJid())); builder.append(emptyOnNull(user.getRealJid()));
builder.append("\0"); builder.append("\0");
@ -350,7 +352,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
keys = this.conversationDependentKeys.get(conversation.getUuid()); keys = this.conversationDependentKeys.get(conversation.getUuid());
} else { } else {
keys = new HashSet<>(); keys = new HashSet<>();
this.conversationDependentKeys.put(conversation.getUuid(),keys); this.conversationDependentKeys.put(conversation.getUuid(), keys);
} }
keys.add(key); keys.add(key);
} }
@ -369,7 +371,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
} }
avatar = mXmppConnectionService.getFileBackend().getAvatar(account.getAvatar(), size); avatar = mXmppConnectionService.getFileBackend().getAvatar(account.getAvatar(), size);
if (avatar == null) { if (avatar == null) {
avatar = get(account.getJid().asBareJid().toString(), null, size,false); avatar = get(account.getJid().asBareJid().toString(), null, size, false);
} }
mXmppConnectionService.getBitmapCache().put(KEY, avatar); mXmppConnectionService.getBitmapCache().put(KEY, avatar);
return avatar; return avatar;
@ -378,12 +380,12 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
public Bitmap get(Message message, int size, boolean cachedOnly) { public Bitmap get(Message message, int size, boolean cachedOnly) {
final Conversation conversation = message.getConversation(); final Conversation conversation = message.getConversation();
if (message.getType() == Message.TYPE_STATUS && message.getCounterparts() != null && message.getCounterparts().size() > 1) { if (message.getType() == Message.TYPE_STATUS && message.getCounterparts() != null && message.getCounterparts().size() > 1) {
return get(message.getCounterparts(),size,cachedOnly); return get(message.getCounterparts(), size, cachedOnly);
} else if (message.getStatus() == Message.STATUS_RECEIVED) { } else if (message.getStatus() == Message.STATUS_RECEIVED) {
Contact c = message.getContact(); Contact c = message.getContact();
if (c != null && (c.getProfilePhoto() != null || c.getAvatar() != null)) { if (c != null && (c.getProfilePhoto() != null || c.getAvatar() != null)) {
return get(c, size, cachedOnly); return get(c, size, cachedOnly);
} else if (message.getConversation().getMode() == Conversation.MODE_MULTI){ } else if (message.getConversation().getMode() == Conversation.MODE_MULTI) {
final Jid trueCounterpart = message.getTrueCounterpart(); final Jid trueCounterpart = message.getTrueCounterpart();
MucOptions.User user; MucOptions.User user;
if (trueCounterpart != null) { if (trueCounterpart != null) {
@ -392,15 +394,15 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
user = conversation.getMucOptions().findUserByFullJid(message.getCounterpart()); user = conversation.getMucOptions().findUserByFullJid(message.getCounterpart());
} }
if (user != null) { if (user != null) {
return getImpl(user,size,cachedOnly); return getImpl(user, size, cachedOnly);
} }
} else if (c != null) { } else if (c != null) {
return get(c, size, cachedOnly); return get(c, size, cachedOnly);
} }
Jid tcp = message.getTrueCounterpart(); Jid tcp = message.getTrueCounterpart();
String seed = tcp != null ? tcp.asBareJid().toString() :null; String seed = tcp != null ? tcp.asBareJid().toString() : null;
return get(UIHelper.getMessageDisplayName(message), seed, size, cachedOnly); return get(UIHelper.getMessageDisplayName(message), seed, size, cachedOnly);
} else { } else {
return get(conversation.getAccount(), size, cachedOnly); return get(conversation.getAccount(), size, cachedOnly);
} }
} }
@ -536,7 +538,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
} }
private static String getFirstLetter(String name) { private static String getFirstLetter(String name) {
for(Character c : name.toCharArray()) { for (Character c : name.toCharArray()) {
if (Character.isLetterOrDigit(c)) { if (Character.isLetterOrDigit(c)) {
return c.toString(); return c.toString();
} }
@ -566,7 +568,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
public void onAdvancedStreamFeaturesAvailable(Account account) { public void onAdvancedStreamFeaturesAvailable(Account account) {
XmppConnection.Features features = account.getXmppConnection().getFeatures(); XmppConnection.Features features = account.getXmppConnection().getFeatures();
if (features.pep() && !features.pepPersistent()) { if (features.pep() && !features.pepPersistent()) {
Log.d(Config.LOGTAG,account.getJid().asBareJid()+": has pep but is not persistent"); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": has pep but is not persistent");
if (account.getAvatar() != null) { if (account.getAvatar() != null) {
mXmppConnectionService.republishAvatarIfNeeded(account); mXmppConnectionService.republishAvatarIfNeeded(account);
} }