From efeaea256708a892a44502969f4f24b5b3190088 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 1 Feb 2024 22:02:35 -0500 Subject: [PATCH] ProfileDownloadFragment: support finishing activity when done --- .../ui/DirectProfileDownloadActivity.kt | 2 +- .../openeuicc/ui/EuiccChannelFragmentUtils.kt | 3 +- .../openeuicc/ui/ProfileDownloadFragment.kt | 29 +++++++++++++++++-- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/DirectProfileDownloadActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/DirectProfileDownloadActivity.kt index b4e40c3..a7983a5 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/DirectProfileDownloadActivity.kt +++ b/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) { - ProfileDownloadFragment.newInstance(slotId, portId) + ProfileDownloadFragment.newInstance(slotId, portId, finishWhenDone = true) .show(supportFragmentManager, ProfileDownloadFragment.TAG) } diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccChannelFragmentUtils.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccChannelFragmentUtils.kt index 34f4240..f187bf4 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccChannelFragmentUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccChannelFragmentUtils.kt @@ -8,11 +8,12 @@ import im.angry.openeuicc.util.openEuiccApplication interface EuiccFragmentMarker -fun newInstanceEuicc(clazz: Class, slotId: Int, portId: Int): T where T: Fragment, T: EuiccFragmentMarker { +fun newInstanceEuicc(clazz: Class, slotId: Int, portId: Int, addArguments: Bundle.() -> Unit = {}): T where T: Fragment, T: EuiccFragmentMarker { val instance = clazz.newInstance() instance.arguments = Bundle().apply { putInt("slotId", slotId) putInt("portId", portId) + addArguments() } return instance } diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt index 737d322..81caa11 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt +++ b/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.app.Dialog +import android.content.DialogInterface import android.os.Bundle import android.text.Editable import android.text.format.Formatter @@ -30,8 +31,10 @@ class ProfileDownloadFragment : BaseMaterialDialogFragment(), EuiccFragmentMarke companion object { 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 @@ -46,6 +49,10 @@ class ProfileDownloadFragment : BaseMaterialDialogFragment(), EuiccFragmentMarke private var downloading = false + private val finishWhenDone by lazy { + requireArguments().getBoolean("finishWhenDone", false) + } + private val barcodeScannerLauncher = registerForActivityResult(ScanContract()) { result -> result.contents?.let { content -> Log.d(TAG, content) @@ -81,7 +88,9 @@ class ProfileDownloadFragment : BaseMaterialDialogFragment(), EuiccFragmentMarke toolbar.apply { setTitle(R.string.profile_download) setNavigationOnClickListener { - if (!downloading) dismiss() + if (!downloading) { + dismiss() + } } setOnMenuItemClickListener(this@ProfileDownloadFragment) } @@ -195,4 +204,18 @@ class ProfileDownloadFragment : BaseMaterialDialogFragment(), EuiccFragmentMarke // Only send notifications if the user allowed us to 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() + } + } } \ No newline at end of file