From 9044e7bc108c892817b7de38a440168522ee6dd8 Mon Sep 17 00:00:00 2001 From: Manoj Date: Tue, 28 Mar 2023 11:34:36 +0530 Subject: [PATCH] addded Data --- app/src/main/AndroidManifest.xml | 5 +- .../NewDistributorSignStepOneAdapter.kt | 85 ++-- .../ui/activities1/SignUpActivity.kt | 34 +- .../ui/fragments1/AlmostThereFragment.kt | 6 +- .../ui/fragments1/GetStartedFragment.kt | 396 +++++++++++++----- .../fragments1/NewDistributorSignStepOne.kt | 11 +- .../ui/fragments1/OTPFragment.kt | 13 +- .../ui/fragments1/SignUpFragment.kt | 10 +- .../partnerOnBoarding/util/MaskWatcher.kt | 35 ++ .../round_corner_grey_button_fill.xml | 8 + app/src/main/res/drawable/svg_tik.xml | 4 +- .../main/res/layout/fragment_get_started.xml | 229 +++++----- .../new_distributor_sign_step_one_adapter.xml | 31 +- app/src/main/res/values-hi-rIN/strings.xml | 5 + app/src/main/res/values/colors.xml | 3 + app/src/main/res/values/strings.xml | 5 + app/src/main/res/xml/file_paths.xml | 3 + 17 files changed, 605 insertions(+), 278 deletions(-) create mode 100644 app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/util/MaskWatcher.kt create mode 100644 app/src/main/res/drawable/round_corner_grey_button_fill.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9f65de3..4b2c4f3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,8 +4,6 @@ - - @@ -13,7 +11,7 @@ + android:required="true" /> @@ -29,6 +27,7 @@ android:label="@string/appName" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" + android:requestLegacyExternalStorage="true" android:theme="@style/Theme.NiveshFDSDK" tools:targetApi="31"> 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 index d91afc8..6ad5135 100644 --- 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 @@ -5,16 +5,22 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.CheckBox +import android.widget.LinearLayout +import android.widget.RadioButton +import android.widget.RadioGroup import android.widget.RelativeLayout import android.widget.TextView +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.textfield.TextInputLayout import com.nivesh.production.niveshfd.R +import com.nivesh.production.niveshfd.partnerOnBoarding.ui.fragments1.NewDistributorSignStepOne class NewDistributorSignStepOneAdapter(private var listData: MutableList) : RecyclerView.Adapter() { private var context: Context? = null private var isPosBroker: Boolean? = false - private var isPosInsurer: Boolean? = false + var isPosInsurer: Boolean? = false override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { context = parent.context @@ -30,43 +36,65 @@ class NewDistributorSignStepOneAdapter(private var listData: MutableList if (isChecked) { if (listData[position] == "Insurance") holder.rlInsurance.visibility = View.VISIBLE else holder.rlInsurance.visibility = View.GONE + if (listData[position] == "Other") holder.tlOtherName.visibility = View.VISIBLE + else holder.tlOtherName.visibility = View.GONE + + NewDistributorSignStepOne.listMapData = mutableMapOf(position to listData[position]) } else { - holder.rlInsurance.visibility = View.GONE + if (listData[position] == "Insurance") + holder.rlInsurance.visibility = View.GONE + if (listData[position] == "Other") + holder.tlOtherName.visibility = View.GONE + + NewDistributorSignStepOne.listMapData?.remove(position) } } holder.tvPosInsurer.setOnClickListener { -// isPosInsurer?.let { it1 -> setSelected(holder.tvPosInsurer, it1, 0) } + if (isPosInsurer == true) { + holder.tvPosInsurer.setBackgroundResource(R.drawable.round_corner_grey_button) + holder.tvPosInsurer.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0) + holder.tvPosInsurer.compoundDrawablePadding = 0 + isPosInsurer = false + } else { + holder.tvPosInsurer.setBackgroundResource(R.drawable.round_corner_grey_button_fill) + holder.tvPosInsurer.setCompoundDrawablesWithIntrinsicBounds( + 0, + 0, + R.drawable.svg_tik, + 0 + ) + holder.tvPosInsurer.compoundDrawablePadding = 20 + isPosInsurer = true + } } holder.tvPOSBroker.setOnClickListener { -// isPosBroker?.let { it1 -> setSelected(holder.tvPOSBroker, it1, 1) } - setSelected(holder.tvPOSBroker,isPosBroker,1) + if (isPosBroker == true) { + holder.tvPOSBroker.setBackgroundResource(R.drawable.round_corner_grey_button) + holder.tvPOSBroker.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0) + holder.tvPOSBroker.compoundDrawablePadding = 0 + isPosBroker = false + } else { + holder.tvPOSBroker.setBackgroundResource(R.drawable.round_corner_grey_button_fill) + holder.tvPOSBroker.setCompoundDrawablesWithIntrinsicBounds( + 0, + 0, + R.drawable.svg_tik, + 0 + ) + holder.tvPOSBroker.compoundDrawablePadding = 20 + isPosBroker = true + } } - } - 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 + holder.radioGroup.setOnCheckedChangeListener { group, checkedId -> + var rb: RadioButton = group.findViewById(checkedId) + if(rb.text.equals("Yes")) + holder.llPOS.visibility = View.VISIBLE + else holder.llPOS.visibility = View.GONE } + } override fun getItemCount(): Int { @@ -78,5 +106,8 @@ class NewDistributorSignStepOneAdapter(private var listData: MutableList val rlInsurance: RelativeLayout = itemView.findViewById(R.id.rlInsurance) val tvPosInsurer: TextView = itemView.findViewById(R.id.tvPosInsurer) val tvPOSBroker: TextView = itemView.findViewById(R.id.tvPOSBroker) + val tlOtherName: TextInputLayout = itemView.findViewById(R.id.tlOtherName) + val radioGroup: RadioGroup = itemView.findViewById(R.id.radioGroup) + val llPOS: LinearLayout = itemView.findViewById(R.id.llPOS) } } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/activities1/SignUpActivity.kt b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/activities1/SignUpActivity.kt index 56d2177..1e81bbb 100644 --- a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/activities1/SignUpActivity.kt +++ b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/activities1/SignUpActivity.kt @@ -1,15 +1,13 @@ package com.nivesh.production.niveshfd.partnerOnBoarding.ui.activities1 -import android.os.Build import android.os.Bundle -import android.window.OnBackInvokedDispatcher -import androidx.activity.OnBackPressedCallback +import android.util.Log +import androidx.fragment.app.FragmentManager import com.nivesh.production.niveshfd.R import com.nivesh.production.niveshfd.databinding.ActivitySignupBinding import com.nivesh.production.niveshfd.fd.ui.activity.BaseActivity import com.nivesh.production.niveshfd.partnerOnBoarding.ui.fragments1.SignUpFragment - class SignUpActivity : BaseActivity() { lateinit var binding: ActivitySignupBinding var type : Int? = null @@ -20,31 +18,31 @@ class SignUpActivity : BaseActivity() { } private fun init() { - type = intent.getIntExtra("type", 0); + type = intent.getIntExtra("type", 0) binding = ActivitySignupBinding.inflate(layoutInflater) binding.apply { setContentView(this.root) } + val bundle = Bundle() + bundle.putInt("type", type!!) + val fragment = SignUpFragment() + fragment.arguments = bundle + supportFragmentManager.beginTransaction() - .add(R.id.signUpContainer, SignUpFragment()) + .add(R.id.signUpContainer, fragment) .commit() } -// @Deprecated("Deprecated in Java") + // override fun onBackPressed() { -// if (Build.VERSION.SDK_INT >= 33) { -// onBackInvokedDispatcher.registerOnBackInvokedCallback( -// OnBackInvokedDispatcher.PRIORITY_DEFAULT -// ) { -// exitOnBackPressed() -// } +// val fm: FragmentManager = supportFragmentManager +// if (fm.backStackEntryCount > 0) { +// Log.i("MainActivity", "popping backstack") +// fm.popBackStack() // } else { -// onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { -// override fun handleOnBackPressed() { -// exitOnBackPressed() -// } -// }) +// Log.i("MainActivity", "nothing on backstack, calling super") +// super.onBackPressed() // } // } diff --git a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/AlmostThereFragment.kt b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/AlmostThereFragment.kt index d3a049c..b429e24 100644 --- a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/AlmostThereFragment.kt +++ b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/AlmostThereFragment.kt @@ -11,6 +11,7 @@ import com.nivesh.production.niveshfd.R import com.nivesh.production.niveshfd.databinding.FragmentAlmostThereBinding import com.nivesh.production.niveshfd.fd.ui.activity.BaseActivity import com.nivesh.production.niveshfd.fd.util.Common +import com.nivesh.production.niveshfd.partnerOnBoarding.ui.activities1.SignUpActivity class AlmostThereFragment : BaseFragment() { private var _binding: FragmentAlmostThereBinding? = null @@ -105,7 +106,8 @@ class AlmostThereFragment : BaseFragment() { } binding.btnBack.setOnClickListener { - requireActivity().onBackPressedDispatcher.onBackPressed() +// (activity as SignUpActivity).onBackPressedDispatcher + (activity as SignUpActivity).onBackPressedDispatcher.onBackPressed() } binding.btnNext.setOnClickListener { @@ -113,8 +115,6 @@ class AlmostThereFragment : BaseFragment() { // submit } } - - } private fun validate(): Boolean { 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 b6113b6..8503b02 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,19 +1,25 @@ package com.nivesh.production.niveshfd.partnerOnBoarding.ui.fragments1 import android.Manifest +import android.annotation.SuppressLint import android.app.Activity import android.content.DialogInterface import android.content.pm.PackageManager +import android.database.Cursor import android.graphics.Bitmap import android.graphics.BitmapFactory +import android.graphics.Color import android.net.Uri import android.os.Bundle +import android.provider.OpenableColumns +import android.text.Editable +import android.text.TextWatcher +import android.util.Base64 +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.Switch import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog @@ -21,24 +27,18 @@ 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 +import com.nivesh.production.niveshfd.BuildConfig import com.nivesh.production.niveshfd.R import com.nivesh.production.niveshfd.databinding.FragmentGetStartedBinding -import com.nivesh.production.niveshfd.fd.db.PreferenceManager import com.nivesh.production.niveshfd.fd.ui.activity.BaseActivity +import com.nivesh.production.niveshfd.fd.util.Common +import com.nivesh.production.niveshfd.fd.util.Common.Companion.getFileExtension import com.nivesh.production.niveshfd.fd.util.Common.Companion.showDialogWithTwoButtons +import com.nivesh.production.niveshfd.fd.util.ImageUtil 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" +import java.io.* class GetStartedFragment : BaseFragment() { - // TODO: Rename and change types of parameters - private var param1: String? = null - private var param2: String? = null private var _binding: FragmentGetStartedBinding? = null private val binding get() = _binding!! private var latestTmpUri: Uri? = null @@ -51,6 +51,19 @@ class GetStartedFragment : BaseFragment() { private val secondDocUpload: Int = 4 private var actionType: Int = -1 + private var panString: String = "" + 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 docValue: String = "" + private var uploadPosition = 0 + + private var isFront: Boolean = false + private val listArray = ArrayList() private val permissions = arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE, @@ -74,28 +87,24 @@ 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 { - param1 = it.getString(ARG_PARAM1) - param2 = it.getString(ARG_PARAM2) - } +// if (!permission.containsValue(false)) { + selectImageIntent?.launch("image/*") +// } else { +// showDialogWithTwoButtons( +// (activity as SignUpActivity), +// getString(R.string.galleryPermission), +// getString( +// R.string.permissionsRequired +// ) +// ) +// } } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { // Inflate the layout for this fragment _binding = FragmentGetStartedBinding.inflate(inflater, container, false) return binding.root @@ -104,23 +113,6 @@ 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? { @@ -137,8 +129,117 @@ class GetStartedFragment : BaseFragment() { return null } + private fun isInputCorrect( + s: Editable, + totalSymbols: Int, + dividerModulo: Int, + divider: Char + ): Boolean { + var isCorrect = s.length <= totalSymbols // check size of entered string + for (i in 0 until s.length) { // check that every element is right + isCorrect = if (i > 0 && (i + 1) % dividerModulo == 0) { + isCorrect and (divider == s[i]) + } else { + isCorrect and Character.isDigit(s[i]) + } + } + return isCorrect + } + private fun init() { + var total_SYMBOLS: Int = 14 + var TOTAL_DIGITS: Int = 12 // max numbers of digits in pattern: 0000 x 4 + var DIVIDER_MODULO: Int = 4 // means divider position is every 5th symbol beginning with 1 + var DIVIDER_POSITION: Int = DIVIDER_MODULO - 1; // means divider position is every 4th symbol beginning with 0 + var DIVIDER: Char = '-' + + binding.edtEuinNumber.addTextChangedListener(object : TextWatcher{ + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + override fun afterTextChanged(s: Editable?) { + if (!isInputCorrect(s!!, total_SYMBOLS, DIVIDER_MODULO, DIVIDER)) { + s?.replace(0, s.length, buildCorrectString(getDigitArray(s, TOTAL_DIGITS)!!, DIVIDER_POSITION, DIVIDER)) + } + } + + private fun isInputCorrect( + s: Editable, + totalSymbols: Int, + dividerModulo: Int, + divider: Char + ): Boolean { + var isCorrect = s.length <= totalSymbols // check size of entered string + for (i in s.indices) { // check that every element is right + isCorrect = if (i > 0 && (i + 1) % dividerModulo == 0) { + isCorrect and (divider == s[i]) + } else { + isCorrect and Character.isDigit(s[i]) + } + } + return isCorrect + } + + private fun buildCorrectString( + digits: CharArray, + dividerPosition: Int, + divider: Char + ): String? { + val formatted = StringBuilder() + for (i in digits.indices) { + if (digits[i].code != 0) { + formatted.append(digits[i]) + if (i > 0 && i < digits.size - 1 && (i + 1) % dividerPosition == 0) { + formatted.append(divider) + } + } + } + return formatted.toString() + } + + private fun getDigitArray(s: Editable, size: Int): CharArray? { + val digits = CharArray(size) + var index = 0 + var i = 0 + while (i < s.length && index < size) { + val current = s[i] + if (Character.isDigit(current)) { + digits[index] = current + index++ + } + i++ + } + return digits + } + + }) + +// binding.edtEuinNumber.doAfterTextChanged { +// val formattedText = binding.edtEuinNumber.toString().replace(" ", "").chunked(4).joinToString("/") +// if (formattedText != binding.edtEuinNumber.toString()) { +// binding.edtEuinNumber.setText(formattedText) +// binding.edtEuinNumber.setSelection(binding.edtEuinNumber.length()) +// } +// } + + + 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") + } + } + } + binding.btnNext.setOnClickListener { replaceFragment( activity as BaseActivity, @@ -154,19 +255,46 @@ class GetStartedFragment : BaseFragment() { listArray.add("Driving Licenses") listArray.add("Voter Id") - val arrayAdapter = ArrayAdapter(activity as SignUpActivity, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item,listArray) + val arrayAdapter = ArrayAdapter( + activity as SignUpActivity, + androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, + listArray + ) binding.spDocType.setAdapter(arrayAdapter) - binding.spDocType.setOnItemClickListener{ _, _, position, _ -> -// setVisibility(listArray[position]) + binding.spDocType.setOnItemClickListener { _, _, position, _ -> + setVisibility(listArray[position]) } binding.uploadFront.setOnClickListener { actionType = mainPANUpload + isFront = true + selectImage() + } + + binding.mbUploadChangeFront.setOnClickListener { + actionType = mainPANUpload + isFront = true + selectImage() + } + + binding.mbUploadChangeBack.setOnClickListener { + actionType = mainPANUpload + isFront = false + selectImage() + } + + binding.uploadBack.setOnClickListener { + actionType = mainPANUpload + isFront = false selectImage() } } + private fun setUploadOption(checked: Boolean) { + isFront = checked + } + private fun selectImage() { val builder = AlertDialog.Builder( activity as SignUpActivity @@ -247,45 +375,116 @@ class GetStartedFragment : BaseFragment() { 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 setVisibility(s: String) { + if (s.contains("Aadhaar")) { + binding.txtFront.visibility = View.VISIBLE + binding.uploadFront.visibility = View.VISIBLE + binding.txtBack.visibility = View.VISIBLE + binding.llBack.visibility = View.VISIBLE + } else { + binding.txtFront.visibility = View.VISIBLE + binding.uploadFront.visibility = View.VISIBLE + binding.txtBack.visibility = View.GONE + binding.llBack.visibility = View.GONE + } + } + + private fun getTmpFileUri(): Uri { + val tmpFile = + File.createTempFile("tmp_image_file", ".png", requireActivity().cacheDir).apply { + createNewFile() + deleteOnExit() + } + + return FileProvider.getUriForFile( + requireActivity(), BuildConfig.APPLICATION_ID.plus(".provider"), tmpFile + ) + } private fun takeImage() { lifecycleScope.launchWhenStarted { - getTmpFileUri().let { uri -> - latestTmpUri = uri - takeImageResult?.launch(uri) + try { + getTmpFileUri().let { uri -> + latestTmpUri = uri + takeImageResult?.launch(uri) + } + } catch (e: Exception) { + Log.e("check_exception", e.message.toString()) } } } -// 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 = "" -// } -// } + @SuppressLint("Range") + fun getFileName(uri: Uri): String { + var result = "" + if (uri.scheme == "content") { + val cursor: Cursor = + requireActivity().contentResolver.query(uri, null, null, null, null)!! + cursor.use { cursor1 -> + if (cursor1.moveToFirst()) { + result = cursor1.getString(cursor1.getColumnIndex(OpenableColumns.DISPLAY_NAME)) + } + } + } + if (result.isEmpty()) { + result = uri.path!! + val cut = result.lastIndexOf('/') + if (cut != -1) { + result = result.substring(cut + 1) + } + } + return result + } + + @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 encodedPANBase64(fileName: File) { + panString = try { + val bytes: ByteArray = loadFile(fileName) + Base64.encodeToString(bytes, Base64.DEFAULT).trim().replace("\n", "") + .replace("\\s+", "") + } catch (e: Exception) { + e.printStackTrace() + "" + } + } + + private fun uploadDocument(uri: Uri, type: String) { + when (actionType) { + mainPANUpload -> { + val fileDir: File = (activity as SignUpActivity).cacheDir + val fileExtension = File(fileDir.toString().plus("/").plus(getFileName(uri))) + panFileExt = getFileExtension(getFileName(uri)) + val size: Double = Common.getFileSizeInMB(fileExtension.length()) + + setFrontHideVisible(uri) + 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 @@ -328,17 +527,22 @@ class GetStartedFragment : BaseFragment() { // doc2fileExt = "" // } // } -// } -// } - - private fun getTmpFileUri(): Uri { - val tmpFile = - File.createTempFile("tmp_image_file", ".png", requireActivity().cacheDir).apply { - createNewFile() - deleteOnExit() - } + } + } - return FileProvider.getUriForFile( - requireActivity(), PreferenceManager(activity as SignUpActivity).getAppId().plus(".provider"), tmpFile) + private fun setFrontHideVisible(uri: Uri) { + if (isFront) { + binding.uploadFront.visibility = View.GONE + binding.ivFrontLayer.setBackgroundColor(Color.parseColor("#99000000")) + binding.ivFrontTik.setBackgroundResource(R.drawable.svg_tik) + binding.mbUploadChangeFront.visibility = View.VISIBLE + binding.ivFront.setImageURI(uri) + } else { + binding.uploadBack.visibility = View.GONE + binding.ivBackLayer.setBackgroundColor(Color.parseColor("#99000000")) + binding.ivBackTik.setBackgroundResource(R.drawable.svg_tik) + binding.mbUploadChangeBack.visibility = View.VISIBLE + binding.ivBack.setImageURI(uri) + } } } \ No newline at end of file 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 index 93f27f6..553da97 100644 --- 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 @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import com.nivesh.production.niveshfd.databinding.NewDistributorSignStepOneBinding import com.nivesh.production.niveshfd.partnerOnBoarding.adapters1.NewDistributorSignStepOneAdapter @@ -14,6 +15,10 @@ class NewDistributorSignStepOne : BaseFragment(){ private var _binding: NewDistributorSignStepOneBinding? = null private val binding get() = _binding!! + companion object{ + var listMapData: MutableMap? = null + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -29,7 +34,7 @@ class NewDistributorSignStepOne : BaseFragment(){ } 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") @@ -37,5 +42,9 @@ class NewDistributorSignStepOne : BaseFragment(){ binding.rvList.layoutManager = LinearLayoutManager(activity as SignUpActivity) val adapter = NewDistributorSignStepOneAdapter(listData) binding.rvList.adapter = adapter + + binding.btnNext.setOnClickListener { + Toast.makeText((activity as SignUpActivity), listMapData.toString(),Toast.LENGTH_SHORT).show() + } } } \ 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 ad21771..4e80216 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,11 +14,11 @@ 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 private val binding get() = _binding!! + private var type: Int? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -29,6 +29,7 @@ class OTPFragment : BaseFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + type = arguments?.getInt("type") init() } @@ -64,11 +65,17 @@ class OTPFragment : BaseFragment() { binding.btnSubmit.setOnClickListener { if (validate()) { + var fragment = Fragment() + if(type == 4) { + fragment = GetStartedFragment() + } else if(type == 3){ + fragment = NewDistributorSignStepOne() + } + replaceFragment( activity as BaseActivity, R.id.signUpContainer, -// GetStartedFragment(), - NewDistributorSignStepOne(), + fragment, "GET STARTED", true ) diff --git a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/SignUpFragment.kt b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/SignUpFragment.kt index 116893b..d97aef4 100644 --- a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/SignUpFragment.kt +++ b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/ui/fragments1/SignUpFragment.kt @@ -7,6 +7,7 @@ import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment import com.nivesh.production.niveshfd.databinding.FragmentSignupBinding import com.nivesh.production.niveshfd.fd.ui.activity.BaseActivity import com.nivesh.production.niveshfd.fd.util.Common @@ -15,6 +16,7 @@ import com.nivesh.production.niveshfd.fd.util.Common class SignUpFragment : BaseFragment() { private var _binding: FragmentSignupBinding? = null private val binding get() = _binding!! + private var type: Int? = null override fun onCreateView( @@ -26,6 +28,7 @@ class SignUpFragment : BaseFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + type = arguments?.getInt("type") init() } @@ -41,10 +44,15 @@ class SignUpFragment : BaseFragment() { binding.btnSignUp.setOnClickListener { if (validate()) { + val bundle = Bundle() + bundle.putInt("type",type!!) + val fragment = OTPFragment() + fragment.arguments = bundle + replaceFragment( activity as BaseActivity, com.nivesh.production.niveshfd.R.id.signUpContainer, - OTPFragment(), + fragment, "OTP", true ) diff --git a/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/util/MaskWatcher.kt b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/util/MaskWatcher.kt new file mode 100644 index 0000000..bd3a48f --- /dev/null +++ b/app/src/main/java/com/nivesh/production/niveshfd/partnerOnBoarding/util/MaskWatcher.kt @@ -0,0 +1,35 @@ +package com.nivesh.production.niveshfd.partnerOnBoarding.util + +import android.text.Editable +import android.text.TextWatcher + +class MaskWatcher(private val mask: String) : TextWatcher { + private var isRunning = false + private var isDeleting = false + override fun beforeTextChanged(charSequence: CharSequence, start: Int, count: Int, after: Int) { + isDeleting = count > after + } + + override fun onTextChanged(charSequence: CharSequence, start: Int, before: Int, count: Int) {} + override fun afterTextChanged(editable: Editable) { + if (isRunning || isDeleting) { + return + } + isRunning = true + val editableLength = editable.length + if (editableLength < mask.length) { + if (mask[editableLength] != '#') { + editable.append(mask[editableLength]) + } else if (mask[editableLength - 1] != '#') { + editable.insert(editableLength - 1, mask, editableLength - 1, editableLength) + } + } + isRunning = false + } + + companion object { + fun buildCpf(): MaskWatcher { + return MaskWatcher("###.###.###-##") + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/round_corner_grey_button_fill.xml b/app/src/main/res/drawable/round_corner_grey_button_fill.xml new file mode 100644 index 0000000..2120174 --- /dev/null +++ b/app/src/main/res/drawable/round_corner_grey_button_fill.xml @@ -0,0 +1,8 @@ + + + + + + \ 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 index d1cbab6..80d6f1f 100644 --- a/app/src/main/res/drawable/svg_tik.xml +++ b/app/src/main/res/drawable/svg_tik.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/res/layout/fragment_get_started.xml b/app/src/main/res/layout/fragment_get_started.xml index 3ac8817..6463d27 100644 --- a/app/src/main/res/layout/fragment_get_started.xml +++ b/app/src/main/res/layout/fragment_get_started.xml @@ -7,6 +7,7 @@ android:orientation="vertical"> - - + + + + + + + app:layout_constraintTop_toBottomOf="@+id/tlEuinNumber"> + + + + + android:layout_height="wrap_content" + android:layout_centerInParent="true" + android:backgroundTint="@color/greenColor" /> + + + + + + + - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintStart_toStartOf="parent"/> + + \ 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 index 78e1a2b..190b8aa 100644 --- 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 @@ -40,21 +40,23 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" + android:layout_marginEnd="@dimen/margin_20" android:orientation="horizontal"> + android:text="@string/yes"/> + android:text="@string/no"/> + + + + + + \ 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 7f46b75..badc2c8 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -320,5 +320,10 @@ Have a POS anywhere? POS with an insurer POS with Broker / Corporate Agent + Yes + No + Please Name Other + Change + Up Next: Address \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 0ba9ee0..8c8b3af 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -24,6 +24,9 @@ #E6EBE0 #303030 + #41CA00 + + #545454 #FF03DAC5 #FF018786 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0dd582b..dc1776b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -324,6 +324,11 @@ Have a POS anywhere? POS with an insurer POS with Broker / Corporate Agent + Yes + No + Please Name Other + Change + Up Next: Address Aadhar Front diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml index 92d7b3a..ed4e0b1 100644 --- a/app/src/main/res/xml/file_paths.xml +++ b/app/src/main/res/xml/file_paths.xml @@ -18,6 +18,9 @@ + \ No newline at end of file