Giter Club home page Giter Club logo

androidfastscroll's People

Contributors

drakeet avatar h6ah4i avatar zhanghai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

androidfastscroll's Issues

能否动态获取recyclerview的内容高度

Expected Behavior

Actual Behavior

Steps to Reproduce the Problem

RecyclerViewHelper.java中getScrollRange中是通过mView.getPaddingTop() + itemCount * itemHeight + mView.getPaddingBottom();来计算ScrollRange,但是我们实际使用中用到了ConcatAdapter,就是同一个recyclerview中,有多种adapter,每种adapter中,列数是不一样的,而且itemView的高度也是不一样的,所以getScrollRange的计算方法不适用我们这种场景。 请问一下有什么比较好的解决方法吗? 另外,是否有考虑过通过mView.computeVerticalScrollRange()来代替itemCount * itemHeight吗(我这么试过,但是发现算出来的值不是固定的,滑动到底的时候,数值会变化)

Specifications

  • Version:
  • Platform:

PopupTextProvider#getPopupText(int position) should be @Nullable

The interface PopupTextProvider:

@NonNull <=====
String getPopupText(int position);

But RecyclerViewHelper#getPopupText() accepts that getPopupText(int position) can return null.
i.e. that there is no popup text for that position.

Can I kindly propose you change the interface to

@Nullable <=====
String getPopupText(int position);

Android Studio's error reporting and myself would be grateful :)

Change Md2PopupBackground class modifier

I want to custom PopupStyles MD2 textColor is white color in Kotlin (1.3.50). But currently, I can't access Md2PopupBackground because it missing modifier public . Can you make it is public or support a PopupStyles.Builder that allow custom somethings as textColor, backgroundColor...

Cannot access 'Md2PopupBackground': it is public/package/ in 'me.zhanghai.android.fastscroll'

image

Thanks!

FixItemDecorationRecyclerView crashes in runtime

If you try to use FixItemDecorationRecyclerView this will definitely crash with ClassCastException in runtime.
As you can see in the source code:

@Override
    protected void dispatchDraw(@NonNull Canvas canvas) {
        for (int i = 0, count = getItemDecorationCount(); i < count; ++i) {
            FixItemDecoration decor = (FixItemDecoration) getItemDecorationAt(i);
            decor.getItemDecoration().onDraw(canvas, this, decor.getState());
        }
        super.dispatchDraw(canvas);
        for (int i = 0, count = getItemDecorationCount(); i < count; ++i) {
            FixItemDecoration decor = (FixItemDecoration) getItemDecorationAt(i);
            decor.getItemDecoration().onDrawOver(canvas, this, decor.getState());
        }
    }

    @Override
    public void addItemDecoration(@NonNull ItemDecoration decor, int index) {
        super.addItemDecoration(new FixItemDecoration(decor), index);
    }

    @NonNull
    @Override
    public ItemDecoration getItemDecorationAt(int index) {
        return ((FixItemDecoration) super.getItemDecorationAt(index)).getItemDecoration();
    }

You wrap ItemDecorations into FixItemDecoration (see addItemDecoration method) and then you cast it in such a way FixItemDecoration decor = (FixItemDecoration) getItemDecorationAt(i); (see dispatchDraw method)

Please fix this.

Expose methods to adjust mMinTouchTargetSize in FastScroller

Hello, I noticed that the FastScroller class in your library does not provide getter and setter methods to modify the mMinTouchTargetSize property. Moreover, it is not possible to set this value through the constructor. By default, the value is set to 48dp (<dimen name="afs_min_touch_target_size">48dp</dimen>), which may not work correctly for different screen sizes and densities.

It would be beneficial to expose methods to adjust the mMinTouchTargetSize property, allowing developers to fine-tune this value for their specific use cases and ensure a better user experience across various devices.

Possible solution:

  1. Add getter and setter methods for mMinTouchTargetSize in the FastScroller class.
  2. Alternatively, allow passing this value through the constructor or FastScrollerBuilder class.

This improvement would provide better customization options and ensure the library's adaptability to different screen configurations.

Thank you for your attention to this issue, and I appreciate your work on this library.

scrollbar 容易误触

scroll 很容易误触, 主要是因为在右边的任意地方拖动都可能让scroll
拖动, 有什么办法只让用户点击bar 的位置才能上下拖动 ?

滑动滚动条会触发RecycleView的长按事件

使用的

androidx.recyclerview.selection.SelectionTracker.java

实现的长按选择,滑动滚动条会触发长按事件
研究了下源码,发现滚动条滑动事件监听的recyclerview

me.zhanghai.android.fastscroll.FastScroller.java

    private boolean onTouchEvent(@NonNull MotionEvent event) {

        if (!mScrollbarEnabled) {
            return false;
        }

        float eventX = event.getX();
        float eventY = event.getY();
        Rect padding = getPadding();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:

                mDownX = eventX;
                mDownY = eventY;

                if (mTrackView.getAlpha() > 0 && isInView(mTrackView, eventX, eventY)) {
                    mDragStartY = eventY;
                    if (isInViewTouchTarget(mThumbView, eventX, eventY)) {
                        mDragStartThumbOffset = mThumbOffset;
                    } else {
                        mDragStartThumbOffset = (int) (eventY - padding.top - mThumbHeight / 2f);
                        scrollToThumbOffset(mDragStartThumbOffset);
                    }
                    setDragging(true);
                }
                break;
            case MotionEvent.ACTION_MOVE:

                if (!mDragging && isInViewTouchTarget(mTrackView, mDownX, mDownY)
                        && Math.abs(eventY - mDownY) > mTouchSlop) {
                    if (isInViewTouchTarget(mThumbView, mDownX, mDownY)) {
                        mDragStartY = mLastY;
                        mDragStartThumbOffset = mThumbOffset;
                    } else {
                        mDragStartY = eventY;
                        mDragStartThumbOffset = (int) (eventY - padding.top - mThumbHeight / 2f);
                        scrollToThumbOffset(mDragStartThumbOffset);
                    }
                    setDragging(true);
                }

                if (mDragging) {
                    int thumbOffset = mDragStartThumbOffset + (int) (eventY - mDragStartY);
                    scrollToThumbOffset(thumbOffset);
                }
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:

                setDragging(false);
                break;
        }

        mLastY = eventY;

        return mDragging;
    }

Support scrollbar location override instead of using view layout direction

Expected Behavior

Feature motivation...

I have a left-handed user that would like the scrollbar on the left hand side, even when the text and layouts are in LTR mode.

Ideally, some sort of setting on the FastScrollerBuilder that would eventually cause the onPreDraw to use this override instead view.getLayoutDirection.

Actual Behavior

Steps to Reproduce the Problem

Specifications

  • Version: 1.1.4
  • Platform: Android

Conflict with ItemTouchHelper

Expected Behavior

There's no conflict.

Actual Behavior

When scrolling, item dragging will also be triggered.

a.webm

Steps to Reproduce the Problem

  1. Set up the FastScroll tool for a RecyclerView
  2. Set up ItemTouchHelper for RecyclerView, with up and down dragging enabled
  3. Do some scrolling

Specifications

  • Version: 1.1.8
  • Platform: Android Emulator API 29, Huawei API 29

Fatal Exception: java.lang.ArithmeticException: divide by zero

