diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java index 1faada14e3478..8bf57a7006238 100644 --- a/core/java/android/provider/DocumentsContract.java +++ b/core/java/android/provider/DocumentsContract.java @@ -1412,7 +1412,7 @@ public final class DocumentsContract { * @param path the list of document ids from the parent document at * position 0 to the child document. */ - public Path(String rootId, List path) { + public Path(@Nullable String rootId, List path) { checkCollectionNotEmpty(path, "path"); checkCollectionElementsNotNull(path, "path"); diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java index d75781b792165..4256484b74c25 100644 --- a/core/java/android/provider/DocumentsProvider.java +++ b/core/java/android/provider/DocumentsProvider.java @@ -927,14 +927,20 @@ public abstract class DocumentsProvider extends ContentProvider { ? DocumentsContract.getTreeDocumentId(documentUri) : null; - final Path path = findPath(documentId, parentDocumentId); + Path path = findPath(documentId, parentDocumentId); // Ensure provider doesn't leak information to unprivileged callers. - if (isTreeUri - && (path.getRootId() != null - || !Objects.equals(path.getPath().get(0), parentDocumentId))) { - throw new IllegalStateException( - "Provider returns an invalid result for findPath."); + if (isTreeUri) { + if (!Objects.equals(path.getPath().get(0), parentDocumentId)) { + Log.wtf(TAG, "Provider doesn't return path from the tree root. Expected: " + + parentDocumentId + " found: " + path.getPath().get(0)); + } + + if (path.getRootId() != null) { + Log.wtf(TAG, "Provider returns root id :" + + path.getRootId() + " unexpectedly. Erase root id."); + path = new Path(null, path.getPath()); + } } out.putParcelable(DocumentsContract.EXTRA_RESULT, path); diff --git a/core/tests/coretests/src/android/provider/DocumentsProviderTest.java b/core/tests/coretests/src/android/provider/DocumentsProviderTest.java index 0b4675c756e1c..71546e4b323b8 100644 --- a/core/tests/coretests/src/android/provider/DocumentsProviderTest.java +++ b/core/tests/coretests/src/android/provider/DocumentsProviderTest.java @@ -86,25 +86,18 @@ public class DocumentsProviderTest extends ProviderTestCase2