owncloud / owncloud/android

[BUG] Move files to a different oC account using the document provider doesn't work as expected

Open
#2,659 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Document Provider Type:bug
Dominant language
Kotlin
Stars
4.2k
Forks
3.1k
Avg merge
1d 12h
Merged PRs (30d)
7

Description

Updated: 2021-08-10

Steps to reproduce
  1. Attach two accounts to oC app
  2. Open Files/Download app to work with document provider
  3. Select several files (i selected three)
  4. Move the selected files to the another oC account
Actual behaviour
  • Notification Couldn't move 3 items appears.
Expected behaviour
  • Files are properly moved.
Environment data

Android version: 11 & 7

Device model: Pixel 2 & Nexus 6P

2021-08-10 17:02:29.489 29404-30467/? E/MoveJob: Provider side move failed for: content://org.owncloud.documents/document/2031 due to an exception: 
    java.io.FileNotFoundException: File /laferrari-700.jpg not found
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.os.ParcelableException.readFromParcel(ParcelableException.java:56)
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:82)
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:79)
        at android.os.Parcel.readParcelable(Parcel.java:3281)
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2368)
        at android.os.Parcel.createException(Parcel.java:2357)
        at android.os.Parcel.readException(Parcel.java:2340)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:190)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
        at android.content.ContentProviderProxy.call(ContentProviderNative.java:732)
        at android.content.ContentProviderClient.call(ContentProviderClient.java:603)
        at android.content.ContentResolver.call(ContentResolver.java:2395)
        at android.provider.DocumentsContract.moveDocument(DocumentsContract.java:1514)
        at com.android.documentsui.services.MoveJob.processDocument(MoveJob.java:150)
        at com.android.documentsui.services.CopyJob.processDocumentThenUpdateProgress(CopyJob.java:386)
        at com.android.documentsui.services.CopyJob.start(CopyJob.java:243)
        at com.android.documentsui.services.Job.run(Job.java:162)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
2021-08-10 17:02:29.490 4109-12150/? I/MediaProvider: End Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=file:///storage/emulated/0/owncloud/user1@192.168.1.20%3A37000/laferrari-700 (2).jpg flg=0x1000010 cmp=com.google.android.providers.media.module/com.android.providers.media.MediaService }
2021-08-10 17:02:29.492 4109-12150/? I/MediaProvider: Begin Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=file:///storage/emulated/0/owncloud/user1@192.168.1.20%3A37000/laferrari-700 (2).jpg flg=0x1000010 cmp=com.google.android.providers.media.module/com.android.providers.media.MediaService }
2021-08-10 17:02:29.498 4109-12150/? I/MediaProvider: End Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=file:///storage/emulated/0/owncloud/user1@192.168.1.20%3A37000/laferrari-700 (2).jpg flg=0x1000010 cmp=com.google.android.providers.media.module/com.android.providers.media.MediaService }
2021-08-10 17:02:29.676 29439-30413/com.owncloud.android.debug E/DatabaseUtils: Writing exception to parcel
    android.os.ParcelableException: java.io.FileNotFoundException: Remote Operation failed
        at android.provider.DocumentsProvider.call(DocumentsProvider.java:1069)
        at android.content.ContentProvider.call(ContentProvider.java:2448)
        at android.content.ContentProvider$Transport.call(ContentProvider.java:517)
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:295)
        at android.os.Binder.execTransactInternal(Binder.java:1154)
        at android.os.Binder.execTransact(Binder.java:1123)
     Caused by: java.io.FileNotFoundException: Remote Operation failed
        at com.owncloud.android.providers.DocumentsStorageProvider.checkOperationResult(DocumentsStorageProvider.kt:404)
        at com.owncloud.android.providers.DocumentsStorageProvider.deleteDocument(DocumentsStorageProvider.kt:333)
        at android.provider.DocumentsProvider.callUnchecked(DocumentsProvider.java:1170)
        at android.provider.DocumentsProvider.call(DocumentsProvider.java:1067)
        at android.content.ContentProvider.call(ContentProvider.java:2448) 
        at android.content.ContentProvider$Transport.call(ContentProvider.java:517) 
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:295) 
        at android.os.Binder.execTransactInternal(Binder.java:1154) 
        at android.os.Binder.execTransact(Binder.java:1123) 