Fatal Exception: java.lang.ArithmeticException: divide by zero
at me.zhanghai.android.fastscroll.FastScroller.scrollToThumbOffset(FastScroller.java:380)
at me.zhanghai.android.fastscroll.FastScroller.onTouchEvent(FastScroller.java:325)
at me.zhanghai.android.fastscroll.FastScroller.$r8$lambda$rTQcs5gqTpHxYd9ar1i9VccEjvo(FastScroller.java)
at me.zhanghai.android.fastscroll.FastScroller$$InternalSyntheticLambda$0$1818e04b76f0a8b5d0fca4db696fe741088ef0340e11119ee7db05a1ef50bbbd$3.test(FastScroller.java:4)
at me.zhanghai.android.fastscroll.RecyclerViewHelper$3.onTouchEvent(RecyclerViewHelper.java:78)
at androidx.recyclerview.widget.RecyclerView.dispatchToOnItemTouchListeners(RecyclerView.java:3259)
at androidx.recyclerview.widget.RecyclerView.onTouchEvent(RecyclerView.java:3421)
at android.view.View.dispatchTouchEvent(View.java:15076)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3917)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3581)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:1015)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1962)
at android.app.Activity.dispatchTouchEvent(Activity.java:4265)

Specifications

  • Version: 1.1.7
  • Platform: Galaxy S10 Android version 12

Apps crash

If I pass scrollview inside FastScrollerBuilder, apps crashes.
FastScrollerBuilder(scrollView).build()

Crash due to old `AppCompat` Library

Expected Behavior

Should run flawlessly and show a fast scroller.

Actual Behavior

Crash on open the screen with the fast scroller.

Steps to Reproduce the Problem

  1. Add this library to any project with appcompat:1.6.0-rc01
  2. Run the app

Specifications

  • Version: 1.1.8
  • Platform: Any version of Android

I am just guessing that the issue is with AppCompat versioning because I encountered this issue after updating to latest library version

java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/graphics/drawable/DrawableWrapper;
    at me.zhanghai.android.fastscroll.FastScrollerBuilder.useDefaultStyle(FastScrollerBuilder.java:123)
    at me.zhanghai.android.fastscroll.FastScrollerBuilder.<init>(FastScrollerBuilder.java:61)

Support nesting RecyclerView in SwipeRefreshLayout

Expected Behavior

Fast Scrolling up or down doesn't trigger swipe refresh.

Actual Behavior

Fast Scrolling down triggers SwipeRefresh

Steps to Reproduce the Problem

  1. Place RecyclerView inside of SwipeRefreshLayout
  2. Add FastScroller
  3. Trying to scroll down always triggers SwipeRefresh

Specifications

  • Version: 1.1.4
  • Platform: Android RecyclerView 1.2.0-alpha02

Unwanted visualize effect + jumpy effect when applying AndroidFastScroll on RecyclerView

Hi Zhang Hai,

I am currently using 1.1.7

I can appreciate your library over AndroidX's RecyclerView's app:fastScrollEnabled implementation due to

  • Your library provide a wider touch region for thumb. Hence, it is easier to hit rect the thumb.
  • Your library will make the touch point stay correctly on thumb. For instance, if we touch on the vertical center of the thumb. After fast scrolling, our touch point will remain on the center of thumb.

The following is the AndroidX's implementation, which doesn't respect the initial touch point of thumb - https://www.youtube.com/watch?v=c9jkI7ryyoA In AndroidX's example, our initial touch point is the center of the thumb. However, after fast scrolling, our touch point will no longer stay at the center of thumb

Here's the AndroidX's implementation

app:fastScrollEnabled="true"
app:fastScrollVerticalThumbDrawable="@drawable/fast_scroll_thumb_material_light"
app:fastScrollVerticalTrackDrawable="@drawable/fast_scroll_track_material_light"
app:fastScrollHorizontalThumbDrawable="@drawable/fast_scroll_thumb_material_light"
app:fastScrollHorizontalTrackDrawable="@drawable/fast_scroll_track_material_light"

When I port to your library, I am happy to see it

  • Respect initial touch point of the thumb
  • Provide wider touch region

However, it does yield some behaviour, which is previously not seen in AndroidX

I am using the exact same RecylerView configuration as when I use AndroidX

I do not have any bottom padding, or top padding on the RecyclerView itself.

This is my RecyclerView

<androidx.recyclerview.widget.RecyclerView
    
    android:requiresFadingEdge="none"
    android:scrollbars="none"

    android:background="?attr/recyclerViewBackground"
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:paddingTop="0dp"
    android:paddingBottom="0dp" />

and this is the new code I have added

FastScrollerBuilder fastScrollerBuilder = new FastScrollerBuilder(recyclerView);
fastScrollerBuilder.setThumbDrawable(getResources().getDrawable(R.drawable.fast_scroll_thumb_material_light));
fastScrollerBuilder.setTrackDrawable(getResources().getDrawable(R.drawable.fast_scroll_track_material_light));
fastScrollerBuilder.build();

Do you have an idea what might go wrong, and where I can start to debug from?

Thank you very much!

p/s I just realize I am using your materialratingbar library too when I adding your AndroidFastScroll into build.gradle. Thank you!

增加隐藏的时间设置

Expected Behavior

现在打开界面后会显示,然后1.5s后隐藏,如果按钮太靠近滚动条区域,点击事件就被scrollbar消费了

Actual Behavior

能否增加一个api可以设置自动隐藏的的时间,和默认隐藏的开关

Steps to Reproduce the Problem

Specifications

  • Version:
  • Platform:

Add method to check if FastScroller is currently being displayed

Hello, I would like to request the addition of a method in the FastScroller class that allows developers to determine if the fast scroll is currently being displayed. This feature would be helpful in various scenarios where the visibility status of the fast scroll might be needed to adapt the UI or handle specific user interactions.

Suggested implementation:
Please consider adding a method, such as isFastScrollVisible, to the FastScroller class that returns a boolean value indicating whether the fast scroll is currently being displayed or not.

This enhancement would provide valuable information about the fast scroll's visibility status and enable developers to make more informed decisions when designing their application's user experience.

Thank you for considering this feature request, and I appreciate your work on this library.

Random change position when taking your finger out of fastscroll thumb

Expected Behavior

You finish fastscrolling, take your hand out of fastscroller, recyclerview's position stays still.

Actual Behavior

You finish fastscrolling, take your hand out of fastscroller, recyclerview's position jumps up or down. It maybe no problem when you have only 100-200 elements but when you have 50k-100k you may end 100-200 elements up or down from the original position that you had before taking your hand from fastscroller.

Steps to Reproduce the Problem

  1. Fast scroll having your finger on fastscroll thumb.
  2. Take your finger from thumb.
  3. 90% of times recyclerview will jump.

In Recyclerview with large data set, button will not go to bottom of list

I can provide any info or samples you need.

This is pretty easy to reproduce:

Create a vertical recyclerview with a lot of items (1 page in my project has 3447 items), try fast scrolling to the bottom.

In current data set, thumb will not go lower than position 3433.

Recyclerview item height is set to ?listPreferredItemHeightSmall

Please let me know if need any other info

PopupTextProvider in FastScrollNestedScrollView

I would like to know how I can implement PopupTextProvider in FastScrollNestedScrollView? The direct child of FastScrollNestedScrollView is a LinearLayout, which contains some TextViews and also a nested RecyclerView (with android:isScrollContainer="false"). I tried to use

