Wakeup and unlock screen before running the tests am: 91bc9d9012

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/DocumentsUI/+/13080688

Change-Id: I1467d93fd1cde07a4c99905324b50adcc6739227
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 572f3e4..6fa0971 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -169,7 +169,8 @@
             </intent-filter>
         </provider>
 
-        <receiver android:name=".PackageReceiver">
+        <receiver android:name=".PackageReceiver"
+            android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
                 <action android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
@@ -177,13 +178,15 @@
             </intent-filter>
         </receiver>
 
-        <receiver android:name=".roots.BootReceiver" android:enabled="false">
+        <receiver android:name=".roots.BootReceiver" android:enabled="false"
+            android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.BOOT_COMPLETED" />
             </intent-filter>
         </receiver>
 
-        <receiver android:name=".PreBootReceiver">
+        <receiver android:name=".PreBootReceiver"
+            android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.PRE_BOOT_COMPLETED" />
             </intent-filter>
@@ -201,6 +204,7 @@
         <activity
             android:name=".selection.demo.SelectionDemoActivity"
             android:label="Selection Demo"
+            android:exported="true"
             android:theme="@style/DocumentsTheme">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/res/layout/drawer_layout.xml b/res/layout/drawer_layout.xml
index 7cb185f..589953d 100644
--- a/res/layout/drawer_layout.xml
+++ b/res/layout/drawer_layout.xml
@@ -51,8 +51,8 @@
                     android:layout_width="match_parent"
                     android:layout_height="match_parent" />
 
-                <!-- Drawer edge is a dummy view used to capture hovering event
-                     on view edge to open the drawer. (b/28345294) -->
+                <!-- Drawer edge is a placeholder view used to capture hovering
+                     event on view edge to open the drawer. (b/28345294) -->
                 <View
                     android:id="@+id/drawer_edge"
                     android:background="@android:color/transparent"
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 5ddec85..742fd03 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -213,7 +213,7 @@
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> елемента</item>
       <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> елемент</item>
     </plurals>
-    <string name="delete_filename_confirmation_message" msgid="8338069763240613258">"Искате ли да изтриете „<xliff:g id="NAME">%1$s</xliff:g>“?"</string>
+    <string name="delete_filename_confirmation_message" msgid="8338069763240613258">"Искате ли да изтриете <xliff:g id="NAME">%1$s</xliff:g>?"</string>
     <string name="delete_foldername_confirmation_message" msgid="9084085260877704140">"Искате ли да изтриете папката „<xliff:g id="NAME">%1$s</xliff:g>“ и съдържанието в нея?"</string>
     <plurals name="delete_files_confirmation_message" formatted="false" msgid="4866664063250034142">
       <item quantity="other">Искате ли да изтриете <xliff:g id="COUNT_1">%1$d</xliff:g> файла?</item>
@@ -233,7 +233,7 @@
     <string name="authentication_required" msgid="8030880723643436099">"За да прегледате тази директория, влезте в/ъв <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="cant_display_content" msgid="8633226333229417237">"Съдържанието не може да бъде показано"</string>
     <string name="sign_in" msgid="6253762676723505592">"Вход"</string>
-    <string name="new_archive_file_name" msgid="1604650338077249838">"<xliff:g id="EXTENSION">%s</xliff:g> архивен файл"</string>
+    <string name="new_archive_file_name" msgid="1604650338077249838">"archive<xliff:g id="EXTENSION">%s</xliff:g>"</string>
     <string name="overwrite_file_confirmation_message" msgid="2496109652768222716">"Да се презапише ли <xliff:g id="NAME">%1$s</xliff:g>?"</string>
     <string name="continue_in_background" msgid="1974214559047793331">"Продължаване на заден план"</string>
     <plurals name="selected_count" formatted="false" msgid="7555250236512981129">
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index c713449..b4b6223 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -61,7 +61,7 @@
     <string name="button_extract" msgid="1038674453689912247">"Extraer"</string>
     <string name="button_move" msgid="8596460499325291272">"Mover"</string>
     <string name="button_dismiss" msgid="7235249361023803349">"Cerrar"</string>
-    <string name="button_retry" msgid="4011461781916631389">"Volver a intentarlo"</string>
+    <string name="button_retry" msgid="4011461781916631389">"Reintentar"</string>
     <string name="button_clear" msgid="5412304437764369441">"Borrar"</string>
     <string name="button_show_provider" msgid="6905880493806292753">"Mostrar en el proveedor"</string>
     <string name="button_back" msgid="1888621708934742182">"Atrás"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index b13de15..c4fb538 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -196,7 +196,7 @@
       <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elementu kopiatu da arbelean.</item>
     </plurals>
     <string name="file_operation_rejected" msgid="4301554203329008794">"Ez da onartzen hori egitea fitxategiarekin."</string>
-    <string name="file_operation_error" msgid="2234357335716533795">"Ezin da egin hori fitxategiarekin."</string>
+    <string name="file_operation_error" msgid="2234357335716533795">"Ezin izan da egin hori fitxategiarekin."</string>
     <string name="rename_error" msgid="6700093173508118635">"Ezin izan zaio aldatu izena dokumentuari"</string>
     <string name="menu_eject_root" msgid="9215040039374893613">"Atera"</string>
     <string name="notification_copy_files_converted_title" msgid="6916768494891833365">"Artxibo batzuk bihurtu dira"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index d46c6bc..617fce1 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -124,22 +124,27 @@
     <string name="copy_remaining" msgid="5390517377265177727">"Temps restant : <xliff:g id="DURATION">%s</xliff:g>"</string>
     <plurals name="copy_begin" formatted="false" msgid="151184708996738192">
       <item quantity="one">Copie de <xliff:g id="COUNT_1">%1$d</xliff:g> élément en cours.</item>
+      <item quantity="many">Copying <xliff:g id="COUNT_1">%1$d</xliff:g> items.</item>
       <item quantity="other">Copie de <xliff:g id="COUNT_1">%1$d</xliff:g> éléments en cours.</item>
     </plurals>
     <plurals name="compress_begin" formatted="false" msgid="3534158317098678895">
       <item quantity="one">Compression de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier en cours.</item>
+      <item quantity="many">Compressing <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
       <item quantity="other">Compression de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers en cours.</item>
     </plurals>
     <plurals name="extract_begin" formatted="false" msgid="1006380679562903749">
       <item quantity="one">Extraction de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier en cours.</item>
+      <item quantity="many">Extracting <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
       <item quantity="other">Extraction de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers en cours.</item>
     </plurals>
     <plurals name="move_begin" formatted="false" msgid="1464229874265756956">
       <item quantity="one">Déplacement de <xliff:g id="COUNT_1">%1$d</xliff:g> élément en cours.</item>
+      <item quantity="many">Moving <xliff:g id="COUNT_1">%1$d</xliff:g> items.</item>
       <item quantity="other">Déplacement de <xliff:g id="COUNT_1">%1$d</xliff:g> éléments en cours.</item>
     </plurals>
     <plurals name="deleting" formatted="false" msgid="1729138001178158901">
       <item quantity="one">Suppression de <xliff:g id="COUNT_1">%1$d</xliff:g> élément en cours.</item>
+      <item quantity="many">Deleting <xliff:g id="COUNT_1">%1$d</xliff:g> items.</item>
       <item quantity="other">Suppression de <xliff:g id="COUNT_1">%1$d</xliff:g> éléments en cours.</item>
     </plurals>
     <string name="undo" msgid="2902438994196400565">"Annuler"</string>
@@ -151,48 +156,59 @@
     <string name="delete_progress" msgid="2627631054702306423">"<xliff:g id="COUNT_0">%1$d</xliff:g> sur <xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
     <plurals name="copy_error_notification_title" formatted="false" msgid="3188432450429390963">
       <item quantity="one">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> élément</item>
+      <item quantity="many">Couldn’t copy <xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
       <item quantity="other">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> éléments</item>
     </plurals>
     <plurals name="compress_error_notification_title" formatted="false" msgid="3043630066678213644">
       <item quantity="one">Impossible de compresser <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
+      <item quantity="many">Couldn’t compress <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
       <item quantity="other">Impossible de compresser <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
     </plurals>
     <plurals name="move_error_notification_title" formatted="false" msgid="2185736082411854754">
       <item quantity="one">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> élément</item>
+      <item quantity="many">Couldn’t move <xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
       <item quantity="other">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> éléments</item>
     </plurals>
     <plurals name="delete_error_notification_title" formatted="false" msgid="7568122018481625267">
       <item quantity="one">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> élément</item>
+      <item quantity="many">Couldn’t delete <xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
       <item quantity="other">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> éléments</item>
     </plurals>
     <string name="notification_touch_for_details" msgid="2385563502445129570">"Touchez pour afficher les détails"</string>
     <string name="close" msgid="905969391788869975">"Fermer"</string>
     <plurals name="copy_failure_alert_content" formatted="false" msgid="5570549471912990536">
       <item quantity="one">Ce fichier n\'a pas été copié : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t copied: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été copiés : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="compress_failure_alert_content" formatted="false" msgid="5760632881868842400">
       <item quantity="one">Ce fichier n\'a pas été compressé : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t compressed: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été compressés : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="extract_failure_alert_content" formatted="false" msgid="7572748127571720803">
       <item quantity="one">Ce fichier n\'a pas été extrait : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t extracted: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été extraits : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="move_failure_alert_content" formatted="false" msgid="2747390342670799196">
       <item quantity="one">Ce fichier n\'a pas été déplacé : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t moved: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été déplacés : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="delete_failure_alert_content" formatted="false" msgid="6122372614839711711">
       <item quantity="one">Ce fichier n\'a pas été supprimé : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t deleted: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été supprimés : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="copy_converted_warning_content" formatted="false" msgid="7433742181712126588">
       <item quantity="one">Ce fichier a été converti en un autre format : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files were converted to another format: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers ont été convertis en un autre format : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="clipboard_files_clipped" formatted="false" msgid="4847061634862926902">
       <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément copié dans le presse-papiers.</item>
