fix: manually state restore #132
2 changed files with 48 additions and 37 deletions
|
@ -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() {}
|
||||
|
|
|
@ -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<TextInputLayout>(R.id.profile_download_server).editText!!
|
||||
matchingId = requireViewById<TextInputLayout>(R.id.profile_download_code).editText!!
|
||||
confirmationCode = requireViewById<TextInputLayout>(R.id.profile_download_confirmation_code).editText!!
|
||||
imei = requireViewById<TextInputLayout>(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()
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue
DownloadWizardActivity
already has state. We should just store it there in this function.That would remove the need for
onViewStateRestored
as well.