Refactor RootsCache+RootsAccess to ProvdersCache+ProvdersAccess

Test: verified success
Bug: 34219584
Change-Id: I16d5e7d70240626efc9020bd11b13c778fc2d95e
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java
index 26066ee..4baf840 100644
--- a/src/com/android/documentsui/AbstractActionHandler.java
+++ b/src/com/android/documentsui/AbstractActionHandler.java
@@ -53,7 +53,7 @@
 import com.android.documentsui.queries.SearchViewManager;
 import com.android.documentsui.roots.GetRootDocumentTask;
 import com.android.documentsui.roots.LoadRootTask;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 import com.android.documentsui.selection.Selection;
 import com.android.documentsui.selection.SelectionManager;
 import com.android.documentsui.sidebar.EjectRootTask;
@@ -80,7 +80,7 @@
 
     protected final T mActivity;
     protected final State mState;
-    protected final RootsAccess mRoots;
+    protected final ProvidersAccess mProviders;
     protected final DocumentsAccess mDocs;
     protected final FocusHandler mFocusHandler;
     protected final SelectionManager mSelectionMgr;
@@ -108,7 +108,7 @@
     public AbstractActionHandler(
             T activity,
             State state,
-            RootsAccess roots,
+            ProvidersAccess providers,
             DocumentsAccess docs,
             SearchViewManager searchMgr,
             Lookup<String, Executor> executors,
@@ -116,14 +116,14 @@
 
         assert(activity != null);
         assert(state != null);
-        assert(roots != null);
+        assert(providers != null);
         assert(searchMgr != null);
         assert(docs != null);
         assert(injector != null);
 
         mActivity = activity;
         mState = state;
-        mRoots = roots;
+        mProviders = providers;
         mDocs = docs;
         mFocusHandler = injector.focusManager;
         mSelectionMgr = injector.selectionMgr;
@@ -373,7 +373,7 @@
     protected final void loadDocument(Uri uri, LoadDocStackCallback callback) {
         new LoadDocStackTask(
                 mActivity,
-                mRoots,
+                mProviders,
                 mDocs,
                 callback
                 ).executeOnExecutor(mExecutors.lookup(uri.getAuthority()), uri);
@@ -381,7 +381,7 @@
 
     @Override
     public final void loadRoot(Uri uri) {
-        new LoadRootTask<>(mActivity, mRoots, mState, uri)
+        new LoadRootTask<>(mActivity, mProviders, mState, uri)
                 .executeOnExecutor(mExecutors.lookup(uri.getAuthority()));
     }
 
@@ -456,7 +456,7 @@
             if (mState.stack.isRecents()) {
 
                 if (DEBUG) Log.d(TAG, "Creating new loader recents.");
-                return new RecentsLoader(context, mRoots, mState, mInjector.features);
+                return new RecentsLoader(context, mProviders, mState, mInjector.features);
 
             } else {
 
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index ffa594b..30f0dec 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -27,7 +27,6 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ProviderInfo;
 import android.net.Uri;
-import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.MessageQueue.IdleHandler;
 import android.preference.PreferenceManager;
@@ -58,8 +57,7 @@
 import com.android.documentsui.queries.CommandInterceptor;
 import com.android.documentsui.queries.SearchViewManager;
 import com.android.documentsui.queries.SearchViewManager.SearchManagerListener;
-import com.android.documentsui.roots.GetRootDocumentTask;
-import com.android.documentsui.roots.RootsCache;
+import com.android.documentsui.roots.ProvidersCache;
 import com.android.documentsui.selection.Selection;
 import com.android.documentsui.sidebar.RootsFragment;
 import com.android.documentsui.sorting.SortController;
@@ -68,7 +66,6 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.concurrent.Executor;
 
 import javax.annotation.Nullable;
 
@@ -84,7 +81,7 @@
     protected Injector<?> mInjector;
 
     protected @Nullable RetainedState mRetainedState;
-    protected RootsCache mRoots;
+    protected ProvidersCache mProviders;
     protected DocumentsAccess mDocs;
     protected DrawerController mDrawer;
 
@@ -138,7 +135,7 @@
         // DirectoryFragment. So we do a little code yoga to extend
         // support to that fragment.
         mRetainedState = (RetainedState) getLastNonConfigurationInstance();
-        mRoots = DocumentsApplication.getRootsCache(this);
+        mProviders = DocumentsApplication.getProvidersCache(this);
         mDocs = DocumentsAccess.create(this);
 
         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
@@ -214,7 +211,7 @@
         mRootsMonitor = new RootsMonitor<>(
                 this,
                 mInjector.actions,
-                mRoots,
+                mProviders,
                 mDocs,
                 mState,
                 mSearchManager);
@@ -307,7 +304,7 @@
         // Recents is always in memory, so we just load it directly.
         // Otherwise we delegate loading data from disk to a task
         // to ensure a responsive ui.
-        if (mRoots.isRecentsRoot(root)) {
+        if (mProviders.isRecentsRoot(root)) {
             refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
         } else {
             mInjector.actions.getRootDocument(
@@ -408,7 +405,7 @@
         mNavigator.update();
         // Causes talkback to announce the activity's new title
         if (mState.stack.isRecents()) {
-            setTitle(mRoots.getRecentsRoot().title);
+            setTitle(mProviders.getRecentsRoot().title);
         } else {
             setTitle(mState.stack.getTitle());
         }
@@ -537,7 +534,7 @@
         if (root != null) {
             return root;
         } else {
-            return mRoots.getRecentsRoot();
+            return mProviders.getRecentsRoot();
         }
     }
 
diff --git a/src/com/android/documentsui/DocumentsApplication.java b/src/com/android/documentsui/DocumentsApplication.java
index 512baba..ee466d4 100644
--- a/src/com/android/documentsui/DocumentsApplication.java
+++ b/src/com/android/documentsui/DocumentsApplication.java
@@ -31,18 +31,18 @@
 import com.android.documentsui.clipping.ClipStorage;
 import com.android.documentsui.clipping.ClipStore;
 import com.android.documentsui.clipping.DocumentClipper;
-import com.android.documentsui.roots.RootsCache;
+import com.android.documentsui.roots.ProvidersCache;
 
 public class DocumentsApplication extends Application {
     private static final long PROVIDER_ANR_TIMEOUT = 20 * DateUtils.SECOND_IN_MILLIS;
 
-    private RootsCache mRoots;
+    private ProvidersCache mProviders;
     private ThumbnailCache mThumbnailCache;
     private ClipStorage mClipStore;
     private DocumentClipper mClipper;
 
-    public static RootsCache getRootsCache(Context context) {
-        return ((DocumentsApplication) context.getApplicationContext()).mRoots;
+    public static ProvidersCache getProvidersCache(Context context) {
+        return ((DocumentsApplication) context.getApplicationContext()).mProviders;
     }
 
     public static ThumbnailCache getThumbnailCache(Context context) {
@@ -76,8 +76,8 @@
         final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
         final int memoryClassBytes = am.getMemoryClass() * 1024 * 1024;
 
-        mRoots = new RootsCache(this);
-        mRoots.updateAsync(false);
+        mProviders = new ProvidersCache(this);
+        mProviders.updateAsync(false);
 
         mThumbnailCache = new ThumbnailCache(memoryClassBytes / 4);
 
@@ -112,9 +112,9 @@
             final Uri data = intent.getData();
             if (data != null) {
                 final String packageName = data.getSchemeSpecificPart();
-                mRoots.updatePackageAsync(packageName);
+                mProviders.updatePackageAsync(packageName);
             } else {
-                mRoots.updateAsync(true);
+                mProviders.updateAsync(true);
             }
         }
     };
diff --git a/src/com/android/documentsui/LoadDocStackTask.java b/src/com/android/documentsui/LoadDocStackTask.java
index 7d2eb38..1ce4630 100644
--- a/src/com/android/documentsui/LoadDocStackTask.java
+++ b/src/com/android/documentsui/LoadDocStackTask.java
@@ -25,10 +25,9 @@
 
 import com.android.documentsui.base.DocumentInfo;
 import com.android.documentsui.base.DocumentStack;
-import com.android.documentsui.base.Features;
 import com.android.documentsui.base.PairedTask;
 import com.android.documentsui.base.RootInfo;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 
 import java.util.List;
 
@@ -44,17 +43,17 @@
 public class LoadDocStackTask extends PairedTask<Activity, Uri, DocumentStack> {
     private static final String TAG = "LoadDocStackTask";
 
-    private final RootsAccess mRoots;
+    private final ProvidersAccess mProviders;
     private final DocumentsAccess mDocs;
     private final LoadDocStackCallback mCallback;
 
     public LoadDocStackTask(
             Activity activity,
-            RootsAccess roots,
+            ProvidersAccess providers,
             DocumentsAccess docs,
             LoadDocStackCallback callback) {
         super(activity);
-        mRoots = roots;
+        mProviders = providers;
         mDocs = docs;
         mCallback = callback;
     }
@@ -99,7 +98,7 @@
             throw new IllegalStateException("Provider doesn't provider root id.");
         }
 
-        RootInfo root = mRoots.getRootOneshot(authority, path.getRootId());
+        RootInfo root = mProviders.getRootOneshot(authority, path.getRootId());
         if (root == null) {
             throw new IllegalStateException("Failed to load root for authority: " + authority +
                     " and root ID: " + path.getRootId() + ".");
diff --git a/src/com/android/documentsui/Metrics.java b/src/com/android/documentsui/Metrics.java
index 066ac5e..d3985ea 100644
--- a/src/com/android/documentsui/Metrics.java
+++ b/src/com/android/documentsui/Metrics.java
@@ -41,7 +41,7 @@
 import com.android.documentsui.base.State;
 import com.android.documentsui.base.State.ActionType;
 import com.android.documentsui.files.LauncherActivity;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 import com.android.documentsui.services.FileOperationService;
 import com.android.documentsui.services.FileOperationService.OpType;
 import com.android.internal.logging.MetricsLogger;
@@ -797,8 +797,8 @@
                 context.getContentResolver(), Providers.AUTHORITY_STORAGE)) {
             final Path path = DocumentsContract.findDocumentPath(client, docUri);
 
-            final RootsAccess roots = DocumentsApplication.getRootsCache(context);
-            final RootInfo root = roots.getRootOneshot(
+            final ProvidersAccess providers = DocumentsApplication.getProvidersCache(context);
+            final RootInfo root = providers.getRootOneshot(
                     Providers.AUTHORITY_STORAGE, path.getRootId());
             isInternal = !root.supportsEject();
         } catch (RemoteException | RuntimeException e) {
diff --git a/src/com/android/documentsui/RecentsLoader.java b/src/com/android/documentsui/RecentsLoader.java
index 0da169a..7f00ee2 100644
--- a/src/com/android/documentsui/RecentsLoader.java
+++ b/src/com/android/documentsui/RecentsLoader.java
@@ -37,8 +37,8 @@
 import com.android.documentsui.base.FilteringCursorWrapper;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.State;
+import com.android.documentsui.roots.ProvidersAccess;
 import com.android.documentsui.roots.RootCursorWrapper;
-import com.android.documentsui.roots.RootsAccess;
 import com.android.internal.annotations.GuardedBy;
 
 import com.google.common.util.concurrent.AbstractFuture;
@@ -81,7 +81,7 @@
 
     private final Semaphore mQueryPermits;
 
-    private final RootsAccess mRoots;
+    private final ProvidersAccess mProviders;
     private final State mState;
     private final Features mFeatures;
 
@@ -94,9 +94,9 @@
 
     private DirectoryResult mResult;
 
-    public RecentsLoader(Context context, RootsAccess roots, State state, Features features) {
+    public RecentsLoader(Context context, ProvidersAccess providers, State state, Features features) {
         super(context);
-        mRoots = roots;
+        mProviders = providers;
         mState = state;
         mFeatures = features;
 
@@ -213,7 +213,7 @@
      * Returns a map of Authority -> rootIds
      */
     private Map<String, List<String>> indexRecentsRoots() {
-        final Collection<RootInfo> roots = mRoots.getMatchingRootsBlocking(mState);
+        final Collection<RootInfo> roots = mProviders.getMatchingRootsBlocking(mState);
         HashMap<String, List<String>> rootsIndex = new HashMap<>();
         for (RootInfo root : roots) {
             if (!root.supportsRecents()) {
diff --git a/src/com/android/documentsui/RootsMonitor.java b/src/com/android/documentsui/RootsMonitor.java
index 8472bcf..e07e773 100644
--- a/src/com/android/documentsui/RootsMonitor.java
+++ b/src/com/android/documentsui/RootsMonitor.java
@@ -31,7 +31,7 @@
 import com.android.documentsui.base.State;
 import com.android.documentsui.dirlist.AnimationView;
 import com.android.documentsui.queries.SearchViewManager;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 
 import java.util.Collection;
 
@@ -46,7 +46,7 @@
     RootsMonitor(
             final T activity,
             final ActionHandler actions,
-            final RootsAccess roots,
+            final ProvidersAccess providers,
             final DocumentsAccess docs,
             final State state,
             final SearchViewManager searchMgr) {
@@ -58,7 +58,7 @@
                 new HandleRootsChangedTask<T>(
                         activity,
                         actions,
-                        roots,
+                        providers,
                         docs,
                         state,
                         searchMgr).execute(activity.getCurrentRoot());
@@ -67,7 +67,7 @@
     }
 
     void start() {
-        mManager.registerReceiver(mReceiver, new IntentFilter(RootsAccess.BROADCAST_ACTION));
+        mManager.registerReceiver(mReceiver, new IntentFilter(ProvidersAccess.BROADCAST_ACTION));
     }
 
     void stop() {
@@ -77,7 +77,7 @@
     private static class HandleRootsChangedTask<T extends Activity & CommonAddons>
             extends PairedTask<T, RootInfo, RootInfo> {
         private final ActionHandler mActions;
-        private final RootsAccess mRoots;
+        private final ProvidersAccess mProviders;
         private final DocumentsAccess mDocs;
         private final State mState;
         private final SearchViewManager mSearchMgr;
@@ -88,13 +88,13 @@
         private HandleRootsChangedTask(
                 T activity,
                 ActionHandler actions,
-                RootsAccess roots,
+                ProvidersAccess providers,
                 DocumentsAccess docs,
                 State state,
                 SearchViewManager searchMgr) {
             super(activity);
             mActions = actions;
-            mRoots = roots;
+            mProviders = providers;
             mDocs = docs;
             mState = state;
             mSearchMgr = searchMgr;
@@ -104,7 +104,7 @@
         protected RootInfo run(RootInfo... roots) {
             assert (roots.length == 1);
             mCurrentRoot = roots[0];
-            final Collection<RootInfo> cachedRoots = mRoots.getRootsBlocking();
+            final Collection<RootInfo> cachedRoots = mProviders.getRootsBlocking();
             for (final RootInfo root : cachedRoots) {
                 if (root.getUri().equals(mCurrentRoot.getUri())) {
                     // We don't need to change the current root as the current root was not removed.
@@ -113,7 +113,7 @@
             }
 
             // Choose the default root.
-            final RootInfo defaultRoot = mRoots.getDefaultRootBlocking(mState);
+            final RootInfo defaultRoot = mProviders.getDefaultRootBlocking(mState);
             assert (defaultRoot != null);
             if (!defaultRoot.isRecents()) {
                 mDefaultRootDocument = mDocs.getRootDocument(defaultRoot);
diff --git a/src/com/android/documentsui/base/DocumentStack.java b/src/com/android/documentsui/base/DocumentStack.java
index 6a7c6ca..9b0605c 100644
--- a/src/com/android/documentsui/base/DocumentStack.java
+++ b/src/com/android/documentsui/base/DocumentStack.java
@@ -26,7 +26,6 @@
 import android.util.Log;
 
 import com.android.documentsui.picker.LastAccessedProvider;
-import com.android.documentsui.roots.RootsAccess;
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index 31f252d..e462bbb 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -58,7 +58,7 @@
 import com.android.documentsui.dirlist.DocumentDetails;
 import com.android.documentsui.files.ActionHandler.Addons;
 import com.android.documentsui.queries.SearchViewManager;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 import com.android.documentsui.selection.Selection;
 import com.android.documentsui.services.FileOperation;
 import com.android.documentsui.services.FileOperationService;
@@ -66,7 +66,6 @@
 import com.android.documentsui.ui.DialogController;
 import com.android.internal.annotations.VisibleForTesting;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Executor;
@@ -91,7 +90,7 @@
     ActionHandler(
             T activity,
             State state,
-            RootsAccess roots,
+            ProvidersAccess providers,
             DocumentsAccess docs,
             SearchViewManager searchMgr,
             Lookup<String, Executor> executors,
@@ -100,7 +99,7 @@
             ClipStore clipStore,
             Injector injector) {
 
-        super(activity, state, roots, docs, searchMgr, executors, injector);
+        super(activity, state, providers, docs, searchMgr, executors, injector);
 
         mActionModeAddons = actionModeAddons;
         mFeatures = injector.features;
@@ -277,7 +276,7 @@
         }
         DocumentInfo doc = mModel.getDocument(selection.iterator().next());
         Intent intent = new Intent(DocumentsContract.ACTION_DOCUMENT_SETTINGS);
-        intent.setPackage(mRoots.getPackageName(doc.authority));
+        intent.setPackage(mProviders.getPackageName(doc.authority));
         intent.addCategory(Intent.CATEGORY_DEFAULT);
         intent.setData(doc.derivedUri);
         try {
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index 2408115..ef71712 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -111,7 +111,7 @@
                 },
                 getApplicationContext(),
                 mInjector.selectionMgr,
-                mRoots::getApplicationName,
+                mProviders::getApplicationName,
                 mInjector.getModel()::getItemUri);
 
         mShadowBuilder = new DragShadowBuilder(this);
@@ -124,7 +124,7 @@
         mInjector.actions = new ActionHandler<>(
                 this,
                 mState,
-                mRoots,
+                mProviders,
                 mDocs,
                 mSearchManager,
                 ProviderExecutor::forAuthority,
@@ -216,7 +216,7 @@
         final Intent intent = getIntent();
 
         // This is a remnant of old logic where we used to initialize accept MIME types in
-        // BaseActivity. RootsAccess still rely on this being correctly initialized so we still have
+        // BaseActivity. ProvidersAccess still rely on this being correctly initialized so we still have
         // to initialize it in FilesActivity.
         state.initAcceptMimes(intent, "*/*");
         state.action = State.ACTION_BROWSE;
@@ -252,7 +252,7 @@
         // have no reason to hang around.
         // TODO: Rather than just disappearing, maybe we should inform
         // the user what has happened, let them close us. Less surprising.
-        if (mRoots.getRootBlocking(root.authority, root.rootId) == null) {
+        if (mProviders.getRootBlocking(root.authority, root.rootId) == null) {
             finish();
         }
     }
diff --git a/src/com/android/documentsui/picker/ActionHandler.java b/src/com/android/documentsui/picker/ActionHandler.java
index e1b529e..b00becf 100644
--- a/src/com/android/documentsui/picker/ActionHandler.java
+++ b/src/com/android/documentsui/picker/ActionHandler.java
@@ -53,7 +53,7 @@
 import com.android.documentsui.Model;
 import com.android.documentsui.picker.ActionHandler.Addons;
 import com.android.documentsui.queries.SearchViewManager;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 import com.android.documentsui.services.FileOperationService;
 import com.android.internal.annotations.VisibleForTesting;
 
@@ -77,14 +77,14 @@
     ActionHandler(
             T activity,
             State state,
-            RootsAccess roots,
+            ProvidersAccess providers,
             DocumentsAccess docs,
             SearchViewManager searchMgr,
             Lookup<String, Executor> executors,
             Injector injector,
             LastAccessedStorage lastAccessed) {
 
-        super(activity, state, roots, docs, searchMgr, executors, injector);
+        super(activity, state, providers, docs, searchMgr, executors, injector);
 
         mConfig = injector.config;
         mFeatures = injector.features;
@@ -152,7 +152,7 @@
     private void loadLastAccessedStack() {
         if (DEBUG) Log.d(TAG, "Attempting to load last used stack for calling package.");
         new LoadLastAccessedStackTask<>(
-                mActivity, mLastAccessed, mState, mRoots, this::onLastAccessedStackLoaded)
+                mActivity, mLastAccessed, mState, mProviders, this::onLastAccessedStackLoaded)
                 .execute();
     }
 
@@ -173,7 +173,7 @@
             case ACTION_GET_CONTENT:
             case ACTION_OPEN:
             case ACTION_OPEN_TREE:
-                mState.stack.changeRoot(mRoots.getRecentsRoot());
+                mState.stack.changeRoot(mProviders.getRecentsRoot());
                 mActivity.refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
                 break;
             default:
diff --git a/src/com/android/documentsui/picker/LastAccessedStorage.java b/src/com/android/documentsui/picker/LastAccessedStorage.java
index bb5de8f..ed38de0 100644
--- a/src/com/android/documentsui/picker/LastAccessedStorage.java
+++ b/src/com/android/documentsui/picker/LastAccessedStorage.java
@@ -26,7 +26,7 @@
 import com.android.documentsui.base.DocumentStack;
 import com.android.documentsui.base.Shared;
 import com.android.documentsui.base.State;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 
 import libcore.io.IoUtils;
 
@@ -40,7 +40,7 @@
 public interface LastAccessedStorage {
 
     @Nullable DocumentStack getLastAccessed(
-            Activity activity, RootsAccess roots, State state);
+            Activity activity, ProvidersAccess providers, State state);
 
     void setLastAccessed(Activity activity, DocumentStack stack);
 
@@ -58,14 +58,14 @@
 
         @Override
         public @Nullable DocumentStack getLastAccessed(
-                Activity activity, RootsAccess roots, State state) {
+                Activity activity, ProvidersAccess providers, State state) {
             final String packageName = Shared.getCallingPackageName(activity);
             final Uri resumeUri = LastAccessedProvider.buildLastAccessed(packageName);
             final ContentResolver resolver = activity.getContentResolver();
             Cursor cursor = resolver.query(resumeUri, null, null, null, null);
             try {
                 return DocumentStack.fromLastAccessedCursor(
-                        cursor, roots.getMatchingRootsBlocking(state), resolver);
+                        cursor, providers.getMatchingRootsBlocking(state), resolver);
             } catch (IOException e) {
                 Log.w(TAG, "Failed to resume: ", e);
             } finally {
diff --git a/src/com/android/documentsui/picker/LoadLastAccessedStackTask.java b/src/com/android/documentsui/picker/LoadLastAccessedStackTask.java
index 728b70c..d0ba6a6 100644
--- a/src/com/android/documentsui/picker/LoadLastAccessedStackTask.java
+++ b/src/com/android/documentsui/picker/LoadLastAccessedStackTask.java
@@ -22,7 +22,7 @@
 import com.android.documentsui.base.DocumentStack;
 import com.android.documentsui.base.PairedTask;
 import com.android.documentsui.base.State;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 
 import java.util.function.Consumer;
 
@@ -39,25 +39,25 @@
 
     private final LastAccessedStorage mLastAccessed;
     private final State mState;
-    private final RootsAccess mRoots;
+    private final ProvidersAccess mProviders;
     private final Consumer<DocumentStack> mCallback;
 
     LoadLastAccessedStackTask(
             T activity,
             LastAccessedStorage lastAccessed,
             State state,
-            RootsAccess roots,
+            ProvidersAccess providers,
             Consumer<DocumentStack> callback) {
         super(activity);
         mLastAccessed = lastAccessed;
-        mRoots = roots;
+        mProviders = providers;
         mState = state;
         mCallback = callback;
     }
 
     @Override
     protected DocumentStack run(Void... params) {
-        return mLastAccessed.getLastAccessed(mOwner, mRoots, mState);
+        return mLastAccessed.getLastAccessed(mOwner, mProviders, mState);
     }
 
     @Override
diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java
index c61f8a9..96798dd 100644
--- a/src/com/android/documentsui/picker/PickActivity.java
+++ b/src/com/android/documentsui/picker/PickActivity.java
@@ -112,7 +112,7 @@
         mInjector.actions = new ActionHandler<>(
                 this,
                 mState,
-                mRoots,
+                mProviders,
                 mDocs,
                 mSearchManager,
                 ProviderExecutor::forAuthority,
diff --git a/src/com/android/documentsui/queries/CommandInterceptor.java b/src/com/android/documentsui/queries/CommandInterceptor.java
index b16f17b..279202f 100644
--- a/src/com/android/documentsui/queries/CommandInterceptor.java
+++ b/src/com/android/documentsui/queries/CommandInterceptor.java
@@ -173,7 +173,7 @@
         @Override
         public boolean accept(String[] tokens) {
             if ("dumpCache".equals(tokens[0])) {
-                DocumentsApplication.getRootsCache(mContext).logCache();
+                DocumentsApplication.getProvidersCache(mContext).logCache();
                 return true;
             }
             return false;
diff --git a/src/com/android/documentsui/roots/BootReceiver.java b/src/com/android/documentsui/roots/BootReceiver.java
index 4d71ddb..b054924 100644
--- a/src/com/android/documentsui/roots/BootReceiver.java
+++ b/src/com/android/documentsui/roots/BootReceiver.java
@@ -23,7 +23,7 @@
 import com.android.documentsui.DocumentsApplication;
 
 /**
- * Prime {@link RootsCache} when the system is booted.
+ * Prime {@link ProvidersCache} when the system is booted.
  */
 public class BootReceiver extends BroadcastReceiver {
     @Override
@@ -31,6 +31,6 @@
         // We already spun up our application object before getting here, which
         // kicked off a task to load roots, so this broadcast is finished once
         // that first pass is done.
-        DocumentsApplication.getRootsCache(context).setBootCompletedResult(goAsync());
+        DocumentsApplication.getProvidersCache(context).setBootCompletedResult(goAsync());
     }
 }
diff --git a/src/com/android/documentsui/roots/LoadRootTask.java b/src/com/android/documentsui/roots/LoadRootTask.java
index a1e2c44..fbcbf91 100644
--- a/src/com/android/documentsui/roots/LoadRootTask.java
+++ b/src/com/android/documentsui/roots/LoadRootTask.java
@@ -33,14 +33,14 @@
     private static final String TAG = "LoadRootTask";
 
     private final State mState;
-    private final RootsAccess mRoots;
+    private final ProvidersAccess mProviders;
     private final Uri mRootUri;
 
 
-    public LoadRootTask(T activity, RootsAccess roots, State state, Uri rootUri) {
+    public LoadRootTask(T activity, ProvidersAccess providers, State state, Uri rootUri) {
         super(activity);
         mState = state;
-        mRoots = roots;
+        mProviders = providers;
         mRootUri = rootUri;
     }
 
@@ -49,7 +49,7 @@
         if (DEBUG) Log.d(TAG, "Loading root: " + mRootUri);
 
         String rootId = DocumentsContract.getRootId(mRootUri);
-        return mRoots.getRootOneshot(mRootUri.getAuthority(), rootId);
+        return mProviders.getRootOneshot(mRootUri.getAuthority(), rootId);
     }
 
     @Override
diff --git a/src/com/android/documentsui/roots/RootsAccess.java b/src/com/android/documentsui/roots/ProvidersAccess.java
similarity index 96%
rename from src/com/android/documentsui/roots/RootsAccess.java
rename to src/com/android/documentsui/roots/ProvidersAccess.java
index c18827f..a1aa33c 100644
--- a/src/com/android/documentsui/roots/RootsAccess.java
+++ b/src/com/android/documentsui/roots/ProvidersAccess.java
@@ -31,9 +31,9 @@
 import java.util.List;
 
 /**
- * Provides testable access to key {@link RootsCache} methods.
+ * Provides testable access to key {@link ProvidersCache} methods.
  */
-public interface RootsAccess {
+public interface ProvidersAccess {
 
     String BROADCAST_ACTION = "com.android.documentsui.action.ROOT_CHANGED";
 
@@ -64,7 +64,7 @@
 
     public static List<RootInfo> getMatchingRoots(Collection<RootInfo> roots, State state) {
 
-        final String tag = "RootsAccess";
+        final String tag = "ProvidersAccess";
 
         final List<RootInfo> matching = new ArrayList<>();
         for (RootInfo root : roots) {
diff --git a/src/com/android/documentsui/roots/RootsCache.java b/src/com/android/documentsui/roots/ProvidersCache.java
similarity index 98%
rename from src/com/android/documentsui/roots/RootsCache.java
rename to src/com/android/documentsui/roots/ProvidersCache.java
index b9208af..76178d0 100644
--- a/src/com/android/documentsui/roots/RootsCache.java
+++ b/src/com/android/documentsui/roots/ProvidersCache.java
@@ -67,8 +67,8 @@
 /**
  * Cache of known storage backends and their roots.
  */
-public class RootsCache implements RootsAccess {
-    private static final String TAG = "RootsCache";
+public class ProvidersCache implements ProvidersAccess {
+    private static final String TAG = "ProvidersCache";
 
     // Not all providers are equally well written. If a provider returns
     // empty results we don't cache them...unless they're in this magical list
@@ -101,7 +101,7 @@
     @GuardedBy("mObservedAuthoritiesDetails")
     private final Map<String, PackageDetails> mObservedAuthoritiesDetails = new HashMap<>();
 
-    public RootsCache(Context context) {
+    public ProvidersCache(Context context) {
         mContext = context;
         mObserver = new RootsChangedObserver();
 
@@ -366,7 +366,7 @@
         waitForFirstLoad();
         loadStoppedAuthorities();
         synchronized (mLock) {
-            return RootsAccess.getMatchingRoots(mRoots.values(), state);
+            return ProvidersAccess.getMatchingRoots(mRoots.values(), state);
         }
     }
 
@@ -381,7 +381,7 @@
     }
 
     public RootInfo getDefaultRootBlocking(State state) {
-        for (RootInfo root : RootsAccess.getMatchingRoots(getRootsBlocking(), state)) {
+        for (RootInfo root : ProvidersAccess.getMatchingRoots(getRootsBlocking(), state)) {
             if (root.isDownloads()) {
                 return root;
             }
diff --git a/src/com/android/documentsui/roots/RootsLoader.java b/src/com/android/documentsui/roots/RootsLoader.java
index 76e1c09..3a34807 100644
--- a/src/com/android/documentsui/roots/RootsLoader.java
+++ b/src/com/android/documentsui/roots/RootsLoader.java
@@ -36,23 +36,23 @@
         }
     };
 
-    private final RootsCache mRoots;
+    private final ProvidersCache mProviders;
     private final State mState;
 
     private Collection<RootInfo> mResult;
 
-    public RootsLoader(Context context, RootsCache roots, State state) {
+    public RootsLoader(Context context, ProvidersCache providers, State state) {
         super(context);
-        mRoots = roots;
+        mProviders = providers;
         mState = state;
 
         LocalBroadcastManager.getInstance(context).registerReceiver(
-                mReceiver, new IntentFilter(RootsAccess.BROADCAST_ACTION));
+                mReceiver, new IntentFilter(ProvidersAccess.BROADCAST_ACTION));
     }
 
     @Override
     public final Collection<RootInfo> loadInBackground() {
-        return mRoots.getMatchingRootsBlocking(mState);
+        return mProviders.getMatchingRootsBlocking(mState);
     }
 
     @Override
diff --git a/src/com/android/documentsui/services/CopyJob.java b/src/com/android/documentsui/services/CopyJob.java
index 15d5731..7f210fe 100644
--- a/src/com/android/documentsui/services/CopyJob.java
+++ b/src/com/android/documentsui/services/CopyJob.java
@@ -63,7 +63,7 @@
 import com.android.documentsui.base.DocumentStack;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.roots.RootsCache;
+import com.android.documentsui.roots.ProvidersCache;
 import com.android.documentsui.services.FileOperationService.OpType;
 
 import libcore.io.IoUtils;
@@ -296,7 +296,7 @@
         // copy start anyway.
         boolean available = true;
         if (batchSize >= 0) {
-            RootsCache cache = DocumentsApplication.getRootsCache(appContext);
+            ProvidersCache cache = DocumentsApplication.getProvidersCache(appContext);
 
             RootInfo root = stack.getRoot();
             // Query root info here instead of using stack.root because the number there may be
diff --git a/src/com/android/documentsui/sidebar/RootsFragment.java b/src/com/android/documentsui/sidebar/RootsFragment.java
index 299ac57..63f02cb 100644
--- a/src/com/android/documentsui/sidebar/RootsFragment.java
+++ b/src/com/android/documentsui/sidebar/RootsFragment.java
@@ -56,7 +56,6 @@
 import com.android.documentsui.Injector.Injected;
 import com.android.documentsui.ItemDragListener;
 import com.android.documentsui.R;
-import com.android.documentsui.TimeoutTask;
 import com.android.documentsui.base.BooleanConsumer;
 import com.android.documentsui.base.DocumentInfo;
 import com.android.documentsui.base.DocumentStack;
@@ -64,8 +63,7 @@
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.Shared;
 import com.android.documentsui.base.State;
-import com.android.documentsui.roots.GetRootDocumentTask;
-import com.android.documentsui.roots.RootsCache;
+import com.android.documentsui.roots.ProvidersCache;
 import com.android.documentsui.roots.RootsLoader;
 
 import java.util.ArrayList;
@@ -188,7 +186,7 @@
         super.onActivityCreated(savedInstanceState);
 
         final BaseActivity activity = getBaseActivity();
-        final RootsCache roots = DocumentsApplication.getRootsCache(activity);
+        final ProvidersCache providers = DocumentsApplication.getProvidersCache(activity);
         final State state = activity.getDisplayState();
 
         mActionHandler = mInjector.actions;
@@ -210,7 +208,7 @@
         mCallbacks = new LoaderCallbacks<Collection<RootInfo>>() {
             @Override
             public Loader<Collection<RootInfo>> onCreateLoader(int id, Bundle args) {
-                return new RootsLoader(activity, roots, state);
+                return new RootsLoader(activity, providers, state);
             }
 
             @Override
diff --git a/tests/common/com/android/documentsui/testing/TestEnv.java b/tests/common/com/android/documentsui/testing/TestEnv.java
index 54e91ca..3925cb4 100644
--- a/tests/common/com/android/documentsui/testing/TestEnv.java
+++ b/tests/common/com/android/documentsui/testing/TestEnv.java
@@ -15,8 +15,6 @@
  */
 package com.android.documentsui.testing;
 
-import android.os.Handler;
-import android.os.Looper;
 import android.provider.DocumentsContract.Document;
 import android.test.mock.MockContentResolver;
 
@@ -37,7 +35,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
 
 public class TestEnv {
@@ -58,7 +55,7 @@
 
     public final TestScheduledExecutorService mExecutor;
     public final State state = new State();
-    public final TestRootsAccess roots = new TestRootsAccess();
+    public final TestProvidersAccess roots = new TestProvidersAccess();
     public final TestDocumentsAccess docs = new TestDocumentsAccess();
     public final TestFocusHandler focusHandler = new TestFocusHandler();
     public final TestDialogController dialogs = new TestDialogController();
@@ -107,7 +104,7 @@
     }
 
     public static TestEnv create() {
-        return create(TestRootsAccess.HOME.authority);
+        return create(TestProvidersAccess.HOME.authority);
     }
 
     public static TestEnv create(String authority) {
@@ -154,7 +151,7 @@
         Assert.assertNotNull(rootDoc);
         Assert.assertEquals(rootDoc.displayName, FOLDER_0.displayName);
 
-        state.stack.changeRoot(TestRootsAccess.HOME);
+        state.stack.changeRoot(TestProvidersAccess.HOME);
         state.stack.push(rootDoc);
     }
 
diff --git a/tests/common/com/android/documentsui/testing/TestLastAccessedStorage.java b/tests/common/com/android/documentsui/testing/TestLastAccessedStorage.java
index 4df3ebf..1d78361 100644
--- a/tests/common/com/android/documentsui/testing/TestLastAccessedStorage.java
+++ b/tests/common/com/android/documentsui/testing/TestLastAccessedStorage.java
@@ -25,7 +25,7 @@
 import com.android.documentsui.base.DocumentStack;
 import com.android.documentsui.base.State;
 import com.android.documentsui.picker.LastAccessedStorage;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 
 import javax.annotation.Nullable;
 
@@ -38,7 +38,7 @@
     private boolean mIsExternal = false;
 
     @Override
-    public @Nullable DocumentStack getLastAccessed(Activity activity, RootsAccess roots, State state) {
+    public @Nullable DocumentStack getLastAccessed(Activity activity, ProvidersAccess roots, State state) {
         return mLastAccessedStack;
     }
 
diff --git a/tests/common/com/android/documentsui/testing/TestRootsAccess.java b/tests/common/com/android/documentsui/testing/TestProvidersAccess.java
similarity index 88%
rename from tests/common/com/android/documentsui/testing/TestRootsAccess.java
rename to tests/common/com/android/documentsui/testing/TestProvidersAccess.java
index 513ec80..a410cfe 100644
--- a/tests/common/com/android/documentsui/testing/TestRootsAccess.java
+++ b/tests/common/com/android/documentsui/testing/TestProvidersAccess.java
@@ -19,7 +19,7 @@
 import com.android.documentsui.base.Providers;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.State;
-import com.android.documentsui.roots.RootsAccess;
+import com.android.documentsui.roots.ProvidersAccess;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -29,7 +29,7 @@
 
 import javax.annotation.Nullable;
 
-public class TestRootsAccess implements RootsAccess {
+public class TestProvidersAccess implements ProvidersAccess {
 
     public static final RootInfo DOWNLOADS;
     public static final RootInfo HOME;
@@ -67,7 +67,7 @@
     public final Map<String, Collection<RootInfo>> roots = new HashMap<>();
     private @Nullable RootInfo nextRoot;
 
-    public TestRootsAccess() {
+    public TestProvidersAccess() {
         add(DOWNLOADS);
         add(HOME);
         add(HAMMY);
@@ -82,10 +82,10 @@
     }
 
     public void configurePm(TestPackageManager pm) {
-        pm.addStubContentProviderForRoot(TestRootsAccess.DOWNLOADS);
-        pm.addStubContentProviderForRoot(TestRootsAccess.HOME);
-        pm.addStubContentProviderForRoot(TestRootsAccess.HAMMY);
-        pm.addStubContentProviderForRoot(TestRootsAccess.PICKLES);
+        pm.addStubContentProviderForRoot(TestProvidersAccess.DOWNLOADS);
+        pm.addStubContentProviderForRoot(TestProvidersAccess.HOME);
+        pm.addStubContentProviderForRoot(TestProvidersAccess.HAMMY);
+        pm.addStubContentProviderForRoot(TestProvidersAccess.PICKLES);
     }
 
     @Override
@@ -106,7 +106,7 @@
         for (String authority : roots.keySet()) {
             allRoots.addAll(roots.get(authority));
         }
-        return RootsAccess.getMatchingRoots(allRoots, state);
+        return ProvidersAccess.getMatchingRoots(allRoots, state);
     }
 
     @Override
diff --git a/tests/unit/com/android/documentsui/AbstractActionHandlerTest.java b/tests/unit/com/android/documentsui/AbstractActionHandlerTest.java
index df59197..bc8b8a2 100644
--- a/tests/unit/com/android/documentsui/AbstractActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/AbstractActionHandlerTest.java
@@ -39,7 +39,7 @@
 import com.android.documentsui.testing.Roots;
 import com.android.documentsui.testing.TestEnv;
 import com.android.documentsui.testing.TestEventHandler;
-import com.android.documentsui.testing.TestRootsAccess;
+import com.android.documentsui.testing.TestProvidersAccess;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -111,7 +111,7 @@
 
         mEnv.searchViewManager.isSearching = true;
         mEnv.docs.nextPath = new Path(
-                TestRootsAccess.HOME.rootId,
+                TestProvidersAccess.HOME.rootId,
                 Arrays.asList(TestEnv.FOLDER_1.documentId, TestEnv.FOLDER_2.documentId));
         mEnv.docs.nextDocuments = Arrays.asList(TestEnv.FOLDER_1, TestEnv.FOLDER_2);
 
@@ -156,7 +156,7 @@
     public void testLaunchToDocuments() throws Exception {
         mEnv.docs.nextIsDocumentsUri = true;
         mEnv.docs.nextPath = new Path(
-                TestRootsAccess.HOME.rootId,
+                TestProvidersAccess.HOME.rootId,
                 Arrays.asList(
                         TestEnv.FOLDER_0.documentId,
                         TestEnv.FOLDER_1.documentId,
@@ -169,7 +169,7 @@
 
         mEnv.beforeAsserts();
 
-        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestRootsAccess.HOME,
+        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestProvidersAccess.HOME,
                 Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1));
         mActivity.refreshCurrentRootAndDirectory.assertCalled();
     }
@@ -178,7 +178,7 @@
     public void testLaunchToDocuments_convertsTreeUriToDocumentUri() throws Exception {
         mEnv.docs.nextIsDocumentsUri = true;
         mEnv.docs.nextPath = new Path(
-                TestRootsAccess.HOME.rootId,
+                TestProvidersAccess.HOME.rootId,
                 Arrays.asList(
                         TestEnv.FOLDER_0.documentId,
                         TestEnv.FOLDER_1.documentId,
@@ -187,14 +187,14 @@
                 Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1, TestEnv.FILE_GIF);
 
         final Uri treeBaseUri = DocumentsContract.buildTreeDocumentUri(
-                TestRootsAccess.HOME.authority, TestEnv.FOLDER_0.documentId);
+                TestProvidersAccess.HOME.authority, TestEnv.FOLDER_0.documentId);
         final Uri treeDocUri = DocumentsContract.buildDocumentUriUsingTree(
                 treeBaseUri, TestEnv.FILE_GIF.documentId);
         assertTrue(mHandler.launchToDocument(treeDocUri));
 
         mEnv.beforeAsserts();
 
-        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestRootsAccess.HOME,
+        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestProvidersAccess.HOME,
                 Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1));
         mEnv.docs.lastUri.assertLastArgument(TestEnv.FILE_GIF.derivedUri);
         mActivity.refreshCurrentRootAndDirectory.assertCalled();
@@ -202,13 +202,13 @@
 
     @Test
     public void testLoadChildrenDocuments() throws Exception {
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_0);
 
         mEnv.state.sortModel.sortByUser(
                 SortModel.SORT_DIMENSION_ID_TITLE, SortDimension.SORT_DIRECTION_ASCENDING);
 
-        mEnv.providers.get(TestRootsAccess.HOME.authority)
+        mEnv.providers.get(TestProvidersAccess.HOME.authority)
                 .setNextChildDocumentsReturns(TestEnv.FILE_APK, TestEnv.FILE_GIF);
 
         mHandler.loadDocumentsForCurrentStack();
@@ -222,9 +222,9 @@
 
     @Test
     public void testLoadChildrenDocuments_failsWithNonRecentsAndEmptyStack() throws Exception {
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
 
-        mEnv.providers.get(TestRootsAccess.HOME.authority)
+        mEnv.providers.get(TestProvidersAccess.HOME.authority)
                 .setNextChildDocumentsReturns(TestEnv.FILE_APK, TestEnv.FILE_GIF);
 
         TestEventHandler<Model.Update> listener = new TestEventHandler<>();
diff --git a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
index 6f77f15..9669473 100644
--- a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
@@ -44,7 +44,6 @@
 import com.android.documentsui.base.DocumentStack;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.Shared;
-import com.android.documentsui.services.FileOperations.Callback;
 import com.android.documentsui.testing.ClipDatas;
 import com.android.documentsui.testing.DocumentStackAsserts;
 import com.android.documentsui.testing.Roots;
@@ -52,7 +51,7 @@
 import com.android.documentsui.testing.TestConfirmationCallback;
 import com.android.documentsui.testing.TestDocumentClipper;
 import com.android.documentsui.testing.TestEnv;
-import com.android.documentsui.testing.TestRootsAccess;
+import com.android.documentsui.testing.TestProvidersAccess;
 import com.android.documentsui.ui.TestDialogController;
 
 import org.junit.Before;
@@ -158,7 +157,7 @@
     // Recents root means when deleting the srcParent will be null.
     @Test
     public void testDeleteSelectedDocuments_RecentsRoot() {
-        mEnv.state.stack.changeRoot(TestRootsAccess.RECENTS);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.RECENTS);
 
         mHandler.deleteSelectedDocuments();
         mDialogs.assertNoFileFailures();
@@ -257,7 +256,7 @@
 
     @Test
     public void testDocumentPicked_DefaultsToView() throws Exception {
-        mActivity.currentRoot = TestRootsAccess.HOME;
+        mActivity.currentRoot = TestProvidersAccess.HOME;
 
         mHandler.openDocument(TestEnv.FILE_GIF, ActionHandler.VIEW_TYPE_PREVIEW,
                 ActionHandler.VIEW_TYPE_REGULAR);
@@ -267,7 +266,7 @@
     @Test
     public void testDocumentPicked_InArchive_QuickViewable() throws Exception {
         mActivity.resources.setQuickViewerPackage("corptropolis.viewer");
-        mActivity.currentRoot = TestRootsAccess.HOME;
+        mActivity.currentRoot = TestProvidersAccess.HOME;
 
         mHandler.openDocument(TestEnv.FILE_IN_ARCHIVE, ActionHandler.VIEW_TYPE_PREVIEW,
                 ActionHandler.VIEW_TYPE_REGULAR);
@@ -276,7 +275,7 @@
 
     @Test
     public void testDocumentPicked_InArchive_Unopenable() throws Exception {
-        mActivity.currentRoot = TestRootsAccess.HOME;
+        mActivity.currentRoot = TestProvidersAccess.HOME;
 
         mHandler.openDocument(TestEnv.FILE_IN_ARCHIVE, ActionHandler.VIEW_TYPE_PREVIEW,
                 ActionHandler.VIEW_TYPE_REGULAR);
@@ -286,7 +285,7 @@
     @Test
     public void testDocumentPicked_PreviewsWhenResourceSet() throws Exception {
         mActivity.resources.setQuickViewerPackage("corptropolis.viewer");
-        mActivity.currentRoot = TestRootsAccess.HOME;
+        mActivity.currentRoot = TestProvidersAccess.HOME;
 
         mHandler.openDocument(TestEnv.FILE_GIF, ActionHandler.VIEW_TYPE_PREVIEW,
                 ActionHandler.VIEW_TYPE_REGULAR);
@@ -295,7 +294,7 @@
 
     @Test
     public void testDocumentPicked_Downloads_ManagesApks() throws Exception {
-        mActivity.currentRoot = TestRootsAccess.DOWNLOADS;
+        mActivity.currentRoot = TestProvidersAccess.DOWNLOADS;
 
         mHandler.openDocument(TestEnv.FILE_APK, ActionHandler.VIEW_TYPE_PREVIEW,
                 ActionHandler.VIEW_TYPE_REGULAR);
@@ -304,7 +303,7 @@
 
     @Test
     public void testDocumentPicked_Downloads_ManagesPartialFiles() throws Exception {
-        mActivity.currentRoot = TestRootsAccess.DOWNLOADS;
+        mActivity.currentRoot = TestProvidersAccess.DOWNLOADS;
 
         mHandler.openDocument(TestEnv.FILE_PARTIAL, ActionHandler.VIEW_TYPE_PREVIEW,
                 ActionHandler.VIEW_TYPE_REGULAR);
@@ -313,7 +312,7 @@
 
     @Test
     public void testDocumentPicked_OpensArchives() throws Exception {
-        mActivity.currentRoot = TestRootsAccess.HOME;
+        mActivity.currentRoot = TestProvidersAccess.HOME;
         mEnv.docs.nextDocument = TestEnv.FILE_ARCHIVE;
 
         mHandler.openDocument(TestEnv.FILE_ARCHIVE, ActionHandler.VIEW_TYPE_PREVIEW,
@@ -323,7 +322,7 @@
 
     @Test
     public void testDocumentPicked_OpensDirectories() throws Exception {
-        mActivity.currentRoot = TestRootsAccess.HOME;
+        mActivity.currentRoot = TestProvidersAccess.HOME;
 
         mHandler.openDocument(TestEnv.FOLDER_1, ActionHandler.VIEW_TYPE_PREVIEW,
                 ActionHandler.VIEW_TYPE_REGULAR);
@@ -332,7 +331,7 @@
 
     @Test
     public void testShowChooser() throws Exception {
-        mActivity.currentRoot = TestRootsAccess.DOWNLOADS;
+        mActivity.currentRoot = TestProvidersAccess.DOWNLOADS;
 
         mHandler.showChooserForDoc(TestEnv.FILE_PDF);
         mActivity.assertActivityStarted(Intent.ACTION_CHOOSER);
@@ -343,7 +342,7 @@
         mActivity.resources.bools.put(R.bool.show_documents_root, false);
 
         mHandler.initLocation(mActivity.getIntent());
-        assertRootPicked(TestRootsAccess.DOWNLOADS.getUri());
+        assertRootPicked(TestProvidersAccess.DOWNLOADS.getUri());
     }
 
     @Test
@@ -351,24 +350,24 @@
         mActivity.resources.bools.put(R.bool.show_documents_root, true);
 
         mHandler.initLocation(mActivity.getIntent());
-        assertRootPicked(TestRootsAccess.HOME.getUri());
+        assertRootPicked(TestProvidersAccess.HOME.getUri());
     }
 
     @Test
     public void testInitLocation_BrowseRoot() throws Exception {
         Intent intent = mActivity.getIntent();
         intent.setAction(Intent.ACTION_VIEW);
-        intent.setData(TestRootsAccess.PICKLES.getUri());
+        intent.setData(TestProvidersAccess.PICKLES.getUri());
 
         mHandler.initLocation(intent);
-        assertRootPicked(TestRootsAccess.PICKLES.getUri());
+        assertRootPicked(TestProvidersAccess.PICKLES.getUri());
     }
 
     @Test
     public void testInitLocation_LaunchToDocuments() throws Exception {
         mEnv.docs.nextIsDocumentsUri = true;
         mEnv.docs.nextPath = new Path(
-                TestRootsAccess.HOME.rootId,
+                TestProvidersAccess.HOME.rootId,
                 Arrays.asList(
                         TestEnv.FOLDER_0.documentId,
                         TestEnv.FOLDER_1.documentId));
@@ -383,7 +382,7 @@
 
         mEnv.beforeAsserts();
 
-        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestRootsAccess.HOME,
+        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestProvidersAccess.HOME,
                 Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1));
         mActivity.refreshCurrentRootAndDirectory.assertCalled();
     }
@@ -400,7 +399,7 @@
     public void testDragAndDrop_OnLibraryRoot() throws Exception {
         DragEvent event = DragEvent.obtain(DragEvent.ACTION_DROP, 1, 1, null, null, null,
                 null, true);
-        assertFalse(mHandler.dropOn(event, TestRootsAccess.RECENTS));
+        assertFalse(mHandler.dropOn(event, TestProvidersAccess.RECENTS));
     }
 
     @Test
@@ -427,7 +426,7 @@
         assertSame(localState, event.getLocalState());
         assertSame(clipData, event.getClipData());
 
-        mHandler.dropOn(event, TestRootsAccess.DOWNLOADS);
+        mHandler.dropOn(event, TestProvidersAccess.DOWNLOADS);
         event.recycle();
 
         mEnv.beforeAsserts();
@@ -450,12 +449,12 @@
                 mEnv.injector
         );
         List<DocumentInfo> localState = new ArrayList<>();
-        localState.add(mEnv.docs.getRootDocument(TestRootsAccess.DOWNLOADS));
+        localState.add(mEnv.docs.getRootDocument(TestProvidersAccess.DOWNLOADS));
         ClipData clipData = ClipDatas.createTestClipData();
         DragEvent event = DragEvent.obtain(DragEvent.ACTION_DROP, 1, 1, localState, null, clipData,
                 null, true);
 
-        mHandler.dropOn(event, TestRootsAccess.DOWNLOADS);
+        mHandler.dropOn(event, TestProvidersAccess.DOWNLOADS);
 
         mEnv.beforeAsserts();
 
diff --git a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
index c65976c..330604a 100644
--- a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
@@ -39,7 +39,7 @@
 import com.android.documentsui.base.State.ActionType;
 import com.android.documentsui.testing.DocumentStackAsserts;
 import com.android.documentsui.testing.TestEnv;
-import com.android.documentsui.testing.TestRootsAccess;
+import com.android.documentsui.testing.TestProvidersAccess;
 import com.android.documentsui.testing.TestLastAccessedStorage;
 
 import org.junit.AfterClass;
@@ -95,7 +95,7 @@
         Intent intent = mActivity.getIntent();
         intent.setAction(Shared.ACTION_PICK_COPY_DESTINATION);
         mHandler.initLocation(mActivity.getIntent());
-        assertRootPicked(TestRootsAccess.DOWNLOADS.getUri());
+        assertRootPicked(TestProvidersAccess.DOWNLOADS.getUri());
     }
 
     @Test
@@ -105,14 +105,14 @@
         Intent intent = mActivity.getIntent();
         intent.setAction(Shared.ACTION_PICK_COPY_DESTINATION);
         mHandler.initLocation(intent);
-        assertRootPicked(TestRootsAccess.HOME.getUri());
+        assertRootPicked(TestProvidersAccess.HOME.getUri());
     }
 
     @Test
     public void testInitLocation_LaunchToDocuments() throws Exception {
         mEnv.docs.nextIsDocumentsUri = true;
         mEnv.docs.nextPath = new Path(
-                TestRootsAccess.HOME.rootId,
+                TestProvidersAccess.HOME.rootId,
                 Arrays.asList(
                         TestEnv.FOLDER_0.documentId,
                         TestEnv.FOLDER_1.documentId,
@@ -128,7 +128,7 @@
 
         mEnv.beforeAsserts();
 
-        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestRootsAccess.HOME,
+        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestProvidersAccess.HOME,
                 Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1));
         mActivity.refreshCurrentRootAndDirectory.assertCalled();
     }
@@ -136,7 +136,7 @@
     @Test
     public void testInitLocation_RestoresLastAccessedStack() throws Exception {
         final DocumentStack stack =
-                new DocumentStack(TestRootsAccess.HAMMY, TestEnv.FOLDER_0, TestEnv.FOLDER_1);
+                new DocumentStack(TestProvidersAccess.HAMMY, TestEnv.FOLDER_0, TestEnv.FOLDER_1);
         mLastAccessed.setLastAccessed(mActivity, stack);
 
         mHandler.initLocation(mActivity.getIntent());
@@ -170,7 +170,7 @@
 
         mHandler.initLocation(mActivity.getIntent());
 
-        assertRootPicked(TestRootsAccess.DOWNLOADS.getUri());
+        assertRootPicked(TestProvidersAccess.DOWNLOADS.getUri());
     }
 
     @Test
@@ -187,7 +187,7 @@
             throws Exception {
 
         mEnv.state.action = State.ACTION_PICK_COPY_DESTINATION;
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_1);
         mEnv.state.stack.push(TestEnv.FOLDER_2);
 
@@ -213,7 +213,7 @@
     @Test
     public void testPickDocument_SetsCorrectResultAndFinishes_ActionOpenTree() throws Exception {
         mEnv.state.action = State.ACTION_OPEN_TREE;
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_1);
         mEnv.state.stack.push(TestEnv.FOLDER_2);
 
@@ -232,7 +232,7 @@
         assertPermission(result, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, true);
         assertPermission(result, Intent.FLAG_GRANT_PREFIX_URI_PERMISSION, true);
         assertContent(result, DocumentsContract.buildTreeDocumentUri(
-                TestRootsAccess.HOME.authority, TestEnv.FOLDER_2.documentId));
+                TestProvidersAccess.HOME.authority, TestEnv.FOLDER_2.documentId));
 
         mActivity.finishedHandler.assertCalled();
     }
@@ -240,7 +240,7 @@
     @Test
     public void testSaveDocument_SetsCorrectResultAndFinishes() throws Exception {
         mEnv.state.action = State.ACTION_CREATE;
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_1);
 
         final String mimeType = "audio/aac";
@@ -269,7 +269,7 @@
     @Test
     public void testSaveDocument_ConfirmsOverwrite() {
         mEnv.state.action = State.ACTION_CREATE;
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_1);
 
         mHandler.saveDocument(null, TestEnv.FILE_JPG);
@@ -280,7 +280,7 @@
     @Test
     public void testFinishPicking_SetsCorrectResultAndFinishes_ActionGetContent() throws Exception {
         mEnv.state.action = State.ACTION_GET_CONTENT;
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_1);
 
         mActivity.finishedHandler.assertNotCalled();
@@ -306,7 +306,7 @@
     public void testFinishPicking_SetsCorrectResultAndFinishes_ActionGetContent_MultipleSelection()
             throws Exception {
         mEnv.state.action = State.ACTION_GET_CONTENT;
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_1);
         mEnv.state.acceptMimes = new String[] { "image/*" };
 
@@ -332,7 +332,7 @@
     @Test
     public void testFinishPicking_SetsCorrectResultAndFinishes_ActionOpen() throws Exception {
         mEnv.state.action = State.ACTION_OPEN;
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_1);
 
         mActivity.finishedHandler.assertNotCalled();
@@ -358,7 +358,7 @@
     public void testFinishPicking_SetsCorrectResultAndFinishes_ActionOpen_MultipleSelection()
             throws Exception {
         mEnv.state.action = State.ACTION_OPEN;
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_1);
         mEnv.state.acceptMimes = new String[] { "image/*" };
 
@@ -384,7 +384,7 @@
     @Test
     public void testFinishPicking_SetsCorrectResultAndFinishes_ActionCreate() throws Exception {
         mEnv.state.action = State.ACTION_CREATE;
-        mEnv.state.stack.changeRoot(TestRootsAccess.HOME);
+        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
         mEnv.state.stack.push(TestEnv.FOLDER_1);
 
         mActivity.finishedHandler.assertNotCalled();
@@ -415,7 +415,7 @@
         mHandler.initLocation(mActivity.getIntent());
 
         mEnv.beforeAsserts();
-        assertEquals(TestRootsAccess.RECENTS, mEnv.state.stack.getRoot());
+        assertEquals(TestProvidersAccess.RECENTS, mEnv.state.stack.getRoot());
         mActivity.refreshCurrentRootAndDirectory.assertCalled();
     }
 
diff --git a/tests/unit/com/android/documentsui/roots/RootsCacheTest.java b/tests/unit/com/android/documentsui/roots/ProvidersCacheTest.java
similarity index 88%
rename from tests/unit/com/android/documentsui/roots/RootsCacheTest.java
rename to tests/unit/com/android/documentsui/roots/ProvidersCacheTest.java
index e9c9883..b8a6422 100644
--- a/tests/unit/com/android/documentsui/roots/RootsCacheTest.java
+++ b/tests/unit/com/android/documentsui/roots/ProvidersCacheTest.java
@@ -30,7 +30,7 @@
 import java.util.List;
 
 @SmallTest
-public class RootsCacheTest extends AndroidTestCase {
+public class ProvidersCacheTest extends AndroidTestCase {
 
     private static RootInfo mNull = new RootInfo();
     private static RootInfo mEmpty = buildForMimeTypes();
@@ -64,7 +64,7 @@
         mState.acceptMimes = new String[] { "*/*" };
         assertContainsExactly(
                 newArrayList(mNull, mWild, mImages, mAudio, mDocs, mMalformed1, mMalformed2),
-                RootsAccess.getMatchingRoots(mRoots, mState));
+                ProvidersAccess.getMatchingRoots(mRoots, mState));
     }
 
     public void testMatchingRoots_DirectoryCopy() throws Exception {
@@ -78,56 +78,56 @@
         // basically we're asserting that the results don't contain downloads
         assertContainsExactly(
                 newArrayList(mNull, mWild, mImages, mAudio, mDocs, mMalformed1, mMalformed2),
-                RootsAccess.getMatchingRoots(mRoots, mState));
+                ProvidersAccess.getMatchingRoots(mRoots, mState));
     }
 
     public void testMatchingRoots_PngOrWild() throws Exception {
         mState.acceptMimes = new String[] { "image/png", "*/*" };
         assertContainsExactly(
                 newArrayList(mNull, mWild, mImages, mAudio, mDocs, mMalformed1, mMalformed2),
-                RootsAccess.getMatchingRoots(mRoots, mState));
+                ProvidersAccess.getMatchingRoots(mRoots, mState));
     }
 
     public void testMatchingRoots_AudioWild() throws Exception {
         mState.acceptMimes = new String[] { "audio/*" };
         assertContainsExactly(
                 newArrayList(mNull, mWild, mAudio),
-                RootsAccess.getMatchingRoots(mRoots, mState));
+                ProvidersAccess.getMatchingRoots(mRoots, mState));
     }
 
     public void testMatchingRoots_AudioWildOrImageWild() throws Exception {
         mState.acceptMimes = new String[] { "audio/*", "image/*" };
         assertContainsExactly(
                 newArrayList(mNull, mWild, mAudio, mImages),
-                RootsAccess.getMatchingRoots(mRoots, mState));
+                ProvidersAccess.getMatchingRoots(mRoots, mState));
     }
 
     public void testMatchingRoots_AudioSpecific() throws Exception {
         mState.acceptMimes = new String[] { "audio/mpeg" };
         assertContainsExactly(
                 newArrayList(mNull, mWild, mAudio),
-                RootsAccess.getMatchingRoots(mRoots, mState));
+                ProvidersAccess.getMatchingRoots(mRoots, mState));
     }
 
     public void testMatchingRoots_Document() throws Exception {
         mState.acceptMimes = new String[] { "application/msword" };
         assertContainsExactly(
                 newArrayList(mNull, mWild, mDocs),
-                RootsAccess.getMatchingRoots(mRoots, mState));
+                ProvidersAccess.getMatchingRoots(mRoots, mState));
     }
 
     public void testMatchingRoots_Application() throws Exception {
         mState.acceptMimes = new String[] { "application/*" };
         assertContainsExactly(
                 newArrayList(mNull, mWild, mAudio, mDocs),
-                RootsAccess.getMatchingRoots(mRoots, mState));
+                ProvidersAccess.getMatchingRoots(mRoots, mState));
     }
 
     public void testMatchingRoots_FlacOrPng() throws Exception {
         mState.acceptMimes = new String[] { "application/x-flac", "image/png" };
         assertContainsExactly(
                 newArrayList(mNull, mWild, mAudio, mImages),
-                RootsAccess.getMatchingRoots(mRoots, mState));
+                ProvidersAccess.getMatchingRoots(mRoots, mState));
     }
 
     public void testExcludedAuthorities() throws Exception {
@@ -152,7 +152,7 @@
 
         assertContainsExactly(
             allowedRoots,
-            RootsAccess.getMatchingRoots(roots, mState));
+            ProvidersAccess.getMatchingRoots(roots, mState));
     }
 
     private static void assertContainsExactly(List<?> expected, List<?> actual) {