Make the download fragment also recreatable

This commit is contained in:
Peter Cai 2022-04-30 15:15:23 -04:00
parent e407ab0e79
commit ca637da5ee
3 changed files with 32 additions and 17 deletions

View file

@ -0,0 +1,23 @@
package im.angry.openeuicc.ui
import android.os.Bundle
import androidx.fragment.app.Fragment
import im.angry.openeuicc.OpenEUICCApplication
import im.angry.openeuicc.core.EuiccChannel
interface EuiccFragmentMarker
fun <T> newInstanceEuicc(clazz: Class<T>, slotId: Int): T where T: Fragment, T: EuiccFragmentMarker {
val instance = clazz.newInstance()
instance.arguments = Bundle().apply {
putInt("slotId", slotId)
}
return instance
}
val <T> T.slotId: Int where T: Fragment, T: EuiccFragmentMarker
get() = requireArguments().getInt("slotId")
val <T> T.channel: EuiccChannel where T: Fragment, T: EuiccFragmentMarker
get() =
(requireActivity().application as OpenEUICCApplication).euiccChannelRepo.availableChannels[slotId]

View file

@ -10,28 +10,19 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import im.angry.openeuicc.OpenEUICCApplication
import im.angry.openeuicc.R
import im.angry.openeuicc.core.EuiccChannel
import im.angry.openeuicc.databinding.EuiccProfileBinding
import im.angry.openeuicc.databinding.FragmentEuiccBinding
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class EuiccManagementFragment : Fragment() {
class EuiccManagementFragment : Fragment(), EuiccFragmentMarker {
companion object {
fun newInstance(slotId: Int): EuiccManagementFragment {
val instance = EuiccManagementFragment()
instance.arguments = Bundle().apply {
putInt("slotId", slotId)
}
return instance
}
fun newInstance(slotId: Int): EuiccManagementFragment =
newInstanceEuicc(EuiccManagementFragment::class.java, slotId)
}
private lateinit var channel: EuiccChannel
private var _binding: FragmentEuiccBinding? = null
private val binding get() = _binding!!
@ -54,14 +45,13 @@ class EuiccManagementFragment : Fragment() {
LinearLayoutManager(view.context, LinearLayoutManager.VERTICAL, false)
binding.fab.setOnClickListener {
ProfileDownloadFragment(channel).show(childFragmentManager, ProfileDownloadFragment.TAG)
ProfileDownloadFragment.newInstance(slotId)
.show(childFragmentManager, ProfileDownloadFragment.TAG)
}
}
override fun onStart() {
super.onStart()
val slotId = requireArguments().getInt("slotId")
channel = (requireActivity().application as OpenEUICCApplication).euiccChannelRepo.availableChannels[slotId]
refresh()
}

View file

@ -8,13 +8,15 @@ import androidx.fragment.app.DialogFragment
import com.journeyapps.barcodescanner.ScanContract
import com.journeyapps.barcodescanner.ScanOptions
import im.angry.openeuicc.R
import im.angry.openeuicc.core.EuiccChannel
import im.angry.openeuicc.databinding.FragmentProfileDownloadBinding
import im.angry.openeuicc.util.setWidthPercent
class ProfileDownloadFragment(val channel: EuiccChannel) : DialogFragment(), Toolbar.OnMenuItemClickListener {
class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.OnMenuItemClickListener {
companion object {
const val TAG = "ProfileDownloadFragment"
fun newInstance(slotId: Int): ProfileDownloadFragment =
newInstanceEuicc(ProfileDownloadFragment::class.java, slotId)
}
private var _binding: FragmentProfileDownloadBinding? = null