diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f94b6ba..e85d686 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2110,7 +2110,7 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.accessibility.CaptionPropertiesFragment" />
+                android:value="com.android.settings.accessibility.CaptioningPropertiesFragment" />
             <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                        android:value="@string/menu_key_accessibility"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
diff --git a/res/drawable/accessibility_captions_banner.xml b/res/drawable/accessibility_captioning_banner.xml
similarity index 100%
rename from res/drawable/accessibility_captions_banner.xml
rename to res/drawable/accessibility_captioning_banner.xml
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index a4f5e04..05d6eb5 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -97,8 +97,8 @@
 
     <dimen name="rect_button_radius">8dp</dimen>
 
-    <!-- Default text size for caption preview samples. Uses dp rather than sp because captions are not scaled. -->
-    <dimen name="caption_preview_text_size">48dp</dimen>
+    <!-- Default text size for captioning preview samples. Uses dp rather than sp because captions are not scaled. -->
+    <dimen name="captioning_preview_text_size">48dp</dimen>
 
     <!-- ActionBar height -->
     <dimen name="actionbar_size">56dip</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 067e43d..fd186af 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5599,20 +5599,20 @@
     <string name="accessibility_color_inversion_about_title">About color inversion</string>
     <!-- Color correction footer link content description [CHAR LIMIT=NONE] -->
     <string name="accessibility_color_inversion_footer_learn_more_content_description">Learn more about color inversion</string>
-    <!-- Title for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=60] -->
-    <string name="accessibility_caption_primary_switch_title">Show captions</string>
-    <!-- Summary for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=NONE] -->
-    <string name="accessibility_caption_primary_switch_summary">For supported app only</string>
-    <!-- Title for Caption preference settings screen for configuring font style. [CHAR LIMIT=NONE] -->
-    <string name="captioning_caption_appearance_title">Caption size and style</string>
-    <!-- Summary for Captions settings, explaining important settings under it. [CHAR LIMIT=NONE] -->
-    <string name="captioning_caption_appearance_summary"><xliff:g id="accessibility_font_size" example="Large">%1$s</xliff:g> text size</string>
-    <!-- Title for Caption preference settings screen for configuring language. [CHAR LIMIT=NONE] -->
+    <!-- Title for captioning settings screen to control turning on/off the feature entirely [CHAR LIMIT=60] -->
+    <string name="accessibility_captioning_primary_switch_title">Show captions</string>
+    <!-- Summary for captioning settings screen to control turning on/off the feature entirely [CHAR LIMIT=NONE] -->
+    <string name="accessibility_captioning_primary_switch_summary">For supported app only</string>
+    <!-- Title for captioning preference settings screen for configuring font style. [CHAR LIMIT=NONE] -->
+    <string name="captioning_appearance_title">Caption size and style</string>
+    <!-- Summary for captioning settings, explaining important settings under it. [CHAR LIMIT=NONE] -->
+    <string name="captioning_appearance_summary"><xliff:g id="accessibility_font_size" example="Large">%1$s</xliff:g> text size</string>
+    <!-- Title for captioning preference settings screen for configuring language. [CHAR LIMIT=NONE] -->
     <string name="captioning_more_options_title">More options</string>
