Merge "Fix unstable unittest due to RejectedExcecutionException"
diff --git a/src/com/android/documentsui/roots/ProvidersCache.java b/src/com/android/documentsui/roots/ProvidersCache.java
index 76178d0..ffb01e8 100644
--- a/src/com/android/documentsui/roots/ProvidersCache.java
+++ b/src/com/android/documentsui/roots/ProvidersCache.java
@@ -240,10 +240,27 @@
ContentResolver resolver, String authority, boolean forceRefresh) {
if (VERBOSE) Log.v(TAG, "Loading roots for " + authority);
+ final ArrayList<RootInfo> roots = new ArrayList<>();
+ ProviderInfo provider = mContext.getPackageManager().resolveContentProvider(
+ authority, PackageManager.GET_META_DATA);
+ if (!provider.exported) {
+ Log.w(TAG, "Provider is not exported. Failed to load roots for " + authority);
+ return roots;
+ }
+ if (!provider.grantUriPermissions) {
+ Log.w(TAG, "Provider doesn't grantUriPermissions. Failed to load roots for "
+ + authority);
+ return roots;
+ }
+ if (!android.Manifest.permission.MANAGE_DOCUMENTS.equals(provider.readPermission)
+ || !android.Manifest.permission.MANAGE_DOCUMENTS.equals(provider.writePermission)) {
+ Log.w(TAG, "Provider is not protected by MANAGE_DOCUMENTS. Failed to load roots for "
+ + authority);
+ return roots;
+ }
+
synchronized (mObservedAuthoritiesDetails) {
if (!mObservedAuthoritiesDetails.containsKey(authority)) {
- ProviderInfo provider = mContext.getPackageManager().resolveContentProvider(
- authority, PackageManager.GET_META_DATA);
PackageManager pm = mContext.getPackageManager();
CharSequence appName = pm.getApplicationLabel(provider.applicationInfo);
String packageName = provider.applicationInfo.packageName;
@@ -274,7 +291,6 @@
}
}
- final ArrayList<RootInfo> roots = new ArrayList<>();
ContentProviderClient client = null;
Cursor cursor = null;
try {