properly index take photo uris from file provider

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/persistance/FileBackend.java | 21 
src/main/java/eu/siacs/conversations/ui/ConversationActivity.java |  2 
2 files changed, 15 insertions(+), 8 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/persistance/FileBackend.java 🔗

@@ -432,14 +432,12 @@ public class FileBackend {
 		return frame;
 	}
 
+	private static String getTakePhotoPath() {
+		return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)+"/Camera/";
+	}
+
 	public Uri getTakePhotoUri() {
-		StringBuilder pathBuilder = new StringBuilder();
-		pathBuilder.append(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
-		pathBuilder.append('/');
-		pathBuilder.append("Camera");
-		pathBuilder.append('/');
-		pathBuilder.append("IMG_" + this.imageDateFormat.format(new Date()) + ".jpg");
-		File file = new File(pathBuilder.toString());
+		File file = new File(getTakePhotoPath()+"IMG_" + this.imageDateFormat.format(new Date()) + ".jpg");
 		file.getParentFile().mkdirs();
 		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
 			return FileProvider.getUriForFile(mXmppConnectionService, "eu.siacs.conversations.files", file);
@@ -448,6 +446,15 @@ public class FileBackend {
 		}
 	}
 
+	public static Uri getIndexableTakePhotoUri(Uri original) {
+		if ("file".equals(original.getScheme())) {
+			return original;
+		} else {
+			List<String> segments = original.getPathSegments();
+			return Uri.parse("file://"+getTakePhotoPath()+segments.get(segments.size() - 1));
+		}
+	}
+
 	public Avatar getPepAvatar(Uri image, int size, Bitmap.CompressFormat format) {
 		try {
 			Avatar avatar = new Avatar();

src/main/java/eu/siacs/conversations/ui/ConversationActivity.java 🔗

@@ -1411,7 +1411,7 @@ public class ConversationActivity extends XmppActivity
 						mPendingImageUris.clear();
 					}
 					Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
-					intent.setData(uri);
+					intent.setData(FileBackend.getIndexableTakePhotoUri(uri));
 					sendBroadcast(intent);
 				} else {
 					mPendingImageUris.clear();