Skip to content

Crash when scrolling favorites to the bottom #17172

@moomoomoo309

Description

@moomoomoo309

⚠️ Before posting ⚠️

  • This is a bug, not a question or an enhancement.
  • I've searched for similar issues and didn't find a duplicate.
  • I've written a clear and descriptive title for this issue, not just "Bug" or "Crash".
  • I agree to follow Nextcloud's Code of Conduct.

Steps to reproduce

  1. Open the app (I'm already logged in, so log in if needed)
  2. Tap Favorites.
  3. Scroll down.
  4. It will crash after 2-3 seconds.

Expected behaviour

It should not crash.

Actual behaviour

It shows the files, but crashes after scrolling to the bottom.

Android version

16

Device brand and model

Pixel 7a

Stock or custom OS?

Stock

Nextcloud android app version

34.0.0

Nextcloud server version

33.0.5

Using a reverse proxy?

No

Android logs

No response

Server error logs

Additional information

Here's the stack trace, my 2 cents is that there's a listOf() that should be a mutableListOf() somewhere, so it used EmptyList instead of MutableList and blew up.

Cause of error

Exception in thread "main" java.lang.UnsupportedOperationException: Operation is not supported for read-only collection
    at kotlin.collections.EmptyList.add(Unknown Source:4)
    at com.owncloud.android.ui.adapter.OCFileListAdapter.bindListItemViewHolder(OCFileListAdapter.java:610)
    at com.owncloud.android.ui.adapter.OCFileListAdapter.bindHolder(OCFileListAdapter.java:502)
    at com.owncloud.android.ui.adapter.OCFileListAdapter.onBindViewHolder(OCFileListAdapter.java:490)
    at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7747)
    at com.owncloud.android.ui.adapter.OCFileListAdapter.onBindViewHolder(OCFileListAdapter.java:1089)
    at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7847)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6646)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6917)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6757)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6753)
    at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2362)
    at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1662)
    at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1622)
    at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:687)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4645)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4348)
    at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:2076)
    at androidx.recyclerview.widget.RecyclerView.scrollByInternal(RecyclerView.java:2145)
    at androidx.recyclerview.widget.RecyclerView.onTouchEvent(RecyclerView.java:3867)
    at android.view.View.performOnTouchCallback(View.java:16906)
    at android.view.View.dispatchTouchEvent(View.java:16859)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3137)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2811)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3143)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2826)
    at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:503)
    at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:2017)
    at android.app.Activity.dispatchTouchEvent(Activity.java:4666)
    at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
    at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:441)
    at android.view.View.dispatchPointerEvent(View.java:17196)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:8585)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:8335)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7702)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7759)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7725)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7896)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7733)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7953)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7706)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7759)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7725)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7733)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7706)
    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:11033)
    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10973)
    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10941)
    at android.view.ViewRootImpl.processRawInputEvent(ViewRootImpl.java:11377)
    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:11161)
    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:284)
    at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
    at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:260)
    at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:11132)
    at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:11226)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1647)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1656)
    at android.view.Choreographer.doCallbacks(Choreographer.java:1252)
    at android.view.Choreographer.doFrame(Choreographer.java:1174)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1630)
    at android.os.Handler.handleCallback(Handler.java:1095)
    at android.os.Handler.dispatchMessageImpl(Handler.java:135)
    at android.os.Handler.dispatchMessage(Handler.java:125)
    at android.os.Looper.loopOnce(Looper.java:269)
    at android.os.Looper.loop(Looper.java:367)
    at android.app.ActivityThread.main(ActivityThread.java:9333)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:566)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)

App information

  • ID: com.nextcloud.client
  • Version: 340000090
  • Build flavor: gplay

Device information

  • Brand: google
  • Device: lynx
  • Model: Pixel 7a
  • Id: CP1A.260505.005
  • Product: lynx

Firmware

  • SDK: 36
  • Release: 16
  • Incremental: 15081906

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions