diff options
3 files changed, 18 insertions, 8 deletions
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java index 00ed043d..4b83cacb 100644 --- a/src/com/android/providers/downloads/DownloadProvider.java +++ b/src/com/android/providers/downloads/DownloadProvider.java @@ -17,7 +17,11 @@ package com.android.providers.downloads; import static android.provider.BaseColumns._ID; +import static android.provider.Downloads.Impl.COLUMN_DESTINATION; import static android.provider.Downloads.Impl.COLUMN_MEDIAPROVIDER_URI; +import static android.provider.Downloads.Impl.COLUMN_MEDIA_SCANNED; +import static android.provider.Downloads.Impl.COLUMN_MIME_TYPE; +import static android.provider.Downloads.Impl.DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD; import static android.provider.Downloads.Impl._DATA; import android.app.AppOpsManager; @@ -695,6 +699,12 @@ public final class DownloadProvider extends ContentProvider { Binder.restoreCallingIdentity(token); } + if (values.getAsInteger(COLUMN_DESTINATION) == DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD + && values.getAsInteger(COLUMN_MEDIA_SCANNED) == 0) { + DownloadScanner.requestScanBlocking(getContext(), rowID, values.getAsString(_DATA), + values.getAsString(COLUMN_MIME_TYPE)); + } + return ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI, rowID); } diff --git a/src/com/android/providers/downloads/DownloadScanner.java b/src/com/android/providers/downloads/DownloadScanner.java index 37f51143..4a5ba87e 100644 --- a/src/com/android/providers/downloads/DownloadScanner.java +++ b/src/com/android/providers/downloads/DownloadScanner.java @@ -76,9 +76,13 @@ public class DownloadScanner implements MediaScannerConnectionClient { } public static void requestScanBlocking(Context context, DownloadInfo info) { + requestScanBlocking(context, info.mId, info.mFileName, info.mMimeType); + } + + public static void requestScanBlocking(Context context, long id, String path, String mimeType) { final DownloadScanner scanner = new DownloadScanner(context); scanner.mLatch = new CountDownLatch(1); - scanner.requestScan(info); + scanner.requestScan(new ScanRequest(id, path, mimeType)); try { scanner.mLatch.await(SCAN_TIMEOUT, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { @@ -115,10 +119,9 @@ public class DownloadScanner implements MediaScannerConnectionClient { * * @see #hasPendingScans() */ - public void requestScan(DownloadInfo info) { - if (LOGV) Log.v(TAG, "requestScan() for " + info.mFileName); + public void requestScan(ScanRequest req) { + if (LOGV) Log.v(TAG, "requestScan() for " + req.path); synchronized (mConnection) { - final ScanRequest req = new ScanRequest(info.mId, info.mFileName, info.mMimeType); mPending.put(req.path, req); if (mConnection.isConnected()) { diff --git a/src/com/android/providers/downloads/OpenHelper.java b/src/com/android/providers/downloads/OpenHelper.java index 7a74c88c..27ab86b9 100644 --- a/src/com/android/providers/downloads/OpenHelper.java +++ b/src/com/android/providers/downloads/OpenHelper.java @@ -97,13 +97,10 @@ public class OpenHelper { intent.putExtra(Intent.EXTRA_ORIGINATING_URI, remoteUri); intent.putExtra(Intent.EXTRA_REFERRER, getRefererUri(context, id)); intent.putExtra(Intent.EXTRA_ORIGINATING_UID, getOriginatingUid(context, id)); - } else if ("file".equals(localUri.getScheme())) { + } else { intent.setDataAndType(documentUri, mimeType); intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - } else { - throw new UnsupportedOperationException( - "Unsupported scheme: " + localUri.getScheme()); } return intent; |