Skip to content

App crashes when entry bound to float value with fractional format #25728

@niza93

Description

@niza93

Description

When I bound Text property of Entry to float value with StringFormat='{0:F2}', app crashes when I change value with the following exception: Java.Lang.IllegalArgumentException: 'end should be < than charSequence length'.

I run my app on android 14 on Xiaomi 13.

Steps to Reproduce

  1. Downolad, build and run my reproduction project
    or
  2. Bound Entry.Text to float property with fractional string format, '{}{0:F2}' in my case.
  3. Run on a physical device (this issue doesn't occur on emulator).
  4. Remove all chars and enter any number.
  5. Get exception Java.Lang.IllegalArgumentException: 'end should be < than charSequence length'.

Link to public reproduction project repository

MauiStringFormatIssue.zip

Version with bug

9.0.0-rc.2.24503.2

Is this a regression from previous behavior?

Not sure, did not test other versions

Last version that worked well

No response

Affected platforms

Android

Affected platform versions

Android 14 UKQ1.230804.001

Did you find any workaround?

Do not use string format with float value

Relevant log output

13:21:35:821 [AndroidRuntime] FATAL EXCEPTION: main
13:21:35:821 [AndroidRuntime] Process: com.companyname.mauistringformatissue, PID: 5792
13:21:35:821 [AndroidRuntime] java.lang.IllegalArgumentException: end should be < than charSequence length
13:21:35:821 [AndroidRuntime] at androidx.core.util.Preconditions.checkArgument(Preconditions.java:51)
13:21:35:821 [AndroidRuntime] at androidx.emoji2.text.EmojiCompat.process(EmojiCompat.java:1127)
13:21:35:821 [AndroidRuntime] at androidx.emoji2.viewsintegration.EmojiTextWatcher.afterTextChanged(EmojiTextWatcher.java:99)
13:21:35:821 [AndroidRuntime] at android.widget.TextView.sendAfterTextChanged(TextView.java:12420)
13:21:35:821 [AndroidRuntime] at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:15930)
13:21:35:821 [AndroidRuntime] at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1278)
13:21:35:821 [AndroidRuntime] at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:578)
13:21:35:821 [AndroidRuntime] at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:308)
13:21:35:821 [AndroidRuntime] at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:508)
13:21:35:821 [AndroidRuntime] at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:298)
13:21:35:821 [AndroidRuntime] at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:48)
13:21:35:821 [AndroidRuntime] at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:129)
13:21:35:821 [AndroidRuntime] at android.widget.TextView.doKeyDown(TextView.java:9566)
13:21:35:821 [AndroidRuntime] at android.widget.TextView.onKeyDown(TextView.java:9334)
13:21:35:821 [AndroidRuntime] at android.view.KeyEvent.dispatch(KeyEvent.java:2934)
13:21:35:821 [AndroidRuntime] at android.view.View.dispatchKeyEvent(View.java:15772)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at androidx.core.widget.NestedScrollView.dispatchKeyEvent(NestedScrollView.java:686)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1981)
13:21:35:821 [AndroidRuntime] at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:554)
13:21:35:821 [AndroidRuntime] at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1898)
13:21:35:821 [AndroidRuntime] at android.app.Activity.dispatchKeyEvent(Activity.java:4542)
13:21:35:821 [AndroidRuntime] at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.kt:103)
13:21:35:821 [AndroidRuntime] at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:85)
13:21:35:821 [AndroidRuntime] at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.kt:117)
13:21:35:821 [AndroidRuntime] at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:604)
13:21:35:821 [AndroidRuntime] at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
13:21:35:821 [AndroidRuntime] at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3397)
13:21:35:821 [AndroidRuntime] at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:437)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:7717)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7565)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6953)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7010)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6976)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7141)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6984)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7198)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6957)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7010)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6976)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6984)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6957)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:10124)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10075)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10039)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl(ViewRootImpl.java:6709)
13:21:35:822 [AndroidRuntime] at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:6566)
13:21:35:822 [AndroidRuntime] at android.os.Handler.dispatchMessage(Handler.java:106)
13:21:35:822 [AndroidRuntime] at android.os.Looper.loopOnce(Looper.java:224)
13:21:35:822 [AndroidRuntime] at android.os.Looper.loop(Looper.java:318)
13:21:35:822 [AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:8777)
13:21:35:822 [AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method)
13:21:35:822 [AndroidRuntime] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
13:21:35:822 [AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
13:21:36:154 Java.Lang.IllegalArgumentException: 'end should be < than charSequence length'

Metadata

Metadata

Assignees

Labels

area-controls-entryEntryi/regressionThis issue described a confirmed regression on a currently supported versionp/2Work that is important, but is currently not scheduled for releaseplatform/androids/triagedIssue has been revieweds/verifiedVerified / Reproducible Issue ready for Engineering Triaget/bugSomething isn't working

Type

No type

Projects

Status

Todo

Relationships

None yet

Development

No branches or pull requests

Issue actions