diff options
author | Sudheer Shanka <sudheersai@google.com> | 2019-08-06 18:51:48 -0700 |
---|---|---|
committer | Sudheer Shanka <sudheersai@google.com> | 2019-08-13 17:38:13 +0000 |
commit | b02bbf988e4e7e0c2cdba7bad6ad518e82df1f33 (patch) | |
tree | a728f1462e19748acf6ac59e13c55c24e35e1dc7 /src/com/android/providers/downloads/Helpers.java | |
parent | 9541cdbd3b8374a1f54dc29a2c4bb9d6170f1e29 (diff) | |
download | android_packages_providers_DownloadProvider-b02bbf988e4e7e0c2cdba7bad6ad518e82df1f33.tar.gz android_packages_providers_DownloadProvider-b02bbf988e4e7e0c2cdba7bad6ad518e82df1f33.tar.bz2 android_packages_providers_DownloadProvider-b02bbf988e4e7e0c2cdba7bad6ad518e82df1f33.zip |
Ensure files get mediascanned after the download is completed.
Update file size in MediaStore to 0 before triggering mediascan
which should force MediaScanner to scan this file.
Also, add a clean-up job to trigger mediscan on already existing
downloads which should have been mediascanned but haven't and got
stuck in this state.
Bug: 138419471
Test: manual
Test: atest DownloadProviderTests
Test: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java
Test: atest DownloadManagerLegacy
Test: atest DownloadManagerApi28
Change-Id: I813086ceba6c70ca42309fcce5f9db209eac1575
(cherry picked from commit c2b0739b08e423e3c9fcde42b095cd72315ecf1f)
Diffstat (limited to 'src/com/android/providers/downloads/Helpers.java')
-rw-r--r-- | src/com/android/providers/downloads/Helpers.java | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/com/android/providers/downloads/Helpers.java b/src/com/android/providers/downloads/Helpers.java index 565aa52e..f75b627f 100644 --- a/src/com/android/providers/downloads/Helpers.java +++ b/src/com/android/providers/downloads/Helpers.java @@ -34,18 +34,22 @@ import android.app.job.JobInfo; import android.app.job.JobScheduler; import android.content.ComponentName; import android.content.Context; +import android.content.Intent; import android.database.Cursor; import android.net.Uri; +import android.os.Bundle; import android.os.Environment; import android.os.FileUtils; import android.os.Handler; import android.os.HandlerThread; import android.os.Process; +import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; import android.os.storage.StorageManager; import android.os.storage.StorageVolume; import android.provider.Downloads; +import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; import android.util.LongSparseArray; @@ -489,6 +493,26 @@ public class Helpers { throw new IOException("Failed to generate an available filename"); } + public static Uri convertToMediaStoreDownloadsUri(Uri mediaStoreUri) { + final String volumeName = MediaStore.getVolumeName(mediaStoreUri); + final long id = android.content.ContentUris.parseId(mediaStoreUri); + return MediaStore.Downloads.getContentUri(volumeName, id); + } + + // TODO: Move it to MediaStore. + public static Uri triggerMediaScan(android.content.ContentProviderClient mediaProviderClient, + File file) { + try { + final Bundle in = new Bundle(); + in.putParcelable(Intent.EXTRA_STREAM, Uri.fromFile(file)); + final Bundle out = mediaProviderClient.call(MediaStore.SCAN_FILE_CALL, null, in); + return out.getParcelable(Intent.EXTRA_STREAM); + } catch (RemoteException e) { + // Should not happen + } + return null; + } + public static boolean isFileInExternalAndroidDirs(String filePath) { return PATTERN_ANDROID_DIRS.matcher(filePath).matches(); } |