-    <!-- Introduction for the captions preference page. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_caption_preference_intro">Customize caption size and style to make them easier to read</string>
-    <!-- Summary for the captions preference page. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_caption_preference_summary">These caption preferences aren\u2019t supported by all media apps</string>
+    <!-- Introduction for the captioning preference page. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_captioning_preference_intro">Customize caption size and style to make them easier to read</string>
+    <!-- Summary for the captioning preference page. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_captioning_preference_summary">These caption preferences aren\u2019t supported by all media apps</string>
     <!-- Summary for accessibility shortcut preference for software shortcut type. [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_type_software">Accessibility button</string>
     <!-- Summary for accessibility shortcut preference for software shortcut type when gesture mode is on. [CHAR LIMIT=NONE] -->
@@ -5793,7 +5793,7 @@
     <string name="captioning_edge_type">Edge type</string>
     <!-- Title for the preference to change video caption font family (ex. monospace, sans-serif). [CHAR LIMIT=35] -->
     <string name="captioning_typeface">Font family</string>
-    <!-- Sample text for previewing video caption preferences. [CHAR LIMIT=NONE] -->
+    <!-- Sample text for previewing video captioning preferences. [CHAR LIMIT=NONE] -->
     <string name="captioning_preview_text">Captions will look like this</string>
     <!-- Sample characters for previewing video caption preferences. [CHAR LIMIT=2] -->
     <string name="captioning_preview_characters">Aa</string>
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 0287fc6..caba415 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -119,10 +119,9 @@
             settings:controller="com.android.settings.accessibility.LiveCaptionPreferenceController"/>
 
         <Preference
-            android:fragment="com.android.settings.accessibility.CaptionPropertiesFragment"
+            android:fragment="com.android.settings.accessibility.CaptioningPropertiesFragment"
             android:key="captioning_preference_screen"
             android:icon="@drawable/ic_captioning"
-            android:persistent="false"
             android:title="@string/accessibility_captioning_title"
             settings:controller="com.android.settings.accessibility.CaptioningPreferenceController"/>
 
diff --git a/res/xml/captioning_appearance.xml b/res/xml/captioning_appearance.xml
index fa574d1..d8220ef 100644
--- a/res/xml/captioning_appearance.xml
+++ b/res/xml/captioning_appearance.xml
@@ -18,15 +18,15 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:title="@string/captioning_caption_appearance_title">
+    android:title="@string/captioning_appearance_title">
 
     <com.android.settingslib.widget.LayoutPreference
-        android:key="caption_preview"
+        android:key="captioning_preview"
         android:title="@string/summary_placeholder"
         android:layout="@layout/captioning_preview"
         android:selectable="false"
         settings:searchable="false"
-        settings:controller="com.android.settings.accessibility.CaptionPreviewPreferenceController"/>
+        settings:controller="com.android.settings.accessibility.CaptioningPreviewPreferenceController"/>
 
     <ListPreference
         android:entries="@array/captioning_font_size_selector_titles"
@@ -34,17 +34,17 @@
         android:key="captioning_font_size"
         android:summary="%s"
         android:title="@string/captioning_text_size"
-        settings:controller="com.android.settings.accessibility.CaptionFontSizeController"/>
+        settings:controller="com.android.settings.accessibility.CaptioningFontSizeController"/>
 
     <com.android.settings.accessibility.PresetPreference
         android:key="captioning_preset"
         android:title="@string/captioning_preset"
-        settings:controller="com.android.settings.accessibility.CaptionPresetController"/>
+        settings:controller="com.android.settings.accessibility.CaptioningPresetController"/>
 
     <PreferenceCategory
         android:key="custom"
         android:title="@string/captioning_custom_options_title"
-        settings:controller="com.android.settings.accessibility.CaptionCustomController">
+        settings:controller="com.android.settings.accessibility.CaptioningCustomController">
 
         <ListPreference
             android:entries="@array/captioning_typeface_selector_titles"
@@ -52,58 +52,57 @@
             android:key="captioning_typeface"
             android:summary="%s"
             android:title="@string/captioning_typeface"
-            settings:controller="com.android.settings.accessibility.CaptionTypefaceController"/>
+            settings:controller="com.android.settings.accessibility.CaptioningTypefaceController"/>
 
         <com.android.settings.accessibility.ColorPreference
             android:key="captioning_foreground_color"
             android:title="@string/captioning_foreground_color"
-            settings:controller="com.android.settings.accessibility.CaptionForegroundColorController"/>
+            settings:controller="com.android.settings.accessibility.CaptioningForegroundColorController"/>
 
         <com.android.settings.accessibility.ColorPreference
             android:dependency="captioning_foreground_color"
             android:key="captioning_foreground_opacity"
             android:title="@string/captioning_foreground_opacity"
-            settings:controller="com.android.settings.accessibility.CaptionForegroundOpacityController"/>
+            settings:controller="com.android.settings.accessibility.CaptioningForegroundOpacityController"/>
 
         <com.android.settings.accessibility.EdgeTypePreference
             android:key="captioning_edge_type"
             android:title="@string/captioning_edge_type"
-            settings:controller="com.android.settings.accessibility.CaptionEdgeTypeController"/>
+            settings:controller="com.android.settings.accessibility.CaptioningEdgeTypeController"/>
 
         <com.android.settings.accessibility.ColorPreference
             android:dependency="captioning_edge_type"
             android:key="captioning_edge_color"
             android:title="@string/captioning_edge_color"
-            settings:controller="com.android.settings.accessibility.CaptionEdgeColorController"/>
+            settings:controller="com.android.settings.accessibility.CaptioningEdgeColorController"/>
 
         <com.android.settings.accessibility.ColorPreference
             android:key="captioning_background_color"
             android:title="@string/captioning_background_color"
-            settings:controller="com.android.settings.accessibility.CaptionBackgroundColorController"/>
+            settings:controller="com.android.settings.accessibility.CaptioningBackgroundColorController"/>
 
         <com.android.settings.accessibility.ColorPreference
             android:dependency="captioning_background_color"
             android:key="captioning_background_opacity"
             android:title="@string/captioning_background_opacity"
-            settings:controller="com.android.settings.accessibility.CaptionBackgroundOpacityController"/>
+            settings:controller="com.android.settings.accessibility.CaptioningBackgroundOpacityController"/>
 
         <com.android.settings.accessibility.ColorPreference
             android:key="captioning_window_color"
             android:title="@string/captioning_window_color"
-            settings:controller="com.android.settings.accessibility.CaptionWindowColorController"/>
+            settings:controller="com.android.settings.accessibility.CaptioningWindowColorController"/>
 
         <com.android.settings.accessibility.ColorPreference
             android:dependency="captioning_window_color"
             android:key="captioning_window_opacity"
             android:title="@string/captioning_window_opacity"
-            settings:controller="com.android.settings.accessibility.CaptionWindowOpacityController"/>
+            settings:controller="com.android.settings.accessibility.CaptioningWindowOpacityController"/>
     </PreferenceCategory>
 
     <com.android.settings.accessibility.AccessibilityFooterPreference
         android:key="captioning_appearance_footer"
-        android:title="@string/accessibility_caption_preference_summary"
-        android:persistent="false"
+        android:title="@string/accessibility_captioning_preference_summary"
         android:selectable="false"
         settings:searchable="false"
-        settings:controller="com.android.settings.accessibility.CaptionFooterPreferenceController"/>
+        settings:controller="com.android.settings.accessibility.CaptioningFooterPreferenceController"/>
 </PreferenceScreen>
diff --git a/res/xml/captioning_more_options.xml b/res/xml/captioning_more_options.xml
index e1fd002..42c106b 100644
--- a/res/xml/captioning_more_options.xml
+++ b/res/xml/captioning_more_options.xml
@@ -24,14 +24,13 @@
         android:key="captioning_locale"
         android:summary="%s"
         android:title="@string/captioning_locale"
-        settings:controller="com.android.settings.accessibility.CaptionLocalePreferenceController"/>
+        settings:controller="com.android.settings.accessibility.CaptioningLocalePreferenceController"/>
 
     <com.android.settings.accessibility.AccessibilityFooterPreference
         android:key="captioning_more_options_footer"
-        android:title="@string/accessibility_caption_preference_summary"
-        android:persistent="false"
+        android:title="@string/accessibility_captioning_preference_summary"
         android:selectable="false"
         settings:searchable="false"
-        settings:controller="com.android.settings.accessibility.CaptionFooterPreferenceController"/>
+        settings:controller="com.android.settings.accessibility.CaptioningFooterPreferenceController"/>
 
 </PreferenceScreen>
diff --git a/res/xml/captioning_settings.xml b/res/xml/captioning_settings.xml
index 806a256..7fcc03d 100644
--- a/res/xml/captioning_settings.xml
+++ b/res/xml/captioning_settings.xml
@@ -18,46 +18,39 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:persistent="false"
     android:title="@string/accessibility_captioning_title">
 
     <com.android.settingslib.widget.TopIntroPreference
-        android:key="captions_intro"
-        android:persistent="false"
-        android:title="@string/accessibility_caption_preference_intro"/>
+        android:key="captioning_intro"
+        android:title="@string/accessibility_captioning_preference_intro"/>
 
     <com.android.settingslib.widget.IllustrationPreference
-        android:key="captions_preview"
-        android:persistent="false"
+        android:key="captioning_preview"
         android:selectable="false"
-        settings:lottie_rawRes="@drawable/accessibility_captions_banner"
+        settings:lottie_rawRes="@drawable/accessibility_captioning_banner"
         settings:searchable="false" />
 
     <com.android.settings.widget.SettingsMainSwitchPreference
         android:key="captioning_preference_switch"
-        android:persistent="false"
-        android:title="@string/accessibility_caption_primary_switch_title"
-        settings:controller="com.android.settings.accessibility.CaptionTogglePreferenceController"/>
+        android:title="@string/accessibility_captioning_primary_switch_title"
+        settings:controller="com.android.settings.accessibility.CaptioningTogglePreferenceController"/>
 
     <Preference
-        android:fragment="com.android.settings.accessibility.CaptionAppearanceFragment"
-        android:key="captioning_caption_appearance"
-        android:persistent="false"
-        android:title="@string/captioning_caption_appearance_title"
-        settings:controller="com.android.settings.accessibility.CaptionAppearancePreferenceController" />
+        android:fragment="com.android.settings.accessibility.CaptioningAppearanceFragment"
+        android:key="captioning_appearance"
+        android:title="@string/captioning_appearance_title"
+        settings:controller="com.android.settings.accessibility.CaptioningAppearancePreferenceController" />
 
     <Preference
-        android:fragment="com.android.settings.accessibility.CaptionMoreOptionsFragment"
+        android:fragment="com.android.settings.accessibility.CaptioningMoreOptionsFragment"
         android:key="captioning_more_options"
-        android:persistent="false"
         android:title="@string/captioning_more_options_title" />
 
     <com.android.settings.accessibility.AccessibilityFooterPreference
         android:key="captioning_settings_footer"
-        android:title="@string/accessibility_caption_preference_summary"
-        android:persistent="false"
+        android:title="@string/accessibility_captioning_preference_summary"
         android:selectable="false"
         settings:searchable="false"
-        settings:controller="com.android.settings.accessibility.CaptionFooterPreferenceController"/>
+        settings:controller="com.android.settings.accessibility.CaptioningFooterPreferenceController"/>
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/accessibility/CaptionHelper.java b/src/com/android/settings/accessibility/CaptionHelper.java
index 4530493..36d833c 100644
--- a/src/com/android/settings/accessibility/CaptionHelper.java
+++ b/src/com/android/settings/accessibility/CaptionHelper.java
@@ -93,7 +93,7 @@
             previewText.setTextSize(virtualHeight * LINE_HEIGHT_RATIO * fontScale);
         } else {
             final float textSize = mContext.getResources().getDimension(
-                    R.dimen.caption_preview_text_size);
+                    R.dimen.captioning_preview_text_size);
             previewText.setTextSize(textSize * fontScale);
         }
 
