end should be < than charSequence length
- Dominant language
- C#
- Stars
- 23.3k
- Forks
- 2k
- Avg merge
- 1d 10h
- Merged PRs (30d)
- 297
Description
### Description
I am getting a crash when using `TextChanged` on a `Entry` modifying the value.
### Steps to Reproduce
1. Create a new .net Maui App
2. Add to the MainPage.xaml
```
```
3. Add to the code behind
```
private void Quantity_TextChanged(object sender, TextChangedEventArgs e)
{
if (string.IsNullOrEmpty(e.NewTextValue))
{
((Entry)sender).Text = "0";
}
}
```
4. Run app
5. Delete the contents of the entry box
6. Fatal error
### Link to public reproduction project repository
https://github.com/jdarwood007/MauiApp9
### Version with bug
9.0.110 SR11
### Is this a regression from previous behavior?
Not sure, did not test other versions
### Last version that worked well
Unknown/Other
### Affected platforms
Android
### Affected platform versions
Android 14
### Did you find any workaround?
The problem seems to be entirely calling this:
```
((Entry)sender).Text = "0";
```
### Relevant log output
```shell
[MessageQueue-JNI] Exception in MessageQueue callback: handleReceiveCallback
[MessageQueue-JNI] java.lang.IllegalArgumentException: end should be < than charSequence length
[MessageQueue-JNI] at androidx.core.util.Preconditions.checkArgument(Preconditions.java:52)
[MessageQueue-JNI] at androidx.emoji2.text.EmojiCompat.process(EmojiCompat.java:1127)
[MessageQueue-JNI] at androidx.emoji2.viewsintegration.EmojiTextWatcher.afterTextChanged(EmojiTextWatcher.java:99)
[MessageQueue-JNI] at android.widget.TextView.sendAfterTextChanged(TextView.java:12365)
[MessageQueue-JNI] at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:15851)
[MessageQueue-JNI] at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1278)
[MessageQueue-JNI] at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:578)
[MessageQueue-JNI] at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:308)
[MessageQueue-JNI] at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:231)
[MessageQueue-JNI] at androidx.emoji2.text.SpannableBuilder.delete(SpannableBuilder.java:330)
[MessageQueue-JNI] at androidx.emoji2.text.SpannableBuilder.delete(SpannableBuilder.java:48)
[MessageQueue-JNI] at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:372)
[MessageQueue-JNI] at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:71)
[MessageQueue-JNI] at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:498)
[MessageQueue-JNI] at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:146)
[MessageQueue-JNI] at android.widget.TextView.doKeyDown(TextView.java:9511)
[MessageQueue-JNI] at android.widget.TextView.onKeyDown(TextView.java:9283)
[MessageQueue-JNI] at android.view.KeyEvent.dispatch(KeyEvent.java:2928)
[MessageQueue-JNI] at android.view.View.dispatchKeyEvent(View.java:15591)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at androidx.core.widget.NestedScrollView.dispatchKeyEvent(NestedScrollView.java:688)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at androidx.recyclerview.widget.RecyclerView.dispatchKeyEvent(RecyclerView.java:1981)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at androidx.coordinatorlayout.widget.CoordinatorLayout.dispatchKeyEvent(CoordinatorLayout.java:1946)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[MessageQueue-JNI] at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:478)
[MessageQueue-JNI] at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1894)
[MessageQueue-JNI] at android.app.Activity.dispatchKeyEvent(Activity.java:4335)
[MessageQueue-JNI] at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.kt:96)
[MessageQueue-JNI] at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)
[MessageQueue-JNI] at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.kt:110)
[MessageQueue-JNI] at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:604)
[MessageQueue-JNI] at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
[MessageQueue-JNI] at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3397)
[MessageQueue-JNI] at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:392)
[MessageQueue-JNI] at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6945)
[MessageQueue-JNI] at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6811)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6229)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)
[MessageQueue-JNI] at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6417)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260)
[MessageQueue-JNI] at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6474)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)
[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)
[MessageQueue-JNI] at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6450)
[MessageQueue-JNI] at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6661)
[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:4278)
[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:3715)
[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:3706)
[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager.-$$Nest$mfinishedInputEvent(Unknown Source:0)
[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:4255)
[MessageQueue-JNI] at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)
[MessageQueue-JNI] at android.os.MessageQueue.nativePollOnce(Native Method)
[MessageQueue-JNI] at android.os.MessageQueue.next(MessageQueue.java:335)
[MessageQueue-JNI] at android.os.Looper.loopOnce(Looper.java:162)
[MessageQueue-JNI] at android.os.Looper.loop(Looper.java:294)
[MessageQueue-JNI] at android.app.ActivityThread.main(ActivityThread.java:8177)
[MessageQueue-JNI] at java.lang.reflect.Method.invoke(Native Method)
[MessageQueue-JNI] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
[MessageQueue-JNI] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
[AndroidRuntime] Shutting down VM
[AndroidRuntime] FATAL EXCEPTION: main
[AndroidRuntime] Process: com.companyname.mauiapp9, PID: 8438
[AndroidRuntime] java.lang.IllegalArgumentException: end should be < than charSequence length
[AndroidRuntime] at androidx.core.util.Preconditions.checkArgument(Preconditions.java:52)
[AndroidRuntime] at androidx.emoji2.text.EmojiCompat.process(EmojiCompat.java:1127)
[AndroidRuntime] at androidx.emoji2.viewsintegration.EmojiTextWatcher.afterTextChanged(EmojiTextWatcher.java:99)
[AndroidRuntime] at android.widget.TextView.sendAfterTextChanged(TextView.java:12365)
[AndroidRuntime] at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:15851)
[AndroidRuntime] at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1278)
[AndroidRuntime] at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:578)
[AndroidRuntime] at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:308)
[AndroidRuntime] at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:231)
[AndroidRuntime] at androidx.emoji2.text.SpannableBuilder.delete(SpannableBuilder.java:330)
[AndroidRuntime] at androidx.emoji2.text.SpannableBuilder.delete(SpannableBuilder.java:48)
[AndroidRuntime] at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:372)
[AndroidRuntime] at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:71)
[AndroidRuntime] at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:498)
[AndroidRuntime] at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:146)
[AndroidRuntime] at android.widget.TextView.doKeyDown(TextView.java:9511)
[AndroidRuntime] at android.widget.TextView.onKeyDown(TextView.java:9283)
[AndroidRuntime] at android.view.KeyEvent.dispatch(KeyEvent.java:2928)
[AndroidRuntime] at android.view.View.dispatchKeyEvent(View.java:15591)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at androidx.core.widget.NestedScrollView.dispatchKeyEvent(NestedScrollView.java:688)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at androidx.recyclerview.widget.RecyclerView.dispatchKeyEvent(RecyclerView.java:1981)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at androidx.coordinatorlayout.widget.CoordinatorLayout.dispatchKeyEvent(CoordinatorLayout.java:1946)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)
[AndroidRuntime] at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:478)
[AndroidRuntime] at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1894)
[AndroidRuntime] at android.app.Activity.dispatchKeyEvent(Activity.java:4335)
[AndroidRuntime] at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.kt:96)
[AndroidRuntime] at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)
[AndroidRuntime] at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.kt:110)
[AndroidRuntime] at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:604)
[AndroidRuntime] at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
[AndroidRuntime] at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3397)
[AndroidRuntime] at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:392)
[AndroidRuntime] at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6945)
[AndroidRuntime] at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6811)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6229)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)
[AndroidRuntime] at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6417)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260)
[AndroidRuntime] at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6474)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)
[AndroidRuntime] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)
[AndroidRuntime] at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6450)
[AndroidRuntime] at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6661)
[AndroidRuntime] at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:4278)
[AndroidRuntime] at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:3715)
[AndroidRuntime] at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:3706)
[AndroidRuntime] at android.view.inputmethod.InputMethodManager.-$$Nest$mfinishedInputEvent(Unknown Source:0)
[AndroidRuntime] at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:4255)
[AndroidRuntime] at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)
[AndroidRuntime] at android.os.MessageQueue.nativePollOnce(Native Method)
[AndroidRuntime] at android.os.MessageQueue.next(MessageQueue.java:335)
[AndroidRuntime] at android.os.Looper.loopOnce(Looper.java:162)
[AndroidRuntime] at android.os.Looper.loop(Looper.java:294)
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:8177)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method)
[AndroidRuntime] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
```
Contributor guide
Assessment
This issue has not been assessed yet.