From c42a3588e946a3ec1cde45a75f3701cb5a0e3329 Mon Sep 17 00:00:00 2001 From: Rui Mendes Date: Thu, 5 Mar 2026 18:26:40 +0000 Subject: [PATCH 01/25] minor bug fixing and use media processor for edit photos --- .../ioncameralib/manager/CameraManager.kt | 13 -- .../libs/ioncameralib/manager/EditManager.kt | 131 +++++++----------- .../processor/IONMediaProcessor.kt | 97 ++++++++++--- 3 files changed, 131 insertions(+), 110 deletions(-) diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt index 8a184cc..1595be3 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt @@ -64,26 +64,13 @@ class CameraManager( private const val PNG_EXTENSION = ".$PNG_TYPE" private const val PNG_MIME_TYPE = "image/png" private const val JPEG_MIME_TYPE = "image/jpeg" - - private const val GET_PICTURE = "Get Picture" - private const val TIME_FORMAT = "yyyyMMdd_HHmmss" private const val LOG_TAG = "CameraManager" - - private const val CLOSING_INPUT_STREAM_ERROR = "Exception while closing file input stream." - - const val EDIT_REQUEST_CODE = 7 - const val EDIT_FROM_GALLERY_REQUEST_CODE = 11 - private const val PICTURE_NAMES_PREFIX = "PIC_" private const val VIDEO_NAMES_PREFIX = "VID_" private const val VIDEO_FORMAT = ".mp4" - private const val IMAGE_MAX_RESOLUTION = 1080 - private const val IMAGE_MAX_QUALITY = 100 private const val STORE = "CameraStore" private const val EDIT_FILE_NAME_KEY = "EditFileName" - private const val ALLOW_MULTIPLE = "allowMultiple" - private const val MEDIA_TYPE = "mediaType" } /** diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/EditManager.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/EditManager.kt index 55f4833..98f89bb 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/EditManager.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/EditManager.kt @@ -22,7 +22,10 @@ import io.ionic.libs.ioncameralib.model.IONEditParameters import io.ionic.libs.ioncameralib.view.ImageEditorActivity import java.io.File import androidx.core.net.toUri +import io.ionic.libs.ioncameralib.helper.OSCAMRExifHelperInterface import io.ionic.libs.ioncameralib.helper.OSCAMRGalleryHelper +import io.ionic.libs.ioncameralib.helper.OSCAMRMediaHelperInterface +import io.ionic.libs.ioncameralib.processor.IONMediaProcessor import java.io.FileNotFoundException import java.io.IOException import java.io.InputStream @@ -35,13 +38,22 @@ import java.util.Date class EditManager( private var applicationId: String, private var authority: String, + private var exif: OSCAMRExifHelperInterface, private var fileHelper: OSCAMRFileHelperInterface, + private var mediaHelper: OSCAMRMediaHelperInterface, private var imageHelper: OSCAMRImageHelperInterface, ) { private var croppedUri: Uri? = null private var croppedFilePath: String? = null + private val mediaProcessor = IONMediaProcessor( + exif = exif, + fileHelper = fileHelper, + mediaHelper = mediaHelper, + imageHelper = imageHelper + ) + companion object { private const val JPEG = 0 private const val PNG = 1 @@ -53,7 +65,6 @@ class EditManager( private const val IMAGE_MAX_QUALITY = 100 private const val LOG_TAG = "EditManager" private const val TIME_FORMAT = "yyyyMMdd_HHmmss" - private const val PNG_MIME_TYPE = "image/png" private const val JPEG_MIME_TYPE = "image/jpeg" } @@ -197,24 +208,27 @@ class EditManager( onError(IONError.EDIT_IMAGE_ERROR) return } - val mediaResult = createImageMediaResult( - activity, - resultImagePath, - resultImageUri, - editParameters.includeMetadata - ) - if (mediaResult == null) { - Log.d(LOG_TAG, "MediaResult is null") - onError(IONError.EDIT_IMAGE_ERROR) - return - } + + var savedSuccessfully = false + if (editParameters.saveToGallery) { - savePictureInGallery( + savedSuccessfully = savePictureInGallery( activity, if (fileHelper.getFileExtension(resultImagePath) == JPEG_TYPE) 0 else 1, - resultImageUri) + resultImageUri + ) } - onMediaResult(mediaResult) + + mediaProcessor.processEditedImage( + activity = activity, + imagePath = resultImagePath, + uri = resultImageUri, + includeMetadata = editParameters.includeMetadata, + savedSuccessfully = savedSuccessfully, + onMediaResult = onMediaResult, + onError = onError + ) + } else { val result = imageHelper.decodeFile(resultImagePath) imageHelper.bitmapToBase64( @@ -253,70 +267,25 @@ class EditManager( return fileHelper.createCaptureFile(activity, fileName) } - /** - * Transforms the image media item uri into a media result object. - * @param imagePath A string with the path for the image media item. - * @return An object containing relevant information for the media item. - * Null if an error occurred. - */ - private fun createImageMediaResult( - activity: Activity, - imagePath: String, - mediaUri: Uri, - includeMetadata: Boolean - ): IONMediaResult? { - var base64Image = "" - var error: IONError? = null - - val file = File(imagePath) - if (!fileHelper.fileExists(file)) return null - - val decodedImage = imageHelper.decodeFile(imagePath) - - if(decodedImage == null) return null - - val downsizedImage = imageHelper.downsizeBitmapIfNeeded(decodedImage, IMAGE_MAX_RESOLUTION) - val compressedImage = imageHelper.compressBitmap(downsizedImage, 100) - - imageHelper.bitmapToBase64(compressedImage, - resolution = IMAGE_MAX_RESOLUTION, - quality = IMAGE_MAX_QUALITY, - onSuccess = { base64Image = it }, - onError = { error = it } - ) - - if (error != null) { - return null - } - - var metadata: IONMediaMetadata? = null - if (includeMetadata) { - metadata = IONMediaMetadata( - fileHelper.getFileSizeFromUri(activity, mediaUri), - null, - fileHelper.getFileExtension(imagePath), - "${decodedImage.height}x${decodedImage.width}", - fileHelper.getFileCreationDate(file), - ) - } - - return IONMediaResult(IONMediaType.PICTURE.type, imagePath, base64Image, metadata, true) - } - - private fun savePictureInGallery(activity: Activity, encodingType: Int, srcUri: Uri?) { - val galleryPathVO: OSCAMRGalleryHelper = getPicturesPath(encodingType) - val fileFromGalleryPath = File(galleryPathVO.galleryPath) - val galleryUri = Uri.fromFile(fileFromGalleryPath) + private fun savePictureInGallery(activity: Activity, encodingType: Int, srcUri: Uri?): Boolean { + return try { + val galleryPathVO: OSCAMRGalleryHelper = getPicturesPath(encodingType) + val fileFromGalleryPath = File(galleryPathVO.galleryPath) + val galleryUri = Uri.fromFile(fileFromGalleryPath) - if (Build.VERSION.SDK_INT <= 28) { - writeTakenPictureToGalleryLowerThanAndroidQ(activity, srcUri, galleryUri) - } else { - writeTakenPictureToGalleryStartingFromAndroidQ( - activity, - srcUri, - galleryPathVO, - encodingType - ) + if (Build.VERSION.SDK_INT <= 28) { + writeTakenPictureToGalleryLowerThanAndroidQ(activity, srcUri, galleryUri) + } else { + writeTakenPictureToGalleryStartingFromAndroidQ( + activity, + srcUri, + galleryPathVO, + encodingType + ) + } + true + } catch (e: Exception) { + false } } @@ -335,7 +304,11 @@ class EditManager( } @Throws(IOException::class) - private fun writeTakenPictureToGalleryLowerThanAndroidQ(activity: Activity?, srcUri: Uri?, galleryUri: Uri?) { + private fun writeTakenPictureToGalleryLowerThanAndroidQ( + activity: Activity?, + srcUri: Uri?, + galleryUri: Uri? + ) { writeUncompressedImage(activity, srcUri, galleryUri) fileHelper.refreshGallery(activity, galleryUri) } diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/processor/IONMediaProcessor.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/processor/IONMediaProcessor.kt index 804c12e..373b157 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/processor/IONMediaProcessor.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/processor/IONMediaProcessor.kt @@ -11,6 +11,7 @@ import io.ionic.libs.ioncameralib.helper.OSCAMRExifHelperInterface import io.ionic.libs.ioncameralib.helper.OSCAMRFileHelperInterface import io.ionic.libs.ioncameralib.helper.OSCAMRImageHelperInterface import io.ionic.libs.ioncameralib.helper.OSCAMRMediaHelperInterface +import io.ionic.libs.ioncameralib.manager.EditManager import io.ionic.libs.ioncameralib.model.IONCameraParameters import io.ionic.libs.ioncameralib.model.IONError import io.ionic.libs.ioncameralib.model.IONMediaMetadata @@ -33,33 +34,15 @@ class IONMediaProcessor( companion object Companion { private const val JPEG = 0 - private const val PNG = 1 private const val JPEG_TYPE = "jpg" private const val PNG_TYPE = "png" private const val JPEG_EXTENSION = ".$JPEG_TYPE" private const val PNG_EXTENSION = ".$PNG_TYPE" - private const val PNG_MIME_TYPE = "image/png" - private const val JPEG_MIME_TYPE = "image/jpeg" - - private const val GET_PICTURE = "Get Picture" - private const val TIME_FORMAT = "yyyyMMdd_HHmmss" private const val LOG_TAG = "MediaProcessor" - private const val CLOSING_INPUT_STREAM_ERROR = "Exception while closing file input stream." - - const val EDIT_REQUEST_CODE = 7 - const val EDIT_FROM_GALLERY_REQUEST_CODE = 11 - - private const val PICTURE_NAMES_PREFIX = "PIC_" - private const val VIDEO_NAMES_PREFIX = "VID_" - private const val VIDEO_FORMAT = ".mp4" private const val IMAGE_MAX_RESOLUTION = 1080 private const val IMAGE_MAX_QUALITY = 100 - private const val STORE = "CameraStore" - private const val EDIT_FILE_NAME_KEY = "EditFileName" - private const val ALLOW_MULTIPLE = "allowMultiple" - private const val MEDIA_TYPE = "mediaType" } /** @@ -138,6 +121,59 @@ class IONMediaProcessor( return IONMediaResult(IONMediaType.PICTURE.type, imagePath, base64Image, metadata, saved) } + /** + * Transforms the image media item uri into a media result object. + * @param imagePath A string with the path for the image media item. + * @return An object containing relevant information for the media item. + * Null if an error occurred. + */ + private fun createEditedImageMediaResult( + activity: Activity, + imagePath: String, + mediaUri: Uri, + includeMetadata: Boolean, + saved: Boolean = false + ): IONMediaResult? { + var base64Image = "" + var error: IONError? = null + + val file = File(imagePath) + if (!fileHelper.fileExists(file)) return null + + val decodedImage = imageHelper.decodeFile(imagePath) + + if(decodedImage == null) return null + + val downsizedImage = imageHelper.downsizeBitmapIfNeeded(decodedImage, + IMAGE_MAX_RESOLUTION + ) + val compressedImage = imageHelper.compressBitmap(downsizedImage, 100) + + imageHelper.bitmapToBase64(compressedImage, + resolution = IMAGE_MAX_RESOLUTION, + quality = IMAGE_MAX_QUALITY, + onSuccess = { base64Image = it }, + onError = { error = it } + ) + + if (error != null) { + return null + } + + var metadata: IONMediaMetadata? = null + if (includeMetadata) { + metadata = IONMediaMetadata( + fileHelper.getFileSizeFromUri(activity, mediaUri), + null, + fileHelper.getFileExtension(imagePath), + "${decodedImage.height}x${decodedImage.width}", + fileHelper.getFileCreationDate(file), + ) + } + + return IONMediaResult(IONMediaType.PICTURE.type, imagePath, base64Image, metadata, saved) + } + fun processCameraImage( activity: Activity, sourcePath: String, @@ -193,6 +229,31 @@ class IONMediaProcessor( } } + fun processEditedImage( + activity: Activity, + imagePath: String, + uri: Uri, + includeMetadata: Boolean, + savedSuccessfully: Boolean, + onMediaResult: (IONMediaResult) -> Unit, + onError: (IONError) -> Unit + ) { + val mediaResult = createEditedImageMediaResult( + activity, + imagePath, + uri, + includeMetadata, + savedSuccessfully + ) + + if (mediaResult == null) { + onError(IONError.EDIT_IMAGE_ERROR) + return + } + + onMediaResult(mediaResult) + } + /** * Transforms the media item uri into a media result object. * @param activity Activity object that will be necessary to launch the edit activity. From 5ebc4657e8a1e32d682a0b3e0123cc51adc24ebf Mon Sep 17 00:00:00 2001 From: Rui Mendes Date: Thu, 5 Mar 2026 19:19:49 +0000 Subject: [PATCH 02/25] update methods doc --- .../kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt | 2 ++ .../kotlin/io/ionic/libs/ioncameralib/manager/GalleryManager.kt | 1 + 2 files changed, 3 insertions(+) diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt index 1595be3..fa7f1b5 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt @@ -90,6 +90,7 @@ class CameraManager( * Take a picture with the camera. * @param activity Activity object that will be necessary to take the picture * @param encodingType JPEG or PNG. + * @param launcher ActivityResultLauncher to use when launching the camera activity */ fun takePhoto(activity: Activity, encodingType: Int, launcher: ActivityResultLauncher) { // Save filename to fetch later (needed when allowEdit is true) @@ -119,6 +120,7 @@ class CameraManager( * Calls the intent to open the device's camera to record a video. * @param activity Activity object that will be necessary to launch the edit activity. * @param saveVideoToGallery Indicates if the recorded video should be saved to the device gallery + * @param launcher ActivityResultLauncher to use when launching the camera activity * @param onError callback that will be used when an error occurs. */ fun recordVideo( diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/GalleryManager.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/GalleryManager.kt index 61d5102..471265f 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/GalleryManager.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/GalleryManager.kt @@ -54,6 +54,7 @@ class GalleryManager( * @param mediaType The type of content the user is allowed to select. * @param allowMultiSelect Whether or not the user should be allowed to select multiple items * from gallery. + * @param launcher ActivityResultLauncher to use when launching the gallery activity */ fun chooseFromGallery( activity: Activity, From d1cb5c9e3c41aa197038ba9d7b3be059e1c3b434 Mon Sep 17 00:00:00 2001 From: Rui Mendes Date: Fri, 6 Mar 2026 15:08:07 +0000 Subject: [PATCH 03/25] update file names to prefix ION --- src/main/AndroidManifest.xml | 2 +- .../{OSCAMRExifHelper.kt => IONExifHelper.kt} | 2 +- ...Interface.kt => IONExifHelperInterface.kt} | 2 +- .../{OSCAMRFileHelper.kt => IONFileHelper.kt} | 4 +- ...Interface.kt => IONFileHelperInterface.kt} | 2 +- ...MRGalleryHelper.kt => IONGalleryHelper.kt} | 2 +- ...OSCAMRImageHelper.kt => IONImageHelper.kt} | 4 +- ...nterface.kt => IONImageHelperInterface.kt} | 2 +- ...OSCAMRMediaHelper.kt => IONMediaHelper.kt} | 4 +- ...nterface.kt => IONMediaHelperInterface.kt} | 2 +- ...troller.kt => IONImageEditorController.kt} | 2 +- ...t => IONImageEditorControllerInterface.kt} | 2 +- .../ioncameralib/manager/CameraManager.kt | 36 ++++++++-------- .../libs/ioncameralib/manager/EditManager.kt | 38 ++++++++--------- .../ioncameralib/manager/GalleryManager.kt | 26 ++++++------ .../ioncameralib/manager/OSCAMRController.kt | 42 +++++++++---------- .../libs/ioncameralib/manager/VideoManager.kt | 5 +-- .../processor/IONMediaProcessor.kt | 17 ++++---- ...eCropperView.kt => IONImageCropperView.kt} | 4 +- ...rActivity.kt => IONImageEditorActivity.kt} | 7 ++-- ...ageEditorView.kt => IONImageEditorView.kt} | 18 ++++---- .../res/layout-land/image_editor_view.xml | 4 +- src/main/res/layout/activity_image_editor.xml | 6 +-- src/main/res/layout/image_editor_view.xml | 4 +- 24 files changed, 114 insertions(+), 123 deletions(-) rename src/main/kotlin/io/ionic/libs/ioncameralib/helper/{OSCAMRExifHelper.kt => IONExifHelper.kt} (99%) rename src/main/kotlin/io/ionic/libs/ioncameralib/helper/{OSCAMRExifHelperInterface.kt => IONExifHelperInterface.kt} (91%) rename src/main/kotlin/io/ionic/libs/ioncameralib/helper/{OSCAMRFileHelper.kt => IONFileHelper.kt} (99%) rename src/main/kotlin/io/ionic/libs/ioncameralib/helper/{OSCAMRFileHelperInterface.kt => IONFileHelperInterface.kt} (97%) rename src/main/kotlin/io/ionic/libs/ioncameralib/helper/{OSCAMRGalleryHelper.kt => IONGalleryHelper.kt} (57%) rename src/main/kotlin/io/ionic/libs/ioncameralib/helper/{OSCAMRImageHelper.kt => IONImageHelper.kt} (98%) rename src/main/kotlin/io/ionic/libs/ioncameralib/helper/{OSCAMRImageHelperInterface.kt => IONImageHelperInterface.kt} (98%) rename src/main/kotlin/io/ionic/libs/ioncameralib/helper/{OSCAMRMediaHelper.kt => IONMediaHelper.kt} (99%) rename src/main/kotlin/io/ionic/libs/ioncameralib/helper/{OSCAMRMediaHelperInterface.kt => IONMediaHelperInterface.kt} (96%) rename src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/{OSCAMRImageEditorController.kt => IONImageEditorController.kt} (94%) rename src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/{OSCAMRImageEditorControllerInterface.kt => IONImageEditorControllerInterface.kt} (84%) rename src/main/kotlin/io/ionic/libs/ioncameralib/view/{ImageCropperView.kt => IONImageCropperView.kt} (99%) rename src/main/kotlin/io/ionic/libs/ioncameralib/view/{ImageEditorActivity.kt => IONImageEditorActivity.kt} (89%) rename src/main/kotlin/io/ionic/libs/ioncameralib/view/{ImageEditorView.kt => IONImageEditorView.kt} (95%) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 4cc2068..e8bd6d7 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ android:name="io.ionic.libs.ioncameralib.view.IONLoadingActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /> diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRExifHelper.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONExifHelper.kt similarity index 99% rename from src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRExifHelper.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONExifHelper.kt index cfae968..f5cea71 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRExifHelper.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONExifHelper.kt @@ -23,7 +23,7 @@ import android.media.ExifInterface import android.net.Uri import java.io.IOException -class OSCAMRExifHelper : OSCAMRExifHelperInterface { +class IONExifHelper : IONExifHelperInterface { private var aperture: String? = null private var datetime: String? = null diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRExifHelperInterface.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONExifHelperInterface.kt similarity index 91% rename from src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRExifHelperInterface.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONExifHelperInterface.kt index 26b5b65..6bb5223 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRExifHelperInterface.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONExifHelperInterface.kt @@ -3,7 +3,7 @@ package io.ionic.libs.ioncameralib.helper import android.media.ExifInterface import android.net.Uri -interface OSCAMRExifHelperInterface { +interface IONExifHelperInterface { fun createInFile(filePath: String?) fun createOutFile(filePath: String?) diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRFileHelper.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONFileHelper.kt similarity index 99% rename from src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRFileHelper.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONFileHelper.kt index 4d5284b..349df10 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRFileHelper.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONFileHelper.kt @@ -36,9 +36,9 @@ import java.nio.file.Files import java.nio.file.attribute.BasicFileAttributes import java.util.* -class OSCAMRFileHelper: OSCAMRFileHelperInterface { +class IONFileHelper: IONFileHelperInterface { - companion object { + companion object Companion { private const val LOG_TAG = "OSCAMRFileHelper" private const val EXTERNAL_STORAGE = "com.android.externalstorage.documents" private const val DOWNLOADS_DOCUMENTS = "com.android.providers.downloads.documents" diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRFileHelperInterface.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONFileHelperInterface.kt similarity index 97% rename from src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRFileHelperInterface.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONFileHelperInterface.kt index 248b30d..1049662 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRFileHelperInterface.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONFileHelperInterface.kt @@ -7,7 +7,7 @@ import android.net.Uri import java.io.File import java.io.InputStream -interface OSCAMRFileHelperInterface { +interface IONFileHelperInterface { fun getRealPath(uri: Uri?, context: Context?): String? fun getRealPath(uriString: String, context: Context): String? fun getUriFromString(uriString: String): Uri diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRGalleryHelper.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONGalleryHelper.kt similarity index 57% rename from src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRGalleryHelper.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONGalleryHelper.kt index e7f8edb..f3709a2 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRGalleryHelper.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONGalleryHelper.kt @@ -1,6 +1,6 @@ package io.ionic.libs.ioncameralib.helper -class OSCAMRGalleryHelper(val picturesDirectory: String?, val galleryFileName: String?) { +class IONGalleryHelper(val picturesDirectory: String?, val galleryFileName: String?) { var galleryPath = this.picturesDirectory + "/" + this.galleryFileName diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRImageHelper.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONImageHelper.kt similarity index 98% rename from src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRImageHelper.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONImageHelper.kt index 723f6c2..107e38d 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRImageHelper.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONImageHelper.kt @@ -13,9 +13,9 @@ import androidx.core.graphics.scale import io.ionic.libs.ioncameralib.model.IONError import java.io.* -class OSCAMRImageHelper: OSCAMRImageHelperInterface { +class IONImageHelper: IONImageHelperInterface { - companion object { + companion object Companion { private const val JPEG = 0 } diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRImageHelperInterface.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONImageHelperInterface.kt similarity index 98% rename from src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRImageHelperInterface.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONImageHelperInterface.kt index 1ba802b..2abfda1 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRImageHelperInterface.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONImageHelperInterface.kt @@ -10,7 +10,7 @@ import io.ionic.libs.ioncameralib.model.IONError import java.io.File import java.io.InputStream -interface OSCAMRImageHelperInterface { +interface IONImageHelperInterface { fun getBitmapForInputStream(fileStream: InputStream?): Bitmap? fun downsizeBitmapIfNeeded(bitmap: Bitmap, resolution: Int): Bitmap fun compressBitmap(bitmap: Bitmap, quality: Int): Bitmap diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRMediaHelper.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONMediaHelper.kt similarity index 99% rename from src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRMediaHelper.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONMediaHelper.kt index 6908796..d0e565d 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRMediaHelper.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONMediaHelper.kt @@ -16,9 +16,9 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.ByteArrayOutputStream -class OSCAMRMediaHelper : OSCAMRMediaHelperInterface { +class IONMediaHelper : IONMediaHelperInterface { - companion object { + companion object Companion { private const val CAMERA = 1 private const val LOG_TAG = "OSCAMRMediaHelper" const val REQUEST_VIDEO_CAPTURE = 1 diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRMediaHelperInterface.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONMediaHelperInterface.kt similarity index 96% rename from src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRMediaHelperInterface.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONMediaHelperInterface.kt index 17131c6..b113976 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/helper/OSCAMRMediaHelperInterface.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/helper/IONMediaHelperInterface.kt @@ -5,7 +5,7 @@ import android.content.Intent import android.database.Cursor import android.net.Uri -interface OSCAMRMediaHelperInterface { +interface IONMediaHelperInterface { fun openDeviceCamera(activity: Activity?, imageUri: Uri?, returnType: Int) fun createCameraIntent(activity: Activity?, imageUri: Uri?): Intent? fun getCursor(activity: Activity?, contentStore: Uri): Cursor? diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/OSCAMRImageEditorController.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/IONImageEditorController.kt similarity index 94% rename from src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/OSCAMRImageEditorController.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/IONImageEditorController.kt index 87f7edb..7108b27 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/OSCAMRImageEditorController.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/IONImageEditorController.kt @@ -4,7 +4,7 @@ import android.graphics.Bitmap import android.graphics.Matrix import android.graphics.Rect -class OSCAMRImageEditorController : OSCAMRImageEditorControllerInterface { +class IONImageEditorController : IONImageEditorControllerInterface { override suspend fun rotateLeft(image: Bitmap): Bitmap { val rotationMatrix = Matrix().apply { diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/OSCAMRImageEditorControllerInterface.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/IONImageEditorControllerInterface.kt similarity index 84% rename from src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/OSCAMRImageEditorControllerInterface.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/IONImageEditorControllerInterface.kt index 4daf83f..dd28520 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/OSCAMRImageEditorControllerInterface.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/imageeditor/IONImageEditorControllerInterface.kt @@ -3,7 +3,7 @@ package io.ionic.libs.ioncameralib.imageeditor import android.graphics.Bitmap import android.graphics.Rect -interface OSCAMRImageEditorControllerInterface { +interface IONImageEditorControllerInterface { suspend fun rotateLeft(image: Bitmap): Bitmap suspend fun crop(image: Bitmap, rect: Rect) : Bitmap suspend fun flip(image: Bitmap): Bitmap diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt index fa7f1b5..5e7bc7c 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/CameraManager.kt @@ -5,7 +5,6 @@ import androidx.activity.result.ActivityResultLauncher import android.content.ContentResolver import android.content.ContentValues import android.content.Intent -import android.media.ExifInterface import android.media.MediaScannerConnection import android.media.MediaScannerConnection.MediaScannerConnectionClient import android.net.Uri @@ -13,18 +12,17 @@ import android.os.Build import android.os.Environment import android.provider.MediaStore import android.util.Log -import io.ionic.libs.ioncameralib.helper.OSCAMRExifHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRFileHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRImageHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRMediaHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRGalleryHelper +import io.ionic.libs.ioncameralib.helper.IONExifHelperInterface +import io.ionic.libs.ioncameralib.helper.IONFileHelperInterface +import io.ionic.libs.ioncameralib.helper.IONImageHelperInterface +import io.ionic.libs.ioncameralib.helper.IONMediaHelperInterface +import io.ionic.libs.ioncameralib.helper.IONGalleryHelper import io.ionic.libs.ioncameralib.model.IONError import io.ionic.libs.ioncameralib.model.IONMediaResult import io.ionic.libs.ioncameralib.model.IONMediaType import io.ionic.libs.ioncameralib.model.IONCameraParameters -import io.ionic.libs.ioncameralib.view.ImageEditorActivity +import io.ionic.libs.ioncameralib.view.IONImageEditorActivity import io.ionic.libs.ioncameralib.processor.IONMediaProcessor -import kotlinx.coroutines.Job import java.io.File import java.io.FileNotFoundException import java.io.IOException @@ -36,10 +34,10 @@ import java.util.Date class CameraManager( private var applicationId: String, private var authority: String, - private var exif: OSCAMRExifHelperInterface, - private var fileHelper: OSCAMRFileHelperInterface, - private var mediaHelper: OSCAMRMediaHelperInterface, - private var imageHelper: OSCAMRImageHelperInterface + private var exif: IONExifHelperInterface, + private var fileHelper: IONFileHelperInterface, + private var mediaHelper: IONMediaHelperInterface, + private var imageHelper: IONImageHelperInterface ) : MediaScannerConnectionClient { private var imageFilePath: String? = null private var imageUri: Uri? = null @@ -164,7 +162,7 @@ class CameraManager( picUri: Uri?, launcher: ActivityResultLauncher ) { - val cropIntent = Intent(activity, ImageEditorActivity::class.java) + val cropIntent = Intent(activity, IONImageEditorActivity::class.java) // creates output file croppedFilePath = createCaptureFile( @@ -174,8 +172,8 @@ class CameraManager( ).absolutePath croppedUri = Uri.parse(croppedFilePath) - cropIntent.putExtra(ImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS, croppedFilePath) - cropIntent.putExtra(ImageEditorActivity.IMAGE_INPUT_URI_EXTRAS, picUri.toString()) + cropIntent.putExtra(IONImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS, croppedFilePath) + cropIntent.putExtra(IONImageEditorActivity.IMAGE_INPUT_URI_EXTRAS, picUri.toString()) launcher.launch(cropIntent) } @@ -326,7 +324,7 @@ class CameraManager( private fun savePictureInGallery(activity: Activity, encodingType: Int, srcUri: Uri?): Boolean { return try { - val galleryPathVO: OSCAMRGalleryHelper = getPicturesPath(encodingType) + val galleryPathVO: IONGalleryHelper = getPicturesPath(encodingType) val fileFromGalleryPath = File(galleryPathVO.galleryPath) val galleryUri = Uri.fromFile(fileFromGalleryPath) @@ -360,7 +358,7 @@ class CameraManager( private fun writeTakenPictureToGalleryStartingFromAndroidQ( activity: Activity?, srcUri: Uri?, - galleryPathVO: OSCAMRGalleryHelper, + galleryPathVO: IONGalleryHelper, encodingType: Int ) { // Starting from Android Q, working with the ACTION_MEDIA_SCANNER_SCAN_FILE intent is deprecated @@ -405,7 +403,7 @@ class CameraManager( fileHelper.writeUncompressedImage(activity, fis, dest) } - private fun getPicturesPath(encodingType: Int): OSCAMRGalleryHelper { + private fun getPicturesPath(encodingType: Int): IONGalleryHelper { val timeStamp = SimpleDateFormat(TIME_FORMAT).format( Date() @@ -416,7 +414,7 @@ class CameraManager( Environment.DIRECTORY_PICTURES ) storageDir.mkdirs() - return OSCAMRGalleryHelper(storageDir.absolutePath, imageFileName) + return IONGalleryHelper(storageDir.absolutePath, imageFileName) } fun onDestroy(activity: Activity) { diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/EditManager.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/EditManager.kt index 98f89bb..409dff7 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/EditManager.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/EditManager.kt @@ -12,19 +12,17 @@ import android.provider.MediaStore import android.util.Base64 import android.util.Log import androidx.activity.result.ActivityResultLauncher -import io.ionic.libs.ioncameralib.helper.OSCAMRFileHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRImageHelperInterface +import io.ionic.libs.ioncameralib.helper.IONFileHelperInterface +import io.ionic.libs.ioncameralib.helper.IONImageHelperInterface import io.ionic.libs.ioncameralib.model.IONError -import io.ionic.libs.ioncameralib.model.IONMediaMetadata import io.ionic.libs.ioncameralib.model.IONMediaResult -import io.ionic.libs.ioncameralib.model.IONMediaType import io.ionic.libs.ioncameralib.model.IONEditParameters -import io.ionic.libs.ioncameralib.view.ImageEditorActivity +import io.ionic.libs.ioncameralib.view.IONImageEditorActivity import java.io.File import androidx.core.net.toUri -import io.ionic.libs.ioncameralib.helper.OSCAMRExifHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRGalleryHelper -import io.ionic.libs.ioncameralib.helper.OSCAMRMediaHelperInterface +import io.ionic.libs.ioncameralib.helper.IONExifHelperInterface +import io.ionic.libs.ioncameralib.helper.IONGalleryHelper +import io.ionic.libs.ioncameralib.helper.IONMediaHelperInterface import io.ionic.libs.ioncameralib.processor.IONMediaProcessor import java.io.FileNotFoundException import java.io.IOException @@ -38,10 +36,10 @@ import java.util.Date class EditManager( private var applicationId: String, private var authority: String, - private var exif: OSCAMRExifHelperInterface, - private var fileHelper: OSCAMRFileHelperInterface, - private var mediaHelper: OSCAMRMediaHelperInterface, - private var imageHelper: OSCAMRImageHelperInterface, + private var exif: IONExifHelperInterface, + private var fileHelper: IONFileHelperInterface, + private var mediaHelper: IONMediaHelperInterface, + private var imageHelper: IONImageHelperInterface, ) { private var croppedUri: Uri? = null @@ -156,7 +154,7 @@ class EditManager( picUri: Uri?, launcher: ActivityResultLauncher ) { - val cropIntent = Intent(activity, ImageEditorActivity::class.java) + val cropIntent = Intent(activity, IONImageEditorActivity::class.java) // creates output file croppedFilePath = createCaptureFile( @@ -166,8 +164,8 @@ class EditManager( ).absolutePath croppedUri = croppedFilePath?.toUri() - cropIntent.putExtra(ImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS, croppedFilePath) - cropIntent.putExtra(ImageEditorActivity.IMAGE_INPUT_URI_EXTRAS, picUri.toString()) + cropIntent.putExtra(IONImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS, croppedFilePath) + cropIntent.putExtra(IONImageEditorActivity.IMAGE_INPUT_URI_EXTRAS, picUri.toString()) launcher.launch(cropIntent) } @@ -190,7 +188,7 @@ class EditManager( onMediaResult: (IONMediaResult) -> Unit, onError: (IONError) -> Unit ) { - val resultImagePath = intent?.getStringExtra(ImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS) + val resultImagePath = intent?.getStringExtra(IONImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS) if (resultImagePath.isNullOrEmpty()) { Log.d(LOG_TAG, "Image file path is null or empty") onError(IONError.EDIT_IMAGE_ERROR) @@ -269,7 +267,7 @@ class EditManager( private fun savePictureInGallery(activity: Activity, encodingType: Int, srcUri: Uri?): Boolean { return try { - val galleryPathVO: OSCAMRGalleryHelper = getPicturesPath(encodingType) + val galleryPathVO: IONGalleryHelper = getPicturesPath(encodingType) val fileFromGalleryPath = File(galleryPathVO.galleryPath) val galleryUri = Uri.fromFile(fileFromGalleryPath) @@ -289,7 +287,7 @@ class EditManager( } } - private fun getPicturesPath(encodingType: Int): OSCAMRGalleryHelper { + private fun getPicturesPath(encodingType: Int): IONGalleryHelper { val timeStamp = SimpleDateFormat(TIME_FORMAT).format( Date() @@ -300,7 +298,7 @@ class EditManager( Environment.DIRECTORY_PICTURES ) storageDir.mkdirs() - return OSCAMRGalleryHelper(storageDir.absolutePath, imageFileName) + return IONGalleryHelper(storageDir.absolutePath, imageFileName) } @Throws(IOException::class) @@ -317,7 +315,7 @@ class EditManager( private fun writeTakenPictureToGalleryStartingFromAndroidQ( activity: Activity?, srcUri: Uri?, - galleryPathVO: OSCAMRGalleryHelper, + galleryPathVO: IONGalleryHelper, encodingType: Int ) { // Starting from Android Q, working with the ACTION_MEDIA_SCANNER_SCAN_FILE intent is deprecated diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/GalleryManager.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/GalleryManager.kt index 471265f..e2649f4 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/GalleryManager.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/GalleryManager.kt @@ -7,24 +7,24 @@ import android.content.Intent import android.net.Uri import android.util.Log import androidx.activity.result.ActivityResultLauncher -import io.ionic.libs.ioncameralib.helper.OSCAMRExifHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRFileHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRImageHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRMediaHelperInterface +import io.ionic.libs.ioncameralib.helper.IONExifHelperInterface +import io.ionic.libs.ioncameralib.helper.IONFileHelperInterface +import io.ionic.libs.ioncameralib.helper.IONImageHelperInterface +import io.ionic.libs.ioncameralib.helper.IONMediaHelperInterface import io.ionic.libs.ioncameralib.model.IONError import io.ionic.libs.ioncameralib.model.IONMediaResult import io.ionic.libs.ioncameralib.model.IONMediaType import io.ionic.libs.ioncameralib.processor.IONMediaProcessor import io.ionic.libs.ioncameralib.view.IONOpenPhotoPickerActivity import io.ionic.libs.ioncameralib.view.IONLoadingActivity -import io.ionic.libs.ioncameralib.view.ImageEditorActivity +import io.ionic.libs.ioncameralib.view.IONImageEditorActivity import java.io.File class GalleryManager( - private var exif: OSCAMRExifHelperInterface, - private var fileHelper: OSCAMRFileHelperInterface, - private var mediaHelper: OSCAMRMediaHelperInterface, - private var imageHelper: OSCAMRImageHelperInterface + private var exif: IONExifHelperInterface, + private var fileHelper: IONFileHelperInterface, + private var mediaHelper: IONMediaHelperInterface, + private var imageHelper: IONImageHelperInterface ) { private var croppedUri: Uri? = null private var croppedFilePath: String? = null @@ -170,7 +170,7 @@ class GalleryManager( // An empty string here will trigger EDIT_IMAGE_ERROR later val fileLocation = - intent.getStringExtra(ImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS) ?: "" + intent.getStringExtra(IONImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS) ?: "" val mediaResult = createMediaResult( activity, @@ -200,7 +200,7 @@ class GalleryManager( picUri: Uri?, launcher: ActivityResultLauncher ) { - val cropIntent = Intent(activity, ImageEditorActivity::class.java) + val cropIntent = Intent(activity, IONImageEditorActivity::class.java) // creates output file croppedFilePath = createCaptureFile( @@ -210,8 +210,8 @@ class GalleryManager( ).absolutePath croppedUri = Uri.parse(croppedFilePath) - cropIntent.putExtra(ImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS, croppedFilePath) - cropIntent.putExtra(ImageEditorActivity.IMAGE_INPUT_URI_EXTRAS, picUri.toString()) + cropIntent.putExtra(IONImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS, croppedFilePath) + cropIntent.putExtra(IONImageEditorActivity.IMAGE_INPUT_URI_EXTRAS, picUri.toString()) launcher.launch(cropIntent) } diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/OSCAMRController.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/OSCAMRController.kt index 239b65c..770f7be 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/OSCAMRController.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/OSCAMRController.kt @@ -15,21 +15,19 @@ import android.os.Build import android.os.Environment import android.provider.MediaStore import android.util.Log -import io.ionic.libs.ioncameralib.helper.OSCAMRExifHelper -import io.ionic.libs.ioncameralib.helper.OSCAMRExifHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRFileHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRImageHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRMediaHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRGalleryHelper +import io.ionic.libs.ioncameralib.helper.IONExifHelper +import io.ionic.libs.ioncameralib.helper.IONExifHelperInterface +import io.ionic.libs.ioncameralib.helper.IONFileHelperInterface +import io.ionic.libs.ioncameralib.helper.IONImageHelperInterface +import io.ionic.libs.ioncameralib.helper.IONMediaHelperInterface +import io.ionic.libs.ioncameralib.helper.IONGalleryHelper import io.ionic.libs.ioncameralib.model.IONError import io.ionic.libs.ioncameralib.model.IONMediaMetadata import io.ionic.libs.ioncameralib.model.IONMediaResult import io.ionic.libs.ioncameralib.model.IONMediaType import io.ionic.libs.ioncameralib.model.IONCameraParameters import io.ionic.libs.ioncameralib.model.IONEditParameters -import io.ionic.libs.ioncameralib.view.ImageEditorActivity -import io.ionic.libs.ioncameralib.view.IONLoadingActivity -import io.ionic.libs.ioncameralib.view.IONOpenPhotoPickerActivity +import io.ionic.libs.ioncameralib.view.IONImageEditorActivity import kotlinx.coroutines.Job import java.io.File import java.io.FileNotFoundException @@ -40,17 +38,17 @@ import java.util.Date class OSCAMRController( private var applicationId: String, - private var exif: OSCAMRExifHelperInterface, - private var fileHelper: OSCAMRFileHelperInterface, - private var mediaHelper: OSCAMRMediaHelperInterface, - private var imageHelper: OSCAMRImageHelperInterface + private var exif: IONExifHelperInterface, + private var fileHelper: IONFileHelperInterface, + private var mediaHelper: IONMediaHelperInterface, + private var imageHelper: IONImageHelperInterface ) : MediaScannerConnectionClient { private var imageFilePath: String? = null private var imageUri: Uri? = null private var croppedUri: Uri? = null private var croppedFilePath: String? = null - private var exifData: OSCAMRExifHelperInterface? = OSCAMRExifHelper() + private var exifData: IONExifHelperInterface? = IONExifHelper() private var orientationCorrected = false private var conn: MediaScannerConnection? = null @@ -576,7 +574,7 @@ class OSCAMRController( }*/ fun openCropActivity(activity: Activity?, picUri: Uri?, requestCode: Int?, destType: Int?) { - val cropIntent = Intent(activity, ImageEditorActivity::class.java) + val cropIntent = Intent(activity, IONImageEditorActivity::class.java) // creates output file croppedFilePath = createCaptureFile( @@ -586,8 +584,8 @@ class OSCAMRController( ).absolutePath croppedUri = Uri.parse(croppedFilePath) - cropIntent.putExtra(ImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS, croppedFilePath) - cropIntent.putExtra(ImageEditorActivity.IMAGE_INPUT_URI_EXTRAS, picUri.toString()) + cropIntent.putExtra(IONImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS, croppedFilePath) + cropIntent.putExtra(IONImageEditorActivity.IMAGE_INPUT_URI_EXTRAS, picUri.toString()) var code = EDIT_REQUEST_CODE if (requestCode != null && destType != null) { code = requestCode + destType @@ -785,7 +783,7 @@ class OSCAMRController( onMediaResult: (IONMediaResult) -> Unit, onError: (IONError) -> Unit ) { - val resultImagePath = intent?.getStringExtra(ImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS) + val resultImagePath = intent?.getStringExtra(IONImageEditorActivity.IMAGE_OUTPUT_URI_EXTRAS) if (resultImagePath.isNullOrEmpty()) { Log.d(LOG_TAG, "Image file path is null or empty") onError(IONError.EDIT_IMAGE_ERROR) @@ -836,7 +834,7 @@ class OSCAMRController( } private fun savePictureInGallery(activity: Activity, encodingType: Int, srcUri: Uri?) { - val galleryPathVO: OSCAMRGalleryHelper = getPicturesPath(encodingType) + val galleryPathVO: IONGalleryHelper = getPicturesPath(encodingType) val fileFromGalleryPath = File(galleryPathVO.galleryPath) val galleryUri = Uri.fromFile(fileFromGalleryPath) @@ -938,7 +936,7 @@ class OSCAMRController( job.cancel() } - private fun getPicturesPath(encodingType: Int): OSCAMRGalleryHelper { + private fun getPicturesPath(encodingType: Int): IONGalleryHelper { val timeStamp = SimpleDateFormat(TIME_FORMAT).format( Date() @@ -949,7 +947,7 @@ class OSCAMRController( Environment.DIRECTORY_PICTURES ) storageDir.mkdirs() - return OSCAMRGalleryHelper(storageDir.absolutePath, imageFileName) + return IONGalleryHelper(storageDir.absolutePath, imageFileName) } /** @@ -1235,7 +1233,7 @@ class OSCAMRController( private fun writeTakenPictureToGalleryStartingFromAndroidQ( activity: Activity?, srcUri: Uri?, - galleryPathVO: OSCAMRGalleryHelper, + galleryPathVO: IONGalleryHelper, encodingType: Int ) { // Starting from Android Q, working with the ACTION_MEDIA_SCANNER_SCAN_FILE intent is deprecated diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/VideoManager.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/VideoManager.kt index f33d457..7ac0a3f 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/manager/VideoManager.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/manager/VideoManager.kt @@ -2,14 +2,13 @@ package io.ionic.libs.ioncameralib.manager import android.app.Activity import android.content.Intent -import android.util.Log -import io.ionic.libs.ioncameralib.helper.OSCAMRFileHelperInterface +import io.ionic.libs.ioncameralib.helper.IONFileHelperInterface import io.ionic.libs.ioncameralib.model.IONError import java.io.File class VideoManager( private var authority: String, - private var fileHelper: OSCAMRFileHelperInterface, + private var fileHelper: IONFileHelperInterface, ) { /** diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/processor/IONMediaProcessor.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/processor/IONMediaProcessor.kt index 373b157..563bb9e 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/processor/IONMediaProcessor.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/processor/IONMediaProcessor.kt @@ -7,11 +7,10 @@ import android.graphics.Matrix import android.media.ExifInterface import android.net.Uri import android.util.Log -import io.ionic.libs.ioncameralib.helper.OSCAMRExifHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRFileHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRImageHelperInterface -import io.ionic.libs.ioncameralib.helper.OSCAMRMediaHelperInterface -import io.ionic.libs.ioncameralib.manager.EditManager +import io.ionic.libs.ioncameralib.helper.IONExifHelperInterface +import io.ionic.libs.ioncameralib.helper.IONFileHelperInterface +import io.ionic.libs.ioncameralib.helper.IONImageHelperInterface +import io.ionic.libs.ioncameralib.helper.IONMediaHelperInterface import io.ionic.libs.ioncameralib.model.IONCameraParameters import io.ionic.libs.ioncameralib.model.IONError import io.ionic.libs.ioncameralib.model.IONMediaMetadata @@ -24,10 +23,10 @@ import java.text.SimpleDateFormat import java.util.Date class IONMediaProcessor( - private val exif: OSCAMRExifHelperInterface, - private val fileHelper: OSCAMRFileHelperInterface, - private val mediaHelper: OSCAMRMediaHelperInterface, - private val imageHelper: OSCAMRImageHelperInterface + private val exif: IONExifHelperInterface, + private val fileHelper: IONFileHelperInterface, + private val mediaHelper: IONMediaHelperInterface, + private val imageHelper: IONImageHelperInterface ) { private var orientationCorrected = false private val TARGET_THUMBNAIL_DIMENSION: Int = 480 diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/view/ImageCropperView.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/view/IONImageCropperView.kt similarity index 99% rename from src/main/kotlin/io/ionic/libs/ioncameralib/view/ImageCropperView.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/view/IONImageCropperView.kt index ac0cd54..3dcc79e 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/view/ImageCropperView.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/view/IONImageCropperView.kt @@ -8,7 +8,7 @@ import android.view.MotionEvent import android.view.View import kotlin.math.sqrt -class ImageCropperView @JvmOverloads constructor( +class IONImageCropperView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : View(context, attrs) { @@ -43,7 +43,7 @@ class ImageCropperView @JvmOverloads constructor( // Flag to check if the image is ready to be cropped, that is, if frame can be drawn around it private var isImageReady: Boolean = false - companion object { + companion object Companion { private const val TAG = "ImageCropperView" private const val BORDER_WIDTH = 2 diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/view/ImageEditorActivity.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/view/IONImageEditorActivity.kt similarity index 89% rename from src/main/kotlin/io/ionic/libs/ioncameralib/view/ImageEditorActivity.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/view/IONImageEditorActivity.kt index 7785300..e85be4f 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/view/ImageEditorActivity.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/view/IONImageEditorActivity.kt @@ -1,7 +1,6 @@ package io.ionic.libs.ioncameralib.view import android.net.Uri -import android.content.Intent import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.SystemBarStyle @@ -10,9 +9,9 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.updatePadding -class ImageEditorActivity : ComponentActivity() { +class IONImageEditorActivity : ComponentActivity() { - private val editorView by lazy { findViewById(getResourceId("id/imageEditorView")) } + private val editorView by lazy { findViewById(getResourceId("id/imageEditorView")) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -48,7 +47,7 @@ class ImageEditorActivity : ComponentActivity() { return application.resources.getIdentifier(typeAndName, null, application.packageName) } - companion object { + companion object Companion { const val IMAGE_INPUT_URI_EXTRAS = "IMAGE_EDITOR_IN_URI_EXTRAS" const val IMAGE_OUTPUT_URI_EXTRAS = "IMAGE_EDITOR_OUT_URI_EXTRAS" } diff --git a/src/main/kotlin/io/ionic/libs/ioncameralib/view/ImageEditorView.kt b/src/main/kotlin/io/ionic/libs/ioncameralib/view/IONImageEditorView.kt similarity index 95% rename from src/main/kotlin/io/ionic/libs/ioncameralib/view/ImageEditorView.kt rename to src/main/kotlin/io/ionic/libs/ioncameralib/view/IONImageEditorView.kt index 842fd02..2d6a347 100644 --- a/src/main/kotlin/io/ionic/libs/ioncameralib/view/ImageEditorView.kt +++ b/src/main/kotlin/io/ionic/libs/ioncameralib/view/IONImageEditorView.kt @@ -25,10 +25,10 @@ import android.widget.ImageButton import android.widget.ImageView import androidx.lifecycle.findViewTreeLifecycleOwner import androidx.lifecycle.lifecycleScope -import io.ionic.libs.ioncameralib.helper.OSCAMRFileHelper -import io.ionic.libs.ioncameralib.imageeditor.OSCAMRImageEditorControllerInterface -import io.ionic.libs.ioncameralib.imageeditor.OSCAMRImageEditorController -import io.ionic.libs.ioncameralib.helper.OSCAMRFileHelperInterface +import io.ionic.libs.ioncameralib.helper.IONFileHelper +import io.ionic.libs.ioncameralib.imageeditor.IONImageEditorControllerInterface +import io.ionic.libs.ioncameralib.imageeditor.IONImageEditorController +import io.ionic.libs.ioncameralib.helper.IONFileHelperInterface import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers.Default @@ -38,12 +38,12 @@ import java.io.InputStream import kotlin.math.floor -class ImageEditorView @JvmOverloads constructor( +class IONImageEditorView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : FrameLayout(context, attrs) { - private val cropView by lazy { findViewById(getResourceId("id/cropperView")) } + private val cropView by lazy { findViewById(getResourceId("id/cropperView")) } private val imageView by lazy { findViewById(getResourceId("id/imageView")) } private val cancelButton by lazy { findViewById