new FastScrollerBuilder(mNestedScrollView).setPopupTextProvider(position -> "some text").build();

But the code "some text" is never called. Any ideas?

Incompatible with androidx.recyclerview.selection

Expected Behavior

When AndroidFastScroll is applied to a RecyclerView that has a SelectionTracker set, using the fast scroller should not lead to rows being selected.

Actual Behavior

Scrolling randomly selects rows in the RecyclerView.

Steps to Reproduce the Problem

  1. recyclerView.setSelectionTracker(...)
  2. FastScrollerBuilder(recyclerView).build()
  3. Scroll through the RecyclerView with the fast scroller.

Specifications

  • Version: 1.1.2
  • Platform: Android 9

android:tint in GradientDrawable

Hi,

I just found your commit 91a796a to fix the android:tint issues at API level 21. But it seems that you did not workaround for afs_thumb_stateful in RecyclerViewListStatefulFragment.java by changing the method call, which can still induce the issue.

java.lang.IndexOutOfBoundsException

Just came accross this on play dev console.
Actually, I don't know how to fix this or how to reproduce. Don't have empty list in my library.

Hope you can mitigate this issue in the lib itself.

java.lang.IndexOutOfBoundsException:        
at java.util.ArrayList.get (ArrayList.java:437)      
at androidx.recyclerview.widget.RecyclerView.dispatchOnScrollStateChanged (RecyclerView.java)
at androidx.recyclerview.widget.RecyclerView.setScrollState (RecyclerView.java)  
at androidx.recyclerview.widget.RecyclerView.stopScrollersInternal (RecyclerView.java)  
at androidx.recyclerview.widget.RecyclerView.stopScroll (RecyclerView.java)  
at me.zhanghai.android.fastscroll.RecyclerViewHelper.scrollTo (RecyclerViewHelper.java)  
at me.zhanghai.android.fastscroll.FastScroller.scrollToThumbOffset (FastScroller.java)  
at me.zhanghai.android.fastscroll.FastScroller.onTouchEvent (FastScroller.java)  
at me.zhanghai.android.fastscroll.FastScroller$InternalSyntheticLambda$1$c3ba0337591b746a24a8e3c1726bb8f9d2ca41c1534fc77679212ad973b1a63d$3.test (FastScroller.java)
at me.zhanghai.android.fastscroll.RecyclerViewHelper$3.onInterceptTouchEvent (RecyclerViewHelper.java:2)
at androidx.recyclerview.widget.RecyclerView.findInterceptingOnItemTouchListener (RecyclerView.java:22)
at androidx.recyclerview.widget.RecyclerView.dispatchToOnItemTouchListeners (RecyclerView.java)
at androidx.recyclerview.widget.RecyclerView.onTouchEvent (RecyclerView.java)  
at android.view.View.dispatchTouchEvent (View.java:15076)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3917)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3581)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597)    
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923)  
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597)    
at com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:1015)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1962)
at android.app.Activity.dispatchTouchEvent (Activity.java:4265)    
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:2)
at com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:973)  
at android.view.View.dispatchPointerEvent (View.java:15335)    
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:7794)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:7567)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6901)  
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:6958)  
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:6924)  
at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:7122)  
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:6932)    
at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:7179)  
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6905)  
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:6958)  
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:6924)  
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:6932)    
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6905)  
at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:10354)  
at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:10202)  
at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:10158)  
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:10486)
at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:259)  
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents (Native Method)  
at android.view.InputEventReceiver.consumeBatchedInputEvents (InputEventReceiver.java:239)
at android.view.ViewRootImpl.doConsumeBatchedInput (ViewRootImpl.java:10434)  
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run (ViewRootImpl.java:10575)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:1108)  
at android.view.Choreographer.doCallbacks (Choreographer.java:866)    
at android.view.Choreographer.doFrame (Choreographer.java:789)    
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1092)
at android.os.Handler.handleCallback (Handler.java:938)      
at android.os.Handler.dispatchMessage (Handler.java:99)      
at android.os.Looper.loopOnce (Looper.java:226)      
at android.os.Looper.loop (Looper.java:313)      
at android.app.ActivityThread.main (ActivityThread.java:8663)    
at java.lang.reflect.Method.invoke (Native Method)      
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:567)  
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1135)    

Provide an alternate way to set PopupTextProvider

I'm using the latest version of the AndroidFastScroll in conjunction with the FastAdapter library.

Since I cannot customize the implementation of my adapter class, I would like to have an alternate way of providing a standalone PopupTextProvider.

How about providing it as an argument to FastScrollerBuilder ? I can suggest a PR if you want...

minSdkVersion 19 issue compilation failed

Expected Behavior

It should work normally

Actual Behavior

Compile time error

Steps to Reproduce the Problem

1.Include this lib in project with minSdk version 19

Specifications

  • Version:19
  • Platform:android

Manifest merger failed : uses-sdk:minSdkVersion 19 cannot be smaller than version 21 declared in library [me.zhanghai.android.fastscroll:library:1.1.4]

Unknown runtime error with PID 15964

Hello. An unobvious error occurs due to pop-up styles. I can’t understand what the problem is. Here is a sample code:

Fragment:

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    setupRenderer()
}

private fun setupRenderer() {
    renderer = IndexedAdapter(DiffCallback())

    renderer.apply {
        registerRenderer(NotesRenderer())
    }

    fastScrollRecyclerViewNotes.adapter = renderer

    FastScrollerBuilder(fastScrollRecyclerViewNotes)
        .useMd2Style()
        .build()

    fastScrollRecyclerViewNotes.enableVerticalOverScroll()
}

Xml:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/fastScrollRecyclerViewNotes"
    style="@style/GirdFastScrollList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:listitem="@layout/cell_note" />

Logcat:

2020-04-08 16:02:33.275 15964-15964/com.pereved.schedule E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pereved.schedule, PID: 15964
java.lang.BootstrapMethodError: Exception from call site #4 bootstrap method
    at me.zhanghai.android.fastscroll.PopupStyles.<clinit>(PopupStyles.java:34)
    at me.zhanghai.android.fastscroll.FastScrollerBuilder.useDefaultStyle(FastScrollerBuilder.java:113)
    at me.zhanghai.android.fastscroll.FastScrollerBuilder.<init>(FastScrollerBuilder.java:59)
    at com.pereved.schedule.notes.list.view.NotesListFragment.setupRenderer(NotesListFragment.kt:99)
    at com.pereved.schedule.notes.list.view.NotesListFragment.onActivityCreated(NotesListFragment.kt:52)
    at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2717)
    at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
    at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
    at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6810)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
 Caused by: java.lang.ClassCastException: Bootstrap method returned null
    at me.zhanghai.android.fastscroll.PopupStyles.<clinit>(PopupStyles.java:34) 
    at me.zhanghai.android.fastscroll.FastScrollerBuilder.useDefaultStyle(FastScrollerBuilder.java:113) 
    at me.zhanghai.android.fastscroll.FastScrollerBuilder.<init>(FastScrollerBuilder.java:59) 
    at com.pereved.schedule.notes.list.view.NotesListFragment.setupRenderer(NotesListFragment.kt:99) 
    at com.pereved.schedule.notes.list.view.NotesListFragment.onActivityCreated(NotesListFragment.kt:52) 
    at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2717) 
    at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346) 
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188) 
    at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224) 
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997) 
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953) 
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849) 
    at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413) 
    at android.os.Handler.handleCallback(Handler.java:873) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:201) 
    at android.app.ActivityThread.main(ActivityThread.java:6810) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) 

