From 366f37aff0398a63e37789e5b1521d1ae67c9b30 Mon Sep 17 00:00:00 2001 From: Manoj Date: Tue, 3 Jan 2023 17:11:05 +0530 Subject: [PATCH] upload push --- app/src/main/AndroidManifest.xml | 3 +- .../bajajfd/interfaces/ApiInterface.kt | 2 +- .../bajajfd/model/DocumentUpload.kt | 12 +- .../bajajfd/model/ResponseXXXXXXXXXXXX.kt | 8 ++ .../bajajfd/model/UploadResponse.kt | 5 + .../bajajfd/repositories/MainRepository.kt | 4 +- .../ui/activity/BajajFdMainActivity.kt | 10 +- .../ui/fragment/StepThreeBajajFDFragment.kt | 113 +++++++++++++++++- .../ui/fragment/StepTwoBajajFDFragment.kt | 23 +++- .../viewModel/StepThreeBajajFDViewModel.kt | 25 ++-- 10 files changed, 177 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXXXXXXXXXXXX.kt create mode 100644 app/src/main/java/com/nivesh/production/bajajfd/model/UploadResponse.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ba0157d..b149776 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,7 +6,7 @@ - + diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/DocumentUpload.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/DocumentUpload.kt index fd4ee1d..e0f8154 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/model/DocumentUpload.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/DocumentUpload.kt @@ -1,10 +1,10 @@ package com.nivesh.production.bajajfd.model data class DocumentUpload( - val Description: String? = null, - val DocumentType: String? = null, - val FDProvider: String? = null, - val ImageEncodeToBase64: String? = null, - val NiveshClientCode: String? = null, - val UniqueId: String? = null + var Description: String? = null, + var DocumentType: String? = null, + var FDProvider: String? = null, + var ImageEncodeToBase64: String? = null, + var NiveshClientCode: String? = null, + var UniqueId: String? = null ) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXXXXXXXXXXXX.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXXXXXXXXXXXX.kt new file mode 100644 index 0000000..972a79e --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXXXXXXXXXXXX.kt @@ -0,0 +1,8 @@ +package com.nivesh.production.bajajfd.model + +data class ResponseXXXXXXXXXXXX( + val Errors: Any, + val Message: String, + val Status: String, + val StatusCode: Int +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/UploadResponse.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/UploadResponse.kt new file mode 100644 index 0000000..a9a1560 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/UploadResponse.kt @@ -0,0 +1,5 @@ +package com.nivesh.production.bajajfd.model + +data class UploadResponse( + val Response: ResponseXXXXXXXXXXXX +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt b/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt index 65beecc..eaa60f1 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt @@ -26,8 +26,8 @@ class MainRepository constructor(private val apiInterface: ApiInterface) { suspend fun createFDKYCResponse(createFDRequest: CreateFDRequest, token: String) = apiInterface.createFDApp(createFDRequest, token) - suspend fun documentsUploadResponse(getRatesRequest: GetRatesRequest, token: String) = - apiInterface.getRates(getRatesRequest, token) + suspend fun documentsUploadResponse(documentUpload: DocumentUpload, token: String) = + apiInterface.documentsUpload(documentUpload, token) suspend fun saveFDOtherDataResponse(getRatesRequest: GetRatesRequest, token: String) = apiInterface.getRates(getRatesRequest, token) diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt index 5ea057e..3cdc734 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt @@ -352,13 +352,13 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { // step 2 response override fun stepTwoApi(data: CreateFDRequest) { Log.e("stepTwoApi", " response ---> $data") - if (stepCount == 4) { - // go to step 3 image Upload - binding.viewPager.currentItem = 2 - }else{ +// if (stepCount == 4) { +// // go to step 3 image Upload +// binding.viewPager.currentItem = 2 +// }else{ // call create fd api bypass step 3 createFDApi(data , 2) - } +// } } 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 499d6bd..18b7f85 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 @@ -1,14 +1,18 @@ package com.nivesh.production.bajajfd.ui.fragment import android.Manifest +import android.annotation.SuppressLint import android.app.ActionBar.LayoutParams import android.app.Dialog import android.content.pm.PackageManager +import android.database.Cursor import android.graphics.Bitmap import android.net.Uri import android.os.Bundle import android.provider.MediaStore +import android.provider.OpenableColumns import android.text.Editable +import android.util.Base64 import android.util.Log import android.view.LayoutInflater import android.view.View @@ -17,6 +21,7 @@ import android.widget.AdapterView import android.widget.ArrayAdapter import android.widget.ImageView import android.widget.TextView +import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.core.app.ActivityCompat @@ -36,6 +41,9 @@ import com.nivesh.production.bajajfd.util.Constants 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 class StepThreeBajajFDFragment : Fragment() { @@ -48,6 +56,7 @@ class StepThreeBajajFDFragment : Fragment() { private lateinit var stepThreeBajajFDViewModel: StepThreeBajajFDViewModel private lateinit var dialog: Dialog + private lateinit var front: String companion object { fun getInstance(fdInterface: BajajFDInterface): StepThreeBajajFDFragment { @@ -99,6 +108,7 @@ class StepThreeBajajFDFragment : Fragment() { binding.btnNext.setOnClickListener { if (validate()) { + uploadDocApi() // // bajajFDInterface.stepThreeApi((activity as BajajFdMainActivity).createFDRequest) } @@ -128,6 +138,30 @@ class StepThreeBajajFDFragment : Fragment() { return root } + @SuppressLint("Range") + fun getFileName(uri: Uri): String? { + var result: String? = null + if (uri.scheme == "content") { + val cursor: Cursor = + requireActivity().getContentResolver().query(uri, null, null, null, null)!! + try { + if (cursor != null && cursor.moveToFirst()) { + result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)) + } + } finally { + cursor.close() + } + } + if (result == null) { + result = uri.path + val cut = result!!.lastIndexOf('/') + if (cut != -1) { + result = result.substring(cut + 1) + } + } + return result + } + private fun selectImage() { dialog = Dialog(activity as BajajFdMainActivity) dialog.setContentView(R.layout.camera_gallery_layout) @@ -227,12 +261,87 @@ class StepThreeBajajFDFragment : Fragment() { if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { val documentUpload = DocumentUpload() val value: Editable? = binding.spDocType.text - Log.e("check_Data", value.toString()) + val file_dir:File = requireActivity().cacheDir + val file_ex = File(file_dir.toString().plus("/").plus(getFileName(uri))) var file_path: File? = uri.path?.let { File(it) } + encodedFileToBase64(file_ex) + + Log.e("check_data_front", value.toString()+"\n"+front) // documentUpload.DocumentType = } } + private fun encodedFileToBase64(fileName: File?) { + front = try { + val bytes: ByteArray? = fileName?.let { loadFile(it) } + Base64.encodeToString(bytes, Base64.DEFAULT).trim { it <= ' ' } + .replace("\n".toRegex(), "").replace("\\s+".toRegex(), "") + } catch (e: Exception) { + e.printStackTrace() + "" + } + } + + @Throws(IOException::class) + private fun loadFile(file: File): ByteArray? { + val inputStream: InputStream = FileInputStream(file) + val length = file.length() + val bytes = ByteArray(length.toInt()) + var offset = 0 + var numRead = 0 + while (offset < bytes.size && inputStream.read(bytes, offset, bytes.size - offset).also { + numRead = it + } >= 0) { + offset += numRead + } + if (offset < bytes.size) { + throw IOException("Could not completely read file " + file.name) + } + inputStream.close() + return bytes + } + + private fun uploadDocApi(){ + if(Common.isNetworkAvailable((activity as BajajFdMainActivity))){ + val du = DocumentUpload() + du.Description = "PAN" + du.DocumentType = "PAN" + du.FDProvider = "Bajaj" + du.ImageEncodeToBase64 = front //"data:image/png;base64" + du.NiveshClientCode = "8872" + du.UniqueId = "5463772498" + stepThreeBajajFDViewModel.documentsUpload(du,Constants.token) + stepThreeBajajFDViewModel.getDocumentUploadMutableData.observe(viewLifecycleOwner){ response -> + when (response){ + is Resource.Success ->{ + Log.e("response", "-->$response") + val getUploadResponse: UploadResponse = + Gson().fromJson(response.data?.toString(),UploadResponse::class.java) + getUploadResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + Log.e("check_upload_res",response.message.toString()) + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + + } + } + private fun docTypeApi() { if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { val getCodeRequest = GetCodeRequest() @@ -286,7 +395,7 @@ class StepThreeBajajFDFragment : Fragment() { private fun validate(): Boolean { - return false + return true } private fun takeImage() { diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt index ce8d2a9..432b4de 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt @@ -68,6 +68,7 @@ class StepTwoBajajFDFragment : Fragment() { private lateinit var stepTwoBajajFDViewModel: StepTwoBajajFDViewModel private lateinit var bankListAdapter: BankListAdapter private lateinit var stateObject: DataObject + private var retryCount: Int = 0 companion object { fun getInstance(fdInterface: BajajFDInterface): StepTwoBajajFDFragment { @@ -969,6 +970,7 @@ class StepTwoBajajFDFragment : Fragment() { getCodeResponse.Response.StatusCode.let { code -> when (code) { 200 -> { + retryCount = 0 listOfTitle = getCodeResponse.Response.GetCodesList if (listOfTitle.isNotEmpty()) { val adapter = ArrayAdapter( @@ -1022,8 +1024,9 @@ class StepTwoBajajFDFragment : Fragment() { stateListApi() } - // 650 -> refreshToken() - else -> {} + 650 -> refreshToken() + else -> { + } } } } @@ -1042,6 +1045,14 @@ class StepTwoBajajFDFragment : Fragment() { } } + private fun refreshToken() { +// retryCount++ +// if(retryCount<=2){ +// titleApi() +// } + + } + private fun genderApi() { if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { val getCodeRequest = GetCodeRequest() @@ -1059,6 +1070,7 @@ class StepTwoBajajFDFragment : Fragment() { getCodeResponse.Response.StatusCode.let { code -> when (code) { 200 -> { + retryCount = 0 listOfGender = getCodeResponse.Response.GetCodesList if (listOfGender.isNotEmpty()) { val adapter = ArrayAdapter( @@ -1074,7 +1086,12 @@ class StepTwoBajajFDFragment : Fragment() { } } // 650 -> refreshToken() - else -> {} + else -> { + retryCount++ + if(retryCount<=2){ + genderApi() + } + } } } } diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepThreeBajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepThreeBajajFDViewModel.kt index ed0803b..ff04ab3 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepThreeBajajFDViewModel.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepThreeBajajFDViewModel.kt @@ -2,22 +2,16 @@ package com.nivesh.production.bajajfd.viewModel import androidx.lifecycle.* import com.google.gson.JsonObject +import com.nivesh.production.bajajfd.model.DocumentUpload import com.nivesh.production.bajajfd.model.GetCodeRequest import com.nivesh.production.bajajfd.model.GetRatesRequest import com.nivesh.production.bajajfd.repositories.MainRepository import com.nivesh.production.bajajfd.util.Resource import kotlinx.coroutines.launch +import retrofit2.Response class StepThreeBajajFDViewModel(private val mainRepository: MainRepository) : ViewModel() { - private val getRatesMutableData: MutableLiveData> = MutableLiveData() - - fun documentsUpload(getRatesRequest: GetRatesRequest, token: String) = viewModelScope.launch { - getRatesMutableData.postValue(Resource.Loading()) - val response = mainRepository.documentsUploadResponse(getRatesRequest, token) - getRatesMutableData.postValue(handleRatesResponse(response)) - } - private fun handleRatesResponse(response: retrofit2.Response): Resource { if (response.isSuccessful) { response.body()?.let { resultResponse -> @@ -25,7 +19,15 @@ class StepThreeBajajFDViewModel(private val mainRepository: MainRepository) : Vi } } return Resource.Error(response.message()) + } + private fun handleUploadResponse(response: retrofit2.Response): Resource { + if(response.isSuccessful){ + response.body()?.let { resultResponse -> + return Resource.Success(resultResponse) + } + } + return Resource.Error(response.message()) } val getTitleMutableData: MutableLiveData> = MutableLiveData() @@ -35,5 +37,12 @@ class StepThreeBajajFDViewModel(private val mainRepository: MainRepository) : Vi getTitleMutableData.postValue(handleRatesResponse(response)) } + val getDocumentUploadMutableData: MutableLiveData> = MutableLiveData() + fun documentsUpload(documentUpload: DocumentUpload, token: String) = viewModelScope.launch { + getDocumentUploadMutableData.postValue(Resource.Loading()) + val response = mainRepository.documentsUploadResponse(documentUpload, token) + getDocumentUploadMutableData.postValue(handleUploadResponse(response)) + } + } \ No newline at end of file