Pahlevi-kun

TODOS

Aug 6th, 2020 (edited)
1,347
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package id.digiva.health.presentation.onboarding.register.form.identity
  2.  
  3. import android.app.Activity
  4. import android.os.Bundle
  5. import android.view.View
  6. import android.widget.AdapterView
  7. import android.widget.ArrayAdapter
  8. import androidx.fragment.app.Fragment
  9. import com.google.android.material.snackbar.Snackbar
  10. import id.digiva.health.R
  11. import id.digiva.health.common.extension.makeGone
  12. import id.digiva.health.common.extension.makeVisible
  13. import id.digiva.health.common.extension.setSingleClick
  14. import id.digiva.health.common.helper.Constants.KTP
  15. import id.digiva.health.common.helper.Constants.MAN
  16. import id.digiva.health.common.helper.Constants.WOMAN
  17. import id.digiva.health.dependencies.scope.onboarding.OnBoardingComponent
  18. import id.digiva.health.presentation.onboarding.BaseOnBoardingFragment
  19. import id.digiva.health.presentation.onboarding.register.RegisterActivity
  20. import kotlinx.android.synthetic.main.fragment_onboarding_register_identity.*
  21. import javax.inject.Inject
  22.  
  23. class RegisterIdentityFragment :
  24.         BaseOnBoardingFragment(),
  25.         RegisterIdentityContract.View {
  26.  
  27.     @Inject
  28.     lateinit var presenter: RegisterIdentityContract.Presenter
  29.  
  30.     // TODO: Selain spinner bisa tanpa variabel gini harusnya
  31.     private var identityTypeData = "ktp"
  32.     private var identityNumber = ""
  33.     private var gender = ""
  34.     private var selectedItemSpinner = "KTP"
  35.  
  36.     override fun attach() {
  37.         presenter.attach(this)
  38.     }
  39.  
  40.     override fun detach() {
  41.         presenter.detach()
  42.     }
  43.  
  44.     override fun contentLayoutRes(): Int = R.layout.fragment_onboarding_register_identity
  45.  
  46.     override fun injectComponent(component: OnBoardingComponent) {
  47.         component.inject(this)
  48.     }
  49.  
  50.     override fun onResume() {
  51.         super.onResume()
  52.         presenter.getCachedData()
  53.     }
  54.  
  55.     // TODO: Ini ngepause kok malah get data?
  56.     override fun onPause() {
  57.         getViewData()
  58.         presenter.onSaveUserDataCredentials()
  59.         super.onPause()
  60.     }
  61.  
  62.     // TODO: presenter.getCachedData() mau ditaro di initViews apa di onResume? ini akan dipanggil 2x jadinya pas pertama kali masuk screen ini
  63.     override fun initViews() {
  64.         initSpinner()
  65.         initActions()
  66.         presenter.getCachedData()
  67.     }
  68.  
  69.     // TODO: Context gak boleh masuk presenter dong
  70.     override fun getViewContext(): Activity = requireActivity()
  71.  
  72.     override fun getName(): String = edit_text_name.text.toString()
  73.  
  74.     // TODO: Ini mau dihardcode apa nggak? Deadcode soalnya si variable-nya ibarat konstan doang
  75.     override fun getIdType(): String = identityTypeData
  76.  
  77.     override fun getSelectedItemSpinner(): String = selectedItemSpinner
  78.  
  79.     override fun getIdNumber(): String = identityNumber
  80.  
  81.     override fun getGender(): String = gender
  82.  
  83.     // TODO: Baiknya kalo show ditaro di dalam methodnya, kalo get baru langsung begini gapapa
  84.     override fun showSpinnerSelection(position: Int) = spinner_type_identity.setSelection(position)
  85.  
  86.     override fun setKtpFieldVisible() {
  87.         if (isVisible) {
  88.             text_layout_ktp.makeVisible()
  89.             text_layout_other_id_card.makeGone()
  90.         }
  91.     }
  92.  
  93.     override fun setOthersFieldVisible() {
  94.         if (isVisible) {
  95.             text_layout_ktp.makeGone()
  96.             text_layout_other_id_card.makeVisible()
  97.         }
  98.     }
  99.  
  100.     override fun setKtpFieldData(idNumber: String) = edit_text_ktp.setText(idNumber)
  101.  
  102.     override fun setOthersFieldData(idNumber: String) = edit_text_other_id_card.setText(idNumber)
  103.  
  104.     // TODO: Nah ini contohnya, biar konsisten harusnya kayak yang bawah bukan yang atas
  105.     override fun setGenderMale() {
  106.         radio_male.isChecked = true
  107.     }
  108.  
  109.     override fun setGenderFemale() {
  110.         radio_female.isChecked = true
  111.     }
  112.  
  113.     private fun initSpinner() {
  114.         spinner_type_identity.apply {
  115.             adapter = ArrayAdapter(
  116.                     requireActivity(),
  117.                     android.R.layout.simple_spinner_dropdown_item,
  118.                     ArrayList(resources.getStringArray(R.array.type_identity).toMutableList())
  119.             )
  120.             onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
  121.                 override fun onItemSelected(
  122.                         parent: AdapterView<*>,
  123.                         view: View,
  124.                         position: Int,
  125.                         id: Long
  126.                 ) {
  127.                     selectedItemSpinner = parent.selectedItem.toString()
  128.                     presenter.onCheckedSpinnerSelected()
  129.                 }
  130.  
  131.                 override fun onNothingSelected(parent: AdapterView<*>) {}
  132.             }
  133.         }
  134.     }
  135.  
  136.     private fun getViewData() {
  137.         // TODO: Nah ini yang gua bilang diatas, ini bisa dijadiin 1 API dari interface jd gabutuh variabel lagi
  138.         // Kurleb begini
  139.         /*override fun getGender(): String {
  140.             return when (radio_male.isChecked) {
  141.                 true -> MAN
  142.                 false -> WOMAN
  143.             }
  144.         }*/
  145.         gender = when (radio_male.isChecked) {
  146.             true -> MAN
  147.             false -> WOMAN
  148.         }
  149.         identityNumber = when (KTP) {
  150.             spinner_type_identity.selectedItem.toString() -> edit_text_ktp.text.toString()
  151.             else -> edit_text_other_id_card.text.toString()
  152.         }
  153.     }
  154.  
  155.     private fun initActions() {
  156.         btn_next.setSingleClick {
  157.             // TODO: Kenapa harus getViewData lagi ya ditiap neken next?
  158.             getViewData()
  159.             presenter.onCheckedIdentityData()
  160.         }
  161.     }
  162.  
  163.     // TODO: Ini snackbar gak usah dibikin API di interface, karena orang lain gak akan tau konteksnya untuk apa
  164.     // baiknya showSnackbar dibuat private method, dan dari presenter diperjelas konteksnya
  165.     // contoh : view()?.showFormUnfilledError()
  166.     override fun showSnackBar(messageToShow: String) =
  167.             Snackbar.make(coordinator_register_identity, messageToShow, Snackbar.LENGTH_LONG).show()
  168.  
  169.     // TODO: Ini juga kurang konteksnya, mungkin lebih baik view()?.showNameFieldError(R.string.error_nya_ini)
  170.     // Karena kalo parse string di presenter si presenter butuh view, baiknya gak ngambil dari view tapi lempar aja resource id-nya ke view
  171.     override fun setLayoutNameError(messageToShow: String) {
  172.         // showNameFieldError(message: Int)
  173.         // Jadinya nanti akan getString(message)
  174.         text_layout_name.error = messageToShow
  175.     }
  176.  
  177.     override fun setLayoutKtpError(messageToShow: String) {
  178.         text_layout_ktp.error = messageToShow
  179.     }
  180.  
  181.     override fun setLayoutOtherIdError(messageToShow: String) {
  182.         text_layout_other_id_card.error = messageToShow
  183.     }
  184.  
  185.     override fun hideLayoutNameError() {
  186.         text_layout_name.error = null
  187.     }
  188.  
  189.     override fun hideLayoutKtpError() {
  190.         text_layout_ktp.error = null
  191.     }
  192.  
  193.     override fun hideLayoutOtherIdError() {
  194.         text_layout_other_id_card.error = null
  195.     }
  196.  
  197.     override fun onNextFragment() {
  198.         (context as RegisterActivity).onNext()
  199.     }
  200.  
  201.     companion object {
  202.         val TAG = RegisterIdentityFragment::class.java.simpleName
  203.  
  204.         fun getInstance(): Fragment {
  205.             return RegisterIdentityFragment()
  206.                     .apply { arguments = Bundle() }
  207.         }
  208.     }
  209. }
RAW Paste Data