diff --git a/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt b/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt index 072c4cc37..0ac7c56b6 100644 --- a/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt @@ -22,6 +22,7 @@ package org.linphone.activities.main.dialer.viewmodels import android.content.Context import android.os.Vibrator import android.provider.Settings +import android.text.Editable import android.widget.EditText import androidx.lifecycle.MutableLiveData import org.linphone.LinphoneApplication.Companion.coreContext @@ -56,9 +57,14 @@ class DialerViewModel : LogsUploadViewModel() { private var addressWaitingNetworkToBeCalled: String? = null private var timeAtWitchWeTriedToCall: Long = 0 + private var enteredUriCursorPosition: Int = 0 + val onKeyClick: NumpadDigitListener = object : NumpadDigitListener { override fun handleClick(key: Char) { - enteredUri.value += key.toString() + val sb: StringBuilder = StringBuilder(enteredUri.value) + sb.insert(enteredUriCursorPosition, key.toString()) + enteredUri.value = sb.toString() + if (coreContext.core.callsNb == 0) { val contentResolver = coreContext.context.contentResolver if (Settings.System.getInt(contentResolver, Settings.System.DTMF_TONE_WHEN_DIALING) == 1) { @@ -142,8 +148,16 @@ class DialerViewModel : LogsUploadViewModel() { } // This is to workaround the cursor being set to the start when pressing a digit - fun onUriChanged(input: EditText) { - input.setSelection(input.text.length) + fun onBeforeUriChanged(editText: EditText, count: Int, after: Int) { + enteredUriCursorPosition = editText.selectionEnd + enteredUriCursorPosition += after - count + } + + fun onAfterUriChanged(editText: EditText, editable: Editable?) { + val newLength = editable?.length ?: 0 + if (newLength <= enteredUriCursorPosition) enteredUriCursorPosition = newLength + if (enteredUriCursorPosition < 0) enteredUriCursorPosition = 0 + editText.setSelection(enteredUriCursorPosition) } fun updateShowVideoPreview() { diff --git a/app/src/main/res/layout-land/dialer_fragment.xml b/app/src/main/res/layout-land/dialer_fragment.xml index f9c4f3538..b6f80f35b 100644 --- a/app/src/main/res/layout-land/dialer_fragment.xml +++ b/app/src/main/res/layout-land/dialer_fragment.xml @@ -40,7 +40,10 @@ android:src="@drawable/backspace" />