Everything works without these lines:

FastScrollerBuilder(fastScrollRecyclerViewNotes)
    .useMd2Style()
    .build()

In my adapter I override PopupTextProvider but my application fails and I can’t understand what the problem is.. Your library example didn't help me.

Specifications

  • Version: 1.1.2
  • Platform: Android 9

Unexpected behavior

The drawable is invisible and the Fastscroll only shows my first letter of the list. What should i be looking at to fix this.

API21上滚动条颜色异常

直接变白色了,与背景色一样了
捕获

R.drawable.afs_thumb

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:tint="?colorControlActivated">

    <size
        android:width="8dp"
        android:height="48dp" />

    <solid android:color="@android:color/white" />
</shape>

貌似android:tint问题,但api21是支持tint的

App crash

AndroidFastScroll version 1.0.0

My setup

FastScrollerBuilder(recyclerView)
            .setTrackDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.afs_md2_track)!!)
            .setThumbDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.afs_md2_thumb)!!)
            .setPopupStyle(popupStyle)
            .build()

private val popupStyle = Consumer<TextView> { popupView ->
        PopupStyles.MD2.accept(popupView)
        popupView.setTextColor(Color.WHITE)
    }

at me.zhanghai.android.fastscroll.Md2PopupBackground.getOutline(Md2PopupBackground.java:142)

Fatal Exception: java.lang.IllegalArgumentException: path must be convex at android.graphics.Outline.setConvexPath(Outline.java:284) at me.zhanghai.android.fastscroll.Md2PopupBackground.getOutline(Md2PopupBackground.java:142) at android.view.ViewOutlineProvider$1.getOutline(ViewOutlineProvider.java:38) at android.view.View.rebuildOutline(View.java:17362) at android.view.View.setBackgroundBounds(View.java:22166) at android.view.View.drawBackground(View.java:22110) at android.view.View.draw(View.java:21872) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.ViewOverlay$OverlayViewGroup.dispatchDraw(ViewOverlay.java:251) at android.view.View.draw(View.java:21896) at androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java:4429) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.draw(View.java:21884) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.draw(View.java:21884) at androidx.viewpager.widget.ViewPager.draw(ViewPager.java:2426) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1256) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at androidx.drawerlayout.widget.DrawerLayout.drawChild(DrawerLayout.java:1426) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.draw(View.java:21884) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.draw(View.java:21884) at com.android.internal.policy.DecorView.draw(DecorView.java:1082) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:725) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:731) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:840) at android.view.ViewRootImpl.draw(ViewRootImpl.java:3947) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3721) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3029) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1888) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8511) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949) at android.view.Choreographer.doCallbacks(Choreographer.java:761) at android.view.Choreographer.doFrame(Choreographer.java:696) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7050) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

Staggered gird list

Please do support Staggered gird list.

When changing the layout manager to staggered gird layout manager, fast scroller stops working and just disappears.

Actual Behavior

Does not work

Steps to Reproduce the Problem

  1. Change layout manager to Staggered gird layout manager.

Specifications

  • Version: Any
  • Platform: Any

支持PreferenceFragmentCompat

Expected Behavior

能否支持PreferenceFragmentCompat?PreferenceFragmentCompat里面也是RecyclerView,但是实际使用后默认的滚动条和fastscroll会同时出现
image

Actual Behavior

Steps to Reproduce the Problem

Specifications

  • Version:
  • Platform:

Don't show scroll handle on first start [hacky solution]

I want to create a behavior where the fast scroll handle isn't shown on app start but when first scrolling. The goal is to have a cleaner and minimalistic look. Normal hide animation should be uneffected.

Without changing the library itself I came up with the hacky workaround at the bottom. Maybe this can be helpful for someone, so I want to share it with you.

Is this maybe a valid feature request implementing this directly into the library? (Used version here: 1.1.4)

/**
 * Hides the fast scroll handle on init, so it's first visible after scrolling.
 */
class HideOnInitAnimationHelper(view: View) : DefaultAnimationHelper(view) {
    private var firstRun = true

    override fun getScrollbarAutoHideDelayMillis(): Int {
        return if (firstRun) {
            0
        } else {
            super.getScrollbarAutoHideDelayMillis()
        }
    }

    override fun showScrollbar(trackView: View, thumbView: View) {
        // Assumption: showScrollbar() is only called once during initialization
        if (firstRun) {
            firstRun = false
            return
        }

        super.showScrollbar(trackView, thumbView)
    }

    override fun hideScrollbar(trackView: View, thumbView: View) {
        if (firstRun) {
            trackView.alpha = 0f
            thumbView.alpha = 0f
        }

        super.hideScrollbar(trackView, thumbView)
    }
}

FixItemDecorationRecyclerView

any sample on using FixItemDecorationRecyclerView for multiple decorators?
how we can draw it over other decorations with this method .. i mean to clarify it more how to bring fast scroller on top of every other view in the recycler view?
i will appreciate any help thanks ...

Bug: position of the thumb can jump when scrolling

I tried to use this library on my app, and while on some places it seems to work fine, on others it has at least one of these issues:

  1. Scrolling can cause the thumb to jump too much away from current location, sometimes in reverse.
  2. Even dragging the thumb can move it away from the touch location.
    Here I will present both using a POC, even though I have no idea if they are exactly the same as on my app.

Expected Behavior

That scrolling will move the thumb in the same direction of scrolling, without big jumps.
And, that moving the thumb by dragging it will follow your touch.

Actual Behavior

The opposite.

Steps to Reproduce the Problem

Import the attached sample, and try both: scroll up and down slowly. And then also drag the thumb up and down slowly.

At first I thought it's because of some clipping attributes or padding, but then I noticed it can occur in other cases too.
So no idea what really causes it.

Specifications

  • Version:
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    implementation 'me.zhanghai.android.fastscroll:library:1.1.5'
  • Platform:
    Android 11 on Pixel 4.

My Application.zip

XJu1vOdw4H.zip

Smarter position provided by getPopupText(position)

Actual Behavior

I implemented in my app a fullscreen RecyclerView with getPopupText support. It looks like this:

The problem is, the position provided by getPopupText is the first visible item in the Adapter. Though as you can see here, this item (framed in red) is actually barely visible. So while the user only sees items starting with "L", the popup still shows "K", because the very last "K" item still hasn't been recycled.

I was thinking maybe there is a smarter way than getFirstItemAdapterPosition() to get this position.
As I'm a bit curious, I investigated how other fast scrollers handle this issue. For instance, Nova Launcher's widget list uses a fast scroll which applies some kind of padding to this position, proportional to how low you are in the list (the more you scroll, the lower the item targeted by getPopupText is on the screen). Which enables their popup to use the very first item's position when you're at the top, the very last item's position when you're at the bottom, and the position of an item which is always visible when you're anywhere in between.

It's kinda hard to explain with words. Actually experimenting with it helps to understand.
I am also aware that the Google Contacts app works in a similar way (using the first visible item), though it's not a problem because their list is not full screen, and the list snaps when fast scrolling, to make sure the first item is always fully visible. Not all lists can mimic this behavior though.

Expected Behavior

