Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jetpack Compose. Offset is unspecified on Redmi devices

In my project I get a lot of those exceptions:

Fatal Exception: java.lang.IllegalStateException
Offset is unspecified

These exceptions only appear on Redmi devices (tablets and handheld). This issue is present from version 1.1.0 to the latest 1.2.0-beta03 of Jetpack Compose, so changing version is not an option.

There is a full stacktrace:

androidx.compose.ui.geometry.Offset.getX-impl (Offset.java:28)
androidx.compose.ui.platform.AndroidComposeView.recalculateWindowPosition (AndroidComposeView.java:2)
androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc (AndroidComposeView.java:6)
androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent (AndroidComposeView.java:62)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:496)
com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1853)
android.app.Activity.dispatchTouchEvent (Activity.java:4072)
com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:454)
android.view.View.dispatchPointerEvent (View.java:13744)
android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:5601)
android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:5401)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4902)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4955)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4921)
android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:5061)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4929)
android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:5118)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4902)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4955)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4921)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4929)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4902)
android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:7654)
android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:7623)
android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:7584)
android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:7785)
android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:251)
android.view.InputEventReceiver.nativeConsumeBatchedInputEvents (InputEventReceiver.java)
android.view.InputEventReceiver.consumeBatchedInputEvents (InputEventReceiver.java:213)
android.view.ViewRootImpl.doConsumeBatchedInput (ViewRootImpl.java:7730)
android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run (ViewRootImpl.java:7809)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:1031)
android.view.Choreographer.doCallbacks (Choreographer.java:854)
android.view.Choreographer.doFrame (Choreographer.java:782)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1016)
android.os.Handler.handleCallback (Handler.java:883)
android.os.Handler.dispatchMessage (Handler.java:100)
android.os.Looper.loop (Looper.java:223)
android.app.ActivityThread.main (ActivityThread.java:7562)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:950)

Anybody faced it?

like image 520
Ильин Павел Avatar asked Oct 26 '25 09:10

Ильин Павел


2 Answers

I got this issue when i change touch area of a Composable dynamically when changing scale via Modifier.graphicsLayer{} and i also use Offset.Unspecified to not draw on Canvas initially for drawing apps.

If the issue is something happens on small region and negligible use

if(offset != Offset.Unspecified) {
    xCoor = offset.x
    yCoor = offset.y
   // or do drawing with offset here for valid values

If it's a behavior that never returns any value but Offset.Unspecified you should open an issue for it.

like image 110
Thracian Avatar answered Oct 28 '25 23:10

Thracian


I used to get this exception when my offset parameters are not a number.
Make sure that your Offset parameters are number.

Here is how you can check if it is a number :

if(offsetX.isNaN().not()){
//handle your code here
}
like image 31
talhatek Avatar answered Oct 28 '25 22:10

talhatek