Browse Source

completed image upload

PankajBranch
Hemant Khadase 2 years ago
parent
commit
2fd53592e8
5 changed files with 148 additions and 61 deletions
  1. +1
    -1
      app/src/main/java/com/nivesh/production/bajajfd/model/GetCodes.kt
  2. +97
    -59
      app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt
  3. +22
    -0
      app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt
  4. +27
    -0
      app/src/main/java/com/nivesh/production/bajajfd/util/ImageUtil.kt
  5. +1
    -1
      app/src/main/res/layout/fragment_bajajfd_step_three.xml

+ 1
- 1
app/src/main/java/com/nivesh/production/bajajfd/model/GetCodes.kt View File

@ -2,7 +2,7 @@ package com.nivesh.production.bajajfd.model
data class GetCodes( data class GetCodes(
val Label: String, val Label: String,
val Value: String,
var Value: String,
var isSelected : Boolean var isSelected : Boolean
) { ) {
override fun toString(): String { override fun toString(): String {


+ 97
- 59
app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt View File

@ -6,6 +6,8 @@ import android.app.ActionBar.LayoutParams
import android.app.Dialog import android.app.Dialog
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.database.Cursor import android.database.Cursor
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.provider.OpenableColumns import android.provider.OpenableColumns
@ -31,24 +33,25 @@ import com.nivesh.production.bajajfd.repositories.MainRepository
import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity
import com.nivesh.production.bajajfd.ui.providerfactory.StepThreeModelProviderFactory import com.nivesh.production.bajajfd.ui.providerfactory.StepThreeModelProviderFactory
import com.nivesh.production.bajajfd.util.Common import com.nivesh.production.bajajfd.util.Common
import com.nivesh.production.bajajfd.util.Common.Companion.getFileExtension
import com.nivesh.production.bajajfd.util.Constants 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.util.Resource
import com.nivesh.production.bajajfd.viewModel.StepThreeBajajFDViewModel 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() { class StepThreeBajajFDFragment : BaseFragment() {
private var bitmap: Bitmap? = null
private var latestTmpUri: Uri? = null private var latestTmpUri: Uri? = null
private var _binding: FragmentBajajfdStepThreeBinding? = null private var _binding: FragmentBajajfdStepThreeBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
private lateinit var listOfDocType: List<GetCodes> private lateinit var listOfDocType: List<GetCodes>
lateinit var getCodes: GetCodes
private var docValue: String = ""
private lateinit var stepThreeBajajFDViewModel: StepThreeBajajFDViewModel
private lateinit var stepThreeBajajFDViewModel: StepThreeBajajFDViewModel
private lateinit var dialog: Dialog private lateinit var dialog: Dialog
private var takeImageResult: ActivityResultLauncher<Uri>? = null private var takeImageResult: ActivityResultLauncher<Uri>? = null
private var selectImageIntent: ActivityResultLauncher<String>? = null private var selectImageIntent: ActivityResultLauncher<String>? = null
@ -57,24 +60,16 @@ class StepThreeBajajFDFragment : BaseFragment() {
private var photoString: String = "" private var photoString: String = ""
private var docString: String = "" private var docString: String = ""
private var docString2: String = "" private var docString2: String = ""
private var panFileExt: String? = "" private var panFileExt: String? = ""
private var photoFileExt: String? = "" private var photoFileExt: String? = ""
private var doc1FileExt: String? = "" private var doc1FileExt: String? = ""
private var doc2fileExt: String? = "" private var doc2fileExt: String? = ""
private var uniqueId: String? = "" private var uniqueId: String? = ""
// private var actionType: AccountCaptureType? = null
//
// enum class AccountCaptureType {
// MAIN_PAN_UPLOAD, MAIN_PHOTO_UPLOAD, FIRST_UPLOAD, SECOND_UPLOAD
// }
val MAIN_PAN_UPLOAD: Int = 1
val MAIN_PHOTO_UPLOAD: Int = 2
val FIRST_UPLOAD: Int = 3
val SECOND_UPLOAD: Int = 4
var actionType: Int = -1
private val MAIN_PAN_UPLOAD: Int = 1
private val MAIN_PHOTO_UPLOAD: Int = 2
private val FIRST_UPLOAD: Int = 3
private val SECOND_UPLOAD: Int = 4
private var actionType: Int = -1
private val requestPermission = registerForActivityResult( private val requestPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission() ActivityResultContracts.RequestPermission()
@ -105,7 +100,8 @@ class StepThreeBajajFDFragment : BaseFragment() {
selectImageIntent = registerForActivityResult(ActivityResultContracts.GetContent()) selectImageIntent = registerForActivityResult(ActivityResultContracts.GetContent())
{ uri: Uri? -> { uri: Uri? ->
if (uri != null) { if (uri != null) {
uploadDocument(uri)
bitmap = uriToBitmap(uri)
uploadDocument(uri,"g")
} }
} }
@ -113,7 +109,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
registerForActivityResult(ActivityResultContracts.TakePicture()) { isSuccess -> registerForActivityResult(ActivityResultContracts.TakePicture()) { isSuccess ->
if (isSuccess) { if (isSuccess) {
latestTmpUri?.let { uri -> latestTmpUri?.let { uri ->
uploadDocument(uri)
uploadDocument(uri,"c")
} }
} }
} }
@ -122,7 +118,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
if (validate()) { if (validate()) {
uploadDocApi( uploadDocApi(
"PAN", "PAN",
"data:image/.".plus(panFileExt).plus(";base64").plus(panString),
"data:image/".plus(panFileExt).plus(";base64, ").plus(panString),
1 1
) )
} }
@ -153,7 +149,8 @@ class StepThreeBajajFDFragment : BaseFragment() {
binding.spDocType.onItemClickListener = binding.spDocType.onItemClickListener =
AdapterView.OnItemClickListener { parent, _, position, _ -> AdapterView.OnItemClickListener { parent, _, position, _ ->
getCodes = parent.getItemAtPosition(position) as GetCodes
val getCodes : GetCodes = parent.getItemAtPosition(position) as GetCodes
docValue = getCodes.Value
docString = "" docString = ""
docString2 = "" docString2 = ""
when (getCodes.Label) { when (getCodes.Label) {
@ -235,7 +232,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
dialog.window?.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) dialog.window?.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
} }
private fun setOtherUploadLayout(itemName: String) {
private fun setOtherUploadLayout(itemName: String?) {
binding.tvAadhaarFront.text = itemName.plus(" Front *") binding.tvAadhaarFront.text = itemName.plus(" Front *")
if (binding.tvAadhaarBack.visibility == View.VISIBLE) binding.tvAadhaarBack.visibility = if (binding.tvAadhaarBack.visibility == View.VISIBLE) binding.tvAadhaarBack.visibility =
View.INVISIBLE View.INVISIBLE
@ -254,78 +251,104 @@ class StepThreeBajajFDFragment : BaseFragment() {
binding.btnAadhaarFrontUpload.visibility = View.VISIBLE binding.btnAadhaarFrontUpload.visibility = View.VISIBLE
} }
private fun uploadDocument(uri: Uri) {
private fun uploadDocument(uri: Uri,type: String) {
when (actionType) { when (actionType) {
MAIN_PAN_UPLOAD -> { MAIN_PAN_UPLOAD -> {
binding.ivPan.visibility = View.VISIBLE binding.ivPan.visibility = View.VISIBLE
val fileDir: File = requireActivity().cacheDir val fileDir: File = requireActivity().cacheDir
val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri)))
panFileExt = fileExtension.extension
encodedPANBase64(fileExtension)
panFileExt = getFileExtension(getFileName(uri))
val size : Double = Common.getFileSizeInMB(fileExtension.length())
if (size < 5){
if(type == "c") encodedPANBase64(fileExtension)
else panString = bitmap?.let { ImageUtil.convert(it) }.toString()
} else{
panString = ""
panFileExt = ""
}
} }
MAIN_PHOTO_UPLOAD -> { MAIN_PHOTO_UPLOAD -> {
binding.ivPhotograph.visibility = View.VISIBLE binding.ivPhotograph.visibility = View.VISIBLE
binding.ivPan.visibility = View.VISIBLE binding.ivPan.visibility = View.VISIBLE
val fileDir: File = requireActivity().cacheDir val fileDir: File = requireActivity().cacheDir
val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri)))
photoFileExt = fileExtension.extension
encodedPhotoBase64(fileExtension)
photoFileExt = getFileExtension(getFileName(uri))
val size : Double = Common.getFileSizeInMB(fileExtension.length())
if (size < 5) {
if (type == "c") encodedPhotoBase64(fileExtension)
else photoString = bitmap?.let { ImageUtil.convert(it) }.toString()
}else{
photoString = ""
photoFileExt = ""
}
} }
FIRST_UPLOAD -> { FIRST_UPLOAD -> {
binding.ivAadharFront.visibility = View.VISIBLE binding.ivAadharFront.visibility = View.VISIBLE
val fileDir: File = requireActivity().cacheDir val fileDir: File = requireActivity().cacheDir
val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri)))
doc1FileExt = fileExtension.extension
encodedUpload1Base64(fileExtension)
doc1FileExt = getFileExtension(getFileName(uri))
val size : Double = Common.getFileSizeInMB(fileExtension.length())
if (size < 5) {
if (type == "c") encodedUpload1Base64(fileExtension)
else docString = bitmap?.let { ImageUtil.convert(it) }.toString()
}else{
docString = ""
doc1FileExt = ""
}
} }
else -> { else -> {
binding.ivAadharBack.visibility = View.VISIBLE binding.ivAadharBack.visibility = View.VISIBLE
val fileDir: File = requireActivity().cacheDir val fileDir: File = requireActivity().cacheDir
val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri)))
doc2fileExt = fileExtension.extension
encodedFileToBase64(fileExtension)
doc2fileExt = getFileExtension(getFileName(uri))
val size : Double = Common.getFileSizeInMB(fileExtension.length())
if (size < 5) {
if (type == "c") encodedFileToBase64(fileExtension)
else docString2 = bitmap?.let { ImageUtil.convert(it) }.toString()
}else{
docString2 = ""
doc2fileExt = ""
}
} }
} }
} }
private fun encodedPANBase64(fileName: File?) {
private fun encodedPANBase64(fileName: File) {
panString = try { panString = try {
val bytes: ByteArray? = fileName?.let { loadFile(it) }
Base64.encodeToString(bytes, Base64.DEFAULT).trim { it <= ' ' }
.replace("\n".toRegex(), "").replace("\\s+".toRegex(), "")
val bytes: ByteArray = loadFile(fileName)
Base64.encodeToString(bytes, Base64.DEFAULT).trim().replace("\n", "").replace("\\s+", "")
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
"" ""
} }
} }
private fun encodedPhotoBase64(fileName: File?) {
private fun encodedPhotoBase64(fileName: File) {
photoString = try { photoString = try {
val bytes: ByteArray? = fileName?.let { loadFile(it) }
Base64.encodeToString(bytes, Base64.DEFAULT).trim { it <= ' ' }
.replace("\n".toRegex(), "").replace("\\s+".toRegex(), "")
val bytes: ByteArray = loadFile(fileName)
Base64.encodeToString(bytes, Base64.DEFAULT).trim().replace("\n", "").replace("\\s+", "")
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
"" ""
} }
} }
private fun encodedUpload1Base64(fileName: File?) {
private fun encodedUpload1Base64(fileName: File) {
docString = try { docString = try {
val bytes: ByteArray? = fileName?.let { loadFile(it) }
Base64.encodeToString(bytes, Base64.DEFAULT).trim { it <= ' ' }
.replace("\n".toRegex(), "").replace("\\s+".toRegex(), "")
val bytes: ByteArray = loadFile(fileName)
Base64.encodeToString(bytes, Base64.DEFAULT).trim().replace("\n", "").replace("\\s+", "")
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
"" ""
} }
} }
private fun encodedFileToBase64(fileName: File?) {
private fun encodedFileToBase64(fileName: File) {
docString2 = try { docString2 = try {
val bytes: ByteArray? = fileName?.let { loadFile(it) }
Base64.encodeToString(bytes, Base64.DEFAULT).trim { it <= ' ' }
.replace("\n".toRegex(), "").replace("\\s+".toRegex(), "")
val bytes: ByteArray = loadFile(fileName)
Base64.encodeToString(bytes, Base64.DEFAULT).trim().replace("\n", "").replace("\\s+", "")
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
"" ""
@ -378,22 +401,22 @@ class StepThreeBajajFDFragment : BaseFragment() {
if (uploadPosition == 1) { if (uploadPosition == 1) {
uploadDocApi( uploadDocApi(
"Photograph", "Photograph",
"data:image/.".plus(photoFileExt).plus(";base64")
"data:image/".plus(photoFileExt).plus(";base64, ")
.plus(photoString), .plus(photoString),
2 2
) )
} else if (uploadPosition == 2) { } else if (uploadPosition == 2) {
uploadDocApi( uploadDocApi(
getCodes.Value,
"data:image/.".plus(doc1FileExt).plus(";base64")
docValue,
"data:image/".plus(doc1FileExt).plus(";base64, ")
.plus(docString), .plus(docString),
3 3
) )
} else if (uploadPosition == 3) { } else if (uploadPosition == 3) {
if (getCodes.Value == "Aadhar") {
if (docValue == "Aadhar") {
uploadDocApi( uploadDocApi(
getCodes.Value,
"data:image/.".plus(doc2fileExt).plus(";base64")
docValue,
"data:image/".plus(doc2fileExt).plus(";base64, ")
.plus(docString2), .plus(docString2),
4 4
) )
@ -409,7 +432,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
else -> { else -> {
Common.showDialogValidation( Common.showDialogValidation(
activity as BajajFdMainActivity, activity as BajajFdMainActivity,
getUploadResponse.Response.Message
getUploadResponse.Response.Errors[0].ErrorMessage
) )
} }
} }
@ -513,7 +536,9 @@ class StepThreeBajajFDFragment : BaseFragment() {
adapter.getItem(0)?.Value, adapter.getItem(0)?.Value,
false false
) )
setOtherUploadLayout(listOfDocType[0].Value)
setOtherUploadLayout(adapter.getItem(0)?.Value)
docValue = adapter.getItem(0)?.Value.toString()
} }
} }
// 650 -> refreshToken() // 650 -> refreshToken()
@ -560,10 +585,10 @@ class StepThreeBajajFDFragment : BaseFragment() {
} else if (docString.isEmpty()) { } else if (docString.isEmpty()) {
Common.showDialogValidation( Common.showDialogValidation(
activity as BajajFdMainActivity, activity as BajajFdMainActivity,
"Upload " + getCodes.Value + " Image"
"Upload $docValue Image"
) )
return false return false
} else if (getCodes.Value == "Aadhar" && docString2.isEmpty()) {
} else if (docValue == "Aadhar" && docString2.isEmpty()) {
Common.showDialogValidation( Common.showDialogValidation(
activity as BajajFdMainActivity, activity as BajajFdMainActivity,
"Upload Aadhar Back Image" "Upload Aadhar Back Image"
@ -605,4 +630,17 @@ class StepThreeBajajFDFragment : BaseFragment() {
fun displayReceivedData(createFDApplicationResponse: CreateFDApplicationResponse) { fun displayReceivedData(createFDApplicationResponse: CreateFDApplicationResponse) {
uniqueId = createFDApplicationResponse.Response.FDCreationDetailsResponse.UniqueId 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
}
} }

+ 22
- 0
app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt View File

@ -8,6 +8,7 @@ import android.graphics.drawable.GradientDrawable
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.NetworkCapabilities import android.net.NetworkCapabilities
import android.os.Build import android.os.Build
import android.os.Environment
import android.provider.ContactsContract import android.provider.ContactsContract
import android.text.format.DateFormat import android.text.format.DateFormat
import android.util.Patterns import android.util.Patterns
@ -18,6 +19,7 @@ import com.google.gson.JsonObject
import com.nivesh.production.bajajfd.R import com.nivesh.production.bajajfd.R
import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineExceptionHandler
import retrofit2.HttpException import retrofit2.HttpException
import java.io.File
import java.io.IOException import java.io.IOException
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
@ -233,5 +235,25 @@ class Common {
minAdultAge.add(Calendar.YEAR, -18) minAdultAge.add(Calendar.YEAR, -18)
return minAdultAge.before(userAge) return minAdultAge.before(userAge)
} }
/* this function is used for file size in readable formate(End)*/
fun getFileSizeInMB(length: Long): Double {
// Get length of file in bytes
val fileSizeInBytes = length.toDouble()
// Convert the bytes to Kilobytes (1 KB = 1024 Bytes)
val fileSizeInKB = fileSizeInBytes / 1024
// Convert the KB to MegaBytes (1 MB = 1024 KBytes)
return fileSizeInKB / 1024
}
fun getFileExtension(name: String): String {
val index = name.lastIndexOf('.')
return if (index > 0) {
name.substring(index + 1)
} else {
""
}
}
} }
} }

+ 27
- 0
app/src/main/java/com/nivesh/production/bajajfd/util/ImageUtil.kt View File

@ -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)
}
}
}

+ 1
- 1
app/src/main/res/layout/fragment_bajajfd_step_three.xml View File

@ -109,7 +109,7 @@
android:textColor="@color/black" android:textColor="@color/black"
app:layout_constraintBottom_toTopOf="@+id/btnPhotoUpload" app:layout_constraintBottom_toTopOf="@+id/btnPhotoUpload"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.925"
app:layout_constraintHorizontal_bias="0.78"
app:layout_constraintStart_toEndOf="@+id/tvPAN" app:layout_constraintStart_toEndOf="@+id/tvPAN"
app:layout_constraintTop_toBottomOf="@+id/tvUploadKYCDocument" app:layout_constraintTop_toBottomOf="@+id/tvUploadKYCDocument"
tools:ignore="DuplicateSpeakableTextCheck" /> tools:ignore="DuplicateSpeakableTextCheck" />


Loading…
Cancel
Save

Powered by TurnKey Linux.