The position provided by getPopupText should target an item which is always (clearly) visible to the user.

Steps to Reproduce the Problem

  1. Create a RecyclerView and simply bind a FastScroller with FastScrollerBuilder(recyclerView).build() (the issue is more visible with a full screen RV).
  2. Implement PopupTextProvider in the Adapter.
  3. Scroll.

Specifications

  • Version: v1.1.0
  • Platform: Android 10, OnePlus 6 OxygenOS 10.3.1, no root

Don't hesitate to ask for more details if it wasn't clear. :)
Thanks!

onPreDraw is called indefinitely, causing ANR and exception

I'm using the FastScroller in a FastScrollNestedScrollView with a variable text view, but when the text content changes, it triggers this ANR and eventually crashes:

java_vm_ext.cc:570] JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV called with pending exception java.lang.IllegalStateException: Unable to create layer for View, size 0x2240 max size 16384 color type 4 has context 1
java_vm_ext.cc:570] (Throwable with empty stack trace)
java_vm_ext.cc:570] 
java_vm_ext.cc:570]     in call to CallVoidMethodV
runtime.cc:642] Runtime aborting...
runtime.cc:642] Dumping all threads without mutator lock held
runtime.cc:642] All threads:
runtime.cc:642] DALVIK THREADS (65):
runtime.cc:642] "RenderThread" prio=10 tid=28 Runnable
runtime.cc:642]   | group="" sCount=0 dsCount=0 flags=0 obj=0x15901770 self=0x7230945000
runtime.cc:642]   | sysTid=1759 nice=-10 cgrp=default sched=0/0 handle=0x71cf00fd50
runtime.cc:642]   | state=R schedstat=( 1221285985 237446466 5259 ) utm=85 stm=37 core=4 HZ=100
runtime.cc:642]   | stack=0x71cef19000-0x71cef1b000 stackSize=991KB
runtime.cc:642]   | held mutexes= "abort lock" "mutator lock"(shared held)
runtime.cc:642]   native: #00 pc 00000000004123fc  /apex/com.android.runtime/lib64/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool)+140)
runtime.cc:642]   native: #01 pc 00000000004fa75c  /apex/com.android.runtime/lib64/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+512)
runtime.cc:642]   native: #02 pc 0000000000514dbc  /apex/com.android.runtime/lib64/libart.so (art::DumpCheckpoint::Run(art::Thread*)+828)
runtime.cc:642]   native: #03 pc 000000000050df24  /apex/com.android.runtime/lib64/libart.so (art::ThreadList::RunCheckpoint(art::Closure*, art::Closure*)+560)
runtime.cc:642]   native: #04 pc 000000000050d3a0  /apex/com.android.runtime/lib64/libart.so (art::ThreadList::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool)+1964)
runtime.cc:642]   native: #05 pc 00000000004ba258  /apex/com.android.runtime/lib64/libart.so (art::Runtime::Abort(char const*)+1452)
runtime.cc:642]   native: #06 pc 000000000000b458  /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+580)
runtime.cc:642]   native: #07 pc 0000000000378bd8  /apex/com.android.runtime/lib64/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+1584)
runtime.cc:642]   native: #08 pc 0000000000378dfc  /apex/com.android.runtime/lib64/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+108)
runtime.cc:642]   native: #09 pc 000000000036b224  /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::AbortF(char const*, ...)+136)
runtime.cc:642]   native: #10 pc 0000000000369cf8  /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::CheckPossibleHeapValue(art::ScopedObjectAccess&, char, art::(anonymous namespace)::JniValueType)+1144)
runtime.cc:642]   native: #11 pc 00000000003690e0  /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::Check(art::ScopedObjectAccess&, bool, char const*, art::(anonymous namespace)::JniValueType*)+652)
runtime.cc:642]   native: #12 pc 000000000036e130  /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CheckCallArgs(art::ScopedObjectAccess&, art::(anonymous namespace)::ScopedCheck&, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, art::InvokeType, art::(anonymous namespace)::VarArgs const*)+132)
runtime.cc:642]   native: #13 pc 000000000036d020  /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType)+712)
runtime.cc:642]   native: #14 pc 000000000035b978  /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+72)
runtime.cc:642]   native: #15 pc 0000000000100c70  /system/lib64/libandroid_runtime.so (_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)+116)
runtime.cc:642]   native: #16 pc 0000000000157b94  /system/lib64/libandroid_runtime.so (android::FrameCompleteWrapper::onFrameComplete(long)+116)
runtime.cc:642]   native: #17 pc 00000000004067b0  /system/lib64/libhwui.so (android::uirenderer::renderthread::CanvasContext::draw()+1336)
runtime.cc:642]   native: #18 pc 0000000000405700  /system/lib64/libhwui.so (_ZNSt3__110__function6__funcIZN7android10uirenderer12renderthread13DrawFrameTask11postAndWaitEvE3$_0NS_9allocatorIS6_EEFvvEEclEv$c303f2d2360db58ed70a2d0ac7ed911b+380)
runtime.cc:642]   native: #19 pc 000000000040fe1c  /system/lib64/libhwui.so (android::uirenderer::WorkQueue::process()+228)
runtime.cc:642]   native: #20 pc 000000000040fb04  /system/lib64/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+584)
runtime.cc:642]   native: #21 pc 00000000000135f0  /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+328)
runtime.cc:642]   native: #22 pc 00000000000e6f10  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642]   native: #23 pc 00000000000850c8  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642]   (no managed stack frames)
runtime.cc:642] 
runtime.cc:642] "main" prio=10 tid=1 Native
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x71f31738 self=0x72cdec1000
runtime.cc:642]   | sysTid=1695 nice=-10 cgrp=default sched=0/0 handle=0x72cf437ee8
runtime.cc:642]   | state=S schedstat=( 2448682863 16814804 2092 ) utm=221 stm=22 core=7 HZ=100
runtime.cc:642]   | stack=0x7fd435f000-0x7fd4361000 stackSize=8192KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1695/stack)
runtime.cc:642]   native: #00 pc 000000000008033c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642]   native: #01 pc 0000000000083e04  /apex/com.android.runtime/lib64/bionic/libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*)+140)
runtime.cc:642]   native: #02 pc 00000000000e6454  /apex/com.android.runtime/lib64/bionic/libc.so (pthread_cond_wait+60)
runtime.cc:642]   native: #03 pc 0000000000072d50  /system/lib64/libc++.so (std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&)+20)
runtime.cc:642]   native: #04 pc 0000000000075680  /system/lib64/libc++.so (std::__1::__assoc_sub_state::copy()+84)
runtime.cc:642]   native: #05 pc 0000000000075958  /system/lib64/libc++.so (std::__1::future<void>::get()+24)
runtime.cc:642]   native: #06 pc 00000000004afc00  /system/lib64/libhwui.so (android::uirenderer::renderthread::RenderProxy::setStopped(bool)+220)
runtime.cc:642]   at android.graphics.HardwareRenderer.nSetStopped(Native method)
runtime.cc:642]   at android.graphics.HardwareRenderer.setStopped(HardwareRenderer.java:463)
runtime.cc:642]   at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4084)
runtime.cc:642]   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3320)
runtime.cc:642]   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2200)
runtime.cc:642]   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9037)
runtime.cc:642]   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:999)
runtime.cc:642]   at android.view.Choreographer.doCallbacks(Choreographer.java:797)
runtime.cc:642]   at android.view.Choreographer.doFrame(Choreographer.java:732)
runtime.cc:642]   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:984)
runtime.cc:642]   at android.os.Handler.handleCallback(Handler.java:883)
runtime.cc:642]   at android.os.Handler.dispatchMessage(Handler.java:100)
runtime.cc:642]   at android.os.Looper.loop(Looper.java:237)
runtime.cc:642]   at com.drakeet.purewriter.PureWriter.loop(PureWriter.kt:227)
runtime.cc:642]   at android.os.Handler.handleCallback(Handler.java:883)
runtime.cc:642]   at android.os.Handler.dispatchMessage(Handler.java:100)
runtime.cc:642]   at android.os.Looper.loop(Looper.java:237)
runtime.cc:642]   at android.app.ActivityThread.main(ActivityThread.java:8016)
runtime.cc:642]   at java.lang.reflect.Method.invoke(Native method)
runtime.cc:642]   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
runtime.cc:642]   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)
runtime.cc:642] 
runtime.cc:642] "Jit thread pool worker thread 0" prio=10 tid=2 Native
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x159003c8 self=0x723a80e000
runtime.cc:642]   | sysTid=1704 nice=0 cgrp=default sched=0/0 handle=0x723bcd9d40
runtime.cc:642]   | state=S schedstat=( 910237761 75075319 1271 ) utm=69 stm=21 core=5 HZ=100
runtime.cc:642]   | stack=0x723bbdb000-0x723bbdd000 stackSize=1023KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1704/stack)
runtime.cc:642]   native: #00 pc 000000000008033c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642]   native: #01 pc 000000000014c1f4  /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
runtime.cc:642]   native: #02 pc 000000000051681c  /apex/com.android.runtime/lib64/libart.so (art::ThreadPool::GetTask(art::Thread*)+256)
runtime.cc:642]   native: #03 pc 0000000000515ba8  /apex/com.android.runtime/lib64/libart.so (art::ThreadPoolWorker::Run()+144)
runtime.cc:642]   native: #04 pc 0000000000515668  /apex/com.android.runtime/lib64/libart.so (art::ThreadPoolWorker::Callback(void*)+148)
runtime.cc:642]   native: #05 pc 00000000000e6f10  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642]   native: #06 pc 00000000000850c8  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642]   (no managed stack frames)
runtime.cc:642] 
runtime.cc:642] "Signal Catcher" prio=10 tid=6 WaitingInMainSignalCatcherLoop
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15900440 self=0x723a9e6c00
runtime.cc:642]   | sysTid=1709 nice=0 cgrp=default sched=0/0 handle=0x723bbd4d50
runtime.cc:642]   | state=S schedstat=( 115573 114427 1 ) utm=0 stm=0 core=5 HZ=100
runtime.cc:642]   | stack=0x723bade000-0x723bae0000 stackSize=991KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1709/stack)
runtime.cc:642]   native: #00 pc 00000000000d1848  /apex/com.android.runtime/lib64/bionic/libc.so (__rt_sigtimedwait+8)
runtime.cc:642]   native: #01 pc 000000000009031c  /apex/com.android.runtime/lib64/bionic/libc.so (sigwait+68)
runtime.cc:642]   native: #02 pc 00000000004dc608  /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::WaitForSignal(art::Thread*, art::SignalSet&)+392)
runtime.cc:642]   native: #03 pc 00000000004dafa4  /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::Run(void*)+292)
runtime.cc:642]   native: #04 pc 00000000000e6f10  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642]   native: #05 pc 00000000000850c8  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642]   (no managed stack frames)
runtime.cc:642] 
runtime.cc:642] "ADB-JDWP Connection Control Thread" prio=10 tid=8 WaitingInMainDebuggerLoop
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x159004b8 self=0x72306fe400
runtime.cc:642]   | sysTid=1710 nice=0 cgrp=default sched=0/0 handle=0x723baced50
runtime.cc:642]   | state=S schedstat=( 1494010 1300990 8 ) utm=0 stm=0 core=6 HZ=100
runtime.cc:642]   | stack=0x723b9d8000-0x723b9da000 stackSize=991KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1710/stack)
runtime.cc:642]   native: #00 pc 00000000000d1748  /apex/com.android.runtime/lib64/bionic/libc.so (__ppoll+8)
runtime.cc:642]   native: #01 pc 000000000008dc78  /apex/com.android.runtime/lib64/bionic/libc.so (poll+88)
runtime.cc:642]   native: #02 pc 0000000000008e24  /apex/com.android.runtime/lib64/libadbconnection.so (adbconnection::AdbConnectionState::RunPollLoop(art::Thread*)+824)
runtime.cc:642]   native: #03 pc 000000000000721c  /apex/com.android.runtime/lib64/libadbconnection.so (adbconnection::CallbackFunction(void*)+1076)
runtime.cc:642]   native: #04 pc 00000000000e6f10  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642]   native: #05 pc 00000000000850c8  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642]   (no managed stack frames)
runtime.cc:642] 
runtime.cc:642] "HeapTaskDaemon" prio=10 tid=9 WaitingForTaskProcessor
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15904948 self=0x72cdec4800
runtime.cc:642]   | sysTid=1711 nice=4 cgrp=default sched=0/0 handle=0x723b9c8d50
runtime.cc:642]   | state=S schedstat=( 32493126 335053 9 ) utm=2 stm=0 core=7 HZ=100
runtime.cc:642]   | stack=0x723b8c6000-0x723b8c8000 stackSize=1039KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1711/stack)
runtime.cc:642]   native: #00 pc 000000000008033c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642]   native: #01 pc 000000000014c1f4  /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
runtime.cc:642]   native: #02 pc 0000000000290a5c  /apex/com.android.runtime/lib64/libart.so (art::gc::TaskProcessor::GetTask(art::Thread*)+444)
runtime.cc:642]   native: #03 pc 00000000002912e8  /apex/com.android.runtime/lib64/libart.so (art::gc::TaskProcessor::RunAllTasks(art::Thread*)+92)
runtime.cc:642]   at dalvik.system.VMRuntime.runHeapTasks(Native method)
runtime.cc:642]   at java.lang.Daemons$HeapTaskDaemon.runInternal(Daemons.java:523)
runtime.cc:642]   at java.lang.Daemons$Daemon.run(Daemons.java:137)
runtime.cc:642]   at java.lang.Thread.run(Thread.java:919)
runtime.cc:642] 
runtime.cc:642] "FinalizerDaemon" prio=10 tid=10 Waiting
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15900530 self=0x72cdee8000
runtime.cc:642]   | sysTid=1713 nice=4 cgrp=default sched=0/0 handle=0x723b750d50
runtime.cc:642]   | state=S schedstat=( 5329425 251198 7 ) utm=0 stm=0 core=5 HZ=100
runtime.cc:642]   | stack=0x723b64e000-0x723b650000 stackSize=1039KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1713/stack)
runtime.cc:642]   native: #00 pc 000000000008033c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642]   native: #01 pc 000000000014c1f4  /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
runtime.cc:642]   native: #02 pc 000000000040d914  /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, long, int, bool, art::ThreadState)+620)
runtime.cc:642]   native: #03 pc 000000000040f374  /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr<art::mirror::Object>, long, int, bool, art::ThreadState)+284)
runtime.cc:642]   at java.lang.Object.wait(Native method)
runtime.cc:642]   - waiting on <0x068f525c> (a java.lang.Object)
runtime.cc:642]   at java.lang.Object.wait(Object.java:442)
runtime.cc:642]   at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:190)
runtime.cc:642]   - locked <0x068f525c> (a java.lang.Object)
runtime.cc:642]   at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:211)
runtime.cc:642]   at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:271)
runtime.cc:642]   at java.lang.Daemons$Daemon.run(Daemons.java:137)
runtime.cc:642]   at java.lang.Thread.run(Thread.java:919)
runtime.cc:642] 
runtime.cc:642] "FinalizerWatchdogDaemon" prio=10 tid=11 Sleeping
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x159005a8 self=0x72cdee9c00
runtime.cc:642]   | sysTid=1714 nice=4 cgrp=default sched=0/0 handle=0x723b647d50
runtime.cc:642]   | state=S schedstat=( 160781 188959 5 ) utm=0 stm=0 core=6 HZ=100
runtime.cc:642]   | stack=0x723b545000-0x723b547000 stackSize=1039KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1714/stack)
runtime.cc:642]   native: #00 pc 0000000000080340  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+32)
runtime.cc:642]   native: #01 pc 000000000014c62c  /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::TimedWait(art::Thread*, long, int)+168)
runtime.cc:642]   native: #02 pc 000000000040d928  /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, long, int, bool, art::ThreadState)+640)
runtime.cc:642]   native: #03 pc 000000000040f374  /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr<art::mirror::Object>, long, int, bool, art::ThreadState)+284)
runtime.cc:642]   at java.lang.Thread.sleep(Native method)
runtime.cc:642]   - sleeping on <0x05464965> (a java.lang.Object)
runtime.cc:642]   at java.lang.Thread.sleep(Thread.java:440)
runtime.cc:642]   - locked <0x05464965> (a java.lang.Object)
runtime.cc:642]   at java.lang.Thread.sleep(Thread.java:356)
runtime.cc:642]   at java.lang.Daemons$FinalizerWatchdogDaemon.sleepForMillis(Daemons.java:383)
runtime.cc:642]   at java.lang.Daemons$FinalizerWatchdogDaemon.waitForFinalization(Daemons.java:411)
runtime.cc:642]   at java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:323)
runtime.cc:642]   at java.lang.Daemons$Daemon.run(Daemons.java:137)
runtime.cc:642]   at java.lang.Thread.run(Thread.java:919)
runtime.cc:642] 
runtime.cc:642] "ReferenceQueueDaemon" prio=10 tid=12 Waiting
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15900620 self=0x72cdec6400
runtime.cc:642]   | sysTid=1712 nice=4 cgrp=default sched=0/0 handle=0x723b8b6d50
runtime.cc:642]   | state=S schedstat=( 2705053 406614 6 ) utm=0 stm=0 core=6 HZ=100
runtime.cc:642]   | stack=0x723b7b4000-0x723b7b6000 stackSize=1039KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1712/stack)
runtime.cc:642]   native: #00 pc 000000000008033c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642]   native: #01 pc 000000000014c1f4  /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
runtime.cc:642]   native: #02 pc 000000000040d914  /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, long, int, bool, art::ThreadState)+620)
runtime.cc:642]   native: #03 pc 000000000040f374  /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr<art::mirror::Object>, long, int, bool, art::ThreadState)+284)
runtime.cc:642]   at java.lang.Object.wait(Native method)
runtime.cc:642]   - waiting on <0x0268363a> (a java.lang.Class<java.lang.ref.ReferenceQueue>)
runtime.cc:642]   at java.lang.Object.wait(Object.java:442)
runtime.cc:642]   at java.lang.Object.wait(Object.java:568)
runtime.cc:642]   at java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:215)
runtime.cc:642]   - locked <0x0268363a> (a java.lang.Class<java.lang.ref.ReferenceQueue>)
runtime.cc:642]   at java.lang.Daemons$Daemon.run(Daemons.java:137)
runtime.cc:642]   at java.lang.Thread.run(Thread.java:919)
runtime.cc:642] 
runtime.cc:642] "Binder:1695_1" prio=10 tid=13 Native
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15900698 self=0x723f1e5800
runtime.cc:642]   | sysTid=1715 nice=0 cgrp=default sched=0/0 handle=0x723b440d50
runtime.cc:642]   | state=S schedstat=( 409635 187396 4 ) utm=0 stm=0 core=4 HZ=100
runtime.cc:642]   | stack=0x723b34a000-0x723b34c000 stackSize=991KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1715/stack)
runtime.cc:642]   native: #00 pc 00000000000d1704  /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+4)
runtime.cc:642]   native: #01 pc 000000000008bc64  /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+132)
runtime.cc:642]   native: #02 pc 0000000000058fe8  /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+244)
runtime.cc:642]   native: #03 pc 00000000000591c4  /system/lib64/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+24)
runtime.cc:642]   native: #04 pc 000000000005999c  /system/lib64/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+64)
runtime.cc:642]   native: #05 pc 000000000007fc18  /system/lib64/libbinder.so (android::PoolThread::threadLoop()+24)
runtime.cc:642]   native: #06 pc 00000000000135f0  /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+328)
runtime.cc:642]   native: #07 pc 00000000000f09e8  /system/lib64/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+140)
runtime.cc:642]   native: #08 pc 00000000000e6f10  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642]   native: #09 pc 00000000000850c8  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642]   (no managed stack frames)
runtime.cc:642] 
runtime.cc:642] "Binder:1695_2" prio=10 tid=14 Native
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15900710 self=0x72307ecc00
runtime.cc:642]   | sysTid=1717 nice=0 cgrp=default sched=0/0 handle=0x723b343d50
runtime.cc:642]   | state=S schedstat=( 5683542 3898646 4 ) utm=0 stm=0 core=5 HZ=100
runtime.cc:642]   | stack=0x723b24d000-0x723b24f000 stackSize=991KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1717/stack)
runtime.cc:642]   native: #00 pc 00000000000d1704  /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+4)
runtime.cc:642]   native: #01 pc 000000000008bc64  /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+132)
runtime.cc:642]   native: #02 pc 0000000000058fe8  /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+244)
runtime.cc:642]   native: #03 pc 00000000000591c4  /system/lib64/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+24)
runtime.cc:642]   native: #04 pc 00000000000599c8  /system/lib64/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+108)
runtime.cc:642]   native: #05 pc 000000000007fc18  /system/lib64/libbinder.so (android::PoolThread::threadLoop()+24)
runtime.cc:642]   native: #06 pc 00000000000135f0  /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+328)
runtime.cc:642]   native: #07 pc 00000000000f09e8  /system/lib64/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+140)
runtime.cc:642]   native: #08 pc 00000000000e6f10  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642]   native: #09 pc 00000000000850c8  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642]   (no managed stack frames)
runtime.cc:642] 
runtime.cc:642] "Binder:1695_3" prio=10 tid=15 Native
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15900788 self=0x723f1fc000
runtime.cc:642]   | sysTid=1720 nice=0 cgrp=default sched=0/0 handle=0x723b1fdd50
runtime.cc:642]   | state=S schedstat=( 5090725 5721044 22 ) utm=0 stm=0 core=6 HZ=100
runtime.cc:642]   | stack=0x723b107000-0x723b109000 stackSize=991KB
runtime.cc:642]   | held mutexes=
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1720/stack)
runtime.cc:642]   native: #00 pc 00000000000d1704  /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+4)
runtime.cc:642]   native: #01 pc 000000000008bc64  /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+132)
runtime.cc:642]   native: #02 pc 0000000000058fe8  /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+244)
runtime.cc:642]   native: #03 pc 00000000000591c4  /system/lib64/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+24)
runtime.cc:642]   native: #04 pc 00000000000599c8  /system/lib64/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+108)
runtime.cc:642]   native: #05 pc 000000000007fc18  /system/lib64/libbinder.so (android::PoolThread::threadLoop()+24)
runtime.cc:642]   native: #06 pc 00000000000135f0  /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+328)
runtime.cc:642]   native: #07 pc 00000000000f09e8  /system/lib64/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+140)
runtime.cc:642]   native: #08 pc 00000000000e6f10  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642]   native: #09 pc 00000000000850c8  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15900800 self=0x72307fe400
runtime.cc:642]   native: #03 pc 000000000034c5e4  /apex/com.android.runtime/lib64/libart.so (art::ProfileSaver::RunProfileSaverThread(void*)+88)
runtime.cc:642]   native: #00 pc 000000000008033c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642] 
runtime.cc:642]   native: #02 pc 0000000000017f8c  /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+56)
runtime.cc:642]   at android.os.MessageQueue.next(MessageQueue.java:336)
runtime.cc:642]   | held mutexes=
runtime.cc:642]   native: #03 pc 000000000016bfb8  /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44)
runtime.cc:642]   native: #01 pc 00000000004f2814  /apex/com.android.runtime/lib64/libart.so (art::Thread::Park(bool, long)+1308)
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
runtime.cc:642]   at java.lang.Thread.run(Thread.java:919)
runtime.cc:642]   | state=S schedstat=( 99624689 8520156 63 ) utm=9 stm=0 core=6 HZ=100
runtime.cc:642]   native: #00 pc 000000000008033c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642]   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2067)
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
runtime.cc:642]   | held mutexes=
runtime.cc:642]   at java.lang.Thread.sleep(Native method)
runtime.cc:642]   native: #02 pc 00000000004448e8  /apex/com.android.runtime/lib64/libart.so (art::Unsafe_park(_JNIEnv*, _jobject*, unsigned char, long)+612)
runtime.cc:642]   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2067)
runtime.cc:642]   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
runtime.cc:642]   native: #02 pc 00000000004448e8  /apex/com.android.runtime/lib64/libart.so (art::Unsafe_park(_JNIEnv*, _jobject*, unsigned char, long)+612)
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1766/stack)
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642] 
runtime.cc:642]   | stack=0x71c61fb000-0x71c61fd000 stackSize=1039KB
runtime.cc:642]   native: #01 pc 00000000004f24c8  /apex/com.android.runtime/lib64/libart.so (art::Thread::Park(bool, long)+464)
runtime.cc:642]   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:849)
runtime.cc:642]   | sysTid=1769 nice=0 cgrp=default sched=0/0 handle=0x71c61f4d50
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1769/stack)
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1770/stack)
runtime.cc:642]   at sun.misc.Unsafe.park(Native method)
runtime.cc:642]   | sysTid=1772 nice=0 cgrp=default sched=0/0 handle=0x71c2df4d50
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1772/stack)
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642] 
runtime.cc:642]   at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642]   | stack=0x71c29d7000-0x71c29d9000 stackSize=1039KB
runtime.cc:642]   native: #01 pc 00000000004f24c8  /apex/com.android.runtime/lib64/libart.so (art::Thread::Park(bool, long)+464)
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642] "RxComputationThreadPool-3" prio=10 tid=41 TimedWaiting
runtime.cc:642]   - waiting on an unknown object
runtime.cc:642] "RxCachedThreadScheduler-11" prio=10 tid=49 Waiting
runtime.cc:642]   | stack=0x71b40f9000-0x71b40fb000 stackSize=1039KB
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642]   native: #01 pc 00000000004f24c8  /apex/com.android.runtime/lib64/libart.so (art::Thread::Park(bool, long)+464)
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
runtime.cc:642]   | stack=0x71b2ee7000-0x71b2ee9000 stackSize=1039KB
runtime.cc:642]   native: #02 pc 000000000040d914  /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, long, int, bool, art::ThreadState)+620)
runtime.cc:642]   at java.lang.Thread.run(Thread.java:919)
runtime.cc:642]   | sysTid=1799 nice=0 cgrp=default sched=0/0 handle=0x71afbe9d50
runtime.cc:642]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15903d90 self=0x71db1c6800
runtime.cc:642]   at okhttp3.internal.concurrent.TaskRunner.awaitTaskToRun(TaskRunner.kt:218)
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
runtime.cc:642]   | sysTid=1800 nice=9 cgrp=default sched=0/0 handle=0x71adae0d50
runtime.cc:642]   native: #00 pc 0000000000080340  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+32)
runtime.cc:642]   at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461)
runtime.cc:642]   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1855/stack)
runtime.cc:642]   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
runtime.cc:642]   at java.lang.Thread.run(Thread.java:919)
runtime.cc:642]   kernel: (couldn't read /proc/self/task/1856/stack)
runtime.cc:642]   - waiting on an unknown object
runtime.cc:642]   at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937)
runtime.cc:642] 
runtime.cc:642]   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
runtime.cc:642]   | held mutexes=
runtime.cc:642]   native: #11 pc 000000000036d020  /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType)+712)
A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 1759 (RenderThread), pid 1695 (ndroid.systemui)

