DirzaAulia

OpenAccountNonSuccessActivity

Apr 13th, 2026
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 10.04 KB | None | 0 0
  1. package id.co.bri.brimons.features.openaccountns.ui.activity
  2.  
  3. import android.animation.Animator
  4. import android.animation.AnimatorListenerAdapter
  5. import android.animation.ValueAnimator
  6. import android.app.Activity
  7. import android.content.Intent
  8. import android.os.Bundle
  9. import android.view.View
  10. import androidx.recyclerview.widget.LinearLayoutManager
  11. import androidx.recyclerview.widget.RecyclerView
  12. import dagger.hilt.android.AndroidEntryPoint
  13. import id.co.bri.brimons.R
  14. import id.co.bri.brimons.adapters.DetailTransaksiRevampAdapter
  15. import id.co.bri.brimons.databinding.ActivityOpenAccountNonSuccessBinding
  16. import id.co.bri.brimons.features.openaccountns.contract.IPresenter.IOpenAccountNonSuccessPresenter
  17. import id.co.bri.brimons.features.openaccountns.contract.IView.IOpenAccountNonSuccessView
  18. import id.co.bri.brimons.features.openaccountns.utils.ConstantOpenAccount.JunioEndpoint.V3_OPEN_ACCOUNT_JUNIO_PAYMENT
  19. import id.co.bri.brimons.features.openaccountns.utils.ConstantOpenAccount.ValasEndpoint.V3_OPEN_ACCOUNT_VALAS_PAYMENT
  20. import id.co.bri.brimons.models.apimodel.response.ReceiptRevampResponse
  21. import id.co.bri.brimons.ui.activities.base.NewSkinBaseActivity
  22. import id.co.bri.brimons.ui.activities.bukarekeningreskin.ReceiptTabunganNewSkinActivity
  23. import id.co.bri.brimons.ui.activities.dashboard.DashboardIBReskinActivity
  24. import id.co.bri.brimons.uikit.extension.view.gone
  25. import id.co.bri.brimons.uikit.extension.view.visible
  26. import javax.inject.Inject
  27.  
  28. @AndroidEntryPoint
  29. class OpenAccountNonSuccessActivity : NewSkinBaseActivity(), IOpenAccountNonSuccessView {
  30.  
  31.     private lateinit var binding: ActivityOpenAccountNonSuccessBinding
  32.  
  33.     @Inject
  34.     lateinit var presenter: IOpenAccountNonSuccessPresenter<IOpenAccountNonSuccessView>
  35.     private var detailTransaksiRevampAdapter: DetailTransaksiRevampAdapter? = null
  36.     private var sumberTransaksiRevAdapter: DetailTransaksiRevampAdapter? = null
  37.     private var isHide: Boolean = false
  38.  
  39.     companion object {
  40.  
  41.         enum class STATUS {
  42.             PENDING, FAILED
  43.         }
  44.         private var mPendingResponse: ReceiptRevampResponse? = null
  45.         private var mStatus: STATUS = STATUS.PENDING
  46.         private var mProductType: String = ""
  47.  
  48.         fun launchIntent(
  49.             caller: Activity,
  50.             paymentResponse: ReceiptRevampResponse,
  51.             status: STATUS,
  52.             productType: String,
  53.         ) {
  54.             val intent = Intent(caller, OpenAccountNonSuccessActivity::class.java)
  55.             mPendingResponse = paymentResponse
  56.             mStatus = status
  57.             mProductType = productType
  58.             caller.startActivity(intent)
  59.         }
  60.     }
  61.  
  62.     override fun onCreate(savedInstanceState: Bundle?) {
  63.         super.onCreate(savedInstanceState)
  64.         binding = ActivityOpenAccountNonSuccessBinding.inflate(layoutInflater)
  65.         setContentView(binding.root)
  66.         injectDependency()
  67.         setupView()
  68.     }
  69.  
  70.     private fun injectDependency() {
  71.         presenter.view = this
  72.         presenter.start()
  73.     }
  74.  
  75.     private fun setupView() {
  76.         with(binding) {
  77.             setStatusColorAndStatusBar(R.color.highlightColor, View.SYSTEM_UI_FLAG_VISIBLE)
  78.             tvContactSubtitle.text = mPendingResponse?.contactInfo?.description
  79.  
  80.             tvTitleTime.text = mPendingResponse?.transactionDate
  81.  
  82.             when (mStatus) {
  83.                 STATUS.PENDING -> {
  84.                     animationView.setImageResource(R.drawable.hour_glass_pending)
  85.                     tvTitle.text = getString(R.string.open_account_pending_title)
  86.                     buttonPrimary.text = getString(R.string.retry)
  87.                     buttonPrimary.setOnClickListener {
  88.                         presenter.checkStatus(
  89.                             endpointUrl = setPaymentEndpointUrl(),
  90.                             referenceNumber = mPendingResponse?.referenceNumber.orEmpty()
  91.                         )
  92.                     }
  93.                     buttonSecondary.text = getString(R.string.help_center)
  94.                     buttonSecondary.setOnClickListener {
  95.                         //TODO Pusat Banuan
  96.                     }
  97.                 }
  98.                 STATUS.FAILED -> {
  99.                     animationView.setImageResource(R.drawable.ic_open_account_failed)
  100.                     tvTitle.text = getString(R.string.open_account_failed_title)
  101.                     buttonPrimary.text = getString(R.string.create_report)
  102.                     buttonPrimary.setOnClickListener {
  103.                         //TODO Buat laporan
  104.                     }
  105.                     buttonSecondary.text = getString(R.string.mengerti)
  106.                     buttonSecondary.setOnClickListener {
  107.                         startActivity(
  108.                             Intent(
  109.                                 this@OpenAccountNonSuccessActivity,
  110.                                 DashboardIBReskinActivity::class.java
  111.                             )
  112.                         )
  113.                         finish()
  114.                     }
  115.                 }
  116.             }
  117.             initDetail()
  118.         }
  119.     }
  120.  
  121.     private fun initDetail() {
  122.         binding.llSeeDetail.setOnClickListener {
  123.             if (isHide) {
  124.                 isHiding(false)
  125.             } else {
  126.                 isHiding(true)
  127.             }
  128.         }
  129.  
  130.         binding.rvReferenceView.apply {
  131.             setHasFixedSize(true)
  132.             layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
  133.             detailTransaksiRevampAdapter =
  134.                 DetailTransaksiRevampAdapter(mPendingResponse?.referenceDataView, context)
  135.             adapter = detailTransaksiRevampAdapter
  136.         }
  137.  
  138.         binding.rvHeaderDataView.apply {
  139.             setHasFixedSize(true)
  140.             layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
  141.             detailTransaksiRevampAdapter =
  142.                 DetailTransaksiRevampAdapter(mPendingResponse?.headerDataView, context)
  143.             adapter = detailTransaksiRevampAdapter
  144.         }
  145.  
  146.         binding.rvNomorRekening.apply {
  147.             setHasFixedSize(true)
  148.             layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
  149.             detailTransaksiRevampAdapter =
  150.                 DetailTransaksiRevampAdapter(mPendingResponse?.transactionDataViewPending, context)
  151.             adapter = detailTransaksiRevampAdapter
  152.         }
  153.  
  154.         binding.rvSetoranAwal.apply {
  155.             setHasFixedSize(true)
  156.             layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
  157.             sumberTransaksiRevAdapter =
  158.                 DetailTransaksiRevampAdapter(mPendingResponse?.amountDataView, context)
  159.             adapter = sumberTransaksiRevAdapter
  160.         }
  161.  
  162.         if (mPendingResponse?.amountDataView == null) {
  163.             binding.viewAmountDataView.visibility = View.GONE
  164.         }
  165.     }
  166.  
  167.     private fun setPaymentEndpointUrl(): String {
  168.         return when {
  169.             //Britama
  170.             mProductType.equals("TA", ignoreCase = true) -> {
  171.                 ""
  172.             }
  173.             //Valas
  174.             mProductType.equals("TM", ignoreCase = true) -> {
  175.                 V3_OPEN_ACCOUNT_VALAS_PAYMENT
  176.             }
  177.             //Bisnis
  178.             mProductType.equals("VM", ignoreCase = true) -> {
  179.                 ""
  180.             }
  181.             //Rencana
  182.             mProductType.equals("BF", ignoreCase = true) -> {
  183.                 ""
  184.             }
  185.             //Junio
  186.             mProductType.equals("VA", ignoreCase = true) -> {
  187.                 V3_OPEN_ACCOUNT_JUNIO_PAYMENT
  188.             }
  189.             else -> ""
  190.         }
  191.     }
  192.  
  193.  
  194.     private fun isHiding(isHiding: Boolean) {
  195.         isHide = isHiding
  196.         binding.tvDetail.text = if (isHiding) getString(R.string.sembunyikan) else getString(R.string.lihat_detail)
  197.  
  198.         val rotationAngle = if (isHiding) 180f else 0f
  199.         binding.ivDetailArrow.animate().rotation(rotationAngle).setDuration(300).start()
  200.  
  201.         if (isHiding) {
  202.             binding.llDetail.visible()
  203.             binding.llContact.visible()
  204.  
  205.             binding.llDetail.post {
  206.                 binding.llDetail.measure(
  207.                     View.MeasureSpec.makeMeasureSpec(binding.llDetail.width, View.MeasureSpec.EXACTLY),
  208.                     View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
  209.                 )
  210.                 val targetHeight = binding.llDetail.measuredHeight
  211.  
  212.                 runHeightAnimator(0, targetHeight)
  213.             }
  214.         } else {
  215.             val initialHeight = binding.llDetail.height
  216.             runHeightAnimator(initialHeight, 0) {
  217.                 binding.llDetail.gone()
  218.                 binding.llContact.gone()
  219.             }
  220.         }
  221.     }
  222.  
  223.     private fun runHeightAnimator(start: Int, end: Int, onEnd: (() -> Unit)? = null) {
  224.         ValueAnimator.ofInt(start, end).apply {
  225.             duration = 300
  226.             addUpdateListener { animation ->
  227.                 binding.llDetail.layoutParams.height = animation.animatedValue as Int
  228.                 binding.llDetail.requestLayout()
  229.             }
  230.             addListener(object : AnimatorListenerAdapter() {
  231.                 override fun onAnimationEnd(animation: Animator) {
  232.                     onEnd?.invoke()
  233.                 }
  234.             })
  235.             start()
  236.         }
  237.     }
  238.  
  239.     override fun onSuccessCheckStatus(data: ReceiptRevampResponse) {
  240.         ReceiptTabunganNewSkinActivity.launchIntent(
  241.             this,
  242.             data,
  243.             false,
  244.             getString(R.string.txt_btn_selesai),
  245.         )
  246.     }
  247.  
  248.     override fun onPendingCheckStatus(data: ReceiptRevampResponse) {
  249.         launchIntent(
  250.             this,
  251.             data,
  252.             STATUS.PENDING,
  253.             mProductType
  254.         )
  255.         finish()
  256.     }
  257.  
  258.     override fun onFailedCheckStatus(data: ReceiptRevampResponse) {
  259.         launchIntent(
  260.             this,
  261.             data,
  262.             STATUS.FAILED,
  263.             mProductType
  264.         )
  265.         finish()
  266.     }
  267.  
  268.     override fun onDestroy() {
  269.         presenter.stop()
  270.         super.onDestroy()
  271.     }
  272. }
Advertisement
Add Comment
Please, Sign In to add comment