diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 23b943e..40b9ab7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/BajajFDInterface.kt b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/BajajFDInterface.kt index 276b718..92c09ba 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/BajajFDInterface.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/BajajFDInterface.kt @@ -1,7 +1,5 @@ package com.nivesh.production.bajajfd.interfaces -import com.nivesh.production.bajajfd.model.CreateFDRequest - interface BajajFDInterface { fun stepOneApi(data: String?) fun stepTwoApi(data: String?) 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 new file mode 100644 index 0000000..fd4ee1d --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/DocumentUpload.kt @@ -0,0 +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 +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/GetCodes.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/GetCodes.kt index 55a39c7..11e1470 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/model/GetCodes.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/GetCodes.kt @@ -5,6 +5,6 @@ data class GetCodes( val Value: String ) { override fun toString(): String { - return Value + return Label } } \ No newline at end of file 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 1c019b8..e6b9256 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,23 +1,61 @@ package com.nivesh.production.bajajfd.ui.fragment +import android.Manifest +import android.app.ActionBar.LayoutParams +import android.app.Dialog +import android.content.pm.PackageManager +import android.graphics.Bitmap +import android.net.Uri import android.os.Bundle +import android.os.Environment +import android.provider.MediaStore +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import android.widget.ImageView +import android.widget.TextView +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import androidx.core.content.FileProvider import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider -import com.nivesh.production.bajajfd.interfaces.BajajFDInterface +import androidx.lifecycle.lifecycleScope +import com.google.gson.Gson +import com.nivesh.production.bajajfd.BuildConfig +import com.nivesh.production.bajajfd.R import com.nivesh.production.bajajfd.databinding.FragmentBajajfdStepThreeBinding +import com.nivesh.production.bajajfd.interfaces.BajajFDInterface +import com.nivesh.production.bajajfd.model.DocumentUpload +import com.nivesh.production.bajajfd.model.GetCodeRequest +import com.nivesh.production.bajajfd.model.GetCodeResponse +import com.nivesh.production.bajajfd.model.GetCodes import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity +import com.nivesh.production.bajajfd.util.Common +import com.nivesh.production.bajajfd.util.Constants +import com.nivesh.production.bajajfd.util.Resource import com.nivesh.production.bajajfd.viewModel.StepThreeBajajFDViewModel +import retrofit2.http.Tag +import java.io.File +import java.security.AccessController.checkPermission +import java.text.SimpleDateFormat +import java.util.* class StepThreeBajajFDFragment : Fragment() { - private lateinit var stepThreeBajajFDViewModel: StepThreeBajajFDViewModel + private var latestTmpUri: Uri? = null private var _binding: FragmentBajajfdStepThreeBinding? = null private val binding get() = _binding!! + private lateinit var listOfTitle: List private lateinit var bajajFDInterface: BajajFDInterface + private lateinit var stepThreeBajajFDViewModel: StepThreeBajajFDViewModel + + private lateinit var dialog: Dialog + companion object { fun getInstance(fdInterface: BajajFDInterface): StepThreeBajajFDFragment { val stepTwoFragment = StepThreeBajajFDFragment() @@ -25,10 +63,38 @@ class StepThreeBajajFDFragment : Fragment() { return stepTwoFragment } } + private fun setApi(bajajFDInterfaces: BajajFDInterface) { bajajFDInterface = bajajFDInterfaces } + private val selectImageIntent = registerForActivityResult(ActivityResultContracts.GetContent()) + { uri -> + val bitmap: Bitmap = MediaStore.Images.Media.getBitmap(context?.contentResolver, uri) + binding.iv.setImageBitmap(bitmap) + } + + private val takeImageResult = + registerForActivityResult(ActivityResultContracts.TakePicture()) { isSuccess -> + if (isSuccess) { + latestTmpUri?.let { uri -> +// binding.iv.setImageURI(uri) + uploadDocument() + } + } + } + + private val requestPermission = registerForActivityResult( + ActivityResultContracts.RequestPermission() + ) { isGranted: Boolean -> + if (isGranted) { + Log.e("permission:", "Granted") + } else { + Log.e("permission:", "Denied") + } + } + + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -36,24 +102,218 @@ class StepThreeBajajFDFragment : Fragment() { _binding = FragmentBajajfdStepThreeBinding.inflate(inflater, container, false) val root = binding.root + stepThreeBajajFDViewModel = (activity as BajajFdMainActivity).stepThreeBajajFDViewModel - - binding.btnNext.setOnClickListener{ - if (validate()){ + binding.btnNext.setOnClickListener { + if (validate()) { } } - binding.btnBack.setOnClickListener{ + binding.btnBack.setOnClickListener { (activity as BajajFdMainActivity).binding.viewPager.currentItem = 1 } + + binding.btnAadhaarFrontUpload.setOnClickListener { + selectImage() + } + + binding.spTitle.onItemClickListener = + AdapterView.OnItemClickListener { parent, _, position, _ -> + + val getCodes: GetCodes = parent.getItemAtPosition(position) as GetCodes + when (getCodes.Value) { + resources.getString(R.string.aadhar) -> + setAadharUploadLayout() + else -> { + setOtherUploadLayout(getCodes.Value) + } + } + } + + titleApi() return root } - private fun validate(): Boolean { + private fun selectImage() { + dialog = Dialog(activity as BajajFdMainActivity) + dialog.setContentView(R.layout.camera_gallery_layout) + val ivCut: ImageView = dialog.findViewById(R.id.ivCut) + val tvGallery: TextView = dialog.findViewById(R.id.tvGallery) + val tvCamera: TextView = dialog.findViewById(R.id.tvCamera) + + ivCut.setOnClickListener { + dialog.cancel() + } + + tvGallery.setOnClickListener { + dialog.cancel() + when { + ContextCompat.checkSelfPermission( + activity as BajajFdMainActivity, + Manifest.permission.READ_EXTERNAL_STORAGE + ) == PackageManager.PERMISSION_GRANTED -> { + selectImageIntent.launch("image/*") + } + + ActivityCompat.shouldShowRequestPermissionRationale( + activity as BajajFdMainActivity, + Manifest.permission.READ_EXTERNAL_STORAGE + ) -> { + requestPermission.launch( + Manifest.permission.READ_EXTERNAL_STORAGE + ) + } + + else -> { + requestPermission.launch( + Manifest.permission.READ_EXTERNAL_STORAGE + ) + } + } + } + + tvCamera.setOnClickListener { + dialog.cancel() + when { + ContextCompat.checkSelfPermission( + activity as BajajFdMainActivity, + Manifest.permission.CAMERA + ) == PackageManager.PERMISSION_GRANTED -> { + takeImage() + } + + ActivityCompat.shouldShowRequestPermissionRationale( + activity as BajajFdMainActivity, + Manifest.permission.CAMERA + ) -> { + requestPermission.launch( + Manifest.permission.CAMERA + ) + } + else -> { + requestPermission.launch( + Manifest.permission.CAMERA + ) + } + } + } + + dialog.show() + dialog.window?.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) + } + + private fun checkCameraStoragePermission( + permission: String, + selectImageIntent: ActivityResultLauncher + ) { + TODO("Not yet implemented") + } + + private fun setOtherUploadLayout(itemName: String) { + binding.tvAadhaarFront.text = itemName.plus(" Front *") + if (binding.tvAadhaarBack.visibility == View.VISIBLE) binding.tvAadhaarBack.visibility = + View.INVISIBLE + if (binding.btnAadhaarBackUpload.visibility == View.VISIBLE) binding.btnAadhaarBackUpload.visibility = + View.INVISIBLE + } + + private fun setAadharUploadLayout() { + binding.tvAadhaarFront.text = resources.getString(R.string.aadhaarFront) + binding.tvAadhaarBack.text = resources.getString(R.string.aadhaarBack) + + binding.tvAadhaarBack.visibility = View.VISIBLE + binding.btnAadhaarBackUpload.visibility = View.VISIBLE + + binding.tvAadhaarFront.visibility = View.VISIBLE + binding.btnAadhaarFrontUpload.visibility = View.VISIBLE + } + + private fun uploadDocument() { + if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { + val documentUpload = DocumentUpload() + } + } + + private fun titleApi() { + if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.docType) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepThreeBajajFDViewModel.titleApi(getCodeRequest, Constants.token) + stepThreeBajajFDViewModel.getTitleMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfTitle = getCodeResponse.Response.GetCodesList + if (listOfTitle.isNotEmpty()) { + val adapter = ArrayAdapter( + activity as BajajFdMainActivity, + R.layout.spinner_dropdown, + listOfTitle + ) + binding.spTitle.setAdapter(adapter) + binding.spTitle.setText( + adapter.getItem(0)?.Value, + false + ) + setOtherUploadLayout(listOfTitle[0].Value) + } + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + } + } + + + private fun validate(): Boolean { return false } + private fun takeImage() { + lifecycleScope.launchWhenStarted { + getTmpFileUri().let { uri -> + latestTmpUri = uri + takeImageResult.launch(uri) + } + } + } + + private fun getTmpFileUri(): Uri { + val tmpFile = + File.createTempFile("tmp_image_file", ".png", requireActivity().cacheDir).apply { + createNewFile() + deleteOnExit() + } + + return FileProvider.getUriForFile( + requireActivity(), + "${BuildConfig.APPLICATION_ID}.provider", + tmpFile + ) + } + override fun onDestroyView() { super.onDestroyView() _binding = null 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 74522d4..ed0803b 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,6 +2,7 @@ package com.nivesh.production.bajajfd.viewModel import androidx.lifecycle.* import com.google.gson.JsonObject +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 @@ -27,7 +28,12 @@ class StepThreeBajajFDViewModel(private val mainRepository: MainRepository) : Vi } - + val getTitleMutableData: MutableLiveData> = MutableLiveData() + fun titleApi(getCodeRequest: GetCodeRequest, token: String) = viewModelScope.launch { + getTitleMutableData.postValue(Resource.Loading()) + val response = mainRepository.titleCheck(getCodeRequest, token) + getTitleMutableData.postValue(handleRatesResponse(response)) + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/camera.png b/app/src/main/res/drawable/camera.png new file mode 100644 index 0000000..6ea6bca Binary files /dev/null and b/app/src/main/res/drawable/camera.png differ diff --git a/app/src/main/res/drawable/gallery.png b/app/src/main/res/drawable/gallery.png new file mode 100644 index 0000000..d309f3e Binary files /dev/null and b/app/src/main/res/drawable/gallery.png differ diff --git a/app/src/main/res/drawable/svg_camera.xml b/app/src/main/res/drawable/svg_camera.xml new file mode 100644 index 0000000..48a8a01 --- /dev/null +++ b/app/src/main/res/drawable/svg_camera.xml @@ -0,0 +1,6 @@ + + + + diff --git a/app/src/main/res/drawable/svg_close.xml b/app/src/main/res/drawable/svg_close.xml new file mode 100644 index 0000000..844b6b6 --- /dev/null +++ b/app/src/main/res/drawable/svg_close.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/svg_image.xml b/app/src/main/res/drawable/svg_image.xml new file mode 100644 index 0000000..3ffb603 --- /dev/null +++ b/app/src/main/res/drawable/svg_image.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/camera_gallery_layout.xml b/app/src/main/res/layout/camera_gallery_layout.xml new file mode 100644 index 0000000..7946852 --- /dev/null +++ b/app/src/main/res/layout/camera_gallery_layout.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_bajajfd_step_three.xml b/app/src/main/res/layout/fragment_bajajfd_step_three.xml index d95444d..f951c15 100644 --- a/app/src/main/res/layout/fragment_bajajfd_step_three.xml +++ b/app/src/main/res/layout/fragment_bajajfd_step_three.xml @@ -81,6 +81,71 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> + + +