Skip to content

uploading photos is not hash based, causes bugs #16615

@ripplesouth

Description

@ripplesouth

⚠️ 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

Upload a photo
Have the photo error out on upload
Delete same errored photo from upload queue

Expected behaviour

App was trying to upload a photo

Actual behaviour

App crashed after deleting stuck upload.
Have two different photos share the same name. When the uploader attempts to upload, it errors out. Del error upload triggers bug.

Move to hash based comparison to resolve name conflicts and avoid overwriting non-dupes.

Android version

16

Device brand and model

Samsung s22 SM-S901W

Stock or custom OS?

Stock

Nextcloud android app version

dev

Nextcloud server version

33.0.6

Using a reverse proxy?

Yes

Android logs

Cause of error

Exception in thread "main" java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionHeaderViewHolder{6690b70 position=0 id=-1, oldPos=-1, pLpos:-1 scrap [attachedScrap] tmpDetached no parent} com.owncloud.android.ui.EmptyRecyclerView{eec9240 VFED..... ........ 0,0-1080,1902 #102000a android:id/list}, adapter:com.owncloud.android.ui.adapter.UploadListAdapter@6bd0d5e, layout:androidx.recyclerview.widget.GridLayoutManager@68ac4e8, context:com.owncloud.android.ui.activity.UploadListActivity@d195432
    at androidx.recyclerview.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:6590)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6796)
    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.GridLayoutManager.layoutChunk(GridLayoutManager.java:584)
    at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1622)
    at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:687)
    at androidx.recyclerview.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:182)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4645)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4348)
    at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4919)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:704)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:345)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:283)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1131)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at androidx.drawerlayout.widget.DrawerLayout.onLayout(DrawerLayout.java:1263)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:345)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:283)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:345)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:283)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:345)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:283)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1891)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1729)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1638)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:345)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:283)
    at com.android.internal.policy.DecorView.onLayout(DecorView.java:1115)
    at android.view.View.layout(View.java:26937)
    at android.view.ViewGroup.layout(ViewGroup.java:6847)
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:6160)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:5227)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3924)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:12903)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1901)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1910)
    at android.view.Choreographer.doCallbacks(Choreographer.java:1367)
    at android.view.Choreographer.doFrame(Choreographer.java:1292)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1870)
    at android.os.Handler.handleCallback(Handler.java:995)
    at android.os.Handler.dispatchMessage(Handler.java:103)
    at android.os.Looper.loopOnce(Looper.java:273)
    at android.os.Looper.loop(Looper.java:363)
    at android.app.ActivityThread.main(ActivityThread.java:10060)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

App information

  • ID: com.nextcloud.android.beta
  • Version: 20260301
  • Build flavor: versionDev

Device information

  • Brand: samsung
  • Device: r0q
  • Model: SM-S901W
  • Id: BP2A.250605.031.A3
  • Product: r0qcsx

Firmware

  • SDK: 36
  • Release: 16
  • Incremental: S901WVLS8GZA1

Server error logs

Additional information

No response

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions