Merge "Fix flakiness DocumentLoader#testCancelTask." into nyc-dev
diff --git a/src/com/android/mtp/DocumentLoader.java b/src/com/android/mtp/DocumentLoader.java
index 329afdd..6ed4ea1 100644
--- a/src/com/android/mtp/DocumentLoader.java
+++ b/src/com/android/mtp/DocumentLoader.java
@@ -196,9 +196,10 @@
                 }
                 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/tests/src/com/android/mtp/DocumentLoaderTest.java b/tests/src/com/android/mtp/DocumentLoaderTest.java
index 60dd7e1..a3c6bd7 100644
--- a/tests/src/com/android/mtp/DocumentLoaderTest.java
+++ b/tests/src/com/android/mtp/DocumentLoaderTest.java
@@ -143,9 +143,9 @@
         }
     }
 
-    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 @@
                 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() {