@@ -555,6 +555,7 @@ public class FileBackend {
File file = new File(getAvatarPath(hash));
FileInputStream is = null;
try {
+ avatar.size = file.length();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file.getAbsolutePath(), options);
@@ -574,6 +575,7 @@ public class FileBackend {
avatar.image = new String(mByteArrayOutputStream.toByteArray());
avatar.height = options.outHeight;
avatar.width = options.outWidth;
+ avatar.type = options.outMimeType;
return avatar;
} catch (IOException e) {
return null;
@@ -593,6 +595,7 @@ public class FileBackend {
File file;
if (isAvatarCached(avatar)) {
file = new File(getAvatarPath(avatar.getFilename()));
+ avatar.size = file.length();
} else {
String filename = getAvatarPath(avatar.getFilename());
file = new File(filename + ".tmp");
@@ -604,7 +607,8 @@ public class FileBackend {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.reset();
DigestOutputStream mDigestOutputStream = new DigestOutputStream(os, digest);
- mDigestOutputStream.write(avatar.getImageAsBytes());
+ final byte[] bytes = avatar.getImageAsBytes();
+ mDigestOutputStream.write(bytes);
mDigestOutputStream.flush();
mDigestOutputStream.close();
String sha1sum = CryptoHelper.bytesToHex(digest.digest());
@@ -615,13 +619,13 @@ public class FileBackend {
file.delete();
return false;
}
+ avatar.size = bytes.length;
} catch (IllegalArgumentException | IOException | NoSuchAlgorithmException e) {
return false;
} finally {
close(os);
}
}
- avatar.size = file.length();
return true;
}
@@ -691,7 +695,7 @@ public class FileBackend {
Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(dest);
canvas.drawBitmap(source, null, targetRect, null);
- if (source != null && !source.isRecycled()) {
+ if (source.isRecycled()) {
source.recycle();
}
return dest;
@@ -2639,14 +2639,13 @@ public class XmppConnectionService extends Service {
}
public void publishAvatar(Account account, final Avatar avatar, final UiCallback<Avatar> callback) {
- final IqPacket packet = this.mIqGenerator.publishAvatar(avatar);
+ IqPacket packet = this.mIqGenerator.publishAvatar(avatar);
this.sendIqPacket(account, packet, new OnIqPacketReceived() {
@Override
public void onIqPacketReceived(Account account, IqPacket result) {
if (result.getType() == IqPacket.TYPE.RESULT) {
- final IqPacket packet = XmppConnectionService.this.mIqGenerator
- .publishAvatarMetadata(avatar);
+ final IqPacket packet = XmppConnectionService.this.mIqGenerator.publishAvatarMetadata(avatar);
sendIqPacket(account, packet, new OnIqPacketReceived() {
@Override
public void onIqPacketReceived(Account account, IqPacket result) {
@@ -2655,25 +2654,22 @@ public class XmppConnectionService extends Service {
getAvatarService().clear(account);
databaseBackend.updateAccount(account);
}
+ Log.d(Config.LOGTAG,account.getJid().toBareJid()+": published avatar "+(avatar.size/1024)+"KiB");
if (callback != null) {
callback.success(avatar);
- } else {
- Log.d(Config.LOGTAG,account.getJid().toBareJid()+": published avatar");
}
} else {
if (callback != null) {
- callback.error(
- R.string.error_publish_avatar_server_reject,
- avatar);
+ callback.error(R.string.error_publish_avatar_server_reject,avatar);
}
}
}
});
} else {
+ Element error = result.findChild("error");
+ Log.d(Config.LOGTAG,account.getJid().toBareJid()+": server rejected avatar "+(avatar.size/1024)+"KiB "+(error!=null?error.toString():""));
if (callback != null) {
- callback.error(
- R.string.error_publish_avatar_server_reject,
- avatar);
+ callback.error(R.string.error_publish_avatar_server_reject, avatar);
}
}
}