fix: manually state restore #132

Closed
septs wants to merge 1 commit from septs:manually-state-restore into master
2 changed files with 48 additions and 37 deletions

View file

@ -194,28 +194,27 @@ class DownloadWizardActivity: BaseEuiccAccessActivity() {
abstract class DownloadWizardStepFragment : Fragment(), OpenEuiccContextMarker { abstract class DownloadWizardStepFragment : Fragment(), OpenEuiccContextMarker {
protected val state: DownloadWizardState protected val state: DownloadWizardState
get() = (requireActivity() as DownloadWizardActivity).state get() = wizardActivity.state
abstract val hasNext: Boolean abstract val hasNext: Boolean
abstract val hasPrev: Boolean abstract val hasPrev: Boolean
abstract fun createNextFragment(): DownloadWizardStepFragment? abstract fun createNextFragment(): DownloadWizardStepFragment?
abstract fun createPrevFragment(): DownloadWizardStepFragment? abstract fun createPrevFragment(): DownloadWizardStepFragment?
private val wizardActivity: DownloadWizardActivity
get() = requireActivity() as DownloadWizardActivity
protected fun gotoNextFragment(next: DownloadWizardStepFragment? = null) { protected fun gotoNextFragment(next: DownloadWizardStepFragment? = null) {
val realNext = next ?: createNextFragment() val realNext = next ?: createNextFragment()
(requireActivity() as DownloadWizardActivity).showFragment( wizardActivity.showFragment(realNext!!, R.anim.slide_in_right, R.anim.slide_out_left)
realNext!!,
R.anim.slide_in_right,
R.anim.slide_out_left
)
} }
protected fun hideProgressBar() { protected fun hideProgressBar() {
(requireActivity() as DownloadWizardActivity).progressBar.visibility = View.GONE wizardActivity.progressBar.visibility = View.GONE
} }
protected fun showProgressBar(progressValue: Int) { protected fun showProgressBar(progressValue: Int) {
(requireActivity() as DownloadWizardActivity).progressBar.apply { wizardActivity.progressBar.apply {
visibility = View.VISIBLE visibility = View.VISIBLE
if (progressValue >= 0) { if (progressValue >= 0) {
isIndeterminate = false isIndeterminate = false
@ -227,7 +226,7 @@ class DownloadWizardActivity: BaseEuiccAccessActivity() {
} }
protected fun refreshButtons() { protected fun refreshButtons() {
(requireActivity() as DownloadWizardActivity).refreshButtons() wizardActivity.refreshButtons()
} }
open fun beforeNext() {} open fun beforeNext() {}

View file

@ -5,11 +5,19 @@ import android.util.Patterns
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.EditText
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import im.angry.openeuicc.common.R import im.angry.openeuicc.common.R
class DownloadWizardDetailsFragment : DownloadWizardActivity.DownloadWizardStepFragment() { 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 private var inputComplete = false
override val hasNext: Boolean override val hasNext: Boolean
@ -17,17 +25,17 @@ class DownloadWizardDetailsFragment : DownloadWizardActivity.DownloadWizardStepF
override val hasPrev: Boolean override val hasPrev: Boolean
get() = true get() = true
private lateinit var smdp: TextInputLayout private lateinit var smdp: EditText
private lateinit var matchingId: TextInputLayout private lateinit var matchingId: EditText
private lateinit var confirmationCode: TextInputLayout private lateinit var confirmationCode: EditText
private lateinit var imei: TextInputLayout private lateinit var imei: EditText
override fun beforeNext() { 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 // Treat empty inputs as null -- this is important for the download step
state.matchingId = matchingId.editText!!.text.toString().trim().ifBlank { null } state.matchingId = matchingId.text.toString().trim().ifBlank { null }
state.confirmationCode = confirmationCode.editText!!.text.toString().trim().ifBlank { null } state.confirmationCode = confirmationCode.text.toString().trim().ifBlank { null }
state.imei = imei.editText!!.text.toString().ifBlank { null } state.imei = imei.text.toString().ifBlank { null }
} }
override fun createNextFragment(): DownloadWizardActivity.DownloadWizardStepFragment = override fun createNextFragment(): DownloadWizardActivity.DownloadWizardStepFragment =
@ -40,29 +48,33 @@ class DownloadWizardDetailsFragment : DownloadWizardActivity.DownloadWizardStepF
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? = inflater.inflate(R.layout.fragment_download_details, container, false).apply {
val view = inflater.inflate(R.layout.fragment_download_details, container, false) smdp = requireViewById<TextInputLayout>(R.id.profile_download_server).editText!!
smdp = view.requireViewById(R.id.profile_download_server) matchingId = requireViewById<TextInputLayout>(R.id.profile_download_code).editText!!
matchingId = view.requireViewById(R.id.profile_download_code) confirmationCode = requireViewById<TextInputLayout>(R.id.profile_download_confirmation_code).editText!!
confirmationCode = view.requireViewById(R.id.profile_download_confirmation_code) imei = requireViewById<TextInputLayout>(R.id.profile_download_imei).editText!!
imei = view.requireViewById(R.id.profile_download_imei) smdp.addTextChangedListener { updateInputCompleteness() }
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()
} }
private fun updateInputCompleteness() { private fun updateInputCompleteness() {
inputComplete = Patterns.DOMAIN_NAME.matcher(smdp.editText!!.text).matches() inputComplete = Patterns.DOMAIN_NAME.matcher(smdp.text).matches()
refreshButtons() refreshButtons()
} }
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString(FIELD_SMDP, smdp.text.toString())
Review

DownloadWizardActivity already has state. We should just store it there in this function.

That would remove the need for onViewStateRestored as well.

`DownloadWizardActivity` already has state. We should just store it there in this function. That would remove the need for `onViewStateRestored` as well.
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()
}
} }