+      <item quantity="many">Copied <xliff:g id="COUNT_1">%1$d</xliff:g> items to clipboard.</item>
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments copiés dans le presse-papiers.</item>
     </plurals>
     <string name="file_operation_rejected" msgid="4301554203329008794">"Opération relative au fichier non prise en charge"</string>
@@ -207,24 +223,29 @@
     <string name="deny" msgid="5127201668078153379">"Refuser"</string>
     <plurals name="elements_selected" formatted="false" msgid="4448165978637163692">
       <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément sélectionné</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item>
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments sélectionnés</item>
     </plurals>
     <plurals name="elements_dragged" formatted="false" msgid="5932571296037626279">
       <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> article</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> articles</item>
     </plurals>
     <string name="delete_filename_confirmation_message" msgid="8338069763240613258">"Supprimer « <xliff:g id="NAME">%1$s</xliff:g> »?"</string>
     <string name="delete_foldername_confirmation_message" msgid="9084085260877704140">"Supprimer le dossier « <xliff:g id="NAME">%1$s</xliff:g> » et son contenu?"</string>
     <plurals name="delete_files_confirmation_message" formatted="false" msgid="4866664063250034142">
       <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier?</item>
+      <item quantity="many">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> files?</item>
       <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers?</item>
     </plurals>
     <plurals name="delete_folders_confirmation_message" formatted="false" msgid="1028946402799686388">
       <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossier et son contenu?</item>
+      <item quantity="many">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> folders and their contents?</item>
       <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossiers et leur contenu?</item>
     </plurals>
     <plurals name="delete_items_confirmation_message" formatted="false" msgid="7285090426511028179">
       <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> élément?</item>
+      <item quantity="many">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> items?</item>
       <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> éléments?</item>
     </plurals>
     <string name="images_shortcut_label" msgid="2545168016070493574">"Images"</string>
@@ -238,6 +259,7 @@
     <string name="continue_in_background" msgid="1974214559047793331">"Continuer en arrière-plan"</string>
     <plurals name="selected_count" formatted="false" msgid="7555250236512981129">
       <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément sélectionné</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item>
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments sélectionnés</item>
     </plurals>
     <string name="root_info_header_recent" msgid="5654901877295332262">"Fichiers récents"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 9705244..3b46f9d 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -124,22 +124,27 @@
     <string name="copy_remaining" msgid="5390517377265177727">"Temps restant : <xliff:g id="DURATION">%s</xliff:g>"</string>
     <plurals name="copy_begin" formatted="false" msgid="151184708996738192">
       <item quantity="one">Copie de <xliff:g id="COUNT_1">%1$d</xliff:g> élément…</item>
+      <item quantity="many">Copying <xliff:g id="COUNT_1">%1$d</xliff:g> items.</item>
       <item quantity="other">Copie de <xliff:g id="COUNT_1">%1$d</xliff:g> éléments…</item>
     </plurals>
     <plurals name="compress_begin" formatted="false" msgid="3534158317098678895">
       <item quantity="one">Compression de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier…</item>
+      <item quantity="many">Compressing <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
       <item quantity="other">Compression de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers…</item>
     </plurals>
     <plurals name="extract_begin" formatted="false" msgid="1006380679562903749">
       <item quantity="one">Extraction de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier…</item>
+      <item quantity="many">Extracting <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
       <item quantity="other">Extraction de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers…</item>
     </plurals>
     <plurals name="move_begin" formatted="false" msgid="1464229874265756956">
       <item quantity="one">Déplacement de <xliff:g id="COUNT_1">%1$d</xliff:g> élément…</item>
+      <item quantity="many">Moving <xliff:g id="COUNT_1">%1$d</xliff:g> items.</item>
       <item quantity="other">Déplacement de <xliff:g id="COUNT_1">%1$d</xliff:g> éléments…</item>
     </plurals>
     <plurals name="deleting" formatted="false" msgid="1729138001178158901">
       <item quantity="one">Suppression de <xliff:g id="COUNT_1">%1$d</xliff:g> élément…</item>
+      <item quantity="many">Deleting <xliff:g id="COUNT_1">%1$d</xliff:g> items.</item>
       <item quantity="other">Suppression de <xliff:g id="COUNT_1">%1$d</xliff:g> éléments…</item>
     </plurals>
     <string name="undo" msgid="2902438994196400565">"Annuler"</string>
@@ -151,48 +156,59 @@
     <string name="delete_progress" msgid="2627631054702306423">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
     <plurals name="copy_error_notification_title" formatted="false" msgid="3188432450429390963">
       <item quantity="one">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> élément</item>
+      <item quantity="many">Couldn’t copy <xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
       <item quantity="other">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> éléments</item>
     </plurals>
     <plurals name="compress_error_notification_title" formatted="false" msgid="3043630066678213644">
       <item quantity="one">Impossible de compresser <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
+      <item quantity="many">Couldn’t compress <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
       <item quantity="other">Impossible de compresser <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
     </plurals>
     <plurals name="move_error_notification_title" formatted="false" msgid="2185736082411854754">
       <item quantity="one">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> élément</item>
+      <item quantity="many">Couldn’t move <xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
       <item quantity="other">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> éléments</item>
     </plurals>
     <plurals name="delete_error_notification_title" formatted="false" msgid="7568122018481625267">
       <item quantity="one">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> élément</item>
+      <item quantity="many">Couldn’t delete <xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
       <item quantity="other">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> éléments</item>
     </plurals>
     <string name="notification_touch_for_details" msgid="2385563502445129570">"Appuyez pour afficher plus d\'informations."</string>
     <string name="close" msgid="905969391788869975">"Fermer"</string>
     <plurals name="copy_failure_alert_content" formatted="false" msgid="5570549471912990536">
       <item quantity="one">Ce fichier n\'a pas été copié : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t copied: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été copiés : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="compress_failure_alert_content" formatted="false" msgid="5760632881868842400">
       <item quantity="one">Ce fichier n\'a pas été compressé : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t compressed: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été compressés : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="extract_failure_alert_content" formatted="false" msgid="7572748127571720803">
       <item quantity="one">Ce fichier n\'a pas été extrait : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t extracted: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été extraits : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="move_failure_alert_content" formatted="false" msgid="2747390342670799196">
       <item quantity="one">Ce fichier n\'a pas été déplacé : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t moved: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été déplacés : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="delete_failure_alert_content" formatted="false" msgid="6122372614839711711">
       <item quantity="one">Ce fichier n\'a pas été supprimé : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files weren’t deleted: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers n\'ont pas été supprimés : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="copy_converted_warning_content" formatted="false" msgid="7433742181712126588">
       <item quantity="one">Ce fichier a été converti dans un autre format : <xliff:g id="LIST_1">%1$s</xliff:g></item>
+      <item quantity="many">These files were converted to another format: <xliff:g id="LIST_1">%1$s</xliff:g></item>
       <item quantity="other">Ces fichiers ont été convertis dans un autre format : <xliff:g id="LIST_1">%1$s</xliff:g></item>
     </plurals>
     <plurals name="clipboard_files_clipped" formatted="false" msgid="4847061634862926902">
       <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément a été copié dans le presse-papiers.</item>
+      <item quantity="many">Copied <xliff:g id="COUNT_1">%1$d</xliff:g> items to clipboard.</item>
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments ont été copiés dans le presse-papiers.</item>
     </plurals>
     <string name="file_operation_rejected" msgid="4301554203329008794">"Opération relative au fichier non acceptée."</string>
@@ -207,24 +223,29 @@
     <string name="deny" msgid="5127201668078153379">"Refuser"</string>
     <plurals name="elements_selected" formatted="false" msgid="4448165978637163692">
       <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément sélectionné</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item>
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments sélectionnés</item>
     </plurals>
     <plurals name="elements_dragged" formatted="false" msgid="5932571296037626279">
       <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments</item>
     </plurals>
     <string name="delete_filename_confirmation_message" msgid="8338069763240613258">"Supprimer le fichier \"<xliff:g id="NAME">%1$s</xliff:g>\" ?"</string>
     <string name="delete_foldername_confirmation_message" msgid="9084085260877704140">"Supprimer le dossier \"<xliff:g id="NAME">%1$s</xliff:g>\" et son contenu ?"</string>
     <plurals name="delete_files_confirmation_message" formatted="false" msgid="4866664063250034142">
       <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier ?</item>
+      <item quantity="many">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> files?</item>
       <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers ?</item>
     </plurals>
     <plurals name="delete_folders_confirmation_message" formatted="false" msgid="1028946402799686388">
       <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossier et son contenu ?</item>
+      <item quantity="many">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> folders and their contents?</item>
       <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossiers et leur contenu ?</item>
     </plurals>
     <plurals name="delete_items_confirmation_message" formatted="false" msgid="7285090426511028179">
       <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> élément ?</item>
+      <item quantity="many">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> items?</item>
       <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> éléments ?</item>
     </plurals>
     <string name="images_shortcut_label" msgid="2545168016070493574">"Images"</string>
@@ -238,6 +259,7 @@
     <string name="continue_in_background" msgid="1974214559047793331">"Continuer en arrière-plan"</string>
     <plurals name="selected_count" formatted="false" msgid="7555250236512981129">
       <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément sélectionné</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item>
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments sélectionnés</item>
     </plurals>
     <string name="root_info_header_recent" msgid="5654901877295332262">"Fichiers récents"</string>
