Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package id.digiva.health.presentation.onboarding.register.form.identity
- import android.app.Activity
- import android.os.Bundle
- import android.view.View
- import android.widget.AdapterView
- import android.widget.ArrayAdapter
- import androidx.fragment.app.Fragment
- import com.google.android.material.snackbar.Snackbar
- import id.digiva.health.R
- import id.digiva.health.common.extension.makeGone
- import id.digiva.health.common.extension.makeVisible
- import id.digiva.health.common.extension.setSingleClick
- import id.digiva.health.common.helper.Constants.KTP
- import id.digiva.health.common.helper.Constants.MAN
- import id.digiva.health.common.helper.Constants.WOMAN
- import id.digiva.health.dependencies.scope.onboarding.OnBoardingComponent
- import id.digiva.health.presentation.onboarding.BaseOnBoardingFragment
- import id.digiva.health.presentation.onboarding.register.RegisterActivity
- import kotlinx.android.synthetic.main.fragment_onboarding_register_identity.*
- import javax.inject.Inject
- class RegisterIdentityFragment :
- BaseOnBoardingFragment(),
- RegisterIdentityContract.View {
- @Inject
- lateinit var presenter: RegisterIdentityContract.Presenter
- // TODO: Selain spinner bisa tanpa variabel gini harusnya
- private var identityTypeData = "ktp"
- private var identityNumber = ""
- private var gender = ""
- private var selectedItemSpinner = "KTP"
- override fun attach() {
- presenter.attach(this)
- }
- override fun detach() {
- presenter.detach()
- }
- override fun contentLayoutRes(): Int = R.layout.fragment_onboarding_register_identity
- override fun injectComponent(component: OnBoardingComponent) {
- component.inject(this)
- }
- override fun onResume() {
- super.onResume()
- presenter.getCachedData()
- }
- // TODO: Ini ngepause kok malah get data?
- override fun onPause() {
- getViewData()
- presenter.onSaveUserDataCredentials()
- super.onPause()
- }
- // TODO: presenter.getCachedData() mau ditaro di initViews apa di onResume? ini akan dipanggil 2x jadinya pas pertama kali masuk screen ini
- override fun initViews() {
- initSpinner()
- initActions()
- presenter.getCachedData()
- }
- // TODO: Context gak boleh masuk presenter dong
- override fun getViewContext(): Activity = requireActivity()
- override fun getName(): String = edit_text_name.text.toString()
- // TODO: Ini mau dihardcode apa nggak? Deadcode soalnya si variable-nya ibarat konstan doang
- override fun getIdType(): String = identityTypeData
- override fun getSelectedItemSpinner(): String = selectedItemSpinner
- override fun getIdNumber(): String = identityNumber
- override fun getGender(): String = gender
- // TODO: Baiknya kalo show ditaro di dalam methodnya, kalo get baru langsung begini gapapa
- override fun showSpinnerSelection(position: Int) = spinner_type_identity.setSelection(position)
- override fun setKtpFieldVisible() {
- if (isVisible) {
- text_layout_ktp.makeVisible()
- text_layout_other_id_card.makeGone()
- }
- }
- override fun setOthersFieldVisible() {
- if (isVisible) {
- text_layout_ktp.makeGone()
- text_layout_other_id_card.makeVisible()
- }
- }
- override fun setKtpFieldData(idNumber: String) = edit_text_ktp.setText(idNumber)
- override fun setOthersFieldData(idNumber: String) = edit_text_other_id_card.setText(idNumber)
- // TODO: Nah ini contohnya, biar konsisten harusnya kayak yang bawah bukan yang atas
- override fun setGenderMale() {
- radio_male.isChecked = true
- }
- override fun setGenderFemale() {
- radio_female.isChecked = true
- }
- private fun initSpinner() {
- spinner_type_identity.apply {
- adapter = ArrayAdapter(
- requireActivity(),
- android.R.layout.simple_spinner_dropdown_item,
- ArrayList(resources.getStringArray(R.array.type_identity).toMutableList())
- )
- onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>,
- view: View,
- position: Int,
- id: Long
- ) {
- selectedItemSpinner = parent.selectedItem.toString()
- presenter.onCheckedSpinnerSelected()
- }
- override fun onNothingSelected(parent: AdapterView<*>) {}
- }
- }
- }
- private fun getViewData() {
- // TODO: Nah ini yang gua bilang diatas, ini bisa dijadiin 1 API dari interface jd gabutuh variabel lagi
- // Kurleb begini
- /*override fun getGender(): String {
- return when (radio_male.isChecked) {
- true -> MAN
- false -> WOMAN
- }
- }*/
- gender = when (radio_male.isChecked) {
- true -> MAN
- false -> WOMAN
- }
- identityNumber = when (KTP) {
- spinner_type_identity.selectedItem.toString() -> edit_text_ktp.text.toString()
- else -> edit_text_other_id_card.text.toString()
- }
- }
- private fun initActions() {
- btn_next.setSingleClick {
- // TODO: Kenapa harus getViewData lagi ya ditiap neken next?
- getViewData()
- presenter.onCheckedIdentityData()
- }
- }
- // TODO: Ini snackbar gak usah dibikin API di interface, karena orang lain gak akan tau konteksnya untuk apa
- // baiknya showSnackbar dibuat private method, dan dari presenter diperjelas konteksnya
- // contoh : view()?.showFormUnfilledError()
- override fun showSnackBar(messageToShow: String) =
- Snackbar.make(coordinator_register_identity, messageToShow, Snackbar.LENGTH_LONG).show()
- // TODO: Ini juga kurang konteksnya, mungkin lebih baik view()?.showNameFieldError(R.string.error_nya_ini)
- // Karena kalo parse string di presenter si presenter butuh view, baiknya gak ngambil dari view tapi lempar aja resource id-nya ke view
- override fun setLayoutNameError(messageToShow: String) {
- // showNameFieldError(message: Int)
- // Jadinya nanti akan getString(message)
- text_layout_name.error = messageToShow
- }
- override fun setLayoutKtpError(messageToShow: String) {
- text_layout_ktp.error = messageToShow
- }
- override fun setLayoutOtherIdError(messageToShow: String) {
- text_layout_other_id_card.error = messageToShow
- }
- override fun hideLayoutNameError() {
- text_layout_name.error = null
- }
- override fun hideLayoutKtpError() {
- text_layout_ktp.error = null
- }
- override fun hideLayoutOtherIdError() {
- text_layout_other_id_card.error = null
- }
- override fun onNextFragment() {
- (context as RegisterActivity).onNext()
- }
- companion object {
- val TAG = RegisterIdentityFragment::class.java.simpleName
- fun getInstance(): Fragment {
- return RegisterIdentityFragment()
- .apply { arguments = Bundle() }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement