fix: profile rename state restore #134

Closed
septs wants to merge 2 commits from septs:profile-rename into master

View file

@ -5,6 +5,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.EditText
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
@ -19,23 +20,34 @@ import net.typeblog.lpac_jni.LocalProfileAssistant
class ProfileRenameFragment : BaseMaterialDialogFragment(), EuiccChannelFragmentMarker { class ProfileRenameFragment : BaseMaterialDialogFragment(), EuiccChannelFragmentMarker {
companion object { companion object {
const val TAG = "ProfileRenameFragment" const val TAG = "ProfileRenameFragment"
private const val FIELD_ICCID = "iccid"
private const val FIELD_CURRENT_NAME = "currentName"
private const val FIELD_EDITED_NAME = "editedName"
fun newInstance(slotId: Int, portId: Int, iccid: String, currentName: String): ProfileRenameFragment { fun newInstance(slotId: Int, portId: Int, iccid: String, currentName: String) =
val instance = newInstanceEuicc(ProfileRenameFragment::class.java, slotId, portId) newInstanceEuicc(ProfileRenameFragment::class.java, slotId, portId) {
instance.requireArguments().apply { putString(FIELD_ICCID, iccid)
putString("iccid", iccid) putString(FIELD_CURRENT_NAME, currentName)
putString("currentName", currentName)
}
return instance
} }
} }
private lateinit var toolbar: Toolbar private lateinit var toolbar: Toolbar
private lateinit var profileRenameNewName: TextInputLayout private lateinit var editText: EditText
private lateinit var progress: ProgressBar private lateinit var progress: ProgressBar
private var renaming = false private var renaming = false
private val iccid by lazy {
requireArguments().getString("iccid")!!
}
private val currentName by lazy {
requireArguments().getString("currentName")!!
}
private val editedName: String
get() = editText.text.toString().trim()
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
@ -44,7 +56,7 @@ class ProfileRenameFragment : BaseMaterialDialogFragment(), EuiccChannelFragment
val view = inflater.inflate(R.layout.fragment_profile_rename, container, false) val view = inflater.inflate(R.layout.fragment_profile_rename, container, false)
toolbar = view.requireViewById(R.id.toolbar) toolbar = view.requireViewById(R.id.toolbar)
profileRenameNewName = view.requireViewById(R.id.profile_rename_new_name) editText = view.requireViewById<TextInputLayout>(R.id.profile_rename_new_name).editText!!
progress = view.requireViewById(R.id.progress) progress = view.requireViewById(R.id.progress)
toolbar.inflateMenu(R.menu.fragment_profile_rename) toolbar.inflateMenu(R.menu.fragment_profile_rename)
@ -66,14 +78,20 @@ class ProfileRenameFragment : BaseMaterialDialogFragment(), EuiccChannelFragment
} }
} }
override fun onStart() {
super.onStart()
profileRenameNewName.editText!!.setText(requireArguments().getString("currentName"))
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
setWidthPercent(95) setWidthPercent(95)
editText.requestFocus()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString(FIELD_EDITED_NAME, editedName)
}
override fun onViewStateRestored(savedInstanceState: Bundle?) {
super.onViewStateRestored(savedInstanceState)
editText.setText(savedInstanceState?.getString(FIELD_EDITED_NAME) ?: currentName)
} }
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
@ -101,12 +119,9 @@ class ProfileRenameFragment : BaseMaterialDialogFragment(), EuiccChannelFragment
lifecycleScope.launch { lifecycleScope.launch {
ensureEuiccChannelManager() ensureEuiccChannelManager()
euiccChannelManagerService.waitForForegroundTask() euiccChannelManagerService.waitForForegroundTask()
val res = euiccChannelManagerService.launchProfileRenameTask( val res = euiccChannelManagerService
slotId, .launchProfileRenameTask(slotId, portId, iccid, editedName)
portId, .waitDone()
requireArguments().getString("iccid")!!,
profileRenameNewName.editText!!.text.toString().trim()
).waitDone()
when (res) { when (res) {
is LocalProfileAssistant.ProfileNameTooLongException -> { is LocalProfileAssistant.ProfileNameTooLongException -> {