From 4f6e96ccf954c64eab50b74401e7e0af37ee6bf0 Mon Sep 17 00:00:00 2001 From: septs Date: Thu, 19 Dec 2024 01:00:02 +0800 Subject: [PATCH] fix: manually state restore --- .../ui/wizard/DownloadWizardActivity.kt | 17 +++-- .../wizard/DownloadWizardDetailsFragment.kt | 68 +++++++++++-------- 2 files changed, 48 insertions(+), 37 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardActivity.kt index 6d810cf..6f44323 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardActivity.kt @@ -194,28 +194,27 @@ class DownloadWizardActivity: BaseEuiccAccessActivity() { abstract class DownloadWizardStepFragment : Fragment(), OpenEuiccContextMarker { protected val state: DownloadWizardState - get() = (requireActivity() as DownloadWizardActivity).state + get() = wizardActivity.state abstract val hasNext: Boolean abstract val hasPrev: Boolean abstract fun createNextFragment(): DownloadWizardStepFragment? abstract fun createPrevFragment(): DownloadWizardStepFragment? + private val wizardActivity: DownloadWizardActivity + get() = requireActivity() as DownloadWizardActivity + protected fun gotoNextFragment(next: DownloadWizardStepFragment? = null) { val realNext = next ?: createNextFragment() - (requireActivity() as DownloadWizardActivity).showFragment( - realNext!!, - R.anim.slide_in_right, - R.anim.slide_out_left - ) + wizardActivity.showFragment(realNext!!, R.anim.slide_in_right, R.anim.slide_out_left) } protected fun hideProgressBar() { - (requireActivity() as DownloadWizardActivity).progressBar.visibility = View.GONE + wizardActivity.progressBar.visibility = View.GONE } protected fun showProgressBar(progressValue: Int) { - (requireActivity() as DownloadWizardActivity).progressBar.apply { + wizardActivity.progressBar.apply { visibility = View.VISIBLE if (progressValue >= 0) { isIndeterminate = false @@ -227,7 +226,7 @@ class DownloadWizardActivity: BaseEuiccAccessActivity() { } protected fun refreshButtons() { - (requireActivity() as DownloadWizardActivity).refreshButtons() + wizardActivity.refreshButtons() } open fun beforeNext() {} diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardDetailsFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardDetailsFragment.kt index eb36710..ffb5642 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardDetailsFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardDetailsFragment.kt @@ -5,11 +5,19 @@ import android.util.Patterns import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.EditText import androidx.core.widget.addTextChangedListener import com.google.android.material.textfield.TextInputLayout import im.angry.openeuicc.common.R class DownloadWizardDetailsFragment : DownloadWizardActivity.DownloadWizardStepFragment() { + companion object { + const val FIELD_SMDP = "smdp" + const val FIELD_MATCHING_ID = "matchingId" + const val FIELD_CONFIRMATION_CODE = "confirmationCode" + const val FIELD_IMEI = "imei" + } + private var inputComplete = false override val hasNext: Boolean @@ -17,17 +25,17 @@ class DownloadWizardDetailsFragment : DownloadWizardActivity.DownloadWizardStepF override val hasPrev: Boolean get() = true - private lateinit var smdp: TextInputLayout - private lateinit var matchingId: TextInputLayout - private lateinit var confirmationCode: TextInputLayout - private lateinit var imei: TextInputLayout + private lateinit var smdp: EditText + private lateinit var matchingId: EditText + private lateinit var confirmationCode: EditText + private lateinit var imei: EditText override fun beforeNext() { - state.smdp = smdp.editText!!.text.toString().trim() + state.smdp = smdp.text.toString().trim() // Treat empty inputs as null -- this is important for the download step - state.matchingId = matchingId.editText!!.text.toString().trim().ifBlank { null } - state.confirmationCode = confirmationCode.editText!!.text.toString().trim().ifBlank { null } - state.imei = imei.editText!!.text.toString().ifBlank { null } + state.matchingId = matchingId.text.toString().trim().ifBlank { null } + state.confirmationCode = confirmationCode.text.toString().trim().ifBlank { null } + state.imei = imei.text.toString().ifBlank { null } } override fun createNextFragment(): DownloadWizardActivity.DownloadWizardStepFragment = @@ -40,29 +48,33 @@ class DownloadWizardDetailsFragment : DownloadWizardActivity.DownloadWizardStepF inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - val view = inflater.inflate(R.layout.fragment_download_details, container, false) - smdp = view.requireViewById(R.id.profile_download_server) - matchingId = view.requireViewById(R.id.profile_download_code) - confirmationCode = view.requireViewById(R.id.profile_download_confirmation_code) - imei = view.requireViewById(R.id.profile_download_imei) - smdp.editText!!.addTextChangedListener { - updateInputCompleteness() - } - return view - } - - override fun onStart() { - super.onStart() - smdp.editText!!.setText(state.smdp) - matchingId.editText!!.setText(state.matchingId) - confirmationCode.editText!!.setText(state.confirmationCode) - imei.editText!!.setText(state.imei) - updateInputCompleteness() + ): View? = inflater.inflate(R.layout.fragment_download_details, container, false).apply { + smdp = requireViewById(R.id.profile_download_server).editText!! + matchingId = requireViewById(R.id.profile_download_code).editText!! + confirmationCode = requireViewById(R.id.profile_download_confirmation_code).editText!! + imei = requireViewById(R.id.profile_download_imei).editText!! + smdp.addTextChangedListener { updateInputCompleteness() } } private fun updateInputCompleteness() { - inputComplete = Patterns.DOMAIN_NAME.matcher(smdp.editText!!.text).matches() + inputComplete = Patterns.DOMAIN_NAME.matcher(smdp.text).matches() refreshButtons() } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + outState.putString(FIELD_SMDP, smdp.text.toString()) + outState.putString(FIELD_MATCHING_ID, matchingId.text.toString()) + outState.putString(FIELD_CONFIRMATION_CODE, confirmationCode.text.toString()) + outState.putString(FIELD_IMEI, imei.text.toString()) + } + + override fun onViewStateRestored(savedInstanceState: Bundle?) { + super.onViewStateRestored(savedInstanceState) + smdp.setText(savedInstanceState?.getString(FIELD_SMDP) ?: state.smdp) + matchingId.setText(savedInstanceState?.getString(FIELD_MATCHING_ID) ?: state.matchingId) + confirmationCode.setText(savedInstanceState?.getString(FIELD_CONFIRMATION_CODE) ?: state.confirmationCode) + imei.setText(savedInstanceState?.getString(FIELD_IMEI) ?: state.imei) + updateInputCompleteness() + } } \ No newline at end of file -- 2.45.3