diff --git a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java b/src/com/android/settings/accessibility/CaptioningAppearanceFragment.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionAppearanceFragment.java
rename to src/com/android/settings/accessibility/CaptioningAppearanceFragment.java
index 7230cbc..8b80de3 100644
--- a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
+++ b/src/com/android/settings/accessibility/CaptioningAppearanceFragment.java
@@ -25,9 +25,9 @@
 
 /** Settings fragment containing font style of captioning properties. */
 @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public class CaptionAppearanceFragment extends DashboardFragment {
+public class CaptioningAppearanceFragment extends DashboardFragment {
 
-    private static final String TAG = "CaptionAppearanceFragment";
+    private static final String TAG = "CaptioningAppearanceFragment";
 
     @Override
     public int getMetricsCategory() {
diff --git a/src/com/android/settings/accessibility/CaptionAppearancePreferenceController.java b/src/com/android/settings/accessibility/CaptioningAppearancePreferenceController.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionAppearancePreferenceController.java
rename to src/com/android/settings/accessibility/CaptioningAppearancePreferenceController.java
index 4bcdceb..74cb534 100644
--- a/src/com/android/settings/accessibility/CaptionAppearancePreferenceController.java
+++ b/src/com/android/settings/accessibility/CaptioningAppearancePreferenceController.java
@@ -25,12 +25,12 @@
 import com.google.common.primitives.Floats;
 import com.google.common.primitives.Ints;
 
-/** Controller that shows the caption scale and style summary. */
-public class CaptionAppearancePreferenceController extends BasePreferenceController {
+/** Controller that shows the captioning scale and style summary. */
+public class CaptioningAppearancePreferenceController extends BasePreferenceController {
 
     private final CaptioningManager mCaptioningManager;
 
-    public CaptionAppearancePreferenceController(Context context, String preferenceKey) {
+    public CaptioningAppearancePreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptioningManager = context.getSystemService(CaptioningManager.class);
     }
diff --git a/src/com/android/settings/accessibility/CaptionBackgroundColorController.java b/src/com/android/settings/accessibility/CaptioningBackgroundColorController.java
similarity index 92%
rename from src/com/android/settings/accessibility/CaptionBackgroundColorController.java
rename to src/com/android/settings/accessibility/CaptioningBackgroundColorController.java
index f477c9c..ff093d5 100644
--- a/src/com/android/settings/accessibility/CaptionBackgroundColorController.java
+++ b/src/com/android/settings/accessibility/CaptioningBackgroundColorController.java
@@ -26,13 +26,13 @@
 import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption background color. */
-public class CaptionBackgroundColorController extends BasePreferenceController
+/** Preference controller for captioning background color. */
+public class CaptioningBackgroundColorController extends BasePreferenceController
         implements OnValueChangedListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionBackgroundColorController(Context context, String preferenceKey) {
+    public CaptioningBackgroundColorController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionBackgroundOpacityController.java b/src/com/android/settings/accessibility/CaptioningBackgroundOpacityController.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionBackgroundOpacityController.java
rename to src/com/android/settings/accessibility/CaptioningBackgroundOpacityController.java
index 5aeb1dd..405f6d9 100644
--- a/src/com/android/settings/accessibility/CaptionBackgroundOpacityController.java
+++ b/src/com/android/settings/accessibility/CaptioningBackgroundOpacityController.java
@@ -25,13 +25,13 @@
 import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption background opacity. */
-public class CaptionBackgroundOpacityController extends BasePreferenceController
+/** Preference controller for captioning background opacity. */
+public class CaptioningBackgroundOpacityController extends BasePreferenceController
         implements OnValueChangedListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionBackgroundOpacityController(Context context, String preferenceKey) {
+    public CaptioningBackgroundOpacityController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionCustomController.java b/src/com/android/settings/accessibility/CaptioningCustomController.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionCustomController.java
rename to src/com/android/settings/accessibility/CaptioningCustomController.java
index 23ef738..28a99a7 100644
--- a/src/com/android/settings/accessibility/CaptionCustomController.java
+++ b/src/com/android/settings/accessibility/CaptioningCustomController.java
@@ -35,8 +35,8 @@
 import java.util.Arrays;
 import java.util.List;
 
-/** Preference controller for caption custom visibility. */
-public class CaptionCustomController extends BasePreferenceController
+/** Preference controller for captioning custom visibility. */
+public class CaptioningCustomController extends BasePreferenceController
         implements LifecycleObserver, OnStart, OnStop {
 
     private Preference mCustom;
@@ -49,7 +49,7 @@
             Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET
     );
 
-    public CaptionCustomController(Context context, String preferenceKey) {
+    public CaptioningCustomController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
         mContentResolver = context.getContentResolver();
@@ -60,7 +60,7 @@
     }
 
     @VisibleForTesting
-    CaptionCustomController(Context context, String preferenceKey,
+    CaptioningCustomController(Context context, String preferenceKey,
             AccessibilitySettingsContentObserver contentObserver) {
         this(context, preferenceKey);
         mSettingsContentObserver = contentObserver;
diff --git a/src/com/android/settings/accessibility/CaptionEdgeColorController.java b/src/com/android/settings/accessibility/CaptioningEdgeColorController.java
similarity index 90%
rename from src/com/android/settings/accessibility/CaptionEdgeColorController.java
rename to src/com/android/settings/accessibility/CaptioningEdgeColorController.java
index 2235994..4903ff4 100644
--- a/src/com/android/settings/accessibility/CaptionEdgeColorController.java
+++ b/src/com/android/settings/accessibility/CaptioningEdgeColorController.java
@@ -25,13 +25,13 @@
 import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption edge color. */
-public class CaptionEdgeColorController extends BasePreferenceController
+/** Preference controller for captioning edge color. */
+public class CaptioningEdgeColorController extends BasePreferenceController
         implements OnValueChangedListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionEdgeColorController(Context context, String preferenceKey) {
+    public CaptioningEdgeColorController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionEdgeTypeController.java b/src/com/android/settings/accessibility/CaptioningEdgeTypeController.java
similarity index 88%
rename from src/com/android/settings/accessibility/CaptionEdgeTypeController.java
rename to src/com/android/settings/accessibility/CaptioningEdgeTypeController.java
index 031dfaa..adb66d3 100644
--- a/src/com/android/settings/accessibility/CaptionEdgeTypeController.java
+++ b/src/com/android/settings/accessibility/CaptioningEdgeTypeController.java
@@ -23,13 +23,13 @@
 import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption edge type. */
-public class CaptionEdgeTypeController extends BasePreferenceController
+/** Preference controller for captioning edge type. */
+public class CaptioningEdgeTypeController extends BasePreferenceController
         implements OnValueChangedListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionEdgeTypeController(Context context, String preferenceKey) {
+    public CaptioningEdgeTypeController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionFontSizeController.java b/src/com/android/settings/accessibility/CaptioningFontSizeController.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionFontSizeController.java
rename to src/com/android/settings/accessibility/CaptioningFontSizeController.java
index a8fee38..196117b 100644
--- a/src/com/android/settings/accessibility/CaptionFontSizeController.java
+++ b/src/com/android/settings/accessibility/CaptioningFontSizeController.java
@@ -27,14 +27,14 @@
 
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption font size. */
-public class CaptionFontSizeController extends BasePreferenceController
+/** Preference controller for captioning font size. */
+public class CaptioningFontSizeController extends BasePreferenceController
         implements Preference.OnPreferenceChangeListener {
 
     private final CaptioningManager mCaptioningManager;
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionFontSizeController(Context context, String preferenceKey) {
+    public CaptioningFontSizeController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptioningManager = context.getSystemService(CaptioningManager.class);
         mCaptionHelper = new CaptionHelper(context);
diff --git a/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java b/src/com/android/settings/accessibility/CaptioningFooterPreferenceController.java
similarity index 83%
rename from src/com/android/settings/accessibility/CaptionFooterPreferenceController.java
rename to src/com/android/settings/accessibility/CaptioningFooterPreferenceController.java
index b81b99d..def5620 100644
--- a/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java
+++ b/src/com/android/settings/accessibility/CaptioningFooterPreferenceController.java
@@ -20,12 +20,10 @@
 
 import com.android.settings.R;
 
-/**
- * Preference controller for caption footer.
- */
-public class CaptionFooterPreferenceController extends AccessibilityFooterPreferenceController {
+/** Preference controller for captioning footer. */
+public class CaptioningFooterPreferenceController extends AccessibilityFooterPreferenceController {
 
-    public CaptionFooterPreferenceController(Context context, String key) {
+    public CaptioningFooterPreferenceController(Context context, String key) {
         super(context, key);
     }
 
diff --git a/src/com/android/settings/accessibility/CaptionForegroundColorController.java b/src/com/android/settings/accessibility/CaptioningForegroundColorController.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionForegroundColorController.java
rename to src/com/android/settings/accessibility/CaptioningForegroundColorController.java
index b8618f3..c867732 100644
--- a/src/com/android/settings/accessibility/CaptionForegroundColorController.java
+++ b/src/com/android/settings/accessibility/CaptioningForegroundColorController.java
@@ -25,13 +25,13 @@
 import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption foreground color. */
-public class CaptionForegroundColorController extends BasePreferenceController
+/** Preference controller for captioning foreground color. */
+public class CaptioningForegroundColorController extends BasePreferenceController
         implements OnValueChangedListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionForegroundColorController(Context context, String preferenceKey) {
+    public CaptioningForegroundColorController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionForegroundOpacityController.java b/src/com/android/settings/accessibility/CaptioningForegroundOpacityController.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionForegroundOpacityController.java
rename to src/com/android/settings/accessibility/CaptioningForegroundOpacityController.java
index 7f31704..ab8a84b 100644
--- a/src/com/android/settings/accessibility/CaptionForegroundOpacityController.java
+++ b/src/com/android/settings/accessibility/CaptioningForegroundOpacityController.java
@@ -25,13 +25,13 @@
 import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption foreground opacity. */
-public class CaptionForegroundOpacityController extends BasePreferenceController
+/** Preference controller for captioning foreground opacity. */
+public class CaptioningForegroundOpacityController extends BasePreferenceController
         implements OnValueChangedListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionForegroundOpacityController(Context context, String preferenceKey) {
+    public CaptioningForegroundOpacityController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionLocalePreferenceController.java b/src/com/android/settings/accessibility/CaptioningLocalePreferenceController.java
similarity index 89%
rename from src/com/android/settings/accessibility/CaptionLocalePreferenceController.java
rename to src/com/android/settings/accessibility/CaptioningLocalePreferenceController.java
index 7566282..8662bcc 100644
--- a/src/com/android/settings/accessibility/CaptionLocalePreferenceController.java
+++ b/src/com/android/settings/accessibility/CaptioningLocalePreferenceController.java
@@ -25,13 +25,13 @@
 
 import com.android.settings.core.BasePreferenceController;
 
-/** Controller that shows the caption locale summary. */
-public class CaptionLocalePreferenceController extends BasePreferenceController
+/** Controller that shows the captioning locale summary. */
+public class CaptioningLocalePreferenceController extends BasePreferenceController
         implements Preference.OnPreferenceChangeListener {
 
     private final CaptioningManager mCaptioningManager;
 
-    public CaptionLocalePreferenceController(Context context, String preferenceKey) {
+    public CaptioningLocalePreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptioningManager = context.getSystemService(CaptioningManager.class);
     }
diff --git a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java b/src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
rename to src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java
index 3e6b8aa..2895e75 100644
--- a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
+++ b/src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java
@@ -25,9 +25,9 @@
 
 /** Settings fragment containing more options of captioning properties. */
 @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public class CaptionMoreOptionsFragment extends DashboardFragment {
+public class CaptioningMoreOptionsFragment extends DashboardFragment {
 
-    private static final String TAG = "CaptionMoreOptionsFragment";
+    private static final String TAG = "CaptioningMoreOptionsFragment";
 
     @Override
     public int getMetricsCategory() {
diff --git a/src/com/android/settings/accessibility/CaptionPresetController.java b/src/com/android/settings/accessibility/CaptioningPresetController.java
similarity index 90%
rename from src/com/android/settings/accessibility/CaptionPresetController.java
rename to src/com/android/settings/accessibility/CaptioningPresetController.java
index db21f0b..f08a5f4 100644
--- a/src/com/android/settings/accessibility/CaptionPresetController.java
+++ b/src/com/android/settings/accessibility/CaptioningPresetController.java
@@ -24,13 +24,13 @@
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption preset. */
-public class CaptionPresetController extends BasePreferenceController
+/** Preference controller for captioning preset. */
+public class CaptioningPresetController extends BasePreferenceController
         implements ListDialogPreference.OnValueChangedListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionPresetController(Context context, String preferenceKey) {
+    public CaptioningPresetController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionPreviewPreferenceController.java b/src/com/android/settings/accessibility/CaptioningPreviewPreferenceController.java
similarity index 95%
rename from src/com/android/settings/accessibility/CaptionPreviewPreferenceController.java
rename to src/com/android/settings/accessibility/CaptioningPreviewPreferenceController.java
index 793eaa3..73ee846 100644
--- a/src/com/android/settings/accessibility/CaptionPreviewPreferenceController.java
+++ b/src/com/android/settings/accessibility/CaptioningPreviewPreferenceController.java
@@ -39,8 +39,8 @@
 import java.util.List;
 import java.util.Locale;
 
-/** Controller that shows the caption locale summary. */
-public class CaptionPreviewPreferenceController extends BasePreferenceController
+/** Controller that shows the captioning locale summary. */
+public class CaptioningPreviewPreferenceController extends BasePreferenceController
         implements LifecycleObserver, OnStart, OnStop {
 
     @VisibleForTesting
@@ -60,7 +60,7 @@
     private CaptionHelper mCaptionHelper;
     private LayoutPreference mPreference;
 
-    public CaptionPreviewPreferenceController(Context context, String preferenceKey) {
+    public CaptioningPreviewPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
         mSettingsContentObserver = new AccessibilitySettingsContentObserver(mHandler);
diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptioningPropertiesFragment.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionPropertiesFragment.java
rename to src/com/android/settings/accessibility/CaptioningPropertiesFragment.java
index 697c8fb..95a3307 100644
--- a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
+++ b/src/com/android/settings/accessibility/CaptioningPropertiesFragment.java
@@ -25,9 +25,9 @@
 
 /** Settings fragment containing captioning properties. */
 @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public class CaptionPropertiesFragment extends DashboardFragment {
+public class CaptioningPropertiesFragment extends DashboardFragment {
 
-    private static final String TAG = "CaptionPropertiesFragment";
+    private static final String TAG = "CaptioningPropertiesFragment";
 
     @Override
     public int getMetricsCategory() {
diff --git a/src/com/android/settings/accessibility/CaptionTogglePreferenceController.java b/src/com/android/settings/accessibility/CaptioningTogglePreferenceController.java
similarity index 90%
rename from src/com/android/settings/accessibility/CaptionTogglePreferenceController.java
rename to src/com/android/settings/accessibility/CaptioningTogglePreferenceController.java
index b852002..a9d2cdf 100644
--- a/src/com/android/settings/accessibility/CaptionTogglePreferenceController.java
+++ b/src/com/android/settings/accessibility/CaptioningTogglePreferenceController.java
@@ -26,13 +26,13 @@
 import com.android.settings.widget.SettingsMainSwitchPreference;
 import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
-/** Preference controller for caption more options. */
-public class CaptionTogglePreferenceController extends TogglePreferenceController
+/** Preference controller for captioning more options. */
+public class CaptioningTogglePreferenceController extends TogglePreferenceController
         implements OnMainSwitchChangeListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionTogglePreferenceController(Context context, String preferenceKey) {
+    public CaptioningTogglePreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionTypefaceController.java b/src/com/android/settings/accessibility/CaptioningTypefaceController.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionTypefaceController.java
rename to src/com/android/settings/accessibility/CaptioningTypefaceController.java
index 5e452d9..3876d39 100644
--- a/src/com/android/settings/accessibility/CaptionTypefaceController.java
+++ b/src/com/android/settings/accessibility/CaptioningTypefaceController.java
@@ -27,13 +27,13 @@
 
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption type face. */
-public class CaptionTypefaceController extends BasePreferenceController
+/** Preference controller for captioning type face. */
+public class CaptioningTypefaceController extends BasePreferenceController
         implements Preference.OnPreferenceChangeListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionTypefaceController(Context context, String preferenceKey) {
+    public CaptioningTypefaceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionWindowColorController.java b/src/com/android/settings/accessibility/CaptioningWindowColorController.java
similarity index 93%
rename from src/com/android/settings/accessibility/CaptionWindowColorController.java
rename to src/com/android/settings/accessibility/CaptioningWindowColorController.java
index f13a347..ce68227 100644
--- a/src/com/android/settings/accessibility/CaptionWindowColorController.java
+++ b/src/com/android/settings/accessibility/CaptioningWindowColorController.java
@@ -26,13 +26,13 @@
 import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption window color. */
-public class CaptionWindowColorController extends BasePreferenceController
+/** Preference controller for captioning window color. */
+public class CaptioningWindowColorController extends BasePreferenceController
         implements OnValueChangedListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionWindowColorController(Context context, String preferenceKey) {
+    public CaptioningWindowColorController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/accessibility/CaptionWindowOpacityController.java b/src/com/android/settings/accessibility/CaptioningWindowOpacityController.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionWindowOpacityController.java
rename to src/com/android/settings/accessibility/CaptioningWindowOpacityController.java
index 8076a48..ef28803 100644
--- a/src/com/android/settings/accessibility/CaptionWindowOpacityController.java
+++ b/src/com/android/settings/accessibility/CaptioningWindowOpacityController.java
@@ -25,13 +25,13 @@
 import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
 import com.android.settings.core.BasePreferenceController;
 
-/** Preference controller for caption window opacity. */
-public class  CaptionWindowOpacityController extends BasePreferenceController
+/** Preference controller for captioning window opacity. */
+public class CaptioningWindowOpacityController extends BasePreferenceController
         implements OnValueChangedListener {
 
     private final CaptionHelper mCaptionHelper;
 
-    public CaptionWindowOpacityController(Context context, String preferenceKey) {
+    public CaptioningWindowOpacityController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mCaptionHelper = new CaptionHelper(context);
     }
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index dc746ce..5e17e0b 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -28,7 +28,7 @@
 import com.android.settings.accessibility.AccessibilityDetailsSettingsFragment;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
-import com.android.settings.accessibility.CaptionPropertiesFragment;
+import com.android.settings.accessibility.CaptioningPropertiesFragment;
 import com.android.settings.accessibility.TextReadingPreferenceFragmentForSetupWizard;
 import com.android.settings.accessibility.ToggleColorInversionPreferenceFragment;
 import com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment;
@@ -230,7 +230,7 @@
             AccessibilitySettings.class.getName(),
             AccessibilitySettingsForSetupWizard.class.getName(),
             TextReadingPreferenceFragmentForSetupWizard.class.getName(),
-            CaptionPropertiesFragment.class.getName(),
+            CaptioningPropertiesFragment.class.getName(),
             ToggleDaltonizerPreferenceFragment.class.getName(),
             ToggleColorInversionPreferenceFragment.class.getName(),
             ToggleReduceBrightColorsPreferenceFragment.class.getName(),
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionHelperTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptionHelperTest.java
index 4700ecd..c1a1799 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionHelperTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptionHelperTest.java
@@ -92,7 +92,7 @@
         final float fontScale = 1.0f;
         when(mCaptioningManager.getFontScale()).thenReturn(fontScale);
         final float textSize = mContext.getResources().getDimension(
-                R.dimen.caption_preview_text_size) * fontScale;
+                R.dimen.captioning_preview_text_size) * fontScale;
 
         mCaptionHelper.applyCaptionProperties(mSubtitleView, /* PreviewWindow= */ null,
                 /* styleId= */ 0);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionAppearanceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningAppearanceFragmentTest.java
similarity index 84%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionAppearanceFragmentTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningAppearanceFragmentTest.java
index b180f22..c839a01 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionAppearanceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningAppearanceFragmentTest.java
@@ -33,16 +33,16 @@
 
 import java.util.List;
 
-/** Tests for {@link CaptionAppearanceFragment}. */
+/** Tests for {@link CaptioningAppearanceFragment}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionAppearanceFragmentTest {
+public class CaptioningAppearanceFragmentTest {
 
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionAppearanceFragment mFragment;
+    private CaptioningAppearanceFragment mFragment;
 
     @Before
     public void setUp() {
-        mFragment = new CaptionAppearanceFragment();
+        mFragment = new CaptioningAppearanceFragment();
     }
 
     @Test
@@ -58,7 +58,7 @@
 
     @Test
     public void getLogTag_returnsCorrectTag() {
-        assertThat(mFragment.getLogTag()).isEqualTo("CaptionAppearanceFragment");
+        assertThat(mFragment.getLogTag()).isEqualTo("CaptioningAppearanceFragment");
     }
 
     @Test
@@ -68,7 +68,7 @@
 
     @Test
     public void getNonIndexableKeys_existInXmlLayout() {
-        final List<String> niks = CaptionAppearanceFragment.SEARCH_INDEX_DATA_PROVIDER
+        final List<String> niks = CaptioningAppearanceFragment.SEARCH_INDEX_DATA_PROVIDER
                 .getNonIndexableKeys(mContext);
         final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext,
                 R.xml.captioning_appearance);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionAppearancePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningAppearancePreferenceControllerTest.java
similarity index 96%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionAppearancePreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningAppearancePreferenceControllerTest.java
index cfa683ba..74fb440 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionAppearancePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningAppearancePreferenceControllerTest.java
@@ -34,23 +34,23 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionAppearancePreferenceController}. */
+/** Tests for {@link CaptioningAppearancePreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionAppearancePreferenceControllerTest {
+public class CaptioningAppearancePreferenceControllerTest {
 
     private static final String TEST_KEY = "test_key";
     private static final int DEFAULT_PRESET_INDEX = 1;
     private static final int DEFAULT_FONT_SCALE_INDEX = 2;
 
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionAppearancePreferenceController mController;
+    private CaptioningAppearancePreferenceController mController;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
         CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
         mShadowCaptioningManager = Shadow.extract(captioningManager);
-        mController = new CaptionAppearancePreferenceController(mContext, TEST_KEY);
+        mController = new CaptioningAppearancePreferenceController(mContext, TEST_KEY);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionBackgroundColorControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundColorControllerTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionBackgroundColorControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundColorControllerTest.java
index 964e240..2ecaa0f 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionBackgroundColorControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundColorControllerTest.java
@@ -45,22 +45,23 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionBackgroundColorController}. */
+/** Tests for {@link CaptioningBackgroundColorController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionBackgroundColorControllerTest {
+public class CaptioningBackgroundColorControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionBackgroundColorController mController;
+    private CaptioningBackgroundColorController mController;
     private ColorPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionBackgroundColorController(mContext, "captioning_background_color");
+        mController = new CaptioningBackgroundColorController(mContext,
+                "captioning_background_color");
         final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
         mPreference = new ColorPreference(mContext, attributeSet);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionBackgroundOpacityControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundOpacityControllerTest.java
similarity index 94%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionBackgroundOpacityControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundOpacityControllerTest.java
index 3c5e247..56a61ec 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionBackgroundOpacityControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundOpacityControllerTest.java
@@ -47,21 +47,21 @@
 
 /** Tests for {@link CaptionBackgroundOpacityController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionBackgroundOpacityControllerTest {
+public class CaptioningBackgroundOpacityControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionBackgroundOpacityController mController;
+    private CaptioningBackgroundOpacityController mController;
     private ColorPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController =
-                new CaptionBackgroundOpacityController(mContext, "captioning_background_opacity");
+        mController = new CaptioningBackgroundOpacityController(mContext,
+                "captioning_background_opacity");
         final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
         mPreference = new ColorPreference(mContext, attributeSet);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionCustomControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningCustomControllerTest.java
similarity index 93%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionCustomControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningCustomControllerTest.java
index 783a9fc..838d9e0 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionCustomControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningCustomControllerTest.java
@@ -41,9 +41,9 @@
 import org.mockito.junit.MockitoRule;
 import org.robolectric.RobolectricTestRunner;
 
-/** Tests for {@link CaptionCustomController}. */
+/** Tests for {@link CaptioningCustomController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionCustomControllerTest {
+public class CaptioningCustomControllerTest {
 
     private static final String PREF_KEY = "custom";
 
@@ -55,13 +55,13 @@
     private AccessibilitySettingsContentObserver mAccessibilitySettingsContentObserver;
     private final Context mContext = ApplicationProvider.getApplicationContext();
     private ContentResolver mContentResolver;
-    private CaptionCustomController mController;
+    private CaptioningCustomController mController;
     private Preference mPreference;
 
     @Before
     public void setUp() {
         mContentResolver = mContext.getContentResolver();
-        mController = new CaptionCustomController(mContext, PREF_KEY,
+        mController = new CaptioningCustomController(mContext, PREF_KEY,
                 mAccessibilitySettingsContentObserver);
         mPreference = new Preference(mContext);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionEdgeColorControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeColorControllerTest.java
similarity index 93%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionEdgeColorControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeColorControllerTest.java
index fd4e55a..f1a8566 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionEdgeColorControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeColorControllerTest.java
@@ -45,21 +45,21 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionEdgeColorController}. */
+/** Tests for {@link CaptioningEdgeColorController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionEdgeColorControllerTest {
+public class CaptioningEdgeColorControllerTest {
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionEdgeColorController mController;
+    private CaptioningEdgeColorController mController;
     private ColorPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionEdgeColorController(mContext, "captioning_edge_color");
+        mController = new CaptioningEdgeColorController(mContext, "captioning_edge_color");
         final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
         mPreference = new ColorPreference(mContext, attributeSet);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionEdgeTypeControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeTypeControllerTest.java
similarity index 94%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionEdgeTypeControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeTypeControllerTest.java
index fba7afa..11871f8 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionEdgeTypeControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeTypeControllerTest.java
@@ -46,22 +46,22 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionEdgeTypeController}. */
+/** Tests for {@link CaptioningEdgeTypeController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionEdgeTypeControllerTest {
+public class CaptioningEdgeTypeControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionEdgeTypeController mController;
+    private CaptioningEdgeTypeController mController;
     private EdgeTypePreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionEdgeTypeController(mContext, "captioning_edge_type");
+        mController = new CaptioningEdgeTypeController(mContext, "captioning_edge_type");
         final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
         mPreference = new EdgeTypePreference(mContext, attributeSet);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionFontSizeControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningFontSizeControllerTest.java
similarity index 93%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionFontSizeControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningFontSizeControllerTest.java
index c4033ef..c20cf5d 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionFontSizeControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningFontSizeControllerTest.java
@@ -45,22 +45,22 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionFontSizeController}. */
+/** Tests for {@link CaptioningFontSizeController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionFontSizeControllerTest {
+public class CaptioningFontSizeControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionFontSizeController mController;
+    private CaptioningFontSizeController mController;
     private ListPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionFontSizeController(mContext, "captioning_font_size");
+        mController = new CaptioningFontSizeController(mContext, "captioning_font_size");
         mPreference = new ListPreference(mContext);
         mPreference.setEntries(R.array.captioning_font_size_selector_titles);
         mPreference.setEntryValues(R.array.captioning_font_size_selector_values);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionForegroundColorControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundColorControllerTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionForegroundColorControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundColorControllerTest.java
index 50ce90d..9c64130 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionForegroundColorControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundColorControllerTest.java
@@ -45,22 +45,23 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionForegroundColorController}. */
+/** Tests for {@link CaptioningForegroundColorController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionForegroundColorControllerTest {
+public class CaptioningForegroundColorControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionForegroundColorController mController;
+    private CaptioningForegroundColorController mController;
     private ColorPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionForegroundColorController(mContext, "captioning_foreground_color");
+        mController = new CaptioningForegroundColorController(mContext,
+                "captioning_foreground_color");
         final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
         mPreference = new ColorPreference(mContext, attributeSet);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionForegroundOpacityControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundOpacityControllerTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionForegroundOpacityControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundOpacityControllerTest.java
index 38cecd6..1ffff60 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionForegroundOpacityControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundOpacityControllerTest.java
@@ -45,23 +45,23 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionForegroundOpacityController}. */
+/** Tests for {@link CaptioningForegroundOpacityController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionForegroundOpacityControllerTest {
+public class CaptioningForegroundOpacityControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionForegroundOpacityController mController;
+    private CaptioningForegroundOpacityController mController;
     private ColorPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController =
-                new CaptionForegroundOpacityController(mContext, "captioning_foreground_opacity");
+        mController = new CaptioningForegroundOpacityController(mContext,
+                "captioning_foreground_opacity");
         final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
         mPreference = new ColorPreference(mContext, attributeSet);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionLocalePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningLocalePreferenceControllerTest.java
similarity index 91%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionLocalePreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningLocalePreferenceControllerTest.java
index cb0d67c..97c1908 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionLocalePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningLocalePreferenceControllerTest.java
@@ -38,21 +38,21 @@
 import org.mockito.junit.MockitoRule;
 import org.robolectric.RobolectricTestRunner;
 
-/** Tests for {@link CaptionLocalePreferenceController}. */
+/** Tests for {@link CaptioningLocalePreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionLocalePreferenceControllerTest {
+public class CaptioningLocalePreferenceControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionLocalePreferenceController mController;
+    private CaptioningLocalePreferenceController mController;
     private LocalePreference mPreference;
 
     @Before
     public void setUp() {
-        mController = new CaptionLocalePreferenceController(mContext, "captioning_local_pref");
+        mController = new CaptioningLocalePreferenceController(mContext, "captioning_local_pref");
         mPreference = new LocalePreference(mContext);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
     }
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionMoreOptionsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java
similarity index 84%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionMoreOptionsFragmentTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java
index 8d1c684..6969472 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionMoreOptionsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java
@@ -33,16 +33,16 @@
 
 import java.util.List;
 
-/** Tests for {@link CaptionMoreOptionsFragment}. */
+/** Tests for {@link CaptioningMoreOptionsFragment}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionMoreOptionsFragmentTest {
+public class CaptioningMoreOptionsFragmentTest {
 
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionMoreOptionsFragment mFragment;
+    private CaptioningMoreOptionsFragment mFragment;
 
     @Before
     public void setUp() {
-        mFragment = new CaptionMoreOptionsFragment();
+        mFragment = new CaptioningMoreOptionsFragment();
     }
 
     @Test
@@ -59,12 +59,12 @@
 
     @Test
     public void getLogTag_returnsCorrectTag() {
-        assertThat(mFragment.getLogTag()).isEqualTo("CaptionMoreOptionsFragment");
+        assertThat(mFragment.getLogTag()).isEqualTo("CaptioningMoreOptionsFragment");
     }
 
     @Test
     public void getNonIndexableKeys_existInXmlLayout() {
-        final List<String> niks = CaptionMoreOptionsFragment.SEARCH_INDEX_DATA_PROVIDER
+        final List<String> niks = CaptioningMoreOptionsFragment.SEARCH_INDEX_DATA_PROVIDER
                 .getNonIndexableKeys(mContext);
         final List<String> keys =
                 XmlTestUtils.getKeysFromPreferenceXml(mContext,
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java
index 0dbb347..c44bed1 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.accessibility;
 
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
@@ -30,10 +33,9 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
+/** Tests for {@link CaptioningPreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
 public class CaptioningPreferenceControllerTest {
-    private static final int ON = 1;
-    private static final int OFF = 0;
 
     private Context mContext;
     private CaptioningPreferenceController mController;
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionPresetControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningPresetControllerTest.java
similarity index 94%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionPresetControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningPresetControllerTest.java
index 0b832d3..c91baa2 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionPresetControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningPresetControllerTest.java
@@ -46,22 +46,22 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionPresetController}. */
+/** Tests for {@link CaptioningPresetController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionPresetControllerTest {
+public class CaptioningPresetControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionPresetController mController;
+    private CaptioningPresetController mController;
     private PresetPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionPresetController(mContext, "captioning_preset");
+        mController = new CaptioningPresetController(mContext, "captioning_preset");
         final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
         mPreference = new PresetPreference(mContext, attributeSet);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionPreviewPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreviewPreferenceControllerTest.java
similarity index 91%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionPreviewPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningPreviewPreferenceControllerTest.java
index dda4886..cf87dd8 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionPreviewPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreviewPreferenceControllerTest.java
@@ -42,9 +42,9 @@
 import org.mockito.junit.MockitoRule;
 import org.robolectric.RobolectricTestRunner;
 
-/** Tests for {@link CaptionPreviewPreferenceController}. */
+/** Tests for {@link CaptioningPreviewPreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionPreviewPreferenceControllerTest {
+public class CaptioningPreviewPreferenceControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -54,13 +54,13 @@
     private ContentResolver mContentResolver;
     @Spy
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionPreviewPreferenceController mController;
+    private CaptioningPreviewPreferenceController mController;
     private LayoutPreference mLayoutPreference;
 
     @Before
     public void setUp() {
         when(mContext.getContentResolver()).thenReturn(mContentResolver);
-        mController = new CaptionPreviewPreferenceController(mContext,
+        mController = new CaptioningPreviewPreferenceController(mContext,
                 "captioning_preference_switch");
         final View view = new View(mContext);
         mLayoutPreference = new LayoutPreference(mContext, view);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionPropertiesFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningPropertiesFragmentTest.java
similarity index 84%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionPropertiesFragmentTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningPropertiesFragmentTest.java
index cd0638a..4f25139 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionPropertiesFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningPropertiesFragmentTest.java
@@ -33,16 +33,16 @@
 
 import java.util.List;
 
-/** Tests for {@link CaptionPropertiesFragment}. */
+/** Tests for {@link CaptioningPropertiesFragment}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionPropertiesFragmentTest {
+public class CaptioningPropertiesFragmentTest {
 
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionPropertiesFragment mFragment;
+    private CaptioningPropertiesFragment mFragment;
 
     @Before
     public void setUp() {
-        mFragment = new CaptionPropertiesFragment();
+        mFragment = new CaptioningPropertiesFragment();
     }
 
     @Test
@@ -59,12 +59,12 @@
 
     @Test
     public void getLogTag_returnsCorrectTag() {
-        assertThat(mFragment.getLogTag()).isEqualTo("CaptionPropertiesFragment");
+        assertThat(mFragment.getLogTag()).isEqualTo("CaptioningPropertiesFragment");
     }
 
     @Test
     public void getNonIndexableKeys_existInXmlLayout() {
-        final List<String> niks = CaptionPropertiesFragment.SEARCH_INDEX_DATA_PROVIDER
+        final List<String> niks = CaptioningPropertiesFragment.SEARCH_INDEX_DATA_PROVIDER
                 .getNonIndexableKeys(mContext);
         final List<String> keys =
                 XmlTestUtils.getKeysFromPreferenceXml(mContext,
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionTogglePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningTogglePreferenceControllerTest.java
similarity index 95%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionTogglePreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningTogglePreferenceControllerTest.java
index 1980df2..cdc1741 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionTogglePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningTogglePreferenceControllerTest.java
@@ -45,22 +45,22 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionTogglePreferenceController}. */
+/** Tests for {@link CaptioningTogglePreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionTogglePreferenceControllerTest {
+public class CaptioningTogglePreferenceControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionTogglePreferenceController mController;
+    private CaptioningTogglePreferenceController mController;
     private SettingsMainSwitchPreference mSwitchPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionTogglePreferenceController(mContext,
+        mController = new CaptioningTogglePreferenceController(mContext,
                 "captioning_preference_switch");
         mSwitchPreference = new SettingsMainSwitchPreference(mContext);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mSwitchPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionTypefaceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningTypefaceControllerTest.java
similarity index 94%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionTypefaceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningTypefaceControllerTest.java
index f2f070f..0ca455c 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionTypefaceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningTypefaceControllerTest.java
@@ -45,22 +45,22 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionTypefaceController}. */
+/** Tests for {@link CaptioningTypefaceController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionTypefaceControllerTest {
+public class CaptioningTypefaceControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionTypefaceController mController;
+    private CaptioningTypefaceController mController;
     private ListPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionTypefaceController(mContext, "captioning_typeface");
+        mController = new CaptioningTypefaceController(mContext, "captioning_typeface");
         mPreference = new ListPreference(mContext);
         mPreference.setEntries(R.array.captioning_typeface_selector_titles);
         mPreference.setEntryValues(R.array.captioning_typeface_selector_values);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionWindowColorControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowColorControllerTest.java
similarity index 93%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionWindowColorControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningWindowColorControllerTest.java
index 66b1666..abfa98d 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionWindowColorControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowColorControllerTest.java
@@ -46,22 +46,22 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionWindowColorController}. */
+/** Tests for {@link CaptioningWindowColorController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionWindowColorControllerTest {
+public class CaptioningWindowColorControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionWindowColorController mController;
+    private CaptioningWindowColorController mController;
     private ColorPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionWindowColorController(mContext, "captioning_window_color");
+        mController = new CaptioningWindowColorController(mContext, "captioning_window_color");
         final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
         mPreference = new ColorPreference(mContext, attributeSet);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionWindowOpacityControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowOpacityControllerTest.java
similarity index 93%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionWindowOpacityControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningWindowOpacityControllerTest.java
index 71d3748..99eb1e5 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionWindowOpacityControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowOpacityControllerTest.java
@@ -45,22 +45,22 @@
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowCaptioningManager;
 
-/** Tests for {@link CaptionWindowOpacityController}. */
+/** Tests for {@link CaptioningWindowOpacityController}. */
 @RunWith(RobolectricTestRunner.class)
-public class CaptionWindowOpacityControllerTest {
+public class CaptioningWindowOpacityControllerTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private PreferenceScreen mScreen;
     private final Context mContext = ApplicationProvider.getApplicationContext();
-    private CaptionWindowOpacityController mController;
+    private CaptioningWindowOpacityController mController;
     private ColorPreference mPreference;
     private ShadowCaptioningManager mShadowCaptioningManager;
 
     @Before
     public void setUp() {
-        mController = new CaptionWindowOpacityController(mContext, "captioning_window_opacity");
+        mController = new CaptioningWindowOpacityController(mContext, "captioning_window_opacity");
         final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
         mPreference = new ColorPreference(mContext, attributeSet);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
