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(
val Label: String,
val Value: String,
var Value: String,
var isSelected : Boolean
) {
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.content.pm.PackageManager
import android.database.Cursor
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import android.os.Bundle
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.providerfactory.StepThreeModelProviderFactory
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.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() {
private var bitmap: Bitmap? = null
private var latestTmpUri: Uri? = null
private var _binding: FragmentBajajfdStepThreeBinding? = null
private val binding get() = _binding!!
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 var takeImageResult: ActivityResultLauncher<Uri>? = null
private var selectImageIntent: ActivityResultLauncher<String>? = null
@ -57,24 +60,16 @@ class StepThreeBajajFDFragment : BaseFragment() {
private var photoString: String = ""
private var docString: String = ""
private var docString2: String = ""
private var panFileExt: String? = ""
private var photoFileExt: String? = ""
private var doc1FileExt: String? = ""
private var doc2fileExt: 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(
ActivityResultContracts.RequestPermission()
@ -105,7 +100,8 @@ class StepThreeBajajFDFragment : BaseFragment() {
selectImageIntent = registerForActivityResult(ActivityResultContracts.GetContent())
{ uri: Uri? ->
if (uri != null) {
uploadDocument(uri)
bitmap = uriToBitmap(uri)
uploadDocument(uri,"g")
}
}
@ -113,7 +109,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
registerForActivityResult(ActivityResultContracts.TakePicture()) { isSuccess ->
if (isSuccess) {
latestTmpUri?.let { uri ->
uploadDocument(uri)
uploadDocument(uri,"c")
}
}
}
@ -122,7 +118,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
if (validate()) {
uploadDocApi(
"PAN",
"data:image/.".plus(panFileExt).plus(";base64").plus(panString),
"data:image/".plus(panFileExt).plus(";base64, ").plus(panString),
1
)
}
@ -153,7 +149,8 @@ class StepThreeBajajFDFragment : BaseFragment() {
binding.spDocType.onItemClickListener =
AdapterView.OnItemClickListener { parent, _, position, _ ->
getCodes = parent.getItemAtPosition(position) as GetCodes
val getCodes : GetCodes = parent.getItemAtPosition(position) as GetCodes
docValue = getCodes.Value
docString = ""
docString2 = ""
when (getCodes.Label) {
@ -235,7 +232,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
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 *")
if (binding.tvAadhaarBack.visibility == View.VISIBLE) binding.tvAadhaarBack.visibility =
View.INVISIBLE
@ -254,78 +251,104 @@ 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)
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 -> {
binding.ivPhotograph.visibility = View.VISIBLE
binding.ivPan.visibility = View.VISIBLE
val fileDir: File = requireActivity().cacheDir
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 -> {
binding.ivAadharFront.visibility = View.VISIBLE
val fileDir: File = requireActivity().cacheDir
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 -> {
binding.ivAadharBack.visibility = View.VISIBLE
val fileDir: File = requireActivity().cacheDir
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 {
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) {
e.printStackTrace()
""
}
}
private fun encodedPhotoBase64(fileName: File?) {
private fun encodedPhotoBase64(fileName: File) {
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) {
e.printStackTrace()
""
}
}
private fun encodedUpload1Base64(fileName: File?) {
private fun encodedUpload1Base64(fileName: File) {
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) {
e.printStackTrace()
""
}
}
private fun encodedFileToBase64(fileName: File?) {
private fun encodedFileToBase64(fileName: File) {
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) {
e.printStackTrace()
""
@ -378,22 +401,22 @@ class StepThreeBajajFDFragment : BaseFragment() {
if (uploadPosition == 1) {
uploadDocApi(
"Photograph",
"data:image/.".plus(photoFileExt).plus(";base64")
"data:image/".plus(photoFileExt).plus(";base64, ")
.plus(photoString),
2
)
} else if (uploadPosition == 2) {
uploadDocApi(
getCodes.Value,
"data:image/.".plus(doc1FileExt).plus(";base64")
docValue,
"data:image/".plus(doc1FileExt).plus(";base64, ")
.plus(docString),
3
)
} else if (uploadPosition == 3) {
if (getCodes.Value == "Aadhar") {
if (docValue == "Aadhar") {
uploadDocApi(
getCodes.Value,
"data:image/.".plus(doc2fileExt).plus(";base64")
docValue,
"data:image/".plus(doc2fileExt).plus(";base64, ")
.plus(docString2),
4
)
@ -409,7 +432,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
else -> {
Common.showDialogValidation(
activity as BajajFdMainActivity,
getUploadResponse.Response.Message
getUploadResponse.Response.Errors[0].ErrorMessage
)
}
}
@ -513,7 +536,9 @@ class StepThreeBajajFDFragment : BaseFragment() {
adapter.getItem(0)?.Value,
false
)
setOtherUploadLayout(listOfDocType[0].Value)
setOtherUploadLayout(adapter.getItem(0)?.Value)
docValue = adapter.getItem(0)?.Value.toString()
}
}
// 650 -> refreshToken()
@ -560,10 +585,10 @@ class StepThreeBajajFDFragment : BaseFragment() {
} else if (docString.isEmpty()) {
Common.showDialogValidation(
activity as BajajFdMainActivity,
"Upload " + getCodes.Value + " Image"
"Upload $docValue Image"
)
return false
} else if (getCodes.Value == "Aadhar" && docString2.isEmpty()) {
} else if (docValue == "Aadhar" && docString2.isEmpty()) {
Common.showDialogValidation(
activity as BajajFdMainActivity,
"Upload Aadhar Back Image"
@ -605,4 +630,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
}
}

+ 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.NetworkCapabilities
import android.os.Build
import android.os.Environment
import android.provider.ContactsContract
import android.text.format.DateFormat
import android.util.Patterns
@ -18,6 +19,7 @@ import com.google.gson.JsonObject
import com.nivesh.production.bajajfd.R
import kotlinx.coroutines.CoroutineExceptionHandler
import retrofit2.HttpException
import java.io.File
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.*
@ -233,5 +235,25 @@ class Common {
minAdultAge.add(Calendar.YEAR, -18)
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"
app:layout_constraintBottom_toTopOf="@+id/btnPhotoUpload"
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_constraintTop_toBottomOf="@+id/tvUploadKYCDocument"
tools:ignore="DuplicateSpeakableTextCheck" />


Loading…
Cancel
Save

Powered by TurnKey Linux.