diff --git a/res/values-hu/inspector_strings.xml b/res/values-hu/inspector_strings.xml
index c883f55..23746a5 100644
--- a/res/values-hu/inspector_strings.xml
+++ b/res/values-hu/inspector_strings.xml
@@ -30,7 +30,7 @@
     <string name="metadata_coordinates" msgid="6897383227370702734">"Koordináták"</string>
     <string name="metadata_coordinates_format" msgid="1402724596764547761">"<xliff:g id="LATITUDE">%1$,.3f</xliff:g>, <xliff:g id="LONGITUDE">%2$,.3f</xliff:g>"</string>
     <string name="metadata_altitude" msgid="8063792127436794294">"Magasság"</string>
-    <string name="metadata_camera" msgid="2363009732801281319">"Fényképezőgép"</string>
+    <string name="metadata_camera" msgid="2363009732801281319">"Kamera"</string>
     <string name="metadata_camera_format" msgid="1494489751904311612">"<xliff:g id="MAKE">%1$s</xliff:g> <xliff:g id="MODEL">%2$s</xliff:g>"</string>
     <string name="metadata_aperture" msgid="6538741952698935357">"Rekesz"</string>
     <string name="metadata_shutter_speed" msgid="8204739885103326131">"Záridő"</string>
diff --git a/res/values-mk/inspector_strings.xml b/res/values-mk/inspector_strings.xml
index 373c656..9687d1d 100644
--- a/res/values-mk/inspector_strings.xml
+++ b/res/values-mk/inspector_strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="inspector_title" msgid="1924760928091740238">"Информации"</string>
-    <string name="inspector_load_error" msgid="7522190243413249291">"Не можеше да се вчитаат информациите за датотеката"</string>
+    <string name="inspector_load_error" msgid="7522190243413249291">"Не може да се вчитаат информациите за датотеката"</string>
     <string name="inspector_debug_section" msgid="2576052661505700421">"Инф. за отстранување грешки (само за програмери)"</string>
     <string name="inspector_debug_metadata_section" msgid="5875140675600744846">"Необработени метаподатоци: <xliff:g id="METADATATYPE">%1$s</xliff:g>"</string>
     <string name="inspector_metadata_section" msgid="6077622515328240575">"Детали за аудиовизуелните содржини"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 737080e..c30e6e0 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -150,20 +150,20 @@
     <string name="delete_preparing" msgid="7339349837842802508">"Се подготвува…"</string>
     <string name="delete_progress" msgid="2627631054702306423">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
     <plurals name="copy_error_notification_title" formatted="false" msgid="3188432450429390963">
-      <item quantity="one">Не можеше да се копира <xliff:g id="COUNT_1">%1$d</xliff:g> ставка</item>
-      <item quantity="other">Не можеше да се копираат <xliff:g id="COUNT_1">%1$d</xliff:g> ставки</item>
+      <item quantity="one">Не може да се копира <xliff:g id="COUNT_1">%1$d</xliff:g> ставка</item>
+      <item quantity="other">Не може да се копираат <xliff:g id="COUNT_1">%1$d</xliff:g> ставки</item>
     </plurals>
     <plurals name="compress_error_notification_title" formatted="false" msgid="3043630066678213644">
-      <item quantity="one">Не можеше да се компримира <xliff:g id="COUNT_1">%1$d</xliff:g> датотека</item>
-      <item quantity="other">Не можеше да се компримираат <xliff:g id="COUNT_1">%1$d</xliff:g> датотеки</item>
+      <item quantity="one">Не може да се компримира <xliff:g id="COUNT_1">%1$d</xliff:g> датотека</item>
+      <item quantity="other">Не може да се компримираат <xliff:g id="COUNT_1">%1$d</xliff:g> датотеки</item>
     </plurals>
     <plurals name="move_error_notification_title" formatted="false" msgid="2185736082411854754">
-      <item quantity="one">Не можеше да премести <xliff:g id="COUNT_1">%1$d</xliff:g> ставка</item>
-      <item quantity="other">Не можеше да преместат <xliff:g id="COUNT_1">%1$d</xliff:g> ставки</item>
+      <item quantity="one">Не може да премести <xliff:g id="COUNT_1">%1$d</xliff:g> ставка</item>
+      <item quantity="other">Не може да преместат <xliff:g id="COUNT_1">%1$d</xliff:g> ставки</item>
     </plurals>
     <plurals name="delete_error_notification_title" formatted="false" msgid="7568122018481625267">
-      <item quantity="one">Не можеше да се избрише <xliff:g id="COUNT_1">%1$d</xliff:g> ставка</item>
-      <item quantity="other">Не можеше да се избришат <xliff:g id="COUNT_1">%1$d</xliff:g> ставки</item>
+      <item quantity="one">Не може да се избрише <xliff:g id="COUNT_1">%1$d</xliff:g> ставка</item>
+      <item quantity="other">Не може да се избришат <xliff:g id="COUNT_1">%1$d</xliff:g> ставки</item>
     </plurals>
     <string name="notification_touch_for_details" msgid="2385563502445129570">"Допрете за приказ на деталите"</string>
     <string name="close" msgid="905969391788869975">"Затвори"</string>
diff --git a/res/values-mn/inspector_strings.xml b/res/values-mn/inspector_strings.xml
index 625c31a..50aa68b 100644
--- a/res/values-mn/inspector_strings.xml
+++ b/res/values-mn/inspector_strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="inspector_title" msgid="1924760928091740238">"Мэдээлэл"</string>
-    <string name="inspector_load_error" msgid="7522190243413249291">"Файлын мэдээллийг ачааллаж чадсангүй"</string>
+    <string name="inspector_load_error" msgid="7522190243413249291">"Файлын мэдээллийг ачаалж чадсангүй"</string>
     <string name="inspector_debug_section" msgid="2576052661505700421">"Дебаг хийх мэдээлэл (зөвхөн хөгжүүлэгчид)"</string>
     <string name="inspector_debug_metadata_section" msgid="5875140675600744846">"RAW мета өгөгдөл: <xliff:g id="METADATATYPE">%1$s</xliff:g>"</string>
     <string name="inspector_metadata_section" msgid="6077622515328240575">"Медианы дэлгэрэнгүй"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index a83f389..dd22215 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -89,7 +89,7 @@
     <string name="drawer_close" msgid="4263880768630848848">"रूट लपवा"</string>
     <string name="save_error" msgid="8631128801982095782">"दस्तऐवज सेव्ह करणे अयशस्वी झाले"</string>
     <string name="create_error" msgid="3092144450044861994">"फोल्डर तयार करण्यात अयशस्वी झाले"</string>
-    <string name="query_error" msgid="6625421453613879336">"याक्षणी सामग्री लोड करू शकत नाही"</string>
+    <string name="query_error" msgid="6625421453613879336">"याक्षणी आशय लोड करू शकत नाही"</string>
     <string name="quiet_mode_error_title" msgid="9126656325282792843">"कार्य प्रोफाइल थांबवली आहे"</string>
     <string name="quiet_mode_button" msgid="6977115032320235420">"सुरू करा"</string>
     <string name="cant_select_work_files_error_title" msgid="6688716319549644354">"कामासंबंधित फाइल निवडता आल्या नाहीत"</string>
@@ -110,7 +110,7 @@
     <string name="root_type_apps" msgid="8646073235029886342">"अधिक अ‍ॅप्‍स"</string>
     <string name="empty" msgid="5300254272613103004">"कोणतेही आयटम नाहीत"</string>
     <string name="no_results" msgid="2371026325236359209">"%1$s मध्‍ये कोणत्याही जुळण्‍या नाहीत"</string>
-    <string name="toast_no_application" msgid="7555319548595113121">"फाईल उघडू शकत नाही"</string>
+    <string name="toast_no_application" msgid="7555319548595113121">"फाइल उघडू शकत नाही"</string>
     <string name="toast_view_in_archives_unsupported" msgid="1923221390170964845">"संग्रहणांमध्‍ये फाइल उघडू शकत नाही"</string>
     <string name="toast_failed_delete" msgid="3453846588205817591">"काही दस्‍तऐवज हटविण्‍यात अक्षम"</string>
     <string name="toast_share_over_limit" msgid="5805442886537093015">"<xliff:g id="COUNT">%1$d</xliff:g> हून अधिक फाइल शेअर करू शकत नाही"</string>
@@ -217,11 +217,11 @@
     <string name="delete_foldername_confirmation_message" msgid="9084085260877704140">"\"<xliff:g id="NAME">%1$s</xliff:g>\" फोल्डर आणि त्यामधील आशय हटवायचा?"</string>
     <plurals name="delete_files_confirmation_message" formatted="false" msgid="4866664063250034142">
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फाइल हटवायच्या?</item>
-      <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फाईल हटवायची?</item>
+      <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फाइल हटवायची?</item>
     </plurals>
     <plurals name="delete_folders_confirmation_message" formatted="false" msgid="1028946402799686388">
-      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फोल्डर आणि त्यामधील सामग्री हटवायची?</item>
-      <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फोल्डर आणि त्यामधील सामग्री हटवायची?</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फोल्डर आणि त्यामधील आशय हटवायची?</item>
+      <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फोल्डर आणि त्यामधील आशय हटवायची?</item>
     </plurals>
     <plurals name="delete_items_confirmation_message" formatted="false" msgid="7285090426511028179">
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> आयटम हटवायचे?</item>
@@ -231,7 +231,7 @@
     <string name="archive_loading_failed" msgid="7243436722828766996">"ब्राउझिंगसाठी संग्रहण उघडण्यात अक्षम. फाइल एकतर दूषित झाली आहे किंवा असमर्थित स्वरूपात आहे."</string>
     <string name="name_conflict" msgid="28407269328862986">"या नावाची फाइल आधीपासून अस्तित्वात आहे."</string>
     <string name="authentication_required" msgid="8030880723643436099">"डिरेक्टरी पाहण्यासाठी <xliff:g id="NAME">%1$s</xliff:g> मध्ये साइन इन करा"</string>
