aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriNPUTmice <daniel@gultsch.de>2014-09-02 11:19:05 +0200
committeriNPUTmice <daniel@gultsch.de>2014-09-02 11:31:39 +0200
commitc62937016b08b2335af78cdc7b46093cc96c3956 (patch)
treeac707ce8f96c436b9c5ab52c1ba9101c70b079b3
parentd42ea45b1c7356793aa55edf55baeaaf4cd3398f (diff)
rotate avatars
Conflicts: src/eu/siacs/conversations/persistance/FileBackend.java
-rw-r--r--src/eu/siacs/conversations/persistance/FileBackend.java92
1 files changed, 55 insertions, 37 deletions
diff --git a/src/eu/siacs/conversations/persistance/FileBackend.java b/src/eu/siacs/conversations/persistance/FileBackend.java
index 8fdc7ee7..d8166040 100644
--- a/src/eu/siacs/conversations/persistance/FileBackend.java
+++ b/src/eu/siacs/conversations/persistance/FileBackend.java
@@ -44,8 +44,9 @@ public class FileBackend {
private Context context;
private LruCache<String, Bitmap> thumbnailCache;
-
- private SimpleDateFormat imageDateFormat = new SimpleDateFormat("yyyyMMdd_HHmmssSSS",Locale.US);
+
+ private SimpleDateFormat imageDateFormat = new SimpleDateFormat(
+ "yyyyMMdd_HHmmssSSS", Locale.US);
public FileBackend(Context context) {
this.context = context;
@@ -85,14 +86,15 @@ public class FileBackend {
}
return new JingleFile(path + "/" + filename);
}
-
+
public JingleFile getJingleFile(Message message) {
return getJingleFile(message, true);
}
public JingleFile getJingleFile(Message message, boolean decrypted) {
StringBuilder filename = new StringBuilder();
- filename.append(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath());
+ filename.append(Environment.getExternalStoragePublicDirectory(
+ Environment.DIRECTORY_PICTURES).getAbsolutePath());
filename.append("/Conversations/");
filename.append(message.getUuid());
if ((decrypted) || (message.getEncryption() == Message.ENCRYPTION_NONE)) {
@@ -106,7 +108,7 @@ public class FileBackend {
}
return new JingleFile(filename.toString());
}
-
+
public Bitmap resize(Bitmap originalBitmap, int size) {
int w = originalBitmap.getWidth();
int h = originalBitmap.getHeight();
@@ -144,7 +146,8 @@ public class FileBackend {
private JingleFile copyImageToPrivateStorage(Message message, Uri image,
int sampleSize) throws ImageCopyException {
try {
- InputStream is = context.getContentResolver().openInputStream(image);
+ InputStream is = context.getContentResolver()
+ .openInputStream(image);
JingleFile file = getJingleFile(message);
file.getParentFile().mkdirs();
file.createNewFile();
@@ -194,17 +197,23 @@ public class FileBackend {
}
}
}
-
+
private int getRotation(Uri image) {
if ("content".equals(image.getScheme())) {
- Cursor cursor = context.getContentResolver().query(image,
- new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null);
-
- if (cursor.getCount() != 1) {
- return -1;
- }
- cursor.moveToFirst();
- return cursor.getInt(0);
+ try {
+ Cursor cursor = context
+ .getContentResolver()
+ .query(image,
+ new String[] { MediaStore.Images.ImageColumns.ORIENTATION },
+ null, null, null);
+ if (cursor.getCount() != 1) {
+ return -1;
+ }
+ cursor.moveToFirst();
+ return cursor.getInt(0);
+ } catch (IllegalArgumentException e) {
+ return -1;
+ }
} else {
ExifInterface exif;
try {
@@ -273,28 +282,32 @@ public class FileBackend {
public Uri getTakePhotoUri() {
StringBuilder pathBuilder = new StringBuilder();
- pathBuilder.append(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
+ pathBuilder.append(Environment
+ .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
pathBuilder.append('/');
pathBuilder.append("Camera");
pathBuilder.append('/');
- pathBuilder.append("IMG_"+this.imageDateFormat.format(new Date())+".jpg");
- Uri uri = Uri.parse("file://"+pathBuilder.toString());
+ pathBuilder.append("IMG_" + this.imageDateFormat.format(new Date())
+ + ".jpg");
+ Uri uri = Uri.parse("file://" + pathBuilder.toString());
File file = new File(uri.toString());
file.getParentFile().mkdirs();
return uri;
}
-
+
public Avatar getPepAvatar(Uri image, int size, Bitmap.CompressFormat format) {
try {
Avatar avatar = new Avatar();
Bitmap bm = cropCenterSquare(image, size);
- if (bm==null) {
+ if (bm == null) {
return null;
}
ByteArrayOutputStream mByteArrayOutputStream = new ByteArrayOutputStream();
- Base64OutputStream mBase64OutputSttream = new Base64OutputStream(mByteArrayOutputStream, Base64.DEFAULT);
+ Base64OutputStream mBase64OutputSttream = new Base64OutputStream(
+ mByteArrayOutputStream, Base64.DEFAULT);
MessageDigest digest = MessageDigest.getInstance("SHA-1");
- DigestOutputStream mDigestOutputStream = new DigestOutputStream(mBase64OutputSttream, digest);
+ DigestOutputStream mDigestOutputStream = new DigestOutputStream(
+ mBase64OutputSttream, digest);
if (!bm.compress(format, 75, mDigestOutputStream)) {
return null;
}
@@ -309,25 +322,26 @@ public class FileBackend {
return null;
}
}
-
+
public boolean isAvatarCached(Avatar avatar) {
File file = new File(getAvatarPath(context, avatar.getFilename()));
return file.exists();
}
-
+
public boolean save(Avatar avatar) {
if (isAvatarCached(avatar)) {
return true;
}
String filename = getAvatarPath(context, avatar.getFilename());
- File file = new File(filename+".tmp");
+ File file = new File(filename + ".tmp");
file.getParentFile().mkdirs();
try {
file.createNewFile();
FileOutputStream mFileOutputStream = new FileOutputStream(file);
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.reset();
- DigestOutputStream mDigestOutputStream = new DigestOutputStream(mFileOutputStream, digest);
+ DigestOutputStream mDigestOutputStream = new DigestOutputStream(
+ mFileOutputStream, digest);
mDigestOutputStream.write(avatar.getImageAsBytes());
mDigestOutputStream.flush();
mDigestOutputStream.close();
@@ -337,7 +351,7 @@ public class FileBackend {
file.renameTo(new File(filename));
return true;
} else {
- Log.d("xmppService","sha1sum mismatch for "+avatar.owner);
+ Log.d("xmppService", "sha1sum mismatch for " + avatar.owner);
file.delete();
return false;
}
@@ -349,9 +363,9 @@ public class FileBackend {
return false;
}
}
-
+
public static String getAvatarPath(Context context, String avatar) {
- return context.getFilesDir().getAbsolutePath() + "/avatars/"+avatar;
+ return context.getFilesDir().getAbsolutePath() + "/avatars/" + avatar;
}
public Bitmap cropCenterSquare(Uri image, int size) {
@@ -361,16 +375,20 @@ public class FileBackend {
InputStream is = context.getContentResolver()
.openInputStream(image);
Bitmap input = BitmapFactory.decodeStream(is, null, options);
- if (input==null) {
+ if (input == null) {
return null;
} else {
+ int rotation = getRotation(image);
+ if (rotation > 0) {
+ input = rotate(input, rotation);
+ }
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();
@@ -381,8 +399,7 @@ public class FileBackend {
float outHeight = scale * h;
float left = (size - outWidth) / 2;
float top = (size - outHeight) / 2;
- RectF target = new RectF(left, top, left + outWidth, top
- + outHeight);
+ RectF target = new RectF(left, top, left + outWidth, top + outHeight);
Bitmap output = Bitmap.createBitmap(size, size, input.getConfig());
Canvas canvas = new Canvas(output);
@@ -412,11 +429,11 @@ public class FileBackend {
return inSampleSize;
}
-
+
public Uri getJingleFileUri(Message message) {
File file = getJingleFile(message);
if (file.exists()) {
- return Uri.parse("file://"+file.getAbsolutePath());
+ return Uri.parse("file://" + file.getAbsolutePath());
} else {
return ImageProvider.getProviderUri(message);
}
@@ -436,8 +453,9 @@ public class FileBackend {
}
public static Bitmap getAvatar(String avatar, int size, Context context) {
- Bitmap bm = BitmapFactory.decodeFile(FileBackend.getAvatarPath(context, avatar));
- if (bm==null) {
+ Bitmap bm = BitmapFactory.decodeFile(FileBackend.getAvatarPath(context,
+ avatar));
+ if (bm == null) {
return null;
}
return cropCenterSquare(bm, UIHelper.getRealPx(size, context));