From 63fd4b6da87921e9586a82528d02676402e221cd Mon Sep 17 00:00:00 2001 From: Hemant Khadase Date: Tue, 3 Jan 2023 19:33:31 +0530 Subject: [PATCH] added manoj's code --- .../production/bajajfd/BajajApplication.kt | 8 +- .../production/bajajfd/api/ApiClient.kt | 31 +++- .../bajajfd/interfaces/ApiInterface.kt | 2 +- .../bajajfd/model/DocumentUpload.kt | 12 +- .../bajajfd/model/ResponseXXXXXXXXXXXX.kt | 2 +- .../bajajfd/model/UploadResponse.kt | 5 + .../bajajfd/repositories/MainRepository.kt | 4 +- .../ui/activity/BajajFdMainActivity.kt | 77 +++++----- .../ui/fragment/StepThreeBajajFDFragment.kt | 132 +++++++++++++++++- .../nivesh/production/bajajfd/util/Common.kt | 8 +- .../bajajfd/viewModel/BajajFDViewModel.kt | 2 + .../viewModel/StepThreeBajajFDViewModel.kt | 15 +- 12 files changed, 231 insertions(+), 67 deletions(-) create mode 100644 app/src/main/java/com/nivesh/production/bajajfd/model/UploadResponse.kt diff --git a/app/src/main/java/com/nivesh/production/bajajfd/BajajApplication.kt b/app/src/main/java/com/nivesh/production/bajajfd/BajajApplication.kt index 22e3de5..50f4560 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/BajajApplication.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/BajajApplication.kt @@ -1,14 +1,18 @@ package com.nivesh.production.bajajfd import android.app.Application +import android.content.Context class BajajApplication : Application() { private var mInstance: BajajApplication? = null // private val mRequestQueue: RequestQueue? = null - + companion object { + var appContext: Context? = null + } override fun onCreate() { super.onCreate() - mInstance = this; + mInstance = this + appContext = applicationContext } @Synchronized diff --git a/app/src/main/java/com/nivesh/production/bajajfd/api/ApiClient.kt b/app/src/main/java/com/nivesh/production/bajajfd/api/ApiClient.kt index aaa5a11..14f4d89 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/api/ApiClient.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/api/ApiClient.kt @@ -1,13 +1,21 @@ package com.nivesh.production.bajajfd.api +import android.content.Context +import android.net.ConnectivityManager +import com.nivesh.production.bajajfd.BajajApplication +import com.nivesh.production.bajajfd.api.ApiClient.Companion.isNetworkAvailablee import com.nivesh.production.bajajfd.interfaces.ApiInterface import com.nivesh.production.bajajfd.util.Constants.Companion.BASE_URL +import okhttp3.Interceptor import okhttp3.OkHttpClient +import okhttp3.Response import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory +import java.io.IOException class ApiClient { + val context = BajajApplication.appContext companion object { private val client by lazy { //lazy means we only initialize this here once @@ -17,7 +25,7 @@ class ApiClient { //see the body of response //create client for retrofit val client = OkHttpClient.Builder() - .addInterceptor(logging) + .addInterceptor(ConnectVerifierInterceptor()) .retryOnConnectionFailure(true) .build() Retrofit.Builder() @@ -29,5 +37,24 @@ class ApiClient { val getApiClient: ApiInterface by lazy { client.create(ApiInterface::class.java) } + fun isNetworkAvailablee(): Boolean { + val connectivityManager = + BajajApplication.appContext?.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager + return connectivityManager?.activeNetworkInfo?.isConnected == true + } } -} \ No newline at end of file + +} + + + +class ConnectVerifierInterceptor : Interceptor { + override fun intercept(chain: Interceptor.Chain): okhttp3.Response { +// if (!isNetworkAvailablee()) { +// throw IOException("No Network Available!") +// } + val request = chain.request() + return chain.proceed(request) + } +} + diff --git a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt index f8a0f7c..dc65119 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt @@ -28,7 +28,7 @@ interface ApiInterface { @POST("WebApi_Bajaj/api/DocumentsUpload") suspend fun documentsUpload( - @Body requestBody: RequestBody, + @Body requestBody: DocumentUpload, @Header("token") token: String ): Response 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 index 4bacf38..95ae9ba 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXXXXXXXXXXXX.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXXXXXXXXXXXX.kt @@ -1,7 +1,7 @@ package com.nivesh.production.bajajfd.model data class ResponseXXXXXXXXXXXX( - val Errors: Any, + val Errors: List, val FDDataResponse: FDDataResponse, val Message: String, val Status: String, 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 35b059f..8550104 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(getRatesRequest: DocumentUpload, token: String) = + apiInterface.documentsUpload(getRatesRequest, 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 08dcfb6..9bb0340 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 @@ -108,42 +108,47 @@ class BajajFdMainActivity : BaseActivity(), BajajFDInterface { } private fun getStepsCountApi() { - val fdStepsCount = FDStepsCountRequest() - fdStepsCount.FDProvider = getString(com.nivesh.production.bajajfd.R.string.bajaj) - fdStepsCount.NiveshClientCode = "8872" - viewModel.getStepsCount(fdStepsCount, token) - viewModel.getStepsCountMutableData.observe(this) { response -> - when (response) { - is Resource.Success -> { - Log.e("response", "-->$response") - val stepsCountResponse: StepsCountResponse = - Gson().fromJson(response.data?.toString(), StepsCountResponse::class.java) - stepsCountResponse.Response.StatusCode.let { code -> - when (code) { - 200 -> { - stepCount = stepsCountResponse.Response.StepsCount - getClientDetailsApi(stepsCountResponse.Response.StepsCount) - } - 650 -> refreshToken(fdStepsCount) - else -> { - showDialogValidation( - this@BajajFdMainActivity, - stepsCountResponse.Response.Errors[0].ErrorMessage - ) - } - } - } - } - is Resource.Error -> { - response.message?.let { message -> - showDialogValidation(this@BajajFdMainActivity, message) - } - } - is Resource.Loading -> { - - } - } - } + if (Common.isNetworkAvailable(this)) { + val fdStepsCount = FDStepsCountRequest() + fdStepsCount.FDProvider = getString(com.nivesh.production.bajajfd.R.string.bajaj) + fdStepsCount.NiveshClientCode = "8872" + viewModel.getStepsCount(fdStepsCount, token) + viewModel.getStepsCountMutableData.observe(this) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val stepsCountResponse: StepsCountResponse = + Gson().fromJson( + response.data?.toString(), + StepsCountResponse::class.java + ) + stepsCountResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + stepCount = stepsCountResponse.Response.StepsCount + getClientDetailsApi(stepsCountResponse.Response.StepsCount) + } + 650 -> refreshToken(fdStepsCount) + else -> { + showDialogValidation( + this@BajajFdMainActivity, + stepsCountResponse.Response.Errors[0].ErrorMessage + ) + } + } + } + } + is Resource.Error -> { + response.message?.let { message -> + showDialogValidation(this@BajajFdMainActivity, message) + } + } + is Resource.Loading -> { + + } + } + } + } } private fun refreshToken(fdStepsCount: FDStepsCountRequest) { 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 afb0a16..b368669 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,13 +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 @@ -16,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 @@ -35,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 : BaseFragment() { @@ -47,6 +56,7 @@ class StepThreeBajajFDFragment : BaseFragment() { private lateinit var stepThreeBajajFDViewModel: StepThreeBajajFDViewModel private var uniqueId: String? = "" private lateinit var dialog: Dialog + private var front: String = "" companion object { fun getInstance(fdInterface: BajajFDInterface): StepThreeBajajFDFragment { @@ -71,7 +81,7 @@ class StepThreeBajajFDFragment : BaseFragment() { if (isSuccess) { latestTmpUri?.let { uri -> // binding.iv.setImageURI(uri) - uploadDocument() + uploadDocument(uri) } } } @@ -97,10 +107,11 @@ class StepThreeBajajFDFragment : BaseFragment() { stepThreeBajajFDViewModel = (activity as BajajFdMainActivity).stepThreeBajajFDViewModel binding.btnNext.setOnClickListener { - // if (validate()) { + if (validate()) { + uploadDocApi() // - bajajFDInterface.stepThreeApi((activity as BajajFdMainActivity).createFDRequest) - // } + // bajajFDInterface.stepThreeApi((activity as BajajFdMainActivity).createFDRequest) + } } binding.btnBack.setOnClickListener { (activity as BajajFdMainActivity).binding.viewPager.currentItem = 1 @@ -127,6 +138,30 @@ class StepThreeBajajFDFragment : BaseFragment() { 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) @@ -222,9 +257,93 @@ class StepThreeBajajFDFragment : BaseFragment() { binding.btnAadhaarFrontUpload.visibility = View.VISIBLE } - private fun uploadDocument() { + private fun uploadDocument(uri: Uri) { if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { val documentUpload = DocumentUpload() + val value: Editable? = binding.spDocType.text + 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 = getString(R.string.bajaj) + du.ImageEncodeToBase64 = front //"data:image/png;base64" + du.NiveshClientCode = (activity as BajajFdMainActivity).getClientDetailsResponse.ObjectResponse?.clientDetails?.clientMasterMFD?.CLIENT_CODE + du.UniqueId = uniqueId + 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 -> { + Common.showDialogValidation( + activity as BajajFdMainActivity, + getUploadResponse.Response.Message + ) + } + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Common.showDialogValidation(activity as BajajFdMainActivity, message) + } + } + is Resource.Loading -> { + + } + } + } + } } @@ -286,7 +405,7 @@ class StepThreeBajajFDFragment : BaseFragment() { private fun validate(): Boolean { - return false + return true } private fun takeImage() { @@ -313,7 +432,6 @@ class StepThreeBajajFDFragment : BaseFragment() { } - override fun onDestroyView() { super.onDestroyView() _binding = null diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt index 791ce18..8f27b88 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt @@ -9,6 +9,7 @@ import android.net.ConnectivityManager import android.net.NetworkCapabilities import android.os.Build import android.provider.ContactsContract +import android.util.Log import android.util.Patterns import com.google.android.material.textfield.MaterialAutoCompleteTextView import com.google.android.material.textfield.TextInputEditText @@ -16,8 +17,11 @@ import com.google.android.material.textfield.TextInputLayout import com.google.gson.JsonObject import com.nivesh.production.bajajfd.R import com.nivesh.production.bajajfd.ui.activity.BaseActivity +import okhttp3.Interceptor.* import retrofit2.HttpException +import retrofit2.Response import java.io.IOException +import java.net.SocketTimeoutException import java.text.SimpleDateFormat import java.util.* import java.util.regex.Matcher @@ -195,13 +199,11 @@ class Common { return when (t) { is IOException -> Resource.Error("Response : " + t.message.plus(" Cause: " + t.cause)) is HttpException -> Resource.Error("Response : " + t.message.plus(" Cause: " + t.cause)) + is SocketTimeoutException -> Resource.Error("Response : " + t.message.plus(" Cause: " + t.cause)) else -> Resource.Error(t.localizedMessage?.toString() ?: "") } } return Resource.Error(response.message()) } - } - - } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt index e26e127..1b703fb 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt @@ -1,5 +1,6 @@ package com.nivesh.production.bajajfd.viewModel +import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -18,6 +19,7 @@ class BajajFDViewModel(private val mainRepository: MainRepository) : ViewModel() fun getStepsCount(requestBody: FDStepsCountRequest, token: String) = viewModelScope.launch { getStepsCountMutableData.postValue(Resource.Loading()) val response = mainRepository.getStepsCountResponse(requestBody, token) + Log.e("response", "-->"+response) getStepsCountMutableData.postValue(handleRatesResponse(response)) } 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 1162885..65b7ecf 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 @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope 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 @@ -13,13 +14,6 @@ import kotlinx.coroutines.launch 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)) - } - val getTitleMutableData: MutableLiveData> = MutableLiveData() fun titleApi(getCodeRequest: GetCodeRequest, token: String) = viewModelScope.launch { getTitleMutableData.postValue(Resource.Loading()) @@ -27,5 +21,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(handleRatesResponse(response)) + } + } \ No newline at end of file