-    <string name="cant_display_content" msgid="8633226333229417237">"सामग्री प्रदर्शित करू शकत नाही"</string>
+    <string name="cant_display_content" msgid="8633226333229417237">"आशय प्रदर्शित करू शकत नाही"</string>
     <string name="sign_in" msgid="6253762676723505592">"साइन इन करा"</string>
     <string name="new_archive_file_name" msgid="1604650338077249838">"संग्रहण<xliff:g id="EXTENSION">%s</xliff:g>"</string>
     <string name="overwrite_file_confirmation_message" msgid="2496109652768222716">"<xliff:g id="NAME">%1$s</xliff:g> अधिलिखित करायचे?"</string>
diff --git a/res/values-ne/inspector_strings.xml b/res/values-ne/inspector_strings.xml
index e9780af..c9acb58 100644
--- a/res/values-ne/inspector_strings.xml
+++ b/res/values-ne/inspector_strings.xml
@@ -27,7 +27,7 @@
     <string name="handler_app_unknown" msgid="5911661530593229287">"अज्ञात"</string>
     <string name="metadata_dimensions" msgid="6112907724016659801">"उचाइ तथा चौडाइ"</string>
     <string name="metadata_dimensions_format" msgid="6138765871412005962">"<xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g> - <xliff:g id="MEGAPIXELS">%3$,.1f</xliff:g> एम. पि."</string>
-    <string name="metadata_coordinates" msgid="6897383227370702734">"तस्बिर खिचेको स्थानका भौगोलिक स्थितिहरू"</string>
+    <string name="metadata_coordinates" msgid="6897383227370702734">"फोटो खिचेको स्थानका भौगोलिक स्थितिहरू"</string>
     <string name="metadata_coordinates_format" msgid="1402724596764547761">"<xliff:g id="LATITUDE">%1$,.3f</xliff:g>, <xliff:g id="LONGITUDE">%2$,.3f</xliff:g>"</string>
     <string name="metadata_altitude" msgid="8063792127436794294">"उचाइ"</string>
     <string name="metadata_camera" msgid="2363009732801281319">"क्यामेरा"</string>
@@ -35,7 +35,7 @@
     <string name="metadata_aperture" msgid="6538741952698935357">"अपार्चर"</string>
     <string name="metadata_shutter_speed" msgid="8204739885103326131">"सटरको गति"</string>
     <string name="metadata_duration" msgid="3115494422055472715">"अवधि"</string>
-    <string name="metadata_date_time" msgid="1090351199248114406">"तस्बिर खिचेको समय"</string>
+    <string name="metadata_date_time" msgid="1090351199248114406">"फोटो खिचेको समय"</string>
     <string name="metadata_focal_length" msgid="3440735161407699893">"फोकल लम्बाइ"</string>
     <string name="metadata_focal_format" msgid="8542211707962355623">"<xliff:g id="LENGTH">%1$.2f </xliff:g> मि. मि."</string>
     <string name="metadata_iso_speed_ratings" msgid="1699781252899759058">"ISO बराबर"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 5c4d722..9922e75 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -233,7 +233,7 @@
     <string name="authentication_required" msgid="8030880723643436099">"ଏହି ଡିରେକ୍ଟୋରୀ ଦେଖିବାକୁ, <xliff:g id="NAME">%1$s</xliff:g>ରେ ସାଇନ୍‍ କରନ୍ତୁ"</string>
     <string name="cant_display_content" msgid="8633226333229417237">"ଜଣ୍ଟେଣ୍ଟ ଦେଖାଇ ପାରିବ ନାହିଁ"</string>
     <string name="sign_in" msgid="6253762676723505592">"ସାଇନ୍‌-ଇନ୍ କରନ୍ତୁ"</string>
-    <string name="new_archive_file_name" msgid="1604650338077249838">"ସଂଗ୍ରହ<xliff:g id="EXTENSION">%s</xliff:g>"</string>
+    <string name="new_archive_file_name" msgid="1604650338077249838">"ଆର୍କାଇଭ<xliff:g id="EXTENSION">%s</xliff:g>"</string>
     <string name="overwrite_file_confirmation_message" msgid="2496109652768222716">"<xliff:g id="NAME">%1$s</xliff:g>ଙ୍କୁ ବଦଳାଇବେ?"</string>
     <string name="continue_in_background" msgid="1974214559047793331">"ବ୍ୟାକଗ୍ରାଉଣ୍ଡରେ ଜାରିରଖନ୍ତୁ"</string>
     <plurals name="selected_count" formatted="false" msgid="7555250236512981129">
diff --git a/res/values-ur/inspector_strings.xml b/res/values-ur/inspector_strings.xml
index 3a6904b..8173ada 100644
--- a/res/values-ur/inspector_strings.xml
+++ b/res/values-ur/inspector_strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="inspector_title" msgid="1924760928091740238">"معلومات"</string>
     <string name="inspector_load_error" msgid="7522190243413249291">"فائل کى معلومات لوڈ نہیں کی جا سکی"</string>
