rotate avatars
Conflicts: src/eu/siacs/conversations/persistance/FileBackend.java
This commit is contained in:
		
							parent
							
								
									d42ea45b1c
								
							
						
					
					
						commit
						c62937016b
					
				| @ -45,7 +45,8 @@ public class FileBackend { | |||||||
| 	private Context context; | 	private Context context; | ||||||
| 	private LruCache<String, Bitmap> thumbnailCache; | 	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) { | 	public FileBackend(Context context) { | ||||||
| 		this.context = context; | 		this.context = context; | ||||||
| @ -92,7 +93,8 @@ public class FileBackend { | |||||||
| 
 | 
 | ||||||
| 	public JingleFile getJingleFile(Message message, boolean decrypted) { | 	public JingleFile getJingleFile(Message message, boolean decrypted) { | ||||||
| 		StringBuilder filename = new StringBuilder(); | 		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("/Conversations/"); | ||||||
| 		filename.append(message.getUuid()); | 		filename.append(message.getUuid()); | ||||||
| 		if ((decrypted) || (message.getEncryption() == Message.ENCRYPTION_NONE)) { | 		if ((decrypted) || (message.getEncryption() == Message.ENCRYPTION_NONE)) { | ||||||
| @ -144,7 +146,8 @@ public class FileBackend { | |||||||
| 	private JingleFile copyImageToPrivateStorage(Message message, Uri image, | 	private JingleFile copyImageToPrivateStorage(Message message, Uri image, | ||||||
| 			int sampleSize) throws ImageCopyException { | 			int sampleSize) throws ImageCopyException { | ||||||
| 		try { | 		try { | ||||||
| 			InputStream is = context.getContentResolver().openInputStream(image); | 			InputStream is = context.getContentResolver() | ||||||
|  | 					.openInputStream(image); | ||||||
| 			JingleFile file = getJingleFile(message); | 			JingleFile file = getJingleFile(message); | ||||||
| 			file.getParentFile().mkdirs(); | 			file.getParentFile().mkdirs(); | ||||||
| 			file.createNewFile(); | 			file.createNewFile(); | ||||||
| @ -197,14 +200,20 @@ public class FileBackend { | |||||||
| 
 | 
 | ||||||
| 	private int getRotation(Uri image) { | 	private int getRotation(Uri image) { | ||||||
| 		if ("content".equals(image.getScheme())) { | 		if ("content".equals(image.getScheme())) { | ||||||
| 	        Cursor cursor = context.getContentResolver().query(image, | 			try { | ||||||
| 	                new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null); | 				Cursor cursor = context | ||||||
| 
 | 						.getContentResolver() | ||||||
|  | 						.query(image, | ||||||
|  | 								new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, | ||||||
|  | 								null, null, null); | ||||||
| 				if (cursor.getCount() != 1) { | 				if (cursor.getCount() != 1) { | ||||||
| 					return -1; | 					return -1; | ||||||
| 				} | 				} | ||||||
| 				cursor.moveToFirst(); | 				cursor.moveToFirst(); | ||||||
| 				return cursor.getInt(0); | 				return cursor.getInt(0); | ||||||
|  | 			} catch (IllegalArgumentException e) { | ||||||
|  | 				return -1; | ||||||
|  | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			ExifInterface exif; | 			ExifInterface exif; | ||||||
| 			try { | 			try { | ||||||
| @ -273,12 +282,14 @@ public class FileBackend { | |||||||
| 
 | 
 | ||||||
| 	public Uri getTakePhotoUri() { | 	public Uri getTakePhotoUri() { | ||||||
| 		StringBuilder pathBuilder = new StringBuilder(); | 		StringBuilder pathBuilder = new StringBuilder(); | ||||||
| 		pathBuilder.append(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)); | 		pathBuilder.append(Environment | ||||||
|  | 				.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)); | ||||||
| 		pathBuilder.append('/'); | 		pathBuilder.append('/'); | ||||||
| 		pathBuilder.append("Camera"); | 		pathBuilder.append("Camera"); | ||||||
| 		pathBuilder.append('/'); | 		pathBuilder.append('/'); | ||||||
| 		pathBuilder.append("IMG_"+this.imageDateFormat.format(new Date())+".jpg"); | 		pathBuilder.append("IMG_" + this.imageDateFormat.format(new Date()) | ||||||
| 		Uri uri = Uri.parse("file://"+pathBuilder.toString()); | 				+ ".jpg"); | ||||||
|  | 		Uri uri = Uri.parse("file://" + pathBuilder.toString()); | ||||||
| 		File file = new File(uri.toString()); | 		File file = new File(uri.toString()); | ||||||
| 		file.getParentFile().mkdirs(); | 		file.getParentFile().mkdirs(); | ||||||
| 		return uri; | 		return uri; | ||||||
| @ -288,13 +299,15 @@ public class FileBackend { | |||||||
| 		try { | 		try { | ||||||
| 			Avatar avatar = new Avatar(); | 			Avatar avatar = new Avatar(); | ||||||
| 			Bitmap bm = cropCenterSquare(image, size); | 			Bitmap bm = cropCenterSquare(image, size); | ||||||
| 			if (bm==null) { | 			if (bm == null) { | ||||||
| 				return null; | 				return null; | ||||||
| 			} | 			} | ||||||
| 			ByteArrayOutputStream mByteArrayOutputStream = new ByteArrayOutputStream(); | 			ByteArrayOutputStream mByteArrayOutputStream = new ByteArrayOutputStream(); | ||||||
| 			Base64OutputStream mBase64OutputSttream = new Base64OutputStream(mByteArrayOutputStream, Base64.DEFAULT); | 			Base64OutputStream mBase64OutputSttream = new Base64OutputStream( | ||||||
|  | 					mByteArrayOutputStream, Base64.DEFAULT); | ||||||
| 			MessageDigest digest = MessageDigest.getInstance("SHA-1"); | 			MessageDigest digest = MessageDigest.getInstance("SHA-1"); | ||||||
| 			DigestOutputStream mDigestOutputStream = new DigestOutputStream(mBase64OutputSttream, digest); | 			DigestOutputStream mDigestOutputStream = new DigestOutputStream( | ||||||
|  | 					mBase64OutputSttream, digest); | ||||||
| 			if (!bm.compress(format, 75, mDigestOutputStream)) { | 			if (!bm.compress(format, 75, mDigestOutputStream)) { | ||||||
| 				return null; | 				return null; | ||||||
| 			} | 			} | ||||||
| @ -320,14 +333,15 @@ public class FileBackend { | |||||||
| 			return true; | 			return true; | ||||||
| 		} | 		} | ||||||
| 		String filename = getAvatarPath(context, avatar.getFilename()); | 		String filename = getAvatarPath(context, avatar.getFilename()); | ||||||
| 		File file = new File(filename+".tmp"); | 		File file = new File(filename + ".tmp"); | ||||||
| 		file.getParentFile().mkdirs(); | 		file.getParentFile().mkdirs(); | ||||||
| 		try { | 		try { | ||||||
| 			file.createNewFile(); | 			file.createNewFile(); | ||||||
| 			FileOutputStream mFileOutputStream = new FileOutputStream(file); | 			FileOutputStream mFileOutputStream = new FileOutputStream(file); | ||||||
| 			MessageDigest digest = MessageDigest.getInstance("SHA-1"); | 			MessageDigest digest = MessageDigest.getInstance("SHA-1"); | ||||||
| 			digest.reset(); | 			digest.reset(); | ||||||
| 			DigestOutputStream mDigestOutputStream = new DigestOutputStream(mFileOutputStream, digest); | 			DigestOutputStream mDigestOutputStream = new DigestOutputStream( | ||||||
|  | 					mFileOutputStream, digest); | ||||||
| 			mDigestOutputStream.write(avatar.getImageAsBytes()); | 			mDigestOutputStream.write(avatar.getImageAsBytes()); | ||||||
| 			mDigestOutputStream.flush(); | 			mDigestOutputStream.flush(); | ||||||
| 			mDigestOutputStream.close(); | 			mDigestOutputStream.close(); | ||||||
| @ -337,7 +351,7 @@ public class FileBackend { | |||||||
| 				file.renameTo(new File(filename)); | 				file.renameTo(new File(filename)); | ||||||
| 				return true; | 				return true; | ||||||
| 			} else { | 			} else { | ||||||
| 				Log.d("xmppService","sha1sum mismatch for "+avatar.owner); | 				Log.d("xmppService", "sha1sum mismatch for " + avatar.owner); | ||||||
| 				file.delete(); | 				file.delete(); | ||||||
| 				return false; | 				return false; | ||||||
| 			} | 			} | ||||||
| @ -351,7 +365,7 @@ public class FileBackend { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public static String getAvatarPath(Context context, String avatar) { | 	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) { | 	public Bitmap cropCenterSquare(Uri image, int size) { | ||||||
| @ -361,9 +375,13 @@ public class FileBackend { | |||||||
| 			InputStream is = context.getContentResolver() | 			InputStream is = context.getContentResolver() | ||||||
| 					.openInputStream(image); | 					.openInputStream(image); | ||||||
| 			Bitmap input = BitmapFactory.decodeStream(is, null, options); | 			Bitmap input = BitmapFactory.decodeStream(is, null, options); | ||||||
| 			if (input==null) { | 			if (input == null) { | ||||||
| 				return null; | 				return null; | ||||||
| 			} else { | 			} else { | ||||||
|  | 				int rotation = getRotation(image); | ||||||
|  | 				if (rotation > 0) { | ||||||
|  | 					input = rotate(input, rotation); | ||||||
|  | 				} | ||||||
| 				return cropCenterSquare(input, size); | 				return cropCenterSquare(input, size); | ||||||
| 			} | 			} | ||||||
| 		} catch (FileNotFoundException e) { | 		} catch (FileNotFoundException e) { | ||||||
| @ -381,8 +399,7 @@ public class FileBackend { | |||||||
| 		float outHeight = scale * h; | 		float outHeight = scale * h; | ||||||
| 		float left = (size - outWidth) / 2; | 		float left = (size - outWidth) / 2; | ||||||
| 		float top = (size - outHeight) / 2; | 		float top = (size - outHeight) / 2; | ||||||
| 		RectF target = new RectF(left, top, left + outWidth, top | 		RectF target = new RectF(left, top, left + outWidth, top + outHeight); | ||||||
| 				+ outHeight); |  | ||||||
| 
 | 
 | ||||||
| 		Bitmap output = Bitmap.createBitmap(size, size, input.getConfig()); | 		Bitmap output = Bitmap.createBitmap(size, size, input.getConfig()); | ||||||
| 		Canvas canvas = new Canvas(output); | 		Canvas canvas = new Canvas(output); | ||||||
| @ -416,7 +433,7 @@ public class FileBackend { | |||||||
| 	public Uri getJingleFileUri(Message message) { | 	public Uri getJingleFileUri(Message message) { | ||||||
| 		File file = getJingleFile(message); | 		File file = getJingleFile(message); | ||||||
| 		if (file.exists()) { | 		if (file.exists()) { | ||||||
| 			return Uri.parse("file://"+file.getAbsolutePath()); | 			return Uri.parse("file://" + file.getAbsolutePath()); | ||||||
| 		} else { | 		} else { | ||||||
| 			return ImageProvider.getProviderUri(message); | 			return ImageProvider.getProviderUri(message); | ||||||
| 		} | 		} | ||||||
| @ -436,8 +453,9 @@ public class FileBackend { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public static Bitmap getAvatar(String avatar, int size, Context context) { | 	public static Bitmap getAvatar(String avatar, int size, Context context) { | ||||||
| 		Bitmap bm = BitmapFactory.decodeFile(FileBackend.getAvatarPath(context, avatar)); | 		Bitmap bm = BitmapFactory.decodeFile(FileBackend.getAvatarPath(context, | ||||||
| 		if (bm==null) { | 				avatar)); | ||||||
|  | 		if (bm == null) { | ||||||
| 			return null; | 			return null; | ||||||
| 		} | 		} | ||||||
| 		return cropCenterSquare(bm, UIHelper.getRealPx(size, context)); | 		return cropCenterSquare(bm, UIHelper.getRealPx(size, context)); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 iNPUTmice
						iNPUTmice