Skip to content

Crash when scrolling favorites to the bottom #17172

Closed

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

Activity

  1. Tighbu commented on Jun 13, 2026

    @Tighbu

    Same error experienced on a Motorola Edge 50 Neo. Only 1 item in favourites, so app crashes as soon as favourites tab is selected

  2. Zenon1991 commented on Jun 16, 2026

    @Zenon1991

    Can confirm that error on another Google Pixel 7 device:

    App information

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

    Device information

    • Brand: google'
    • Device: 'panther'
    • Model: 'Pixel 7'
    • Id: 'CP1A.260405.005'
    • Product: 'panther'

    Firmware

    • SDK: '36'
    • Release: '16'
    • Incremental: '15001963'
  3. alperozturk96 commented on Jun 16, 2026

    @alperozturk96
    Collaborator

    fixed via #17152

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions