diff --git a/commons/src/main/java/org/dhis2/commons/bindings/FileExtensions.kt b/commons/src/main/java/org/dhis2/commons/bindings/FileExtensions.kt index 0fd8441505..ce48968ab6 100644 --- a/commons/src/main/java/org/dhis2/commons/bindings/FileExtensions.kt +++ b/commons/src/main/java/org/dhis2/commons/bindings/FileExtensions.kt @@ -43,10 +43,39 @@ fun File.rotateImage(context: Context): File { else -> bitmap } - return File( - FileResourceDirectoryHelper.getFileResourceDirectory(context), + val file = File( + FileResourceDirectoryHelper.getFileCacheResourceDirectory(context), "tempFile.png", - ).apply { writeBitmap(bitmap, Bitmap.CompressFormat.JPEG, 100) } + ) + + file.writeBitmap(bitmap, Bitmap.CompressFormat.JPEG, 100) + + return file +} + +fun Bitmap.rotateImageAndSave(context: Context): File { + val file = File( + FileResourceDirectoryHelper.getFileCacheResourceDirectory(context), + "tempFile.png", + ) + + file.writeBitmap(this, Bitmap.CompressFormat.JPEG, 100) + + val ei = ExifInterface(file.path) + + val orientation = + ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL) + + val bitmap = when (orientation) { + ExifInterface.ORIENTATION_ROTATE_90 -> rotateImage(this, 90F) + ExifInterface.ORIENTATION_ROTATE_180 -> rotateImage(this, 180F) + ExifInterface.ORIENTATION_ROTATE_270 -> rotateImage(this, 270F) + else -> this + } + + file.writeBitmap(bitmap!!, Bitmap.CompressFormat.JPEG, 100) + + return file } private fun rotateImage(source: Bitmap, angle: Float): Bitmap? { @@ -103,9 +132,11 @@ private fun getFilePath(context: Context, uri: Uri): String? { split[splitIndex].toLong(), ) } + isExternalStorageDocument(copy) -> { return Environment.getExternalStorageDirectory().toString() + "/" + split[1] } + isMediaDocument(copy) -> { copy = when (split[0]) { "image" -> MediaStore.Images.Media.EXTERNAL_CONTENT_URI diff --git a/form/src/main/java/org/dhis2/form/ui/dialog/ImagePickerOptionsDialog.kt b/form/src/main/java/org/dhis2/form/ui/dialog/ImagePickerOptionsDialog.kt index 47870ab0ef..d376ea44cd 100644 --- a/form/src/main/java/org/dhis2/form/ui/dialog/ImagePickerOptionsDialog.kt +++ b/form/src/main/java/org/dhis2/form/ui/dialog/ImagePickerOptionsDialog.kt @@ -62,7 +62,7 @@ internal fun ImagePickerOptionsDialog( CarouselButtonData( onClick = { onDismiss() - onTakePicture(context) + onSelectFromGallery() }, enabled = true, text = stringResource(R.string.from_gallery_v2), diff --git a/form/src/main/java/org/dhis2/form/ui/files/GetFileResource.kt b/form/src/main/java/org/dhis2/form/ui/files/GetFileResource.kt index 4e86dc1da3..03c6b3b375 100644 --- a/form/src/main/java/org/dhis2/form/ui/files/GetFileResource.kt +++ b/form/src/main/java/org/dhis2/form/ui/files/GetFileResource.kt @@ -14,6 +14,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.core.content.FileProvider import org.dhis2.commons.bindings.rotateImage import org.dhis2.commons.data.FormFileProvider +import org.hisp.dhis.android.core.arch.helpers.FileResourceDirectoryHelper import java.io.File private class GetFileResource( @@ -58,7 +59,10 @@ fun rememberCameraPicker( ) = with( LocalContext.current, ) { - val tempFile = File.createTempFile("tempFile", ".png") + val tempFile = File( + FileResourceDirectoryHelper.getFileResourceDirectory(this), + "tempFile.png", + ) val photoUri = FileProvider.getUriForFile( this,