2021-08-10 17:02:29.677 29404-30467/? E/CopyJob: Failed to copy content://org.owncloud.documents/document/2031
    com.android.documentsui.services.ResourceException: Failed to delete file content://org.owncloud.documents/document/2031 due to an exception.
        at com.android.documentsui.services.Job.deleteDocument(Job.java:290)
        at com.android.documentsui.services.MoveJob.processDocument(MoveJob.java:186)
        at com.android.documentsui.services.CopyJob.processDocumentThenUpdateProgress(CopyJob.java:386)
        at com.android.documentsui.services.CopyJob.start(CopyJob.java:243)
        at com.android.documentsui.services.Job.run(Job.java:162)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
     Caused by: java.io.FileNotFoundException: Remote Operation failed
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.os.ParcelableException.readFromParcel(ParcelableException.java:56)
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:82)
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:79)
        at android.os.Parcel.readParcelable(Parcel.java:3281)
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2368)
        at android.os.Parcel.createException(Parcel.java:2357)
        at android.os.Parcel.readException(Parcel.java:2340)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:190)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
        at android.content.ContentProviderProxy.call(ContentProviderNative.java:732)
        at android.content.ContentProviderClient.call(ContentProviderClient.java:603)
        at android.content.ContentResolver.call(ContentResolver.java:2395)
        at android.provider.DocumentsContract.deleteDocument(DocumentsContract.java:1460)
        at com.android.documentsui.services.Job.deleteDocument(Job.java:281)
        at com.android.documentsui.services.MoveJob.processDocument(MoveJob.java:186) 
        at com.android.documentsui.services.CopyJob.processDocumentThenUpdateProgress(CopyJob.java:386) 
        at com.android.documentsui.services.CopyJob.start(CopyJob.java:243) 
        at com.android.documentsui.services.Job.run(Job.java:162) 
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:923) 
2021-08-10 17:02:29.792 1478-1478/? D/NotificationService: 0|com.owncloud.android.debug|2131886795|null|13475: granting content://settings/system/notification_sound
2021-08-10 17:02:29.793 1478-1478/? D/NotificationService: 0|com.owncloud.android.debug|2131886795|null|13475: granting content://settings/system/notification_sound
2021-08-10 17:02:29.809 1979-1979/? D/InterruptionStateProvider: No bubble up: not allowed to bubble: 0|com.owncloud.android.debug|2131886795|null|13475
2021-08-10 17:02:29.809 1979-1979/? D/InterruptionStateProvider: No heads up: unimportant notification: 0|com.owncloud.android.debug|2131886795|null|13475
2021-08-10 17:02:29.971 29404-30467/? W/DocumentsContract: Failed to move document
    android.os.ParcelableException: java.io.FileNotFoundException: File /ownCloud.log not found
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:82)
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:79)
        at android.os.Parcel.readParcelable(Parcel.java:3281)
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2368)
        at android.os.Parcel.createException(Parcel.java:2357)
        at android.os.Parcel.readException(Parcel.java:2340)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:190)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
        at android.content.ContentProviderProxy.call(ContentProviderNative.java:732)
        at android.content.ContentProviderClient.call(ContentProviderClient.java:603)
        at android.content.ContentResolver.call(ContentResolver.java:2395)
        at android.provider.DocumentsContract.moveDocument(DocumentsContract.java:1514)
        at com.android.documentsui.services.MoveJob.processDocument(MoveJob.java:150)
        at com.android.documentsui.services.CopyJob.processDocumentThenUpdateProgress(CopyJob.java:386)
        at com.android.documentsui.services.CopyJob.start(CopyJob.java:243)
        at com.android.documentsui.services.Job.run(Job.java:162)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
     Caused by: java.io.FileNotFoundException: File /ownCloud.log not found
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.os.ParcelableException.readFromParcel(ParcelableException.java:56)
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:82) 
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:79) 
        at android.os.Parcel.readParcelable(Parcel.java:3281) 
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2368) 
        at android.os.Parcel.createException(Parcel.java:2357) 
        at android.os.Parcel.readException(Parcel.java:2340) 
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:190) 
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142) 
        at android.content.ContentProviderProxy.call(ContentProviderNative.java:732) 
        at android.content.ContentProviderClient.call(ContentProviderClient.java:603) 
        at android.content.ContentResolver.call(ContentResolver.java:2395) 
        at android.provider.DocumentsContract.moveDocument(DocumentsContract.java:1514) 
        at com.android.documentsui.services.MoveJob.processDocument(MoveJob.java:150) 
        at com.android.documentsui.services.CopyJob.processDocumentThenUpdateProgress(CopyJob.java:386) 
        at com.android.documentsui.services.CopyJob.start(CopyJob.java:243) 
        at com.android.documentsui.services.Job.run(Job.java:162) 
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:923) 
2021-08-10 17:02:29.972 29404-30467/? E/MoveJob: Provider side move failed for: content://org.owncloud.documents/document/16 due to an exception: 
    java.io.FileNotFoundException: File /ownCloud.log not found
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.os.ParcelableException.readFromParcel(ParcelableException.java:56)
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:82)
        at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:79)
        at android.os.Parcel.readParcelable(Parcel.java:3281)
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2368)
        at android.os.Parcel.createException(Parcel.java:2357)
        at android.os.Parcel.readException(Parcel.java:2340)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:190)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
        at android.content.ContentProviderProxy.call(ContentProviderNative.java:732)
        at android.content.ContentProviderClient.call(ContentProviderClient.java:603)
        at android.content.ContentResolver.call(ContentResolver.java:2395)
        at android.provider.DocumentsContract.moveDocument(DocumentsContract.java:1514)
        at com.android.documentsui.services.MoveJob.processDocument(MoveJob.java:150)
        at com.android.documentsui.services.CopyJob.processDocumentThenUpdateProgress(CopyJob.java:386)
        at com.android.documentsui.services.CopyJob.start(CopyJob.java:243)
        at com.android.documentsui.services.Job.run(Job.java:162)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)

Contributor guide

Open the contributing guide

First steps

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

Research direction

Start with DocumentsStorageProvider.kt, especially deleteDocument and checkOperationResult at the stack-trace locations, then trace the Android document-provider move flow shown in the logs. Reproduce moving several files between two attached accounts and verify that the move completes without the provider-side copy or delete failures.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, kotlin
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.