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 {
|
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() {}
|
||||||
|
|
|
@ -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())
|
||||||
|
|||||||
|
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.