diff --git a/app/src/main/java/com/nivesh/production/bajajfd/adapter/SectionsPagerAdapter.kt b/app/src/main/java/com/nivesh/production/bajajfd/adapter/SectionsPagerAdapter.kt index d024110..a576253 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/adapter/SectionsPagerAdapter.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/adapter/SectionsPagerAdapter.kt @@ -1,30 +1,19 @@ package com.nivesh.production.bajajfd.adapter -import android.content.Context import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager -import androidx.fragment.app.FragmentPagerAdapter -class SectionsPagerAdapter(private val context: Context, fm: FragmentManager) : - FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { - - private var fragmentList: MutableList = ArrayList() +class SectionsPagerAdapter(private val fm: FragmentManager, private val fragments: Array, private val NumberOfTabs: Int) : SmartFragmentStatePagerAdapter(fm) { override fun getItem(position: Int): Fragment { - return fragmentList[position] + return fragments[position] } - override fun getCount(): Int { - return fragmentList.size + override fun getPageTitle(position: Int): CharSequence? { + return null } - fun addFragment(fragment: Fragment) { - try { - if (!fragment.isAdded) { - fragmentList.add(fragment) - } - } catch (e: Exception) { - e.printStackTrace() - } + override fun getCount(): Int { + return NumberOfTabs } } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/adapter/SmartFragmentStatePagerAdapter.kt b/app/src/main/java/com/nivesh/production/bajajfd/adapter/SmartFragmentStatePagerAdapter.kt new file mode 100644 index 0000000..44ac534 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/adapter/SmartFragmentStatePagerAdapter.kt @@ -0,0 +1,29 @@ +package com.nivesh.production.bajajfd.adapter + +import android.util.SparseArray +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentStatePagerAdapter + +abstract class SmartFragmentStatePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) { + val registeredFragments = SparseArray() + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val fragment = super.instantiateItem(container, position) as Fragment + registeredFragments.put(position, fragment) + return fragment + } + + // Unregister when the item is inactive + override fun destroyItem(container: View, position: Int, `object`: Any) { + registeredFragments.remove(position) + super.destroyItem(container, position, `object`) + } + + // Returns the fragment for the position (if instantiated) + fun getRegisteredFragment(position: Int): Fragment? { + return registeredFragments[position] + } +} diff --git a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/SendData.kt b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/SendData.kt new file mode 100644 index 0000000..e976e20 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/SendData.kt @@ -0,0 +1,8 @@ +package com.nivesh.production.bajajfd.interfaces + +import com.nivesh.production.bajajfd.model.CreateFDApplicationResponse + +interface SendData { + fun sendDataFragment(message: CreateFDApplicationResponse, currentItem: Int) + +} \ No newline at end of file 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 cbcd933..7490f83 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 @@ -4,10 +4,10 @@ import android.graphics.drawable.Drawable import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.viewpager.widget.ViewPager import com.google.gson.Gson -import com.nivesh.production.bajajfd.R import com.nivesh.production.bajajfd.adapter.SectionsPagerAdapter import com.nivesh.production.bajajfd.api.ApiClient import com.nivesh.production.bajajfd.databinding.ActivityBajajFdBinding @@ -25,6 +25,7 @@ import com.nivesh.production.bajajfd.util.Constants.Companion.token import com.nivesh.production.bajajfd.util.Resource import com.nivesh.production.bajajfd.viewModel.* + class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { lateinit var binding: ActivityBajajFdBinding private lateinit var viewModel: BajajFDViewModel @@ -46,6 +47,8 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { var getClientDetailsResponse: getClientDetailsResponse private var stepCount: Int = 0 + lateinit var sectionsPagerAdapter : SectionsPagerAdapter + lateinit var fragments: Array override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -107,7 +110,7 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { private fun getStepsCountApi() { val fdStepsCount = FDStepsCountRequest() - fdStepsCount.FDProvider = getString(R.string.bajaj) + fdStepsCount.FDProvider = getString(com.nivesh.production.bajajfd.R.string.bajaj) fdStepsCount.NiveshClientCode = "8872" viewModel.getStepsCount(fdStepsCount, token) viewModel.getStepsCountMutableData.observe(this) { response -> @@ -155,20 +158,20 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { if (Common.isNetworkAvailable(this@BajajFdMainActivity)) { val getClientDetailsRequest = getClientDetailsRequest() getClientDetailsRequest.client_code = "8872" - getClientDetailsRequest.AppOrWeb = getString(R.string.app) + getClientDetailsRequest.AppOrWeb = getString(com.nivesh.production.bajajfd.R.string.app) getClientDetailsRequest.sub_broker_code = "1038" val userRequest = UserRequest() userRequest.UID = 19060 userRequest.IPAddress = "" - userRequest.Source = getString(R.string.source) - userRequest.AppOrWeb = getString(R.string.app) + userRequest.Source = getString(com.nivesh.production.bajajfd.R.string.source) + userRequest.AppOrWeb = getString(com.nivesh.production.bajajfd.R.string.app) userRequest.LoggedInRoleId = 5 val deviceInfo = DeviceInfo() deviceInfo.device_id = "" deviceInfo.device_id_for_UMSId = "" - deviceInfo.device_type = getString(R.string.app) + deviceInfo.device_type = getString(com.nivesh.production.bajajfd.R.string.app) deviceInfo.device_model = "" deviceInfo.device_token = "" deviceInfo.device_name = "" @@ -219,17 +222,28 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { // steps setting setBackground(selectedShape(), defaultShape(), defaultShape(), defaultShape()) + if (stepCount == 3) { + fragments = arrayOf( + StepOneBajajFDFragment.getInstance(this), + StepTwoBajajFDFragment.getInstance(this), + StepFourBajajFDFragment.getInstance(this), + StepFiveBajajFDFragment.getInstance(this) + ) + } else if (stepCount == 4) { + fragments = arrayOf( + StepOneBajajFDFragment.getInstance(this), + StepTwoBajajFDFragment.getInstance(this), + StepThreeBajajFDFragment.getInstance(this), + StepFourBajajFDFragment.getInstance(this), + StepFiveBajajFDFragment.getInstance(this) + ) + } + // set viewPager - val sectionsPagerAdapter = - SectionsPagerAdapter(this@BajajFdMainActivity, supportFragmentManager) + sectionsPagerAdapter = + SectionsPagerAdapter(supportFragmentManager, fragments, stepsCount) val viewPager: ViewPager = binding.viewPager - sectionsPagerAdapter.addFragment(StepOneBajajFDFragment.getInstance(this@BajajFdMainActivity)) - sectionsPagerAdapter.addFragment(StepTwoBajajFDFragment.getInstance(this@BajajFdMainActivity)) - if (stepsCount == 4) { - sectionsPagerAdapter.addFragment(StepThreeBajajFDFragment.getInstance(this@BajajFdMainActivity)) - } - sectionsPagerAdapter.addFragment(StepFourBajajFDFragment.getInstance(this@BajajFdMainActivity)) - sectionsPagerAdapter.addFragment(StepFiveBajajFDFragment.getInstance(this@BajajFdMainActivity)) + viewPager.adapter = sectionsPagerAdapter viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { @@ -306,7 +320,7 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { getClientDetailsResponse.ObjectResponse?.clientDetails?.clientMasterMFD?.CLIENT_PAN checkFDKYCRequest.NiveshClientCode = getClientDetailsResponse.ObjectResponse?.clientDetails?.clientMasterMFD?.CLIENT_CODE.toString() - stepOneBajajFDViewModel.checkFDKYC( checkFDKYCRequest, token) + stepOneBajajFDViewModel.checkFDKYC(checkFDKYCRequest, token) stepOneBajajFDViewModel.getFDKYCMutableData.observe(this) { response -> when (response) { is Resource.Success -> { @@ -411,8 +425,10 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { when (code) { 200 -> { binding.viewPager.currentItem = currentItem - StepFourBajajFDFragment.getInstance(this) - .getFDData(createFDApplicationResponse ,this) + StepFourBajajFDFragment.getInstance(this).displayReceivedData(createFDApplicationResponse) + val stepFourFDFragment: StepFourBajajFDFragment = + sectionsPagerAdapter.getRegisteredFragment(stepCount - 1) as StepFourBajajFDFragment + stepFourFDFragment.displayReceivedData(createFDApplicationResponse) } // 650 -> refreshToken() else -> { @@ -435,10 +451,6 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { } } } - - } - } - } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFourBajajFDFragment.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFourBajajFDFragment.kt index 4d8bc94..3a9865b 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFourBajajFDFragment.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFourBajajFDFragment.kt @@ -1,5 +1,7 @@ package com.nivesh.production.bajajfd.ui.fragment +import android.app.Activity +import android.content.Context import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -41,7 +43,6 @@ class StepFourBajajFDFragment : Fragment() { bajajFDInterface = bajajFDInterfaces } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -69,15 +70,15 @@ class StepFourBajajFDFragment : Fragment() { return root } - fun getFDData( - createFDApplicationResponse: CreateFDApplicationResponse - ) { - this.uniqueId = createFDApplicationResponse.Response.FDCreationDetailsResponse.UniqueId - // - getFDDetailsApi(createFDApplicationResponse.Response.FDCreationDetailsResponse.UniqueId) - customerListApi() + + fun displayReceivedData(createFDApplicationResponse: CreateFDApplicationResponse) { + Log.e("createFDApplication", "Response-->"+createFDApplicationResponse.Response.FDCreationDetailsResponse.UniqueId) + uniqueId = createFDApplicationResponse.Response.FDCreationDetailsResponse.UniqueId + getFDDetailsApi(createFDApplicationResponse.Response.FDCreationDetailsResponse.UniqueId) + customerListApi() } + private fun customerListApi() { if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { val getCodeRequest = GetCodeRequest() @@ -85,8 +86,8 @@ class StepFourBajajFDFragment : Fragment() { getCodeRequest.Category = getString(R.string.customerCategory) getCodeRequest.Language = getString(R.string.language) getCodeRequest.InputValue = "" - this.stepFourBajajFDViewModel.paymentModeApi(getCodeRequest, Constants.token) - this.stepFourBajajFDViewModel.getPaymentModeMutableData.observe(viewLifecycleOwner) { response -> + stepFourBajajFDViewModel.paymentModeApi(getCodeRequest, Constants.token) + stepFourBajajFDViewModel.getPaymentModeMutableData.observe(viewLifecycleOwner) { response -> when (response) { is Resource.Success -> { Log.e("response", "-->$response") @@ -131,7 +132,7 @@ class StepFourBajajFDFragment : Fragment() { private fun getFDDetailsApi(uniqueId: String) { if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { val getFDDetailsRequest = GetFDDetailsRequest() - getFDDetailsRequest.FDProvider = resources.getString(R.string.bajaj) + getFDDetailsRequest.FDProvider = getString(R.string.bajaj) getFDDetailsRequest.NiveshClientCode = (activity as BajajFdMainActivity).getClientDetailsResponse.ObjectResponse?.clientDetails?.clientMasterMFD?.CLIENT_CODE getFDDetailsRequest.UniqueId = uniqueId stepFourBajajFDViewModel.getFDDetails(getFDDetailsRequest, Constants.token) @@ -172,7 +173,6 @@ class StepFourBajajFDFragment : Fragment() { } } } - } }