material-components / material-components/material-components-android

[Slider] Not possible recognize which slider crash

Open
#3,442 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Java
Stars
17.4k
Forks
3.2k
PR merge metrics
No merged PRs in 30d

Description

Description: There is no way (when you have more sliders on one screen) which slider crash.

Expected behavior: Show ID or line of code where crash happens.

Source code: Just use slider and set data incorectly or in wrong order (set valueTo before valueFrom, or set step before ranges, etc... milions of combinations will cause slider crash, not so hard force into crashes like this)

Android API version: Any

Material Library version: Any

Device: Any

We need to know which slider / line of code caused this crash in our code. We have many sliders on same screen, dynamic data from backend, but how we should know which slider cause crashes like this? Not just this one, sometimes current value is out of range (because conditions was changed, but range is still in previous range...)
There is no easy way how to invalidate all data together (valueFrom, valueTo and current values). When you start set new valueFrom/To it will crash on current value out of range... When set new current value it will crash on current value out of range (because we didn't set yet new range from/to)... etc. Set all values together before start validation will save a life of all whales (and devs). But as a first step WE NEED KNOW WHICH SLIDER CRASHED!

java.lang.IllegalStateException: valueFrom(0.0) must be smaller than valueTo(0.0)
                                                    	at com.google.android.material.slider.BaseSlider.validateValueFrom(BaseSlider.java:537)
                                                    	at com.google.android.material.slider.BaseSlider.validateConfigurationIfDirty(BaseSlider.java:625)
                                                    	at com.google.android.material.slider.BaseSlider.maybeCalculateTicksCoordinates(BaseSlider.java:1724)
                                                    	at com.google.android.material.slider.BaseSlider.updateTrackWidth(BaseSlider.java:1745)
                                                    	at com.google.android.material.slider.BaseSlider.onSizeChanged(BaseSlider.java:1715)
                                                    	at android.view.View.sizeChange(View.java:23391)
                                                    	at android.view.View.setFrame(View.java:23343)
                                                    	at android.view.View.layout(View.java:23200)
                                                    	at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
                                                    	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
                                                    	at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
                                                    	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
                                                    	at androidx.core.widget.NestedScrollView.onLayout(NestedScrollView.java:2205)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
                                                    	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at androidx.coordinatorlayout.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1213)
                                                    	at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:899)
                                                    	at com.google.android.material.bottomsheet.BottomSheetBehavior.onLayoutChild(BottomSheetBehavior.java:556)
                                                    	at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
                                                    	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
                                                    	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
                                                    	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
                                                    	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
                                                    	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
                                                    	at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
                                                    	at android.view.View.layout(View.java:23203)
                                                    	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
                                                    	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
                                                    	at com.android.internal.policy.DecorView.onLayout(DecorView.java:797)
                                                    	at android.view.View.layout(View.java:23203)
2023-06-07 11:34:09.706 AndroidRuntime           E  	at android.view.ViewGroup.layout(ViewGroup.java:6412)
                                                    	at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3749)
                                                    	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3205)
                                                    	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2179)
                                                    	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8787)
                                                    	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
                                                    	at android.view.Choreographer.doCallbacks(Choreographer.java:845)
                                                    	at android.view.Choreographer.doFrame(Choreographer.java:780)
                                                    	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
                                                    	at android.os.Handler.handleCallback(Handler.java:938)
                                                    	at android.os.Handler.dispatchMessage(Handler.java:99)
                                                    	at android.os.Looper.loopOnce(Looper.java:201)
                                                    	at android.os.Looper.loop(Looper.java:288)
                                                    	at android.app.ActivityThread.main(ActivityThread.java:7870)
                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in BaseSlider.java at validateValueFrom, validateConfigurationIfDirty, and the layout path shown in the stack trace. Reproduce the failure with multiple sliders and invalid valueFrom, valueTo, step, or current-value ordering. Done should make it possible to identify which slider caused the invalid configuration and include regression coverage for the reported cases.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, java
Domain
mobile
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.