image

Specifications

  • Version: 1.1.4
  • Platform: Samsung S20, Android 10

App crash with PID 12925

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.jiggdev.visorfondos, PID: 12925 java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.art/javalib/core-oj.jar) at me.zhanghai.android.fastscroll.PopupStyles.<clinit>(PopupStyles.java:34) at me.zhanghai.android.fastscroll.FastScrollerBuilder.useDefaultStyle(FastScrollerBuilder.java:122) at me.zhanghai.android.fastscroll.FastScrollerBuilder.<init>(FastScrollerBuilder.java:62) at com.jiggdev.visorfondos.fragments.Fragment_Activos.setRecyclerView(Fragment_Activos.java:61) at com.jiggdev.visorfondos.fragments.Fragment_Activos.onViewCreated(Fragment_Activos.java:54) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:322) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495) at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447) at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847) at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413) at android.os.Handler.handleCallback(Handler.java:907) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7478) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941) I/Process: Sending signal. PID: 12925 SIG: 9

FastScroller fastScroller = new FastScrollerBuilder(rv).build();

build.gradle

implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'me.zhanghai.android.fastscroll:library:1.1.4'

Specifications

compileSdkVersion 29
buildToolsVersion "29.0.3"

Recyclerview Unexpected Scroll Behavior, Thumb invisible

Expected Behavior

Scroll thumb should be shown.

Actual Behavior

Scroll thumb going invisible and unexpected behavior when item height is big.

Steps to Reproduce the Problem

  1. Create recyclerview and itemview height must be bigger than visible area
  2. build with FastScrollerBuilder(recyclerView).build();
  3. Now try to scroll problem is here.

Specifications

  • Version: 1.1.0
  • Platform: Android 9

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.