diff options
Diffstat (limited to 'src/com/android/providers/downloads/DownloadScanner.java')
-rw-r--r-- | src/com/android/providers/downloads/DownloadScanner.java | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/com/android/providers/downloads/DownloadScanner.java b/src/com/android/providers/downloads/DownloadScanner.java index ca795062..4a5ba87e 100644 --- a/src/com/android/providers/downloads/DownloadScanner.java +++ b/src/com/android/providers/downloads/DownloadScanner.java @@ -35,6 +35,8 @@ import com.android.internal.annotations.GuardedBy; import com.google.common.collect.Maps; import java.util.HashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; /** * Manages asynchronous scanning of completed downloads. @@ -66,11 +68,30 @@ public class DownloadScanner implements MediaScannerConnectionClient { @GuardedBy("mConnection") private HashMap<String, ScanRequest> mPending = Maps.newHashMap(); + private CountDownLatch mLatch; + public DownloadScanner(Context context) { mContext = context; mConnection = new MediaScannerConnection(context, this); } + 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(new ScanRequest(id, path, mimeType)); + try { + scanner.mLatch.await(SCAN_TIMEOUT, TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } finally { + scanner.shutdown(); + } + } + /** * Check if requested scans are still pending. Scans may timeout after an * internal duration. @@ -98,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()) { @@ -153,5 +173,9 @@ public class DownloadScanner implements MediaScannerConnectionClient { // so clean up now-orphaned media entry. resolver.delete(uri, null, null); } + + if (mLatch != null) { + mLatch.countDown(); + } } } |