Browse Source

ui: wizard: Save current state to bundle

Peter Cai 1 year ago
parent
commit
e7a0482281

+ 38 - 1
app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardActivity.kt

@@ -16,6 +16,7 @@ import im.angry.openeuicc.util.*
 
 
 class DownloadWizardActivity: BaseEuiccAccessActivity() {
 class DownloadWizardActivity: BaseEuiccAccessActivity() {
     data class DownloadWizardState(
     data class DownloadWizardState(
+        var currentStepFragmentClassName: String?,
         var selectedLogicalSlot: Int,
         var selectedLogicalSlot: Int,
         var smdp: String,
         var smdp: String,
         var matchingId: String,
         var matchingId: String,
@@ -30,6 +31,12 @@ class DownloadWizardActivity: BaseEuiccAccessActivity() {
     private lateinit var prevButton: Button
     private lateinit var prevButton: Button
 
 
     private var currentFragment: DownloadWizardStepFragment? = null
     private var currentFragment: DownloadWizardStepFragment? = null
+        set(value) {
+            if (this::state.isInitialized) {
+                state.currentStepFragmentClassName = value?.javaClass?.name
+            }
+            field = value
+        }
 
 
     override fun onCreate(savedInstanceState: Bundle?) {
     override fun onCreate(savedInstanceState: Bundle?) {
         enableEdgeToEdge()
         enableEdgeToEdge()
@@ -43,6 +50,7 @@ class DownloadWizardActivity: BaseEuiccAccessActivity() {
         })
         })
 
 
         state = DownloadWizardState(
         state = DownloadWizardState(
+            null,
             intent.getIntExtra("selectedLogicalSlot", 0),
             intent.getIntExtra("selectedLogicalSlot", 0),
             "",
             "",
             "",
             "",
@@ -88,6 +96,29 @@ class DownloadWizardActivity: BaseEuiccAccessActivity() {
         }
         }
     }
     }
 
 
+    override fun onSaveInstanceState(outState: Bundle) {
+        super.onSaveInstanceState(outState)
+        outState.putString("currentStepFragmentClassName", state.currentStepFragmentClassName)
+        outState.putInt("selectedLogicalSlot", state.selectedLogicalSlot)
+        outState.putString("smdp", state.smdp)
+        outState.putString("matchingId", state.matchingId)
+        outState.putString("confirmationCode", state.confirmationCode)
+        outState.putString("imei", state.imei)
+    }
+
+    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
+        super.onRestoreInstanceState(savedInstanceState)
+        state.currentStepFragmentClassName = savedInstanceState.getString(
+            "currentStepFragmentClassName",
+            state.currentStepFragmentClassName
+        )
+        state.selectedLogicalSlot =
+            savedInstanceState.getInt("selectedLogicalSlot", state.selectedLogicalSlot)
+        state.smdp = savedInstanceState.getString("smdp", state.smdp)
+        state.matchingId = savedInstanceState.getString("matchingId", state.matchingId)
+        state.imei = savedInstanceState.getString("imei", state.imei)
+    }
+
     private fun onPrevPressed() {
     private fun onPrevPressed() {
         if (currentFragment?.hasPrev == true) {
         if (currentFragment?.hasPrev == true) {
             val prevFrag = currentFragment?.createPrevFragment()
             val prevFrag = currentFragment?.createPrevFragment()
@@ -112,7 +143,13 @@ class DownloadWizardActivity: BaseEuiccAccessActivity() {
 
 
     override fun onInit() {
     override fun onInit() {
         progressBar.visibility = View.GONE
         progressBar.visibility = View.GONE
-        showFragment(DownloadWizardSlotSelectFragment())
+
+        if (state.currentStepFragmentClassName != null) {
+            val clazz = Class.forName(state.currentStepFragmentClassName!!)
+            showFragment(clazz.getDeclaredConstructor().newInstance() as DownloadWizardStepFragment)
+        } else {
+            showFragment(DownloadWizardSlotSelectFragment())
+        }
     }
     }
 
 
     private fun showFragment(
     private fun showFragment(