diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/DocumentLoader.java b/packages/MtpDocumentsProvider/src/com/android/mtp/DocumentLoader.java index 329afdd4f17cd..6ed4ea1db4994 100644 --- a/packages/MtpDocumentsProvider/src/com/android/mtp/DocumentLoader.java +++ b/packages/MtpDocumentsProvider/src/com/android/mtp/DocumentLoader.java @@ -196,9 +196,10 @@ class DocumentLoader implements AutoCloseable { } task.loadObjectInfoList(NUM_LOADING_ENTRIES); final boolean shouldNotify = - task.mLastNotified.getTime() < - new Date().getTime() - NOTIFY_PERIOD_MS || - task.getState() != LoaderTask.STATE_LOADING; + task.getState() != LoaderTask.STATE_CANCELLED && + (task.mLastNotified.getTime() < + new Date().getTime() - NOTIFY_PERIOD_MS || + task.getState() != LoaderTask.STATE_LOADING); if (shouldNotify) { task.notify(mResolver); } diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java index 60dd7e16a1d9d..a3c6bd77cefbd 100644 --- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java +++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java @@ -143,9 +143,9 @@ public class DocumentLoaderTest extends AndroidTestCase { } } - public void testCancelTask() throws IOException, InterruptedException { + public void testCancelTask() throws IOException, InterruptedException, TimeoutException { setUpDocument(mManager, - DocumentLoader.NUM_INITIAL_ENTRIES + DocumentLoader.NUM_LOADING_ENTRIES + 1); + DocumentLoader.NUM_INITIAL_ENTRIES + 1); // Block the first iteration in the background thread. mManager.blockDocument( @@ -155,19 +155,24 @@ public class DocumentLoaderTest extends AndroidTestCase { MtpDocumentsProvider.DEFAULT_DOCUMENT_PROJECTION, mParentIdentifier)) { assertTrue(cursor.getExtras().getBoolean(DocumentsContract.EXTRA_LOADING)); } - Thread.sleep(DocumentLoader.NOTIFY_PERIOD_MS); + + final Uri uri = DocumentsContract.buildChildDocumentsUri( + MtpDocumentsProvider.AUTHORITY, mParentIdentifier.mDocumentId); + assertEquals(0, mResolver.getChangeCount(uri)); // Clear task while the first iteration is being blocked. + mLoader.cancelTask(mParentIdentifier); mManager.unblockDocument( 0, DocumentLoader.NUM_INITIAL_ENTRIES + 1); - mLoader.cancelTask(mParentIdentifier); - - Thread.sleep(DocumentLoader.NOTIFY_PERIOD_MS * 2); + Thread.sleep(DocumentLoader.NOTIFY_PERIOD_MS); + assertEquals(0, mResolver.getChangeCount(uri)); // Check if it's OK to query invalidated task. try (final Cursor cursor = mLoader.queryChildDocuments( MtpDocumentsProvider.DEFAULT_DOCUMENT_PROJECTION, mParentIdentifier)) { + assertTrue(cursor.getExtras().getBoolean(DocumentsContract.EXTRA_LOADING)); } + mResolver.waitForNotification(uri, 1); } private void setUpLoader() {