| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package im.angry.openeuicc.ui
- import android.app.Dialog
- import android.os.Bundle
- import android.util.Log
- import android.view.LayoutInflater
- import android.view.View
- import android.view.ViewGroup
- import android.view.Window
- import android.widget.Toast
- import androidx.fragment.app.DialogFragment
- import androidx.lifecycle.lifecycleScope
- import im.angry.openeuicc.R
- import im.angry.openeuicc.databinding.FragmentProfileRenameBinding
- import im.angry.openeuicc.util.setWidthPercent
- import kotlinx.coroutines.Dispatchers
- import kotlinx.coroutines.launch
- import kotlinx.coroutines.withContext
- import java.lang.Exception
- import java.lang.RuntimeException
- class ProfileRenameFragment : DialogFragment(), EuiccFragmentMarker {
- companion object {
- const val TAG = "ProfileRenameFragment"
- fun newInstance(slotId: Int, iccid: String, currentName: String): ProfileRenameFragment {
- val instance = newInstanceEuicc(ProfileRenameFragment::class.java, slotId)
- instance.requireArguments().apply {
- putString("iccid", iccid)
- putString("currentName", currentName)
- }
- return instance
- }
- }
- private var _binding: FragmentProfileRenameBinding? = null
- private val binding get() = _binding!!
- private var renaming = false
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- _binding = FragmentProfileRenameBinding.inflate(inflater, container, false)
- binding.toolbar.inflateMenu(R.menu.fragment_profile_rename)
- return binding.root
- }
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- binding.toolbar.apply {
- setTitle(R.string.rename)
- setNavigationOnClickListener {
- if (!renaming) dismiss()
- }
- setOnMenuItemClickListener {
- if (!renaming) rename()
- true
- }
- }
- }
- override fun onStart() {
- super.onStart()
- binding.profileRenameNewName.editText!!.setText(requireArguments().getString("currentName"))
- }
- override fun onResume() {
- super.onResume()
- setWidthPercent(95)
- }
- override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- return super.onCreateDialog(savedInstanceState).also {
- it.window?.requestFeature(Window.FEATURE_NO_TITLE)
- it.setCanceledOnTouchOutside(false)
- }
- }
- private fun rename() {
- val name = binding.profileRenameNewName.editText!!.text.toString().trim()
- if (name.length >= 64) {
- Toast.makeText(context, R.string.toast_profile_name_too_long, Toast.LENGTH_LONG).show()
- return
- }
- renaming = true
- binding.progress.isIndeterminate = true
- binding.progress.visibility = View.VISIBLE
- lifecycleScope.launch {
- try {
- doRename(name)
- } catch (e: Exception) {
- Log.d(TAG, "Failed to rename profile")
- Log.d(TAG, Log.getStackTraceString(e))
- } finally {
- if (parentFragment is EuiccProfilesChangedListener) {
- (parentFragment as EuiccProfilesChangedListener).onEuiccProfilesChanged()
- }
- dismiss()
- }
- }
- }
- private suspend fun doRename(name: String) = withContext(Dispatchers.IO) {
- if (!channel.lpa.setNickname(requireArguments().getString("iccid"), name)) {
- throw RuntimeException("Profile nickname not changed")
- }
- }
- }
|