summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/downloads/Helpers.java
diff options
context:
space:
mode:
authorSudheer Shanka <sudheersai@google.com>2019-08-06 18:51:48 -0700
committerSudheer Shanka <sudheersai@google.com>2019-08-13 17:38:13 +0000
commitb02bbf988e4e7e0c2cdba7bad6ad518e82df1f33 (patch)
treea728f1462e19748acf6ac59e13c55c24e35e1dc7 /src/com/android/providers/downloads/Helpers.java
parent9541cdbd3b8374a1f54dc29a2c4bb9d6170f1e29 (diff)
downloadandroid_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.java24
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();
}