diff options
Diffstat (limited to 'src/com/android/providers/downloads/DownloadScanner.java')
-rw-r--r-- | src/com/android/providers/downloads/DownloadScanner.java | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/com/android/providers/downloads/DownloadScanner.java b/src/com/android/providers/downloads/DownloadScanner.java index ca795062..37f51143 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,26 @@ 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) { + final DownloadScanner scanner = new DownloadScanner(context); + scanner.mLatch = new CountDownLatch(1); + scanner.requestScan(info); + 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. @@ -153,5 +170,9 @@ public class DownloadScanner implements MediaScannerConnectionClient { // so clean up now-orphaned media entry. resolver.delete(uri, null, null); } + + if (mLatch != null) { + mLatch.countDown(); + } } } |