diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2490fea..245ae96 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,9 +5,7 @@ + android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 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 cd91b20..8bd7fe8 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 @@ -223,13 +223,13 @@ class BajajFdMainActivity : BaseActivity() { // set viewPager sectionsPagerAdapter = SectionsPagerAdapter(supportFragmentManager, fragments, stepsCount) val viewPager: DisableAdapter = binding.viewPager - viewPager.setPagingEnabled(false) viewPager.adapter = sectionsPagerAdapter - if (sectionsPagerAdapter.count > 1) { - viewPager.offscreenPageLimit = sectionsPagerAdapter.count - 1 - } else { - viewPager.offscreenPageLimit = 1 - } + viewPager.setPagingEnabled(false) + // if (sectionsPagerAdapter.count > 1) { + viewPager.offscreenPageLimit = stepCount - 1 + // } else { + // viewPager.offscreenPageLimit = 1 + // } viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, @@ -368,6 +368,9 @@ class BajajFdMainActivity : BaseActivity() { // step 2 response fun stepTwoApi() { binding.viewPager.currentItem = 2 + if (stepCount == 3) { + stepFourBajajFDFragment.displayReceivedData() + } } // step 3 response @@ -431,7 +434,7 @@ class BajajFdMainActivity : BaseActivity() { viewModel.getPaymentReQueryMutableData.observe(this) { response -> when (response) { is Resource.Success -> { - Log.e("response", "-->$response") + Log.e("paymentReQueryApi ", "response -->$response") val paymentReQueryResponse: PaymentReQueryResponse = Gson().fromJson( response.data?.toString(), diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFiveBajajFDFragment.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFiveBajajFDFragment.kt index b156e53..bd77401 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFiveBajajFDFragment.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFiveBajajFDFragment.kt @@ -18,7 +18,9 @@ class StepFiveBajajFDFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - _binding = FragmentBajajfdStepFiveBinding.inflate(inflater, container, false) + binding.apply { + _binding = FragmentBajajfdStepFiveBinding.inflate(inflater, container, false) + } return binding.root } @@ -35,10 +37,11 @@ class StepFiveBajajFDFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + binding.tvCongrats.text = "" + binding.tvSuccessMessage.text = "" binding.btnViewOrder.setOnClickListener { } - } override fun onDestroyView() { 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 f8a869f..9d541df 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 @@ -2,14 +2,18 @@ package com.nivesh.production.bajajfd.ui.fragment import android.Manifest import android.annotation.SuppressLint +import android.app.Activity import android.content.DialogInterface +import android.content.Intent import android.content.pm.PackageManager import android.database.Cursor import android.graphics.Bitmap import android.graphics.BitmapFactory import android.net.Uri +import android.os.Build import android.os.Bundle import android.provider.OpenableColumns +import android.provider.Settings import android.util.Base64 import android.util.Log import android.view.LayoutInflater @@ -19,6 +23,7 @@ import android.widget.* 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.fragment.app.Fragment @@ -31,13 +36,17 @@ import com.nivesh.production.bajajfd.model.* import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity import com.nivesh.production.bajajfd.util.Common import com.nivesh.production.bajajfd.util.Common.Companion.getFileExtension +import com.nivesh.production.bajajfd.util.Common.Companion.showDialogWithTwoButtons import com.nivesh.production.bajajfd.util.Constants import com.nivesh.production.bajajfd.util.ImageUtil import com.nivesh.production.bajajfd.util.Resource import java.io.* +import java.util.* + class StepThreeBajajFDFragment : Fragment() { + private var _binding: FragmentBajajfdStepThreeBinding? = null private val binding get() = _binding!! @@ -48,7 +57,6 @@ class StepThreeBajajFDFragment : Fragment() { private val mapImage: HashMap = HashMap() private lateinit var listOfDocType: List - private var check: Array? = null private var panString: String = "" private var photoString: String = "" @@ -65,18 +73,40 @@ class StepThreeBajajFDFragment : Fragment() { private val secondDocUpload: Int = 4 private var actionType: Int = -1 + private val permissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES + ) + } else { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + } - private val requestPermission = registerForActivityResult( + private val requestCameraPermission = registerForActivityResult( ActivityResultContracts.RequestPermission() ) { isGranted: Boolean -> if (isGranted) { - Log.e("permission:", "Granted") + takeImage() } else { - Log.e("permission:", "Denied") + showDialogWithTwoButtons((activity as BajajFdMainActivity), getString(R.string.cameraPermission), getString( + R.string.permissionRequired)) } } - + private val requestGalleryPermission = registerForActivityResult( + ActivityResultContracts.RequestMultiplePermissions() + ) { permission -> + if (!permission.containsValue(false)) { + selectImageIntent?.launch("image/*") + } else { + showDialogWithTwoButtons((activity as BajajFdMainActivity), getString(R.string.galleryPermission), getString( + R.string.permissionsRequired)) + } + } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -90,12 +120,6 @@ class StepThreeBajajFDFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - check = arrayOf( - getString(R.string.takePhoto), - getString(R.string.chooseFromGallery), - getString(R.string.cancel) - ) - selectImageIntent = registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> if (uri != null) { @@ -213,57 +237,75 @@ class StepThreeBajajFDFragment : Fragment() { getString(R.string.chooseFromGallery), getString(R.string.cancel) ) - ) - - { dialog: DialogInterface, pos -> - when(pos) - { + ) { dialog: DialogInterface, pos -> + when (pos) { 0 -> { - - val permission = ContextCompat.checkSelfPermission( - activity as BajajFdMainActivity, - Manifest.permission.CAMERA - ) - if (permission == PackageManager.PERMISSION_GRANTED) { - takeImage() - } else { - requestPermission.launch( + if (hasPermissions( + activity as BajajFdMainActivity, Manifest.permission.CAMERA ) + ) { + takeImage() + } else { + onClickRequestPermission() } dialog.dismiss() - } - - 1-> - { - - val permission = ContextCompat.checkSelfPermission( - activity as BajajFdMainActivity, - Manifest.permission.READ_EXTERNAL_STORAGE - ) - if (permission == PackageManager.PERMISSION_GRANTED) { + 1 -> { + if (hasPermissions(activity as BajajFdMainActivity, *permissions)) { selectImageIntent?.launch("image/*") } else { - requestPermission.launch( - Manifest.permission.READ_EXTERNAL_STORAGE - ) + requestGalleryPermission.launch(permissions) } - dialog.dismiss() - } - else-> - { + else -> { dialog.dismiss() - } - } } builder.show() } + 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 onClickRequestPermission() { + when { + ContextCompat.checkSelfPermission( + activity as BajajFdMainActivity, + Manifest.permission.CAMERA + ) == PackageManager.PERMISSION_GRANTED -> { + + } + + ActivityCompat.shouldShowRequestPermissionRationale( + activity as BajajFdMainActivity, + Manifest.permission.CAMERA + ) -> { + requestCameraPermission.launch( + Manifest.permission.CAMERA + ) + } + + else -> { + requestCameraPermission.launch( + Manifest.permission.CAMERA + ) + } + } + } + private fun setOtherUploadLayout(itemName: String?) { binding.tvAadhaarFront.text = itemName.plus(" Front *") if (binding.tvAadhaarBack.visibility == View.VISIBLE) binding.tvAadhaarBack.visibility = @@ -546,11 +588,11 @@ class StepThreeBajajFDFragment : Fragment() { ) binding.spDocType.setAdapter(adapter) binding.spDocType.setText( - adapter.getItem(0)?.Value, + adapter.getItem(0)?.Label, false ) - setOtherUploadLayout(adapter.getItem(0)?.Value) - docValue = adapter.getItem(0)?.Value.toString() + setOtherUploadLayout(adapter.getItem(0)?.Label) + docValue = adapter.getItem(0)?.Label.toString() } } 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 a82a7f9..09aef07 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 @@ -4,23 +4,28 @@ import android.Manifest import android.app.Activity import android.app.AlertDialog import android.content.Context +import android.content.Intent import android.content.pm.PackageManager import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.net.ConnectivityManager import android.net.NetworkCapabilities +import android.net.Uri import android.os.Build +import android.provider.Settings import android.text.format.DateFormat import android.util.Log import android.util.Patterns import androidx.activity.result.contract.ActivityResultContracts import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat +import androidx.core.content.ContextCompat.startActivity import com.google.android.material.textfield.MaterialAutoCompleteTextView import com.google.android.material.textfield.TextInputEditText 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.BajajFdMainActivity import kotlinx.coroutines.CoroutineExceptionHandler import org.json.JSONObject import retrofit2.HttpException @@ -124,11 +129,18 @@ class Common { builder.show() } - fun showDialogWithTwoButtons(activity: Activity?, message: CharSequence?) { + fun showDialogWithTwoButtons(activity: Activity?, message: CharSequence?, title: String) { val builder = AlertDialog.Builder(activity) + builder.setTitle(title) builder.setMessage(message) if (activity != null) { builder.setPositiveButton(activity.getString(R.string.Ok)) { dialogInterface, _ -> + val intent = Intent( + Settings.ACTION_APPLICATION_DETAILS_SETTINGS, + Uri.fromParts("package", (activity as BajajFdMainActivity).packageName, null) + ) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + activity.startActivity(intent) dialogInterface.dismiss() } builder.setNegativeButton(activity.getString(R.string.cancel)) { dialogInterface, _ -> @@ -194,21 +206,11 @@ class Common { } fun handleResponse(response: Response): Resource { - // try { if (response.isSuccessful && response.body() != null) { response.body()?.let { resultResponse -> return Resource.Success(resultResponse) } } -// } catch (t: Throwable) { -// 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)) -// is UnknownHostException -> Resource.Error("Response : " + t.message.plus(" Cause: " + t.cause)) -// else -> Resource.Error(t.localizedMessage?.toString() ?: "") -// } -// } return Resource.Error(response.message()) } @@ -247,7 +249,7 @@ class Common { } fun isMinor(date: String): Boolean { - val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.US) val dt1: Date = simpleDateFormat.parse(date) as Date val year: Int = DateFormat.format("yyyy", dt1).toString().toInt() val month: Int = DateFormat.format("mm", dt1).toString().toInt() diff --git a/app/src/main/res/layout/fragment_bajajfd_step_five.xml b/app/src/main/res/layout/fragment_bajajfd_step_five.xml index fd8e4b1..e8017e7 100644 --- a/app/src/main/res/layout/fragment_bajajfd_step_five.xml +++ b/app/src/main/res/layout/fragment_bajajfd_step_five.xml @@ -88,6 +88,7 @@ android:layout_marginTop="12dp" android:textColor="@color/black" android:textSize="@dimen/text_size_17" + android:text="" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.437" app:layout_constraintStart_toStartOf="parent" @@ -101,6 +102,7 @@ android:layout_marginTop="16dp" android:textColor="@color/black" android:textSize="@dimen/text_size_16" + android:text="" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.419" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 8965015..0be7cc0 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -248,6 +248,10 @@ Add New Account OK + You Need to Give Permission of Camera for uploading Image + You Need to Give Permission of Gallery for uploading Image + Permission Required ! + Permission\'s Required ! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2ab4061..96dd577 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -248,6 +248,10 @@ Add New Account OK + You Need to Give Permission of Camera for uploading Image + You Need to Give Permission of Gallery for uploading Image + Permission Required ! + Permission\'s Required ! \ No newline at end of file