Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9cd44a81 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes I69addb7f,I2088b981 into main

* changes:
  Avoid showing snackbars for long operations
  Improve ArchivesProviderTest
parents 2f073cd6 d787c63c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.documentsui.ui;

import static com.android.documentsui.util.FlagUtils.isDesktopUxPhase2FlagEnabled;
import static com.android.documentsui.util.Material3Config.getRes;

import android.app.Activity;
@@ -88,7 +89,7 @@ public interface DialogController {
                return;
            }

            if (shouldShowProgressDialogForOperation(opType)) {
            if (isDesktopUxPhase2FlagEnabled() || shouldShowProgressDialogForOperation(opType)) {
                // The operation has a progress dialog created, so do not show a snackbar
                // for operation start, as it would duplicate the UI.
                return;
+145 −142
Original line number Diff line number Diff line
@@ -77,16 +77,18 @@ public class ArchivesProviderTest {
    }

    @Test
    public void testQueryRoots() throws InterruptedException, RemoteException {
    public void testQueryRoots() throws RemoteException {
        final ContentResolver resolver = mContext.getContentResolver();
        final Uri rootsUri = DocumentsContract.buildRootsUri(ArchivesProvider.AUTHORITY);
        try (ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                rootsUri)) {
            Cursor cursor = client.query(rootsUri, null, null, null, null, null);
            assertNotNull(client);
            try (Cursor cursor = client.query(rootsUri, null, null, null, null, null)) {
                assertNotNull("Cursor must not be null.", cursor);
                assertEquals(0, cursor.getCount());
            }
        }
    }

    @Test
    public void testOpen_Success() throws InterruptedException {
@@ -101,23 +103,23 @@ public class ArchivesProviderTest {
        final ContentResolver resolver = mContext.getContentResolver();
        final CountDownLatch latch = new CountDownLatch(1);

        final ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                archiveUri);
        try (ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                archiveUri)) {
            assertNotNull(client);
            ArchivesProvider.acquireArchive(client, archiveUri);

        {
            final Cursor cursor = resolver.query(childrenUri, null, null, null, null, null);
            try {
                try (Cursor cursor = resolver.query(childrenUri, null, null, null, null, null)) {
                    assertNotNull("Cursor must not be null. File not found?", cursor);

                    assertEquals(0, cursor.getCount());
                    final Bundle extras = cursor.getExtras();
            assertEquals(true, extras.getBoolean(DocumentsContract.EXTRA_LOADING, false));
                    assertTrue(extras.getBoolean(DocumentsContract.EXTRA_LOADING, false));
                    assertNull(extras.getString(DocumentsContract.EXTRA_ERROR));

                    final Uri notificationUri = cursor.getNotificationUri();
                    assertNotNull(notificationUri);

            resolver.registerContentObserver(notificationUri, false, new ContentObserver(null) {
                    resolver.registerContentObserver(notificationUri, false,
                            new ContentObserver(null) {
                                @Override
                                public void onChange(boolean selfChange, Uri uri) {
                                    latch.countDown();
@@ -126,18 +128,17 @@ public class ArchivesProviderTest {
                }

                latch.await(3, TimeUnit.SECONDS);
        {
            final Cursor cursor = resolver.query(childrenUri, null, null, null, null, null);
                try (Cursor cursor = resolver.query(childrenUri, null, null, null, null, null)) {
                    assertNotNull("Cursor must not be null. File not found?", cursor);

                    assertEquals(3, cursor.getCount());
                    final Bundle extras = cursor.getExtras();
            assertEquals(false, extras.getBoolean(DocumentsContract.EXTRA_LOADING, false));
                    assertFalse(extras.getBoolean(DocumentsContract.EXTRA_LOADING, false));
                    assertNull(extras.getString(DocumentsContract.EXTRA_ERROR));
                }

            } finally {
                ArchivesProvider.releaseArchive(client, archiveUri);
        client.release();
            }
        }
    }

    @Test
@@ -153,24 +154,23 @@ public class ArchivesProviderTest {
        final ContentResolver resolver = mContext.getContentResolver();
        final CountDownLatch latch = new CountDownLatch(1);

        final ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                archiveUri);
        try (ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                archiveUri)) {
            assertNotNull(client);
            ArchivesProvider.acquireArchive(client, archiveUri);

        {
            // TODO: Close this and any other cursor in this file.
            final Cursor cursor = resolver.query(childrenUri, null, null, null, null, null);
            try {
                try (Cursor cursor = resolver.query(childrenUri, null, null, null, null, null)) {
                    assertNotNull("Cursor must not be null. File not found?", cursor);

                    assertEquals(0, cursor.getCount());
                    final Bundle extras = cursor.getExtras();
            assertEquals(true, extras.getBoolean(DocumentsContract.EXTRA_LOADING, false));
                    assertTrue(extras.getBoolean(DocumentsContract.EXTRA_LOADING, false));
                    assertNull(extras.getString(DocumentsContract.EXTRA_ERROR));

                    final Uri notificationUri = cursor.getNotificationUri();
                    assertNotNull(notificationUri);

            resolver.registerContentObserver(notificationUri, false, new ContentObserver(null) {
                    resolver.registerContentObserver(notificationUri, false,
                            new ContentObserver(null) {
                                @Override
                                public void onChange(boolean selfChange, Uri uri) {
                                    latch.countDown();
@@ -179,22 +179,21 @@ public class ArchivesProviderTest {
                }

                latch.await(3, TimeUnit.SECONDS);
        {
            final Cursor cursor = resolver.query(childrenUri, null, null, null, null, null);
                try (Cursor cursor = resolver.query(childrenUri, null, null, null, null, null)) {
                    assertNotNull("Cursor must not be null. File not found?", cursor);

                    assertEquals(0, cursor.getCount());
                    final Bundle extras = cursor.getExtras();
            assertEquals(false, extras.getBoolean(DocumentsContract.EXTRA_LOADING, false));
                    assertFalse(extras.getBoolean(DocumentsContract.EXTRA_LOADING, false));
                    assertFalse(TextUtils.isEmpty(extras.getString(DocumentsContract.EXTRA_ERROR)));
                }

            } finally {
                ArchivesProvider.releaseArchive(client, archiveUri);
        client.release();
            }
        }
    }

    @Test
    public void testOpen_ClosesOnRelease() throws InterruptedException {
    public void testOpen_ClosesOnRelease() {
        final Uri sourceUri = DocumentsContract.buildDocumentUri(
                ResourcesProvider.AUTHORITY, "archive.zip");
        final Uri archiveUri = ArchivesProvider.buildUriForArchive(sourceUri,
@@ -205,35 +204,34 @@ public class ArchivesProviderTest {

        final ContentResolver resolver = mContext.getContentResolver();

        final ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                archiveUri);
        try (ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                archiveUri)) {
            assertNotNull(client);

            // Acquire twice to ensure that the refcount works correctly.
            ArchivesProvider.acquireArchive(client, archiveUri);
            try {
                ArchivesProvider.acquireArchive(client, archiveUri);

        {
            final Cursor cursor = resolver.query(childrenUri, null, null, null, null, null);
                try (Cursor cursor = resolver.query(childrenUri, null, null, null, null, null)) {
                    assertNotNull("Cursor must not be null. File not found?", cursor);
        }

                } finally {
                    ArchivesProvider.releaseArchive(client, archiveUri);
                }

        {
            final Cursor cursor = resolver.query(childrenUri, null, null, null, null, null);
                try (Cursor cursor = resolver.query(childrenUri, null, null, null, null, null)) {
                    assertNotNull("Cursor must not be null. File not found?", cursor);
                }

            } finally {
                ArchivesProvider.releaseArchive(client, archiveUri);
            }

        try {
            resolver.query(childrenUri, null, null, null, null, null);
            try (Cursor cursor = resolver.query(childrenUri, null, null, null, null, null)) {
                assertNotNull(cursor);
                fail("The archive was expected to be invalid on the last release call.");
            } catch (IllegalStateException e) {
                // Expected.
            }

        client.release();
        }
    }

    @Test
@@ -248,16 +246,19 @@ public class ArchivesProviderTest {

        final ContentResolver resolver = mContext.getContentResolver();

        final ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                archiveUri);

        try (ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                archiveUri)) {
            assertNotNull(client);
            final Uri notificationUri;
            ArchivesProvider.acquireArchive(client, archiveUri);
        final Cursor cursor = client.query(childrenUri, null, null, null, null, null);
            try (Cursor cursor = client.query(childrenUri, null, null, null, null, null)) {
                assertNotNull(cursor);
                final Bundle extra = cursor.getExtras();
                assertTrue(extra.getBoolean(DocumentsContract.EXTRA_LOADING, false));
        final Uri notificationUri = cursor.getNotificationUri();

                notificationUri = cursor.getNotificationUri();
            } finally {
                ArchivesProvider.releaseArchive(client, archiveUri);
            }
            final CountDownLatch latch = new CountDownLatch(1);
            resolver.registerContentObserver(notificationUri, false, new ContentObserver(null) {
                @Override
@@ -266,11 +267,10 @@ public class ArchivesProviderTest {
                }
            });

        // Assert that there is no notification if no one has acquired this archive and this wait
        // times out.
            // Assert that there is no notification if no one has acquired this archive and this
            // wait times out.
            assertFalse(latch.await(1, TimeUnit.SECONDS));

        client.release();
        }
    }

    private void getDocumentMetadata_byDocumentId_shouldMatchSize(String documentId)
@@ -281,17 +281,19 @@ public class ArchivesProviderTest {
                ParcelFileDescriptor.MODE_READ_ONLY);

        final ContentResolver resolver = mContext.getContentResolver();
        final ContentProviderClient client =
                resolver.acquireUnstableContentProviderClient(archiveUri);
        try (ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                archiveUri)) {
            assertNotNull(client);

            ArchivesProvider.acquireArchive(client, archiveUri);

            try {
                Uri archivedImageUri = Uri.parse(
                        "content://com.android.documentsui.archives/document/content%3A%2F%2F"
                                + "com.android.documentsui.archives.resourcesprovider%2F"
                                + "document%2F" + documentId + "%23268435456%23%2Ffreddy.jpg");

        Bundle metadata = DocumentsContract.getDocumentMetadata(wrap(client), archivedImageUri);
                Bundle metadata = DocumentsContract.getDocumentMetadata(wrap(client),
                        archivedImageUri);
                assertNotNull(metadata);
                Bundle exif = metadata.getBundle(DocumentsContract.METADATA_EXIF);
                assertNotNull(exif);
@@ -299,9 +301,10 @@ public class ArchivesProviderTest {
                assertThat(exif.getInt(ExifInterface.TAG_IMAGE_WIDTH)).isEqualTo(3036);
                assertThat(exif.getInt(ExifInterface.TAG_IMAGE_LENGTH)).isEqualTo(4048);
                assertThat(exif.getString(ExifInterface.TAG_MODEL)).isEqualTo("Pixel");

            } finally {
                ArchivesProvider.releaseArchive(client, archiveUri);
        client.close();
            }
        }
    }

    @Test