diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt index fc2943d..2c0db95 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt @@ -8,13 +8,10 @@ import android.content.Intent import android.content.pm.PackageManager import android.database.Cursor import android.graphics.Bitmap -import android.graphics.BitmapRegionDecoder -import android.graphics.ImageDecoder -import android.graphics.Rect +import android.graphics.BitmapFactory import android.net.Uri import android.os.Build import android.os.Bundle -import android.provider.MediaStore import android.provider.OpenableColumns import android.util.Base64 import android.util.Log @@ -40,16 +37,15 @@ import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity import com.nivesh.production.bajajfd.ui.providerfactory.StepThreeModelProviderFactory import com.nivesh.production.bajajfd.util.Common import com.nivesh.production.bajajfd.util.Constants +import com.nivesh.production.bajajfd.util.ImageUtil import com.nivesh.production.bajajfd.util.Resource import com.nivesh.production.bajajfd.viewModel.StepThreeBajajFDViewModel -import java.io.File -import java.io.FileInputStream -import java.io.IOException -import java.io.InputStream +import java.io.* class StepThreeBajajFDFragment : BaseFragment() { + var bitmap: Bitmap? = null private var latestTmpUri: Uri? = null private var _binding: FragmentBajajfdStepThreeBinding? = null private val binding get() = _binding!! @@ -116,14 +112,8 @@ class StepThreeBajajFDFragment : BaseFragment() { selectImageIntent = registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> if (uri != null) { - val source = ImageDecoder.createSource(requireActivity().contentResolver, uri) - val bitmap = ImageDecoder.decodeBitmap(source) - - // External sdcard location -// val mediaStorageDir = File( -// requireActivity().cacheDir, -// ) -// uploadDocument(uri) + bitmap = uriToBitmap(uri) + uploadDocument(uri,"g") } } @@ -131,7 +121,7 @@ class StepThreeBajajFDFragment : BaseFragment() { registerForActivityResult(ActivityResultContracts.TakePicture()) { isSuccess -> if (isSuccess) { latestTmpUri?.let { uri -> - uploadDocument(uri) + uploadDocument(uri,"c") } } } @@ -291,14 +281,15 @@ class StepThreeBajajFDFragment : BaseFragment() { binding.btnAadhaarFrontUpload.visibility = View.VISIBLE } - private fun uploadDocument(uri: Uri) { + private fun uploadDocument(uri: Uri,type: String) { when (actionType) { MAIN_PAN_UPLOAD -> { binding.ivPan.visibility = View.VISIBLE val fileDir: File = requireActivity().cacheDir val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) panFileExt = fileExtension.extension - encodedPANBase64(fileExtension) + if(type == "c") encodedPANBase64(fileExtension) + else panString = bitmap?.let { ImageUtil.convert(it) }.toString() } MAIN_PHOTO_UPLOAD -> { binding.ivPhotograph.visibility = View.VISIBLE @@ -306,21 +297,25 @@ class StepThreeBajajFDFragment : BaseFragment() { val fileDir: File = requireActivity().cacheDir val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) photoFileExt = fileExtension.extension - encodedPhotoBase64(fileExtension) + if(type == "c") encodedPhotoBase64(fileExtension) + else photoString = bitmap?.let { ImageUtil.convert(it) }.toString() + } FIRST_UPLOAD -> { binding.ivAadharFront.visibility = View.VISIBLE val fileDir: File = requireActivity().cacheDir val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) doc1FileExt = fileExtension.extension - encodedUpload1Base64(fileExtension) + if(type == "c") encodedUpload1Base64(fileExtension) + else docString = bitmap?.let { ImageUtil.convert(it) }.toString() } else -> { binding.ivAadharBack.visibility = View.VISIBLE val fileDir: File = requireActivity().cacheDir val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) doc2fileExt = fileExtension.extension - encodedFileToBase64(fileExtension) + if(type == "c") encodedFileToBase64(fileExtension) + else docString2 = bitmap?.let { ImageUtil.convert(it) }.toString() } } } @@ -642,4 +637,17 @@ class StepThreeBajajFDFragment : BaseFragment() { fun displayReceivedData(createFDApplicationResponse: CreateFDApplicationResponse) { uniqueId = createFDApplicationResponse.Response.FDCreationDetailsResponse.UniqueId } + + private fun uriToBitmap(selectedFileUri: Uri): Bitmap? { + try { + val parcelFileDescriptor = requireActivity().contentResolver.openFileDescriptor(selectedFileUri, "r") + val fileDescriptor: FileDescriptor = parcelFileDescriptor!!.fileDescriptor + val image = BitmapFactory.decodeFileDescriptor(fileDescriptor) + parcelFileDescriptor.close() + return image + } catch (e: IOException) { + e.printStackTrace() + } + return null + } } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/ImageUtil.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/ImageUtil.kt new file mode 100644 index 0000000..0d1340f --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/util/ImageUtil.kt @@ -0,0 +1,27 @@ +package com.nivesh.production.bajajfd.util + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.util.Base64; +import java.io.ByteArrayOutputStream; + + +class ImageUtil { + + @Throws(IllegalArgumentException::class) + fun convert(base64Str: String): Bitmap? { + val decodedBytes: ByteArray = Base64.decode( + base64Str.substring(base64Str.indexOf(",") + 1), + Base64.DEFAULT + ) + return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.size) + } + + companion object { + fun convert(bitmap: Bitmap): String? { + val outputStream = ByteArrayOutputStream() + bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream) + return Base64.encodeToString(outputStream.toByteArray(), Base64.DEFAULT) + } + } +} \ No newline at end of file