Browse Source

ProfileDownloadFragment: support finishing activity when done

Peter Cai 2 years ago
parent
commit
efeaea2567

+ 1 - 1
app-common/src/main/java/im/angry/openeuicc/ui/DirectProfileDownloadActivity.kt

@@ -22,7 +22,7 @@ class DirectProfileDownloadActivity : AppCompatActivity(), SlotSelectFragment.Sl
     }
     }
 
 
     override fun onSlotSelected(slotId: Int, portId: Int) {
     override fun onSlotSelected(slotId: Int, portId: Int) {
-        ProfileDownloadFragment.newInstance(slotId, portId)
+        ProfileDownloadFragment.newInstance(slotId, portId, finishWhenDone = true)
             .show(supportFragmentManager, ProfileDownloadFragment.TAG)
             .show(supportFragmentManager, ProfileDownloadFragment.TAG)
     }
     }
 
 

+ 2 - 1
app-common/src/main/java/im/angry/openeuicc/ui/EuiccChannelFragmentUtils.kt

@@ -8,11 +8,12 @@ import im.angry.openeuicc.util.openEuiccApplication
 
 
 interface EuiccFragmentMarker
 interface EuiccFragmentMarker
 
 
-fun <T> newInstanceEuicc(clazz: Class<T>, slotId: Int, portId: Int): T where T: Fragment, T: EuiccFragmentMarker {
+fun <T> newInstanceEuicc(clazz: Class<T>, slotId: Int, portId: Int, addArguments: Bundle.() -> Unit = {}): T where T: Fragment, T: EuiccFragmentMarker {
     val instance = clazz.newInstance()
     val instance = clazz.newInstance()
     instance.arguments = Bundle().apply {
     instance.arguments = Bundle().apply {
         putInt("slotId", slotId)
         putInt("slotId", slotId)
         putInt("portId", portId)
         putInt("portId", portId)
+        addArguments()
     }
     }
     return instance
     return instance
 }
 }

+ 26 - 3
app-common/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt

@@ -2,6 +2,7 @@ package im.angry.openeuicc.ui
 
 
 import android.annotation.SuppressLint
 import android.annotation.SuppressLint
 import android.app.Dialog
 import android.app.Dialog
+import android.content.DialogInterface
 import android.os.Bundle
 import android.os.Bundle
 import android.text.Editable
 import android.text.Editable
 import android.text.format.Formatter
 import android.text.format.Formatter
@@ -30,8 +31,10 @@ class ProfileDownloadFragment : BaseMaterialDialogFragment(), EuiccFragmentMarke
     companion object {
     companion object {
         const val TAG = "ProfileDownloadFragment"
         const val TAG = "ProfileDownloadFragment"
 
 
-        fun newInstance(slotId: Int, portId: Int): ProfileDownloadFragment =
-            newInstanceEuicc(ProfileDownloadFragment::class.java, slotId, portId)
+        fun newInstance(slotId: Int, portId: Int, finishWhenDone: Boolean = false): ProfileDownloadFragment =
+            newInstanceEuicc(ProfileDownloadFragment::class.java, slotId, portId) {
+                putBoolean("finishWhenDone", finishWhenDone)
+            }
     }
     }
 
 
     private lateinit var toolbar: Toolbar
     private lateinit var toolbar: Toolbar
@@ -46,6 +49,10 @@ class ProfileDownloadFragment : BaseMaterialDialogFragment(), EuiccFragmentMarke
 
 
     private var downloading = false
     private var downloading = false
 
 
+    private val finishWhenDone by lazy {
+        requireArguments().getBoolean("finishWhenDone", false)
+    }
+
     private val barcodeScannerLauncher = registerForActivityResult(ScanContract()) { result ->
     private val barcodeScannerLauncher = registerForActivityResult(ScanContract()) { result ->
         result.contents?.let { content ->
         result.contents?.let { content ->
             Log.d(TAG, content)
             Log.d(TAG, content)
@@ -81,7 +88,9 @@ class ProfileDownloadFragment : BaseMaterialDialogFragment(), EuiccFragmentMarke
         toolbar.apply {
         toolbar.apply {
             setTitle(R.string.profile_download)
             setTitle(R.string.profile_download)
             setNavigationOnClickListener {
             setNavigationOnClickListener {
-                if (!downloading) dismiss()
+                if (!downloading) {
+                    dismiss()
+                }
             }
             }
             setOnMenuItemClickListener(this@ProfileDownloadFragment)
             setOnMenuItemClickListener(this@ProfileDownloadFragment)
         }
         }
@@ -195,4 +204,18 @@ class ProfileDownloadFragment : BaseMaterialDialogFragment(), EuiccFragmentMarke
         // Only send notifications if the user allowed us to
         // Only send notifications if the user allowed us to
         preferenceRepository.notificationDownloadFlow.first()
         preferenceRepository.notificationDownloadFlow.first()
     }
     }
+
+    override fun onDismiss(dialog: DialogInterface) {
+        super.onDismiss(dialog)
+        if (finishWhenDone) {
+            activity?.finish()
+        }
+    }
+
+    override fun onCancel(dialog: DialogInterface) {
+        super.onCancel(dialog)
+        if (finishWhenDone) {
+            activity?.finish()
+        }
+    }
 }
 }