-    <string name="inspector_debug_section" msgid="2576052661505700421">"ڈیبگ کی معلومات (ڈیولپر فقط)"</string>
+    <string name="inspector_debug_section" msgid="2576052661505700421">"ڈیبگ کی معلومات (ڈویلپر فقط)"</string>
     <string name="inspector_debug_metadata_section" msgid="5875140675600744846">"خام میٹا ڈیٹا: <xliff:g id="METADATATYPE">%1$s</xliff:g>"</string>
     <string name="inspector_metadata_section" msgid="6077622515328240575">"میڈیا کی تفصیلات"</string>
     <string name="handler_app_file_opens_with" msgid="5272329600389613550">"اس قسم کی فائل اس کے ساتھ کُھلتی ہے"</string>
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java
index 0c612ed..d2f7e41 100644
--- a/src/com/android/documentsui/AbstractActionHandler.java
+++ b/src/com/android/documentsui/AbstractActionHandler.java
@@ -745,7 +745,7 @@
         public void onRootLoaded(@Nullable RootInfo root) {
             if (root == null) {
                 // There is no such root in the other profile. Maybe the provider is missing on
-                // the other profile. Create a dummy root and open it to show error message.
+                // the other profile. Create a placeholder root and open it to show error message.
                 root = RootInfo.copyRootInfo(mOriginalRoot);
                 root.userId = mSelectedUserId;
             }
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index 8c0d969..5efb9a9 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -934,7 +934,7 @@
                 getMainLooper().getQueue().addIdleHandler(new IdleHandler() {
                     @Override
                     public boolean queueIdle() {
-                        // If startup benchmark is requested by a whitelisted testing package, then
+                        // If startup benchmark is requested by an allowedlist testing package, then
                         // close the activity once idle, and notify the testing activity.
                         if (getIntent().getBooleanExtra(EXTRA_BENCHMARK, false) &&
                                 BENCHMARK_TESTING_PACKAGE.equals(getCallingPackage())) {
diff --git a/src/com/android/documentsui/DocsSelectionHelper.java b/src/com/android/documentsui/DocsSelectionHelper.java
index b7a720c..956527a 100644
--- a/src/com/android/documentsui/DocsSelectionHelper.java
+++ b/src/com/android/documentsui/DocsSelectionHelper.java
@@ -37,10 +37,10 @@
 
     private final DelegateFactory mFactory;
 
-    // initialize to a dummy object incase we get some input
+    // initialize to a stub object incase we get some input
     // event drive calls before we're properly initialized.
     // See: b/69306667.
-    private SelectionTracker<String> mDelegate = new DummySelectionTracker<>();
+    private SelectionTracker<String> mDelegate = new StubSelectionTracker<>();
 
     @VisibleForTesting
     DocsSelectionHelper(DelegateFactory factory) {
diff --git a/src/com/android/documentsui/DrawerController.java b/src/com/android/documentsui/DrawerController.java
index cb53616..56b3a87 100644
--- a/src/com/android/documentsui/DrawerController.java
+++ b/src/com/android/documentsui/DrawerController.java
@@ -55,7 +55,7 @@
         DrawerLayout layout = (DrawerLayout) activity.findViewById(R.id.drawer_layout);
 
         if (layout == null) {
-            return new DummyDrawerController();
+            return new StubDrawerController();
         }
 
         View drawer = activity.findViewById(R.id.drawer_roots);
@@ -76,8 +76,8 @@
     /**
      * Returns a controller suitable for {@code Layout}.
      */
-    static DrawerController createDummy() {
-        return new DummyDrawerController();
+    static DrawerController createStub() {
+        return new StubDrawerController();
     }
 
     private static int calculateDrawerWidth(Activity activity) {
@@ -235,9 +235,9 @@
     }
 
     /*
-     * Dummy controller useful with clients that don't host a real drawer.
+     * Stub controller useful with clients that don't host a real drawer.
      */
-    private static final class DummyDrawerController extends DrawerController {
+    private static final class StubDrawerController extends DrawerController {
 
         @Override
         public void setOpen(boolean open) {}
diff --git a/src/com/android/documentsui/DummyProfileTabsAddons.java b/src/com/android/documentsui/StubProfileTabsAddons.java
similarity index 86%
rename from src/com/android/documentsui/DummyProfileTabsAddons.java
rename to src/com/android/documentsui/StubProfileTabsAddons.java
index 697025e..cac1759 100644
--- a/src/com/android/documentsui/DummyProfileTabsAddons.java
+++ b/src/com/android/documentsui/StubProfileTabsAddons.java
@@ -17,9 +17,9 @@
 package com.android.documentsui;
 
 /**
- * A dummy {@ProfileTabsAddons} implementation.
+ * A stub {@ProfileTabsAddons} implementation.
  */
-public class DummyProfileTabsAddons implements ProfileTabsAddons {
+public class StubProfileTabsAddons implements ProfileTabsAddons {
 
     @Override
     public void setEnabled(boolean enabled) {
diff --git a/src/com/android/documentsui/DummySelectionTracker.java b/src/com/android/documentsui/StubSelectionTracker.java
similarity index 91%
rename from src/com/android/documentsui/DummySelectionTracker.java
rename to src/com/android/documentsui/StubSelectionTracker.java
index 49b9ad9..1a39214 100644
--- a/src/com/android/documentsui/DummySelectionTracker.java
+++ b/src/com/android/documentsui/StubSelectionTracker.java
@@ -26,10 +26,11 @@
 import java.util.Set;
 
 /**
- * A dummy SelectionTracker used by DocsSelectionHelper before a real SelectionTracker has been
+ * A stub SelectionTracker used by DocsSelectionHelper before a real SelectionTracker has been
  * initialized by DirectoryFragment.
+ * @param <K> Selection key type which extends {@link SelectionTracker}.
  */
-public class DummySelectionTracker<K> extends SelectionTracker<K> {
+public class StubSelectionTracker<K> extends SelectionTracker<K> {
 
     @Override
     public void addObserver(SelectionObserver observer) {
diff --git a/src/com/android/documentsui/base/DummyLookup.java b/src/com/android/documentsui/base/StubLookup.java
similarity index 79%
rename from src/com/android/documentsui/base/DummyLookup.java
rename to src/com/android/documentsui/base/StubLookup.java
index 11a6375..2a2dc9b 100644
--- a/src/com/android/documentsui/base/DummyLookup.java
+++ b/src/com/android/documentsui/base/StubLookup.java
@@ -17,8 +17,10 @@
 
 /**
  * Lookup that always returns null.
+ * @param <K> input type (the "key") which implements {@link Lookup}.
+ * @param <V> output type (the "value") which implements {@link Lookup}.
  */
-public final class DummyLookup<K, V> implements Lookup<K, V> {
+public final class StubLookup<K, V> implements Lookup<K, V> {
     @Override
     public V lookup(K key) {
         return null;
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index a079ab1..ec396ff 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -368,7 +368,7 @@
         mRecView.setItemAnimator(new DirectoryItemAnimator());
 
         mInjector = mActivity.getInjector();
-        // Initially, this selection tracker (delegator) uses a dummy implementation, so it must be
+        // Initially, this selection tracker (delegator) uses a stub implementation, so it must be
         // updated (reset) when necessary things are ready.
         mSelectionMgr = mInjector.selectionMgr;
         mModel = mInjector.getModel();
@@ -493,7 +493,7 @@
                         this::getModelId,
                         mRecView::findChildViewUnder,
                         DocumentsApplication.getDragAndDropManager(mActivity))
-                : DragStartListener.DUMMY;
+                : DragStartListener.STUB;
 
         {
             // Limiting the scope of the localTracker so nobody uses it.
diff --git a/src/com/android/documentsui/dirlist/DocumentsAdapter.java b/src/com/android/documentsui/dirlist/DocumentsAdapter.java
index 7d09d68..41ce73c 100644
--- a/src/com/android/documentsui/dirlist/DocumentsAdapter.java
+++ b/src/com/android/documentsui/dirlist/DocumentsAdapter.java
@@ -36,8 +36,8 @@
 /**
  * DocumentsAdapter provides glue between a directory Model, and RecyclerView. We've
  * abstracted this a bit in order to decompose some specialized support
- * for adding dummy layout objects (@see SectionBreakDocumentsAdapter). Handling of the
- * dummy layout objects was error prone when interspersed with the core mode / adapter code.
+ * for adding stub layout objects (@see SectionBreakDocumentsAdapter). Handling of the
+ * stub layout objects was error prone when interspersed with the core mode / adapter code.
  *
  * @see ModelBackedDocumentsAdapter
  * @see DirectoryAddonsAdapter
diff --git a/src/com/android/documentsui/dirlist/DragStartListener.java b/src/com/android/documentsui/dirlist/DragStartListener.java
index 8fe0872..0adddcc 100644
--- a/src/com/android/documentsui/dirlist/DragStartListener.java
+++ b/src/com/android/documentsui/dirlist/DragStartListener.java
@@ -48,7 +48,7 @@
  */
 interface DragStartListener {
 
-    static final DragStartListener DUMMY = new DragStartListener() {
+    DragStartListener STUB = new DragStartListener() {
         @Override
         public boolean onDragEvent(MotionEvent event) {
             return false;
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index a256726..7c09811 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -37,7 +37,6 @@
 import com.android.documentsui.BaseActivity;
 import com.android.documentsui.DocsSelectionHelper;
 import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.DummyProfileTabsAddons;
 import com.android.documentsui.FocusManager;
 import com.android.documentsui.Injector;
 import com.android.documentsui.MenuManager.DirectoryDetails;
@@ -49,6 +48,7 @@
 import com.android.documentsui.R;
 import com.android.documentsui.SharedInputHandler;
 import com.android.documentsui.ShortcutsUpdater;
+import com.android.documentsui.StubProfileTabsAddons;
 import com.android.documentsui.base.DocumentInfo;
 import com.android.documentsui.base.Features;
 import com.android.documentsui.base.RootInfo;
@@ -76,7 +76,7 @@
     private Injector<ActionHandler<FilesActivity>> mInjector;
     private ActivityInputHandler mActivityInputHandler;
     private SharedInputHandler mSharedInputHandler;
-    private final ProfileTabsAddons mProfileTabsAddonsStub = new DummyProfileTabsAddons();
+    private final ProfileTabsAddons mProfileTabsAddonsStub = new StubProfileTabsAddons();
 
     public FilesActivity() {
         super(R.layout.files_activity, TAG);
@@ -151,7 +151,7 @@
 
         mInjector.searchManager = mSearchManager;
 
-        // No profile tabs will be shown on FilesActivity. Use a dummy to avoid unnecessary
+        // No profile tabs will be shown on FilesActivity. Use a stub to avoid unnecessary
         // operations.
         mInjector.profileTabsController = new ProfileTabsController(
                 mInjector.selectionMgr,
diff --git a/src/com/android/documentsui/inspector/DebugView.java b/src/com/android/documentsui/inspector/DebugView.java
index ffd4b7e..908d192 100644
--- a/src/com/android/documentsui/inspector/DebugView.java
+++ b/src/com/android/documentsui/inspector/DebugView.java
@@ -27,8 +27,8 @@
 
 import com.android.documentsui.R;
 import com.android.documentsui.base.DocumentInfo;
-import com.android.documentsui.base.DummyLookup;
 import com.android.documentsui.base.Lookup;
+import com.android.documentsui.base.StubLookup;
 import com.android.documentsui.inspector.InspectorController.DebugDisplay;
 
 import java.text.NumberFormat;
@@ -47,7 +47,7 @@
 
     private final Context mContext;
     private final Resources mRes;
-    private Lookup<String, Executor> mExecutors = new DummyLookup<>();
+    private Lookup<String, Executor> mExecutors = new StubLookup<>();
 
     public DebugView(Context context) {
         this(context, null);
diff --git a/src/com/android/documentsui/sidebar/RootItem.java b/src/com/android/documentsui/sidebar/RootItem.java
index 9af396e..a0a3210 100644
--- a/src/com/android/documentsui/sidebar/RootItem.java
+++ b/src/com/android/documentsui/sidebar/RootItem.java
@@ -210,13 +210,13 @@
     }
 
     /**
-     * Creates a dummy root item for a user. A dummy root item is used as a place holder when
+     * Creates a stub root item for a user. A stub root item is used as a place holder when
      * there is no such root available. We can therefore show the item on the UI.
      */
-    public static RootItem createDummyItem(RootItem item, UserId targetUser) {
-        RootInfo dummyRootInfo = RootInfo.copyRootInfo(item.root);
-        dummyRootInfo.userId = targetUser;
-        RootItem dummy = new RootItem(dummyRootInfo, item.mActionHandler, item.mMaybeShowBadge);
-        return dummy;
+    public static RootItem createStubItem(RootItem item, UserId targetUser) {
+        RootInfo stubRootInfo = RootInfo.copyRootInfo(item.root);
+        stubRootInfo.userId = targetUser;
+        RootItem stub = new RootItem(stubRootInfo, item.mActionHandler, item.mMaybeShowBadge);
+        return stub;
     }
 }
diff --git a/src/com/android/documentsui/sidebar/RootItemListBuilder.java b/src/com/android/documentsui/sidebar/RootItemListBuilder.java
index 4bdce15..b29bd0d 100644
--- a/src/com/android/documentsui/sidebar/RootItemListBuilder.java
+++ b/src/com/android/documentsui/sidebar/RootItemListBuilder.java
@@ -37,7 +37,7 @@
  * selected user.
  *
  * <p>If no root of the selected user was added but that of the other user was added,
- * a dummy root of that root for the selected user will be generated.
+ * a stub root of that root for the selected user will be generated.
  *
  * <p>The builder group the roots using {@link Item#stringId} as key.
  *
@@ -45,9 +45,9 @@
  * itemC[10], itemX[0],itemY[10] where root itemX, itemY do not support cross profile.
  *
  * <p>When the selected user is user 0, {@link #getList()} returns itemA[0], itemB[0],
- * dummyC[0], itemX[0], itemY[10].
+ * stubC[0], itemX[0], itemY[10].
  *
- * <p>When the selected user is user 10, {@link #getList()} returns itemA[10], dummyB[10],
+ * <p>When the selected user is user 10, {@link #getList()} returns itemA[10], stubB[10],
  * itemC[10], itemX[0], itemY[10].
  */
 class RootItemListBuilder {
@@ -87,7 +87,7 @@
             return items;
         }
 
-        // If the root supports cross-profile, we return the added root or create a dummy root if
+        // If the root supports cross-profile, we return the added root or create a stub root if
         // it was not added for the selected user.
         for (RootItem item : items) {
             if (item.userId.equals(mSelectedUser)) {
@@ -96,6 +96,6 @@
             }
         }
 
-        return Collections.singletonList(RootItem.createDummyItem(testRootItem, mSelectedUser));
+        return Collections.singletonList(RootItem.createStubItem(testRootItem, mSelectedUser));
     }
 }
diff --git a/src/com/android/documentsui/sidebar/SpacerItem.java b/src/com/android/documentsui/sidebar/SpacerItem.java
index d0f49c9..44dd75c 100644
--- a/src/com/android/documentsui/sidebar/SpacerItem.java
+++ b/src/com/android/documentsui/sidebar/SpacerItem.java
@@ -25,7 +25,7 @@
 import com.android.documentsui.base.UserId;
 
 /**
- * Dummy {@link Item} for dividers between different types of {@link Item}s.
+ * Stub {@link Item} for dividers between different types of {@link Item}s.
  */
 class SpacerItem extends Item {
     private static final String TAG = "SpacerItem";
diff --git a/src/com/android/documentsui/util/VersionUtils.java b/src/com/android/documentsui/util/VersionUtils.java
index 58ae3cd..eecd631 100644
--- a/src/com/android/documentsui/util/VersionUtils.java
+++ b/src/com/android/documentsui/util/VersionUtils.java
@@ -31,6 +31,6 @@
      */
     public static boolean isAtLeastR() {
         return Build.VERSION.CODENAME.equals("R")
-                || (Build.VERSION.CODENAME.equals("REL") && Build.VERSION.SDK_INT >= 30);
+                || Build.VERSION.SDK_INT >= 30;
     }
 }
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index cb43811..d5e9a60 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -9,7 +9,8 @@
     <application android:label="DocumentsUI Tests">
         <uses-library android:name="android.test.runner" />
 
-        <activity android:name="com.android.documentsui.SettingsActivity">
+        <activity android:name="com.android.documentsui.SettingsActivity"
+            android:exported="true">
             <intent-filter>
                 <action android:name="android.provider.action.DOCUMENT_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -20,7 +21,8 @@
         </activity>
 
         <!--Needed for demo'ing and functional testing the open in provider feature in inspector -->
-        <activity android:name="com.android.documentsui.TestProviderActivity">
+        <activity android:name="com.android.documentsui.TestProviderActivity"
+          android:exported="true">
           <intent-filter>
             <action android:name="android.provider.action.DOCUMENT_SETTINGS" />
             <category android:name="android.intent.category.DEFAULT" />
@@ -30,7 +32,8 @@
           </intent-filter>
         </activity>
 
-        <activity android:name="com.android.documentsui.AuthenticationActivity">
+        <activity android:name="com.android.documentsui.AuthenticationActivity"
+            android:exported="true">
             <intent-filter>
                 <action android:name="com.android.documentsui.test.action.AUTHENTICATE" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -130,6 +133,7 @@
 
         <service android:name="com.android.documentsui.services.TestNotificationService"
                  android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
+                 android:exported="true"
                  android:process="com.android.documentsui">
             <intent-filter>
                 <action android:name="android.service.notification.NotificationListenerService" />
diff --git a/tests/common/com/android/documentsui/InspectorProvider.java b/tests/common/com/android/documentsui/InspectorProvider.java
index 1d678d1..7227993 100644
--- a/tests/common/com/android/documentsui/InspectorProvider.java
+++ b/tests/common/com/android/documentsui/InspectorProvider.java
@@ -34,10 +34,10 @@
  *
  *  Structure of the provider.
  *
- *         Top ------------> Middle  ------> Bottom -------> Dummy21 50B
- *         openInProvider    Dummy1 50B      Dummy11 50B     Dummy22 150B
- *         test.txt          Dummy2 150B     Dummy12 150B    Dummy23 100B
- *         update.txt        Dummy3 100B     Dummy13 100B
+ *         Top ------------> Middle  ------> Bottom -------> Stub21 50B
+ *         openInProvider    Stub1 50B       Stub11 50B      Stub22 150B
+ *         test.txt          Stub2 150B      Stub12 150B     Stub23 100B
+ *         update.txt        Stub3 100B      Stub13 100B
  *         test.jpg
  *         invalid.jpg
  */
@@ -97,24 +97,24 @@
         if("Top".equals(s)) {
             MatrixCursor c = createDocCursor(projection);
             addFolder(c, "Middle");
-            addFileWithSize(c, "dummy1", 50);
-            addFileWithSize(c, "dummy2", 150);
-            addFileWithSize(c, "dummy3", 100);
+            addFileWithSize(c, "stub1", 50);
+            addFileWithSize(c, "stub2", 150);
+            addFileWithSize(c, "stub3", 100);
             return c;
         }
         else if("Middle".equals(s)) {
             MatrixCursor c = createDocCursor(projection);
             addFolder(c, "Bottom");
-            addFileWithSize(c, "dummy11", 50);
-            addFileWithSize(c, "dummy12", 150);
-            addFileWithSize(c, "dummy13", 100);
+            addFileWithSize(c, "stub11", 50);
+            addFileWithSize(c, "stub12", 150);
+            addFileWithSize(c, "stub13", 100);
             return c;
         }
         else if("Bottom".equals(s)) {
             MatrixCursor c = createDocCursor(projection);
-            addFileWithSize(c, "dummy21", 50);
-            addFileWithSize(c, "dummy22", 150);
-            addFileWithSize(c, "dummy23", 100);
+            addFileWithSize(c, "stub21", 50);
+            addFileWithSize(c, "stub22", 150);
+            addFileWithSize(c, "stub23", 100);
             return c;
         }
         else {
diff --git a/tests/common/com/android/documentsui/bots/SearchBot.java b/tests/common/com/android/documentsui/bots/SearchBot.java
index 13494f0..d14fd13 100644
--- a/tests/common/com/android/documentsui/bots/SearchBot.java
+++ b/tests/common/com/android/documentsui/bots/SearchBot.java
@@ -49,7 +49,7 @@
  */
 public class SearchBot extends Bots.BaseBot {
 
-    // Dumb search layout changes substantially between Ryu and Angler.
+    // Base search layout changes substantially between Ryu and Angler.
     @SuppressWarnings("unchecked")
     private static final Matcher<View> SEARCH_WIDGET = allOf(
             withId(R.id.option_menu_search),
diff --git a/tests/common/com/android/documentsui/dirlist/TestFocusHandler.java b/tests/common/com/android/documentsui/dirlist/TestFocusHandler.java
index 5656655..969ddcf 100644
--- a/tests/common/com/android/documentsui/dirlist/TestFocusHandler.java
+++ b/tests/common/com/android/documentsui/dirlist/TestFocusHandler.java
@@ -22,7 +22,7 @@
 import android.view.View;
 
 /**
- * A purely dummy instance of FocusHandler.
+ * A purely placeholder instance of FocusHandler.
  */
 public final class TestFocusHandler implements FocusHandler {
 
diff --git a/tests/common/com/android/documentsui/testing/TestEnv.java b/tests/common/com/android/documentsui/testing/TestEnv.java
index e5c7eb8..3249c8c 100644
--- a/tests/common/com/android/documentsui/testing/TestEnv.java
+++ b/tests/common/com/android/documentsui/testing/TestEnv.java
@@ -192,7 +192,7 @@
         DocumentInfo rootDoc = model.getDocument(
                 ModelId.build(model.mUserId, TestProvidersAccess.HOME.authority, "1"));
 
-        // These are test setup sanity checks, not test assertions.
+        // These are test setup quick checks, not test assertions.
         assert rootDoc != null;
         assert rootDoc.isDirectory();
         assert FOLDER_0.equals(rootDoc);
diff --git a/tests/common/com/android/documentsui/testing/Views.java b/tests/common/com/android/documentsui/testing/Views.java
index 30f79a6..6f5b1a2 100644
--- a/tests/common/com/android/documentsui/testing/Views.java
+++ b/tests/common/com/android/documentsui/testing/Views.java
@@ -34,7 +34,7 @@
     }
 
     /*
-     * Dummy View object with (x, y) coordinates
+     * Mock View object with (x, y) coordinates
      */
     public static View createTestView(float x, float y) {
         View view = createTestView();
diff --git a/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java b/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java
index 0697056..953e350 100644
--- a/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java
+++ b/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java
@@ -47,7 +47,7 @@
 public class CancelFromNotificationUiTest extends ActivityTest<FilesActivity> {
     private static final String TAG = "CancelFromNotificationUiTest";
 
-    private static final String TARGET_FILE = "dummy.data";
+    private static final String TARGET_FILE = "stub.data";
 
     private static final int BUFFER_SIZE = 10 * 1024 * 1024;
 
@@ -127,20 +127,20 @@
     @Override
     public void initTestFiles() throws RemoteException {
         try {
-            createDummyFile();
+            createStubFile();
         } catch (Exception e) {
             fail("Initialization failed. " + e.toString());
         }
     }
 
-    private void createDummyFile() throws Exception {
+    private void createStubFile() throws Exception {
         Uri uri = mDocsHelper.createDocument(rootDir0, "*/*", TARGET_FILE);
-        byte[] dummyByte = new byte[BUFFER_SIZE];
-        mDocsHelper.writeDocument(uri, dummyByte);
+        byte[] stubByte = new byte[BUFFER_SIZE];
+        mDocsHelper.writeDocument(uri, stubByte);
         for (int i = 0; i < 49; i++) {
-            dummyByte = null;
-            dummyByte = new byte[BUFFER_SIZE];
-            mDocsHelper.writeAppendDocument(uri, dummyByte, dummyByte.length);
+            stubByte = null;
+            stubByte = new byte[BUFFER_SIZE];
+            mDocsHelper.writeAppendDocument(uri, stubByte, stubByte.length);
         }
     }
 
diff --git a/tests/functional/com/android/documentsui/FileDeleteUiTest.java b/tests/functional/com/android/documentsui/FileDeleteUiTest.java
index d68dbd6..5a13962 100644
--- a/tests/functional/com/android/documentsui/FileDeleteUiTest.java
+++ b/tests/functional/com/android/documentsui/FileDeleteUiTest.java
@@ -49,7 +49,7 @@
 public class FileDeleteUiTest extends ActivityTest<FilesActivity> {
     private static final String TAG = "FileDeleteUiTest";
 
-    private static final int DUMMY_FILE_COUNT = 1000;
+    private static final int STUB_FILE_COUNT = 1000;
 
     private static final int WAIT_TIME_SECONDS = 60;
 
@@ -126,17 +126,17 @@
     @Override
     public void initTestFiles() throws RemoteException {
         try {
-            createDummyFiles();
+            createStubFiles();
         } catch (Exception e) {
             fail("Initialization failed");
         }
     }
 
-    private void createDummyFiles() throws Exception {
+    private void createStubFiles() throws Exception {
         final ThreadPoolExecutor exec = new ThreadPoolExecutor(
                 5, 5, 1000L, TimeUnit.MILLISECONDS,
                         new ArrayBlockingQueue<Runnable>(100, true));
-        for (int i = 0; i < DUMMY_FILE_COUNT; i++) {
+        for (int i = 0; i < STUB_FILE_COUNT; i++) {
             final String fileName = "file" + String.format("%04d", i) + ".log";
             if (exec.getQueue().size() >= 80) {
                 Thread.sleep(50);
diff --git a/tests/functional/com/android/documentsui/archives/ArchiveHandleTest.java b/tests/functional/com/android/documentsui/archives/ArchiveHandleTest.java
index 50bc916..1e0e95e 100644
--- a/tests/functional/com/android/documentsui/archives/ArchiveHandleTest.java
+++ b/tests/functional/com/android/documentsui/archives/ArchiveHandleTest.java
@@ -555,7 +555,7 @@
                         "application/zip");
 
         assertThat(transformToIterable(archiveHandle.getEntries()))
-                .containsAllIn(sExpectEntries);
+                .containsAtLeastElementsIn(sExpectEntries);
     }
 
     @Test
@@ -565,7 +565,7 @@
                 "application/x-gtar");
 
         assertThat(transformToIterable(archiveHandle.getEntries()))
-                .containsAllIn(sExpectEntries);
+                .containsAtLeastElementsIn(sExpectEntries);
     }
 
     @Test
@@ -575,7 +575,7 @@
                         "application/x-compressed-tar");
 
         assertThat(transformToIterable(archiveHandle.getEntries()))
-                .containsAllIn(sExpectEntries);
+                .containsAtLeastElementsIn(sExpectEntries);
     }
 
     @Test
@@ -585,7 +585,7 @@
                         "application/x-bzip-compressed-tar");
 
         assertThat(transformToIterable(archiveHandle.getEntries()))
-                .containsAllIn(sExpectEntries);
+                .containsAtLeastElementsIn(sExpectEntries);
     }
 
     @Test
@@ -595,7 +595,7 @@
                         "application/x-brotli-compressed-tar");
 
         assertThat(transformToIterable(archiveHandle.getEntries()))
-                .containsAllIn(sExpectEntries);
+                .containsAtLeastElementsIn(sExpectEntries);
     }
 
     @Test
@@ -605,6 +605,6 @@
                         "application/x-xz-compressed-tar");
 
         assertThat(transformToIterable(archiveHandle.getEntries()))
-                .containsAllIn(sExpectEntries);
+                .containsAtLeastElementsIn(sExpectEntries);
     }
 }
diff --git a/tests/functional/com/android/documentsui/dirlist/DirectoryAddonsAdapterTest.java b/tests/functional/com/android/documentsui/dirlist/DirectoryAddonsAdapterTest.java
index 303c8e5..bcd1131 100644
--- a/tests/functional/com/android/documentsui/dirlist/DirectoryAddonsAdapterTest.java
+++ b/tests/functional/com/android/documentsui/dirlist/DirectoryAddonsAdapterTest.java
@@ -186,7 +186,7 @@
         assertTrue(mAdapter.getItemViewType(index) == type);
     }
 
-    private static class DummyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+    private static class StubAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
 
         @Override
         public int getItemCount() {
diff --git a/tests/functional/com/android/documentsui/services/AbstractCopyJobTest.java b/tests/functional/com/android/documentsui/services/AbstractCopyJobTest.java
index eaafb37..7b2cb82 100644
--- a/tests/functional/com/android/documentsui/services/AbstractCopyJobTest.java
+++ b/tests/functional/com/android/documentsui/services/AbstractCopyJobTest.java
@@ -179,7 +179,7 @@
         // Init FileCountProgressTracker with 10 docs required to copy.
         TestCopyJobProcessTracker<CopyJob.FileCountProgressTracker> tracker =
                 new TestCopyJobProcessTracker(CopyJob.FileCountProgressTracker.class, 10,
-                        createJob(newArrayList(mDocs.createFolder(mSrcRoot, "dummyDir"))),
+                        createJob(newArrayList(mDocs.createFolder(mSrcRoot, "tempDir"))),
                         (completed) -> NumberFormat.getPercentInstance().format(completed),
                         (time) -> mContext.getString(R.string.copy_remaining,
                                 DateUtils.formatDuration((Long) time)));
@@ -213,7 +213,7 @@
         // Init ByteCountProgressTracker with 100 KBytes required to copy.
         TestCopyJobProcessTracker<CopyJob.ByteCountProgressTracker> tracker =
                 new TestCopyJobProcessTracker(CopyJob.ByteCountProgressTracker.class, 100000,
-                        createJob(newArrayList(mDocs.createFolder(mSrcRoot, "dummyDir"))),
+                        createJob(newArrayList(mDocs.createFolder(mSrcRoot, "tempDir"))),
                         (completed) -> NumberFormat.getPercentInstance().format(completed),
                         (time) -> mContext.getString(R.string.copy_remaining,
                                 DateUtils.formatDuration((Long) time)));
diff --git a/tests/unit/com/android/documentsui/DocsSelectionHelperTest.java b/tests/unit/com/android/documentsui/DocsSelectionHelperTest.java
index e377f0a..3d25007 100644
--- a/tests/unit/com/android/documentsui/DocsSelectionHelperTest.java
+++ b/tests/unit/com/android/documentsui/DocsSelectionHelperTest.java
@@ -102,7 +102,7 @@
         mSelectionMgr.reset(mgr);
     }
 
-    private static final class TestSelectionManager extends DummySelectionTracker<String> {
+    private static final class TestSelectionManager extends StubSelectionTracker<String> {
 
         private boolean mCleared;
         private Map<String, Boolean> mSelected = new HashMap<>();
diff --git a/tests/unit/com/android/documentsui/ModelTest.java b/tests/unit/com/android/documentsui/ModelTest.java
index f9835b1..8257790 100644
--- a/tests/unit/com/android/documentsui/ModelTest.java
+++ b/tests/unit/com/android/documentsui/ModelTest.java
@@ -95,7 +95,7 @@
         DirectoryResult r = new DirectoryResult();
         r.setCursor(cursor);
 
-        // Instantiate the model with a dummy view adapter and listener that (for now) do nothing.
+        // Instantiate the model with a stub view adapter and listener that (for now) do nothing.
         model = new Model(features);
         // not sure why we add a listener here at all.
         model.addUpdateListener(new TestEventListener<>());
diff --git a/tests/unit/com/android/documentsui/UserIdManagerTest.java b/tests/unit/com/android/documentsui/UserIdManagerTest.java
index 88ac3ed..31fe7d1 100644
--- a/tests/unit/com/android/documentsui/UserIdManagerTest.java
+++ b/tests/unit/com/android/documentsui/UserIdManagerTest.java
@@ -157,7 +157,7 @@
         // Returns the both if there are system and managed users.
         UserId currentUser = UserId.of(systemUser);
         initializeUserIdManager(currentUser, Arrays.asList(systemUser, managedUser1));
-        assertThat(mUserIdManager.getUserIds()).isSameAs(mUserIdManager.getUserIds());
+        assertThat(mUserIdManager.getUserIds()).isSameInstanceAs(mUserIdManager.getUserIds());
     }
 
     @Test
diff --git a/tests/unit/com/android/documentsui/base/RootInfoTest.java b/tests/unit/com/android/documentsui/base/RootInfoTest.java
index 4639b45..bea4c23 100644
--- a/tests/unit/com/android/documentsui/base/RootInfoTest.java
+++ b/tests/unit/com/android/documentsui/base/RootInfoTest.java
@@ -67,6 +67,6 @@
 
         RootInfo copied = RootInfo.copyRootInfo(rootInfo);
         assertThat(copied).isEqualTo(rootInfo);
-        assertThat(copied).isNotSameAs(rootInfo);
+        assertThat(copied).isNotSameInstanceAs(rootInfo);
     }
 }
diff --git a/tests/unit/com/android/documentsui/base/UserIdTest.java b/tests/unit/com/android/documentsui/base/UserIdTest.java
index 2f9f7b2..b9f2d94 100644
--- a/tests/unit/com/android/documentsui/base/UserIdTest.java
+++ b/tests/unit/com/android/documentsui/base/UserIdTest.java
@@ -91,7 +91,7 @@
         when(mockContext.createPackageContextAsUser("android", 0, differentUserHandle)).thenReturn(
                 expectedContext);
 
-        assertThat(UserId.of(differentUserHandle).asContext(mockContext)).isSameAs(
+        assertThat(UserId.of(differentUserHandle).asContext(mockContext)).isSameInstanceAs(
                 expectedContext);
     }
 
diff --git a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
index d7bdbd1..fad4062 100644
--- a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
@@ -511,15 +511,15 @@
     @Test
     public void testDragAndDrop_OnReadOnlyRoot() throws Exception {
         RootInfo root = new RootInfo(); // root by default has no SUPPORT_CREATE flag
-        DragEvent event = DragEvent.obtain(DragEvent.ACTION_DROP, 1, 1, null, null, null,
-                null, true);
+        DragEvent event = DragEvent.obtain(DragEvent.ACTION_DROP, 1, 1, 0, 0, null, null, null,
+                null, null, true);
         assertFalse(mHandler.dropOn(event, root));
     }
 
     @Test
     public void testDragAndDrop_OnLibraryRoot() throws Exception {
-        DragEvent event = DragEvent.obtain(DragEvent.ACTION_DROP, 1, 1, null, null, null,
-                null, true);
+        DragEvent event = DragEvent.obtain(DragEvent.ACTION_DROP, 1, 1, 0, 0, null, null, null,
+                null, null, true);
         assertFalse(mHandler.dropOn(event, TestProvidersAccess.RECENTS));
     }
 
@@ -530,8 +530,8 @@
         // our Clipper is getting the original CipData passed in.
         Object localState = new Object();
         ClipData clipData = ClipDatas.createTestClipData();
-        DragEvent event = DragEvent.obtain(DragEvent.ACTION_DROP, 1, 1, localState, null, clipData,
-                null, true);
+        DragEvent event = DragEvent.obtain(DragEvent.ACTION_DROP, 1, 1, 0, 0, localState, null,
+                clipData, null, null, true);
 
         mHandler.dropOn(event, TestProvidersAccess.DOWNLOADS);
         event.recycle();
diff --git a/tests/unit/com/android/documentsui/roots/ProvidersAccessTest.java b/tests/unit/com/android/documentsui/roots/ProvidersAccessTest.java
index e97eab7..944bafa 100644
--- a/tests/unit/com/android/documentsui/roots/ProvidersAccessTest.java
+++ b/tests/unit/com/android/documentsui/roots/ProvidersAccessTest.java
@@ -41,19 +41,11 @@
 
     private static final UserId OTHER_USER = UserId.of(UserId.DEFAULT_USER.getIdentifier() + 1);
     private static final Correspondence<RootInfo, RootInfo> USER_ID_MIME_TYPES_CORRESPONDENCE =
-            new Correspondence<RootInfo, RootInfo>() {
-                @Override
-                public boolean compare(@Nullable RootInfo actual, @Nullable RootInfo expected) {
+            Correspondence.from((@Nullable RootInfo actual, @Nullable RootInfo expected) -> {
                     return actual != null && expected != null
                             && Objects.equals(actual.userId, expected.userId)
                             && Objects.equals(actual.derivedMimeTypes, expected.derivedMimeTypes);
-                }
-
-                @Override
-                public String toString() {
-                    return "has same userId and mimeTypes as in";
-                }
-            };
+            }, "has same userId and mimeTypes as in");
 
     private static RootInfo mNull = buildForMimeTypes((String[]) null);
     private static RootInfo mEmpty = buildForMimeTypes();
diff --git a/tests/unit/com/android/documentsui/sidebar/RootItemListBuilderTest.java b/tests/unit/com/android/documentsui/sidebar/RootItemListBuilderTest.java
index 2574ecc..aadb736 100644
--- a/tests/unit/com/android/documentsui/sidebar/RootItemListBuilderTest.java
+++ b/tests/unit/com/android/documentsui/sidebar/RootItemListBuilderTest.java
@@ -173,10 +173,10 @@
 
         List<RootItem> result = mBuilder.getList();
         assertThat(result).containsExactlyElementsIn(Lists.newArrayList(
-                RootItem.createDummyItem(
+                RootItem.createStubItem(
                         DOWNLOADS_DEFAULT_USER, TestProvidersAccess.OtherUser.USER_ID),
                 SDCARD_DEFAULT_USER,
-                RootItem.createDummyItem(HOME_DEFAULT_USER, TestProvidersAccess.OtherUser.USER_ID),
+                RootItem.createStubItem(HOME_DEFAULT_USER, TestProvidersAccess.OtherUser.USER_ID),
                 IMAGE_OTHER_USER,
                 PICKLES_DEFAULT_USER));
     }
diff --git a/tests/unit/com/android/documentsui/sidebar/UserItemsCombinerTest.java b/tests/unit/com/android/documentsui/sidebar/UserItemsCombinerTest.java
index f9549e0..6caf236 100644
--- a/tests/unit/com/android/documentsui/sidebar/UserItemsCombinerTest.java
+++ b/tests/unit/com/android/documentsui/sidebar/UserItemsCombinerTest.java
@@ -61,18 +61,10 @@
     );
 
     private static final Correspondence<Item, Item> ITEM_CORRESPONDENCE =
-            new Correspondence<Item, Item>() {
-                @Override
-                public boolean compare(Item actual, Item expected) {
+            Correspondence.from((Item actual, Item expected) -> {
                     return Objects.equals(actual.title, expected.title)
                             && Objects.equals(actual.userId, expected.userId);
-                }
-
-                @Override
-                public String toString() {
-                    return "has same title and userId as in";
-                }
-            };
+            }, "has same title and userId as in");
 
     private final State mState = new State();
     private final Resources mResources =
diff --git a/tests/unit/com/android/documentsui/sorting/SortModelTest.java b/tests/unit/com/android/documentsui/sorting/SortModelTest.java
index da89030..25c026e 100644
--- a/tests/unit/com/android/documentsui/sorting/SortModelTest.java
+++ b/tests/unit/com/android/documentsui/sorting/SortModelTest.java
@@ -70,14 +70,14 @@
                     DIMENSION_3
             };
 
-    private static final DummyListener DUMMY_LISTENER = new DummyListener();
+    private static final StubListener STUB_LISTENER = new StubListener();
 
     private SortModel mModel;
 
     @Before
     public void setUp() {
         mModel = new SortModel(Arrays.asList(DIMENSIONS));
-        mModel.addListener(DUMMY_LISTENER);
+        mModel.addListener(STUB_LISTENER);
     }
 
     @Test
@@ -106,7 +106,7 @@
         mModel.setDimensionVisibility(DIMENSION_1.getId(), View.GONE);
 
         assertEquals(View.GONE, DIMENSION_1.getVisibility());
-        assertEquals(SortModel.UPDATE_TYPE_VISIBILITY, DUMMY_LISTENER.mLastUpdateType);
+        assertEquals(SortModel.UPDATE_TYPE_VISIBILITY, STUB_LISTENER.mLastUpdateType);
     }
 
     @Test
@@ -122,8 +122,8 @@
         assertSame(DIMENSION_1, sortedDimension);
         assertEquals(DIMENSION_1.getDefaultSortDirection(), sortedDimension.getSortDirection());
 
-        assertSame(mModel, DUMMY_LISTENER.mLastSortModel);
-        assertEquals(SortModel.UPDATE_TYPE_SORTING, DUMMY_LISTENER.mLastUpdateType);
+        assertSame(mModel, STUB_LISTENER.mLastSortModel);
+        assertEquals(SortModel.UPDATE_TYPE_SORTING, STUB_LISTENER.mLastUpdateType);
     }
 
     @Test
@@ -134,8 +134,8 @@
         assertSame(DIMENSION_1, sortedDimension);
         assertEquals(SortDimension.SORT_DIRECTION_DESCENDING, sortedDimension.getSortDirection());
 
-        assertSame(mModel, DUMMY_LISTENER.mLastSortModel);
-        assertEquals(SortModel.UPDATE_TYPE_SORTING, DUMMY_LISTENER.mLastUpdateType);
+        assertSame(mModel, STUB_LISTENER.mLastSortModel);
+        assertEquals(SortModel.UPDATE_TYPE_SORTING, STUB_LISTENER.mLastUpdateType);
     }
 
     @Test
@@ -147,8 +147,8 @@
         assertSame(DIMENSION_1, sortedDimension);
         assertEquals(SortDimension.SORT_DIRECTION_DESCENDING, sortedDimension.getSortDirection());
 
-        assertSame(mModel, DUMMY_LISTENER.mLastSortModel);
-        assertEquals(SortModel.UPDATE_TYPE_SORTING, DUMMY_LISTENER.mLastUpdateType);
+        assertSame(mModel, STUB_LISTENER.mLastSortModel);
+        assertEquals(SortModel.UPDATE_TYPE_SORTING, STUB_LISTENER.mLastUpdateType);
     }
 
     @Test
@@ -160,8 +160,8 @@
         assertSame(DIMENSION_1, sortedDimension);
         assertEquals(SortDimension.SORT_DIRECTION_DESCENDING, sortedDimension.getSortDirection());
 
-        assertSame(mModel, DUMMY_LISTENER.mLastSortModel);
-        assertEquals(SortModel.UPDATE_TYPE_SORTING, DUMMY_LISTENER.mLastUpdateType);
+        assertSame(mModel, STUB_LISTENER.mLastSortModel);
+        assertEquals(SortModel.UPDATE_TYPE_SORTING, STUB_LISTENER.mLastUpdateType);
     }
 
     @Test
@@ -225,7 +225,7 @@
         return mModel.getDimensionById(sortedDimensionId);
     }
 
-    private static class DummyListener implements UpdateListener {
+    private static class StubListener implements UpdateListener {
 
         private SortModel mLastSortModel;
         private @UpdateType int mLastUpdateType;