diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 0269bb2..5e815bc 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -120,7 +120,7 @@
     public static class PhotosStorageActivity extends SettingsActivity {
         /* empty */
     }
-    public static class StorageAccessSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class DirectoryAccessSettingsActivity extends SettingsActivity { /* empty */ }
 
     public static class TopLevelSettings extends SettingsActivity { /* empty */ }
     public static class ApnSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/applications/AppStateStorageAccessBridge.java b/src/com/android/settings/applications/AppStateDirectoryAccessBridge.java
similarity index 90%
rename from src/com/android/settings/applications/AppStateStorageAccessBridge.java
rename to src/com/android/settings/applications/AppStateDirectoryAccessBridge.java
index 4839fd6..8cd4444 100644
--- a/src/com/android/settings/applications/AppStateStorageAccessBridge.java
+++ b/src/com/android/settings/applications/AppStateDirectoryAccessBridge.java
@@ -34,11 +34,11 @@
 import java.util.Set;
 
 // TODO(b/63720392): add unit tests
-public class AppStateStorageAccessBridge extends AppStateBaseBridge {
+public class AppStateDirectoryAccessBridge extends AppStateBaseBridge {
 
-    private static final String TAG = "StorageAccessBridge";
+    private static final String TAG = "DirectoryAccessBridge";
 
-    public AppStateStorageAccessBridge(ApplicationsState appState, Callback callback) {
+    public AppStateDirectoryAccessBridge(ApplicationsState appState, Callback callback) {
         super(appState, callback);
     }
 
@@ -48,7 +48,7 @@
     @Override
     protected void updateExtraInfo(AppEntry app, String pkg, int uid) { }
 
-    public static final AppFilter FILTER_APP_HAS_STORAGE_ACCESS = new AppFilter() {
+    public static final AppFilter FILTER_APP_HAS_DIRECTORY_ACCESS = new AppFilter() {
 
         private Set<String> mPackages;
 
diff --git a/src/com/android/settings/applications/StorageAccessDetails.java b/src/com/android/settings/applications/DirectoryAccessDetails.java
similarity index 92%
rename from src/com/android/settings/applications/StorageAccessDetails.java
rename to src/com/android/settings/applications/DirectoryAccessDetails.java
index 41729e6..1f7a81a 100644
--- a/src/com/android/settings/applications/StorageAccessDetails.java
+++ b/src/com/android/settings/applications/DirectoryAccessDetails.java
@@ -38,13 +38,13 @@
 import com.android.settings.R;
 
 /**
- * Detailed settings for an app's storage access permissions (A.K.A Scoped Directory Access).
+ * Detailed settings for an app's directory access permissions (A.K.A Scoped Directory Access).
  */
 // TODO(b/63720392): explain its layout
 // TODO(b/63720392): add unit tests
-public class StorageAccessDetails extends AppInfoWithHeader implements OnPreferenceChangeListener,
+public class DirectoryAccessDetails extends AppInfoWithHeader implements OnPreferenceChangeListener,
         OnPreferenceClickListener {
-    private static final String MY_TAG = "StorageAccessDetails";
+    private static final String MY_TAG = "DirectoryAccessDetails";
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -105,6 +105,6 @@
 
     @Override
     public int getMetricsCategory() {
-        return MetricsEvent.APPLICATIONS_USAGE_ACCESS_DETAIL;
+        return MetricsEvent.APPLICATIONS_DIRECTORY_ACCESS_DETAIL;
     }
 }
diff --git a/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java b/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
index 82b3d86..fb5caf7 100644
--- a/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
+++ b/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
@@ -23,7 +23,7 @@
 import com.android.settings.applications.AppStateNotificationBridge;
 import com.android.settings.applications.AppStateOverlayBridge;
 import com.android.settings.applications.AppStatePowerBridge;
-import com.android.settings.applications.AppStateStorageAccessBridge;
+import com.android.settings.applications.AppStateDirectoryAccessBridge;
 import com.android.settings.applications.AppStateUsageBridge;
 import com.android.settings.applications.AppStateWriteSettingsBridge;
 import com.android.settingslib.applications.ApplicationsState;
@@ -66,7 +66,7 @@
     public static final int FILTER_APPS_WITH_OVERLAY = 10;
     public static final int FILTER_APPS_WRITE_SETTINGS = 11;
     public static final int FILTER_APPS_INSTALL_SOURCES = 12;
-    public static final int FILTER_APP_HAS_STORAGE_ACCESS = 13;
+    public static final int FILTER_APP_HAS_DIRECTORY_ACCESS = 13;
     // Next id: 14
 
     private static AppFilterRegistry sRegistry;
@@ -158,10 +158,10 @@
                 FILTER_APPS_INSTALL_SOURCES,
                 R.string.filter_install_sources_apps);
 
-        // Apps that interacted with storage access permissions (A.K.A. Scoped Directory Access)
-        mFilters[FILTER_APP_HAS_STORAGE_ACCESS] = new AppFilterItem(
-                AppStateStorageAccessBridge.FILTER_APP_HAS_STORAGE_ACCESS,
-                FILTER_APP_HAS_STORAGE_ACCESS,
+        // Apps that interacted with directory access permissions (A.K.A. Scoped Directory Access)
+        mFilters[FILTER_APP_HAS_DIRECTORY_ACCESS] = new AppFilterItem(
+                AppStateDirectoryAccessBridge.FILTER_APP_HAS_DIRECTORY_ACCESS,
+                FILTER_APP_HAS_DIRECTORY_ACCESS,
                 R.string.filter_install_sources_apps);
     }
 
@@ -185,8 +185,8 @@
                 return FILTER_APPS_WRITE_SETTINGS;
             case ManageApplications.LIST_TYPE_MANAGE_SOURCES:
                 return FILTER_APPS_INSTALL_SOURCES;
-            case ManageApplications.LIST_TYPE_STORAGE_ACCESS:
-                return FILTER_APP_HAS_STORAGE_ACCESS;
+            case ManageApplications.LIST_TYPE_DIRECTORY_ACCESS:
+                return FILTER_APP_HAS_DIRECTORY_ACCESS;
             default:
                 return FILTER_APPS_ALL;
         }
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 081161e..09896dc 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -84,7 +84,7 @@
 import com.android.settings.applications.AppStateNotificationBridge;
 import com.android.settings.applications.AppStateOverlayBridge;
 import com.android.settings.applications.AppStatePowerBridge;
-import com.android.settings.applications.AppStateStorageAccessBridge;
+import com.android.settings.applications.AppStateDirectoryAccessBridge;
 import com.android.settings.applications.AppStateUsageBridge;
 import com.android.settings.applications.AppStateUsageBridge.UsageState;
 import com.android.settings.applications.AppStateWriteSettingsBridge;
@@ -93,7 +93,7 @@
 import com.android.settings.applications.InstalledAppCounter;
 import com.android.settings.applications.InstalledAppDetails;
 import com.android.settings.applications.NotificationApps;
-import com.android.settings.applications.StorageAccessDetails;
+import com.android.settings.applications.DirectoryAccessDetails;
 import com.android.settings.applications.UsageAccessDetails;
 import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.applications.appinfo.DrawOverlayDetails;
@@ -206,7 +206,7 @@
     public static final int LIST_TYPE_GAMES = 9;
     public static final int LIST_TYPE_MOVIES = 10;
     public static final int LIST_TYPE_PHOTOGRAPHY = 11;
-    public static final int LIST_TYPE_STORAGE_ACCESS = 12;
+    public static final int LIST_TYPE_DIRECTORY_ACCESS = 12;
 
     // List types that should show instant apps.
     public static final Set<Integer> LIST_TYPES_WITH_INSTANT = new ArraySet<>(Arrays.asList(
@@ -282,9 +282,9 @@
             mListType = LIST_TYPE_PHOTOGRAPHY;
             mSortOrder = R.id.sort_order_size;
             mStorageType = args.getInt(EXTRA_STORAGE_TYPE, STORAGE_TYPE_DEFAULT);
-        } else if (className.equals(Settings.StorageAccessSettingsActivity.class.getName())) {
-            mListType = LIST_TYPE_STORAGE_ACCESS;
-            screenTitle = R.string.storage_access;
+        } else if (className.equals(Settings.DirectoryAccessSettingsActivity.class.getName())) {
+            mListType = LIST_TYPE_DIRECTORY_ACCESS;
+            screenTitle = R.string.directory_access;
         } else {
             mListType = LIST_TYPE_MAIN;
         }
@@ -449,8 +449,8 @@
                 return MetricsEvent.SYSTEM_ALERT_WINDOW_APPS;
             case LIST_TYPE_MANAGE_SOURCES:
                 return MetricsEvent.MANAGE_EXTERNAL_SOURCES;
-            case LIST_TYPE_STORAGE_ACCESS:
-                return MetricsEvent.STORAGE_ACCESS;
+            case LIST_TYPE_DIRECTORY_ACCESS:
+                return MetricsEvent.DIRECTORY_ACCESS;
             default:
                 return MetricsEvent.VIEW_UNKNOWN;
         }
@@ -545,8 +545,8 @@
             case LIST_TYPE_PHOTOGRAPHY:
                 startAppInfoFragment(AppStorageSettings.class, R.string.storage_photos_videos);
                 break;
-            case LIST_TYPE_STORAGE_ACCESS:
-                startAppInfoFragment(StorageAccessDetails.class, R.string.storage_access);
+            case LIST_TYPE_DIRECTORY_ACCESS:
+                startAppInfoFragment(DirectoryAccessDetails.class, R.string.directory_access);
                 break;
 
             // TODO: Figure out if there is a way where we can spin up the profile's settings
@@ -852,8 +852,8 @@
                 mExtraInfoBridge = new AppStateWriteSettingsBridge(mContext, mState, this);
             } else if (mManageApplications.mListType == LIST_TYPE_MANAGE_SOURCES) {
                 mExtraInfoBridge = new AppStateInstallAppsBridge(mContext, mState, this);
-            } else if (mManageApplications.mListType == LIST_TYPE_STORAGE_ACCESS) {
-                mExtraInfoBridge = new AppStateStorageAccessBridge(mState, this);
+            } else if (mManageApplications.mListType == LIST_TYPE_DIRECTORY_ACCESS) {
+                mExtraInfoBridge = new AppStateDirectoryAccessBridge(mState, this);
             } else {
                 mExtraInfoBridge = null;
             }
@@ -1255,7 +1255,7 @@
                 case LIST_TYPE_MANAGE_SOURCES:
                     holder.setSummary(ExternalSourcesDetails.getPreferenceSummary(mContext, entry));
                     break;
-                case LIST_TYPE_STORAGE_ACCESS:
+                case LIST_TYPE_DIRECTORY_ACCESS:
                     holder.setSummary(null);
                     break;
                 default:
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 71ff610..0a4b1f2 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -44,7 +44,7 @@
 import com.android.settings.applications.NotificationApps;
 import com.android.settings.applications.ProcessStatsSummary;
 import com.android.settings.applications.ProcessStatsUi;
-import com.android.settings.applications.StorageAccessDetails;
+import com.android.settings.applications.DirectoryAccessDetails;
 import com.android.settings.applications.UsageAccessDetails;
 import com.android.settings.applications.VrListenerSettings;
 import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
@@ -254,7 +254,7 @@
             LockscreenDashboardFragment.class.getName(),
             BluetoothDeviceDetailsFragment.class.getName(),
             DataUsageList.class.getName(),
-            StorageAccessDetails.class.getName()
+            DirectoryAccessDetails.class.getName()
     };
 
     public static final String[] SETTINGS_FOR_RESTRICTED = {
