Make the download fragment also recreatable
This commit is contained in:
parent
e407ab0e79
commit
ca637da5ee
|
@ -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]
|
|
@ -10,28 +10,19 @@ import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import im.angry.openeuicc.OpenEUICCApplication
|
|
||||||
import im.angry.openeuicc.R
|
import im.angry.openeuicc.R
|
||||||
import im.angry.openeuicc.core.EuiccChannel
|
|
||||||
import im.angry.openeuicc.databinding.EuiccProfileBinding
|
import im.angry.openeuicc.databinding.EuiccProfileBinding
|
||||||
import im.angry.openeuicc.databinding.FragmentEuiccBinding
|
import im.angry.openeuicc.databinding.FragmentEuiccBinding
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
class EuiccManagementFragment : Fragment() {
|
class EuiccManagementFragment : Fragment(), EuiccFragmentMarker {
|
||||||
companion object {
|
companion object {
|
||||||
fun newInstance(slotId: Int): EuiccManagementFragment {
|
fun newInstance(slotId: Int): EuiccManagementFragment =
|
||||||
val instance = EuiccManagementFragment()
|
newInstanceEuicc(EuiccManagementFragment::class.java, slotId)
|
||||||
instance.arguments = Bundle().apply {
|
|
||||||
putInt("slotId", slotId)
|
|
||||||
}
|
|
||||||
return instance
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var channel: EuiccChannel
|
|
||||||
|
|
||||||
private var _binding: FragmentEuiccBinding? = null
|
private var _binding: FragmentEuiccBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
@ -54,14 +45,13 @@ class EuiccManagementFragment : Fragment() {
|
||||||
LinearLayoutManager(view.context, LinearLayoutManager.VERTICAL, false)
|
LinearLayoutManager(view.context, LinearLayoutManager.VERTICAL, false)
|
||||||
|
|
||||||
binding.fab.setOnClickListener {
|
binding.fab.setOnClickListener {
|
||||||
ProfileDownloadFragment(channel).show(childFragmentManager, ProfileDownloadFragment.TAG)
|
ProfileDownloadFragment.newInstance(slotId)
|
||||||
|
.show(childFragmentManager, ProfileDownloadFragment.TAG)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
val slotId = requireArguments().getInt("slotId")
|
|
||||||
channel = (requireActivity().application as OpenEUICCApplication).euiccChannelRepo.availableChannels[slotId]
|
|
||||||
refresh()
|
refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,13 +8,15 @@ import androidx.fragment.app.DialogFragment
|
||||||
import com.journeyapps.barcodescanner.ScanContract
|
import com.journeyapps.barcodescanner.ScanContract
|
||||||
import com.journeyapps.barcodescanner.ScanOptions
|
import com.journeyapps.barcodescanner.ScanOptions
|
||||||
import im.angry.openeuicc.R
|
import im.angry.openeuicc.R
|
||||||
import im.angry.openeuicc.core.EuiccChannel
|
|
||||||
import im.angry.openeuicc.databinding.FragmentProfileDownloadBinding
|
import im.angry.openeuicc.databinding.FragmentProfileDownloadBinding
|
||||||
import im.angry.openeuicc.util.setWidthPercent
|
import im.angry.openeuicc.util.setWidthPercent
|
||||||
|
|
||||||
class ProfileDownloadFragment(val channel: EuiccChannel) : DialogFragment(), Toolbar.OnMenuItemClickListener {
|
class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.OnMenuItemClickListener {
|
||||||
companion object {
|
companion object {
|
||||||
const val TAG = "ProfileDownloadFragment"
|
const val TAG = "ProfileDownloadFragment"
|
||||||
|
|
||||||
|
fun newInstance(slotId: Int): ProfileDownloadFragment =
|
||||||
|
newInstanceEuicc(ProfileDownloadFragment::class.java, slotId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private var _binding: FragmentProfileDownloadBinding? = null
|
private var _binding: FragmentProfileDownloadBinding? = null
|
||||||
|
|
Loading…
Reference in a new issue