diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c41654c..9f65de3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,7 +4,7 @@ - + diff --git a/app/src/main/java/com/nivesh/production/niveshfd/fd/ui/fragment/StepThreeNiveshFDFragment.kt b/app/src/main/java/com/nivesh/production/niveshfd/fd/ui/fragment/StepThreeNiveshFDFragment.kt index a4e4a8d..978252b 100644 --- a/app/src/main/java/com/nivesh/production/niveshfd/fd/ui/fragment/StepThreeNiveshFDFragment.kt +++ b/app/src/main/java/com/nivesh/production/niveshfd/fd/ui/fragment/StepThreeNiveshFDFragment.kt @@ -44,7 +44,7 @@ import java.util.* class StepThreeNiveshFDFragment : Fragment() { - +// private var _binding: FragmentNiveshfdStepThreeBinding? = null private var _binding: FragmentNiveshfdStepThreeBinding? = null private val binding get() = _binding!! @@ -692,7 +692,7 @@ class StepThreeNiveshFDFragment : Fragment() { private fun getTmpFileUri(): Uri { val tmpFile = - File.createTempFile("tmp_image_file", ".png", requireActivity().cacheDir).apply { + File.createTempFile("tmp_image_file", ".png", (activity as NiveshFdMainActivity).cacheDir).apply { createNewFile() deleteOnExit() } diff --git a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/adapters1/NewDistributorSignStepOneAdapter.kt b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/adapters1/NewDistributorSignStepOneAdapter.kt new file mode 100644 index 0000000..d91afc8 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/adapters1/NewDistributorSignStepOneAdapter.kt @@ -0,0 +1,82 @@ +package com.nivesh.production.niveshfd.partnerOnBoarding.adapters1 + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.CheckBox +import android.widget.RelativeLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.nivesh.production.niveshfd.R + +class NewDistributorSignStepOneAdapter(private var listData: MutableList) : + RecyclerView.Adapter() { + private var context: Context? = null + private var isPosBroker: Boolean? = false + private var isPosInsurer: Boolean? = false + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + context = parent.context + return ViewHolder( + LayoutInflater.from(parent.context) + .inflate(R.layout.new_distributor_sign_step_one_adapter, parent, false) + ) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.checkBox.text = listData[position] + holder.checkBox.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + if (listData[position] == "Insurance") holder.rlInsurance.visibility = View.VISIBLE + else holder.rlInsurance.visibility = View.GONE + } else { + holder.rlInsurance.visibility = View.GONE + } + } + + holder.tvPosInsurer.setOnClickListener { +// isPosInsurer?.let { it1 -> setSelected(holder.tvPosInsurer, it1, 0) } + } + + holder.tvPOSBroker.setOnClickListener { +// isPosBroker?.let { it1 -> setSelected(holder.tvPOSBroker, it1, 1) } + setSelected(holder.tvPOSBroker,isPosBroker,1) + } + } + + private fun setSelected(textView: TextView, check: Boolean?, pos: Int) { + if (check == true) { + textView.setCompoundDrawablesWithIntrinsicBounds( + 0, + 0, + 0, + 0 + ) + textView.compoundDrawablePadding = 0 + if(pos==0) isPosBroker = false + else isPosInsurer = false + } else { + textView.setCompoundDrawablesWithIntrinsicBounds( + 0, + 0, + R.drawable.svg_tik, + 0 + ) + textView.compoundDrawablePadding = 20 + if(pos==0) isPosBroker = true + else isPosInsurer = true + } + } + + override fun getItemCount(): Int { + return listData.size + } + + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val checkBox: CheckBox = itemView.findViewById(R.id.checkBox) + val rlInsurance: RelativeLayout = itemView.findViewById(R.id.rlInsurance) + val tvPosInsurer: TextView = itemView.findViewById(R.id.tvPosInsurer) + val tvPOSBroker: TextView = itemView.findViewById(R.id.tvPOSBroker) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/GetStartedFragment.kt b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/GetStartedFragment.kt index f026d91..b6113b6 100644 --- a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/GetStartedFragment.kt +++ b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/GetStartedFragment.kt @@ -1,5 +1,11 @@ package com.nivesh.production.niveshfd.partnerOnBoarding.ui.fragments1 +import android.Manifest +import android.app.Activity +import android.content.DialogInterface +import android.content.pm.PackageManager +import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.net.Uri import android.os.Bundle import android.view.LayoutInflater @@ -10,6 +16,9 @@ import android.widget.ArrayAdapter import android.widget.Switch import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AlertDialog +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.lifecycle.lifecycleScope import com.google.android.material.button.MaterialButton @@ -20,6 +29,8 @@ import com.nivesh.production.niveshfd.fd.ui.activity.BaseActivity import com.nivesh.production.niveshfd.fd.util.Common.Companion.showDialogWithTwoButtons import com.nivesh.production.niveshfd.partnerOnBoarding.ui.activities1.SignUpActivity import java.io.File +import java.io.FileDescriptor +import java.io.IOException private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" @@ -32,12 +43,19 @@ class GetStartedFragment : BaseFragment() { private val binding get() = _binding!! private var latestTmpUri: Uri? = null private var takeImageResult: ActivityResultLauncher? = null + private var selectImageIntent: ActivityResultLauncher? = null + private var bitmap: Bitmap? = null private val mainPANUpload: Int = 1 private val mainPhotoUpload: Int = 2 private val firstDocUpload: Int = 3 private val secondDocUpload: Int = 4 + private var actionType: Int = -1 private val listArray = ArrayList() + private val permissions = arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) private val requestCameraPermission = registerForActivityResult( ActivityResultContracts.RequestPermission() @@ -53,6 +71,22 @@ class GetStartedFragment : BaseFragment() { } } + private val requestGalleryPermission = registerForActivityResult( + ActivityResultContracts.RequestMultiplePermissions() + ) { permission -> + if (!permission.containsValue(false)) { + selectImageIntent?.launch("image/*") + } else { + showDialogWithTwoButtons( + (activity as SignUpActivity), + getString(R.string.galleryPermission), + getString( + R.string.permissionsRequired + ) + ) + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { @@ -70,6 +104,37 @@ class GetStartedFragment : BaseFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) init() + + selectImageIntent = registerForActivityResult(ActivityResultContracts.GetContent()) + { uri: Uri? -> + if (uri != null) { + bitmap = uriToBitmap(uri) +// uploadDocument(uri, "g") + } + } + + takeImageResult = + registerForActivityResult(ActivityResultContracts.TakePicture()) { isSuccess -> + if (isSuccess) { + latestTmpUri?.let { uri -> +// uploadDocument(uri, "c") + } + } + } + } + + 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 } private fun init() { @@ -84,8 +149,7 @@ class GetStartedFragment : BaseFragment() { ) } - listArray.add("Aadhaar Front") - listArray.add("Aadhaar Back") + listArray.add("Aadhaar") listArray.add("Passport") listArray.add("Driving Licenses") listArray.add("Voter Id") @@ -94,29 +158,109 @@ class GetStartedFragment : BaseFragment() { binding.spDocType.setAdapter(arrayAdapter) binding.spDocType.setOnItemClickListener{ _, _, position, _ -> - setVisibility(listArray[position]) +// setVisibility(listArray[position]) } - binding.uploadFront binding.uploadFront.setOnClickListener { + actionType = mainPANUpload + selectImage() + } + } + private fun selectImage() { + val builder = AlertDialog.Builder( + activity as SignUpActivity + ) + builder.setTitle(getString(R.string.addPhoto)) + builder.setItems( + arrayOf( + getString(R.string.takePhoto), + getString(R.string.chooseFromGallery), + getString(R.string.cancel) + ) + ) { dialog: DialogInterface, pos -> + when (pos) { + 0 -> { + if (hasPermissions( + activity as SignUpActivity, + Manifest.permission.CAMERA + ) + ) { + takeImage() + } else { + onClickRequestPermission() + } + dialog.dismiss() + } + 1 -> { + if (hasPermissions(activity as SignUpActivity, *permissions)) { + selectImageIntent?.launch("image/*") + } else { + requestGalleryPermission.launch(permissions) + } + dialog.dismiss() + } + else -> { + dialog.dismiss() + } + } + } + builder.show() + } + + private fun onClickRequestPermission() { + when { + ContextCompat.checkSelfPermission( + activity as SignUpActivity, + Manifest.permission.CAMERA + ) == PackageManager.PERMISSION_GRANTED -> { + + } + + ActivityCompat.shouldShowRequestPermissionRationale( + activity as SignUpActivity, + Manifest.permission.CAMERA + ) -> { + requestCameraPermission.launch( + Manifest.permission.CAMERA + ) + } + + else -> { + requestCameraPermission.launch( + Manifest.permission.CAMERA + ) + } } } - private fun setVisibility(s: String) { - if(s.contains("Aadhaar")){ - binding.txtFront.visibility = View.VISIBLE - binding.uploadFront.visibility = View.VISIBLE - binding.txtBack.visibility = View.VISIBLE - binding.uploadViewBack.visibility = View.VISIBLE - }else{ - binding.txtFront.visibility = View.VISIBLE - binding.uploadFront.visibility = View.VISIBLE - binding.txtBack.visibility = View.GONE - binding.uploadViewBack.visibility = View.GONE + private fun hasPermissions(activity: Activity, vararg permissions: String?): Boolean { + for (permission in permissions) { + if (ActivityCompat.checkSelfPermission( + activity, + permission!! + ) != PackageManager.PERMISSION_GRANTED + ) { + return false + } } + return true } +// private fun setVisibility(s: String) { +// if(s.contains("Aadhaar")){ +// binding.txtFront.visibility = View.VISIBLE +// binding.uploadFront.visibility = View.VISIBLE +// binding.txtBack.visibility = View.VISIBLE +// binding.uploadViewBack.visibility = View.VISIBLE +// }else{ +// binding.txtFront.visibility = View.VISIBLE +// binding.uploadFront.visibility = View.VISIBLE +// binding.txtBack.visibility = View.GONE +// binding.uploadViewBack.visibility = View.GONE +// } +// } + private fun takeImage() { lifecycleScope.launchWhenStarted { getTmpFileUri().let { uri -> @@ -126,6 +270,67 @@ class GetStartedFragment : BaseFragment() { } } +// private fun uploadDocument(uri: Uri, type: String) { +// when (actionType) { +// mainPANUpload -> { +// binding.ivPan.visibility = View.VISIBLE +// val fileDir: File = requireActivity().cacheDir +// val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) +// 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 = "" +// } +// } +// mainPhotoUpload -> { +// binding.ivPhotograph.visibility = View.VISIBLE +// val fileDir: File = requireActivity().cacheDir +// val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) +// 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 = "" +// } +// } +// firstDocUpload -> { +// binding.ivAadharFront.visibility = View.VISIBLE +// val fileDir: File = requireActivity().cacheDir +// val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) +// 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 = 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 getTmpFileUri(): Uri { val tmpFile = File.createTempFile("tmp_image_file", ".png", requireActivity().cacheDir).apply { diff --git a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/NewDistributorSignStepOne.kt b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/NewDistributorSignStepOne.kt new file mode 100644 index 0000000..93f27f6 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/NewDistributorSignStepOne.kt @@ -0,0 +1,41 @@ +package com.nivesh.production.niveshfd.partnerOnBoarding.ui.fragments1 + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager +import com.nivesh.production.niveshfd.databinding.NewDistributorSignStepOneBinding +import com.nivesh.production.niveshfd.partnerOnBoarding.adapters1.NewDistributorSignStepOneAdapter +import com.nivesh.production.niveshfd.partnerOnBoarding.ui.activities1.SignUpActivity + +class NewDistributorSignStepOne : BaseFragment(){ + + private var _binding: NewDistributorSignStepOneBinding? = null + private val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + _binding = NewDistributorSignStepOneBinding.inflate(inflater,container,false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + init() + } + + private fun init() { + val listMapData: Map + val listData = mutableListOf("Mutual Fund","Insurance","Bond","Capital Gain Bond (CGB)", + "Non-Convertible Debentures(NCDs)","Fixed Deposit (FD)","National Pension System (NPS)", + "Secondary Bond","Other") + + binding.rvList.layoutManager = LinearLayoutManager(activity as SignUpActivity) + val adapter = NewDistributorSignStepOneAdapter(listData) + binding.rvList.adapter = adapter + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/OTPFragment.kt b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/OTPFragment.kt index 6b82277..ad21771 100644 --- a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/OTPFragment.kt +++ b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/OTPFragment.kt @@ -14,6 +14,7 @@ import com.nivesh.production.niveshfd.R import com.nivesh.production.niveshfd.databinding.FragmentOtpBinding import com.nivesh.production.niveshfd.fd.ui.activity.BaseActivity import com.nivesh.production.niveshfd.fd.util.Common +import com.nivesh.production.niveshfd.partnerOnBoarding.adapters1.NewDistributorSignStepOneAdapter class OTPFragment : BaseFragment() { private var _binding: FragmentOtpBinding? = null @@ -66,7 +67,8 @@ class OTPFragment : BaseFragment() { replaceFragment( activity as BaseActivity, R.id.signUpContainer, - GetStartedFragment(), +// GetStartedFragment(), + NewDistributorSignStepOne(), "GET STARTED", true ) diff --git a/app/src/main/res/drawable/dot_rect.png b/app/src/main/res/drawable/dot_rect.png new file mode 100644 index 0000000..857d390 Binary files /dev/null and b/app/src/main/res/drawable/dot_rect.png differ diff --git a/app/src/main/res/drawable/round_corner_grey_button.xml b/app/src/main/res/drawable/round_corner_grey_button.xml new file mode 100644 index 0000000..5ffb80a --- /dev/null +++ b/app/src/main/res/drawable/round_corner_grey_button.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/round_corner_with_red_bg.xml b/app/src/main/res/drawable/round_corner_with_red_bg.xml new file mode 100644 index 0000000..641fd21 --- /dev/null +++ b/app/src/main/res/drawable/round_corner_with_red_bg.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/svg_rect_dot.xml b/app/src/main/res/drawable/svg_rect_dot.xml new file mode 100644 index 0000000..796b04e --- /dev/null +++ b/app/src/main/res/drawable/svg_rect_dot.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/svg_tik.xml b/app/src/main/res/drawable/svg_tik.xml new file mode 100644 index 0000000..d1cbab6 --- /dev/null +++ b/app/src/main/res/drawable/svg_tik.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 9a8a94f..afedaab 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -127,7 +127,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/txtForgotPassword" /> - - - + app:layout_constraintTop_toBottomOf="@+id/tlFullNamePanCard" /> - + app:layout_constraintTop_toBottomOf="@+id/tlFullNamePanCard" /> - - - - - - - + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_marginTop="@dimen/margin_10" + android:padding="@dimen/margin_4" + android:text="@string/front" + android:textColor="@color/black" + android:textSize="@dimen/text_size_14" + android:textStyle="bold" + app:layout_constraintBottom_toTopOf="@+id/uploadViewFront" + app:layout_constraintEnd_toStartOf="@+id/txtBack" + app:layout_constraintHorizontal_bias="0.129" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + + - + + - - - + + - - + + + app:layout_constraintTop_toTopOf="parent" /> - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - ` - diff --git a/app/src/main/res/layout/new_distributor_sign_step_one.xml b/app/src/main/res/layout/new_distributor_sign_step_one.xml new file mode 100644 index 0000000..96d26e9 --- /dev/null +++ b/app/src/main/res/layout/new_distributor_sign_step_one.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/new_distributor_sign_step_one_adapter.xml b/app/src/main/res/layout/new_distributor_sign_step_one_adapter.xml new file mode 100644 index 0000000..78e1a2b --- /dev/null +++ b/app/src/main/res/layout/new_distributor_sign_step_one_adapter.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 83c26e6..7f46b75 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -313,5 +313,12 @@ enter Mobile or Email enter Password Login With Google + Front + Upload + Choose the business you are interested in + Please choose the business type + Have a POS anywhere? + POS with an insurer + POS with Broker / Corporate Agent \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 53d724a..1df961e 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -26,6 +26,7 @@ 18sp 19sp 20sp + 24sp 30sp 0.5dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0aaffde..0dd582b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -317,6 +317,13 @@ Let’s get started SAVE DRAFT Format (.png or .jpg) + Front + Upload + Choose the business you are interested in + Please choose the business type + Have a POS anywhere? + POS with an insurer + POS with Broker / Corporate Agent Aadhar Front diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml index f4062d8..53402e2 100644 --- a/app/src/main/res/values/style.xml +++ b/app/src/main/res/values/style.xml @@ -156,4 +156,15 @@ @dimen/margin_8 @color/white + + + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 81ef46a..0a2f37e 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -43,11 +43,13 @@ @color/white - - - - - +