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
