diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f94b6ba..784a94b 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"
@@ -4397,14 +4397,6 @@
         </receiver>
 
         <receiver
-            android:name=".sim.receivers.SuwFinishReceiver"
-            android:exported="true">
-            <intent-filter>
-                <action android:name="com.google.android.setupwizard.SETUP_WIZARD_FINISHED" />
-            </intent-filter>
-        </receiver>
-
-        <receiver
             android:name=".sim.receivers.SimCompleteBootReceiver"
             android:exported="true">
             <intent-filter>
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/layout-land/udfps_enroll_enrolling_land.xml b/res/layout-land/udfps_enroll_enrolling.xml
similarity index 93%
rename from res/layout-land/udfps_enroll_enrolling_land.xml
rename to res/layout-land/udfps_enroll_enrolling.xml
index 776f8a9..f323788 100644
--- a/res/layout-land/udfps_enroll_enrolling_land.xml
+++ b/res/layout-land/udfps_enroll_enrolling.xml
@@ -33,11 +33,15 @@
         <!-- Both texts are kept as separate text views so it doesn't jump around in portrait.
             See layouts/fingerprint_enroll_enrolling_base.xml. -->
         <LinearLayout
+            android:id="@+id/layout_container"
             android:layout_width="0dp"
             android:layout_weight="1"
             android:layout_height="match_parent"
             android:layout_marginStart="?attr/sudMarginStart"
+            android:layout_marginEnd="@dimen/enroll_margin_end"
             android:layout_marginBottom="@dimen/sud_content_frame_padding_bottom"
+            android:paddingStart="@dimen/enroll_padding_start"
+            android:paddingEnd="@dimen/enroll_padding_end"
             android:clipChildren="false"
             android:clipToPadding="false"
             android:orientation="vertical">
diff --git a/res/layout/face_enroll_education.xml b/res/layout/face_enroll_education.xml
index 2a78f99..fec6d53 100644
--- a/res/layout/face_enroll_education.xml
+++ b/res/layout/face_enroll_education.xml
@@ -54,7 +54,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="440dp"
                 android:layout_marginTop="-52dp"
-                android:scaleType="centerCrop"
+                android:scaleType="centerInside"
                 android:visibility="gone"
                 app:lottie_autoPlay="true"
                 app:lottie_loop="true"
@@ -66,7 +66,7 @@
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
                 android:visibility="invisible"
-                android:background="@drawable/face_enroll_icon_large"/>
+                android:src="@drawable/face_enroll_icon_large"/>
 
         </FrameLayout>
 
@@ -83,7 +83,8 @@
 
             <FrameLayout
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content">
+                android:layout_height="wrap_content"
+                android:layout_marginTop="-24dp">
 
                 <Button
                     android:id="@+id/accessibility_button"
diff --git a/res/values-ldltr/dimens.xml b/res/values-ldltr/dimens.xml
new file mode 100755
index 0000000..11d5b33
--- /dev/null
+++ b/res/values-ldltr/dimens.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <!-- Biometrics UDFPS enroll landscape dimensions-->
+    <dimen name="enroll_padding_start">0dp</dimen>
+    <dimen name="enroll_padding_end">0dp</dimen>
+    <dimen name="enroll_margin_end">0dp</dimen>
+
+    <dimen name="rotation_90_enroll_padding_start">-290dp</dimen>
+    <dimen name="rotation_90_enroll_padding_end">108dp</dimen>
+    <dimen name="rotation_90_enroll_margin_end">150dp</dimen>
+</resources>
diff --git a/res/values-ldrtl/dimens.xml b/res/values-ldrtl/dimens.xml
new file mode 100755
index 0000000..cbe7eb5
--- /dev/null
+++ b/res/values-ldrtl/dimens.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <!-- Biometrics UDFPS enroll landscape RTL dimensions-->
+    <dimen name="enroll_padding_start">-440dp</dimen>
+    <dimen name="enroll_padding_end">320dp</dimen>
+    <dimen name="enroll_margin_end">150dp</dimen>
+
+    <dimen name="rotation_90_enroll_padding_start">20dp</dimen>
+    <dimen name="rotation_90_enroll_padding_end">0dp</dimen>
+    <dimen name="rotation_90_enroll_margin_end">20dp</dimen>
+</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index a4f5e04..33786cc 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>
@@ -494,6 +494,14 @@
     <dimen name="sims_select_margin_bottom">24dp</dimen>
     <dimen name="sims_select_margin_top">8dp</dimen>
 
+    <!-- Biometrics UDFPS enroll default dimensions-->
+    <dimen name="enroll_padding_start">0dp</dimen>
+    <dimen name="enroll_padding_end">0dp</dimen>
+    <dimen name="enroll_margin_end">0dp</dimen>
+    <dimen name="rotation_90_enroll_padding_start">0dp</dimen>
+    <dimen name="rotation_90_enroll_padding_end">0dp</dimen>
+    <dimen name="rotation_90_enroll_margin_end">0dp</dimen>
+
     <!-- QR code picture size -->
     <dimen name="qrcode_preview_margin">40dp</dimen>
     <dimen name="qrcode_preview_radius">30dp</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/res/xml/dream_fragment_overview.xml b/res/xml/dream_fragment_overview.xml
index a7b5492..db8f4fd 100644
--- a/res/xml/dream_fragment_overview.xml
+++ b/res/xml/dream_fragment_overview.xml
@@ -27,6 +27,11 @@
         settings:controller="com.android.settings.dream.DreamMainSwitchPreferenceController"
         settings:searchable="false"/>
 
+    <Preference
+        android:key="when_to_start"
+        android:title="@string/screensaver_settings_when_to_dream"
+        android:fragment="com.android.settings.dream.WhenToDreamPicker"/>
+
     <PreferenceCategory
         android:title="@string/dream_picker_category">
         <com.android.settingslib.widget.LayoutPreference
@@ -36,17 +41,13 @@
             settings:controller="com.android.settings.dream.DreamPickerController"/>
     </PreferenceCategory>
 
-    <PreferenceCategory
-        android:title="@string/dream_more_settings_category">
-        <SwitchPreference
-            android:key="dream_complications_toggle"
-            android:title="@string/dream_complications_toggle_title"
-            android:summary="@string/dream_complications_toggle_summary"
-            settings:controller="com.android.settings.dream.DreamComplicationPreferenceController"/>
-        <Preference
-            android:key="when_to_start"
-            android:title="@string/screensaver_settings_when_to_dream"
-            android:fragment="com.android.settings.dream.WhenToDreamPicker"/>
-    </PreferenceCategory>
+    <SwitchPreference
+        android:key="dream_complications_toggle"
+        android:title="@string/dream_complications_toggle_title"
+        android:summary="@string/dream_complications_toggle_summary"
+        settings:controller="com.android.settings.dream.DreamComplicationPreferenceController"/>
+
+    <com.android.settings.applications.SpacePreference
+        android:layout_height="16dp" />
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/UserCredentialsSettings.java b/src/com/android/settings/UserCredentialsSettings.java
index 80b97e4..c45b5ef 100644
--- a/src/com/android/settings/UserCredentialsSettings.java
+++ b/src/com/android/settings/UserCredentialsSettings.java
@@ -48,7 +48,6 @@
 import androidx.fragment.app.Fragment;
 import androidx.recyclerview.widget.RecyclerView;
 
-import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -297,7 +296,6 @@
         private SortedMap<String, Credential> getCredentialsForUid(KeyStore keyStore, int uid) {
             try {
                 final SortedMap<String, Credential> aliasMap = new TreeMap<>();
-                boolean isSystem = UserHandle.getAppId(uid) == Process.SYSTEM_UID;
                 Enumeration<String> aliases = keyStore.aliases();
                 while (aliases.hasMoreElements()) {
                     String alias = aliases.nextElement();
@@ -315,19 +313,6 @@
                             // We don't display any symmetric key entries.
                             continue;
                         }
-                        if (isSystem) {
-                            // Do not show work profile keys in user credentials
-                            if (alias.startsWith(LockPatternUtils.PROFILE_KEY_NAME_ENCRYPT) ||
-                                    alias.startsWith(LockPatternUtils.PROFILE_KEY_NAME_DECRYPT)) {
-                                continue;
-                            }
-                            // Do not show synthetic password keys in user credential
-                            // We should never reach this point because the synthetic password key
-                            // is symmetric.
-                            if (alias.startsWith(LockPatternUtils.SYNTHETIC_PASSWORD_KEY_PREFIX)) {
-                                continue;
-                            }
-                        }
                         // At this point we have determined that we have an asymmetric key.
                         // so we have at least a USER_KEY and USER_CERTIFICATE.
                         c.storedTypes.add(Credential.Type.USER_KEY);
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 7230cbcc..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/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index ca79a24..5f9a74f 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -47,6 +47,7 @@
 import android.view.accessibility.AccessibilityManager;
 import android.view.animation.AnimationUtils;
 import android.view.animation.Interpolator;
+import android.widget.LinearLayout;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
@@ -64,10 +65,12 @@
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
 import com.google.android.setupcompat.util.WizardManagerHelper;
+import com.google.android.setupdesign.GlifLayout;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * Activity which handles the actual enrolling for fingerprint.
@@ -168,13 +171,37 @@
         mAccessibilityManager = getSystemService(AccessibilityManager.class);
         mIsAccessibilityEnabled = mAccessibilityManager.isEnabled();
 
+        final boolean isLayoutRtl = (TextUtils.getLayoutDirectionFromLocale(
+                Locale.getDefault()) == View.LAYOUT_DIRECTION_RTL);
         listenOrientationEvent();
 
         if (mCanAssumeUdfps) {
-            if (BiometricUtils.isReverseLandscape(getApplicationContext())) {
-                setContentView(R.layout.udfps_enroll_enrolling_land);
-            } else {
-                setContentView(R.layout.udfps_enroll_enrolling);
+            switch(getApplicationContext().getDisplay().getRotation()) {
+                case Surface.ROTATION_90:
+                    final GlifLayout layout = (GlifLayout) getLayoutInflater().inflate(
+                            R.layout.udfps_enroll_enrolling, null, false);
+                    final LinearLayout layoutContainer = layout.findViewById(
+                            R.id.layout_container);
+                    final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
+                            LinearLayout.LayoutParams.MATCH_PARENT,
+                            LinearLayout.LayoutParams.MATCH_PARENT);
+
+                    lp.setMarginEnd((int) getResources().getDimension(
+                            R.dimen.rotation_90_enroll_margin_end));
+                    layoutContainer.setPaddingRelative((int) getResources().getDimension(
+                            R.dimen.rotation_90_enroll_padding_start), 0, isLayoutRtl
+                            ? 0 : (int) getResources().getDimension(
+                                    R.dimen.rotation_90_enroll_padding_end), 0);
+                    layoutContainer.setLayoutParams(lp);
+                    setContentView(layout, lp);
+                    break;
+
+                case Surface.ROTATION_0:
+                case Surface.ROTATION_180:
+                case Surface.ROTATION_270:
+                default:
+                    setContentView(R.layout.udfps_enroll_enrolling);
+                    break;
             }
             setDescriptionText(R.string.security_settings_udfps_enroll_start_message);
         } else {
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/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
index a004a51..a51fbec 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
@@ -218,7 +218,7 @@
      *
      * The valid result should be composed of 3 parts:
      * 1) start timestamp
-     * 2) every 0am timestamp (default timezone) between the start and end
+     * 2) every 00:00 timestamp (default timezone) between the start and end
      * 3) end timestamp
      * Otherwise, returns an empty list.
      */
@@ -277,18 +277,27 @@
     }
 
     /**
-     * @return Returns the timestamp for 0am 1 day after the given timestamp based on local
+     * @return Returns the timestamp for 00:00 1 day after the given timestamp based on local
      * timezone.
      */
     @VisibleForTesting
     static long getTimestampOfNextDay(long timestamp) {
-        final Calendar nextDayCalendar = Calendar.getInstance();
-        nextDayCalendar.setTimeInMillis(timestamp);
-        nextDayCalendar.add(Calendar.DAY_OF_YEAR, 1);
-        nextDayCalendar.set(Calendar.HOUR_OF_DAY, 0);
-        nextDayCalendar.set(Calendar.MINUTE, 0);
-        nextDayCalendar.set(Calendar.SECOND, 0);
-        return nextDayCalendar.getTimeInMillis();
+        return getTimestampWithDayDiff(timestamp, /*dayDiff=*/ 1);
+    }
+
+    /**
+     *  Returns whether currentSlot will be used in daily chart.
+     */
+    @VisibleForTesting
+    static boolean isForDailyChart(final boolean isStartOrEnd, final long currentSlot) {
+        // The start and end timestamps will always be used in daily chart.
+        if (isStartOrEnd) {
+            return true;
+        }
+
+        // The timestamps for 00:00 will be used in daily chart.
+        final long startOfTheDay = getTimestampWithDayDiff(currentSlot, /*dayDiff=*/ 0);
+        return currentSlot == startOfTheDay;
     }
 
     /**
@@ -350,10 +359,13 @@
             startIndex = 1;
             resultMap.put(expectedStartTimestamp, batteryHistoryMap.get(rawStartTimestamp));
         }
-        for (int index = startIndex; index < expectedTimestampSlots.size(); index++) {
+        final int expectedTimestampSlotsSize = expectedTimestampSlots.size();
+        for (int index = startIndex; index < expectedTimestampSlotsSize; index++) {
             final long currentSlot = expectedTimestampSlots.get(index);
+            final boolean isStartOrEnd = index == 0 || index == expectedTimestampSlotsSize - 1;
             interpolateHistoryForSlot(
-                    context, currentSlot, rawTimestampList, batteryHistoryMap, resultMap);
+                    context, currentSlot, rawTimestampList, batteryHistoryMap, resultMap,
+                    isStartOrEnd);
         }
     }
 
@@ -362,7 +374,8 @@
             final long currentSlot,
             final List<Long> rawTimestampList,
             final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap,
-            final Map<Long, Map<String, BatteryHistEntry>> resultMap) {
+            final Map<Long, Map<String, BatteryHistEntry>> resultMap,
+            final boolean isStartOrEnd) {
         final long[] nearestTimestamps = findNearestTimestamp(rawTimestampList, currentSlot);
         final long lowerTimestamp = nearestTimestamps[0];
         final long upperTimestamp = nearestTimestamps[1];
@@ -385,7 +398,8 @@
             return;
         }
         interpolateHistoryForSlot(context,
-                currentSlot, lowerTimestamp, upperTimestamp, batteryHistoryMap, resultMap);
+                currentSlot, lowerTimestamp, upperTimestamp, batteryHistoryMap, resultMap,
+                isStartOrEnd);
     }
 
     private static void interpolateHistoryForSlot(
@@ -394,7 +408,8 @@
             final long lowerTimestamp,
             final long upperTimestamp,
             final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap,
-            final Map<Long, Map<String, BatteryHistEntry>> resultMap) {
+            final Map<Long, Map<String, BatteryHistEntry>> resultMap,
+            final boolean isStartOrEnd) {
         final Map<String, BatteryHistEntry> lowerEntryDataMap =
                 batteryHistoryMap.get(lowerTimestamp);
         final Map<String, BatteryHistEntry> upperEntryDataMap =
@@ -405,7 +420,10 @@
         final long upperEntryDataBootTimestamp =
                 upperEntryDataFirstEntry.mTimestamp - upperEntryDataFirstEntry.mBootTimestamp;
         // Lower data is captured before upper data corresponding device is booting.
-        if (lowerTimestamp < upperEntryDataBootTimestamp) {
+        // Skips the booting-specific logics and always does interpolation for daily chart level
+        // data.
+        if (lowerTimestamp < upperEntryDataBootTimestamp
+                && !isForDailyChart(isStartOrEnd, currentSlot)) {
             // Provides an opportunity to force align the slot directly.
             if ((upperTimestamp - currentSlot) < 10 * DateUtils.MINUTE_IN_MILLIS) {
                 log(context, "force align into the nearest slot", currentSlot, null);
@@ -877,6 +895,16 @@
         return true;
     }
 
+    private static long getTimestampWithDayDiff(final long timestamp, final int dayDiff) {
+        final Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(timestamp);
+        calendar.add(Calendar.DAY_OF_YEAR, dayDiff);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        return calendar.getTimeInMillis();
+    }
+
     private static boolean contains(String target, Set<CharSequence> packageNames) {
         if (target != null && packageNames != null) {
             for (CharSequence packageName : packageNames) {
diff --git a/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java b/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java
index cb56c35..962b6c2 100644
--- a/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java
+++ b/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java
@@ -47,4 +47,9 @@
      * Returns {@code true} advanced vpn is removable.
      */
     boolean isAdvancedVpnRemovable();
+
+    /**
+     * Returns {@code true} if the disconnect dialog is enabled when advanced vpn is connected.
+     */
+    boolean isDisconnectDialogEnabled();
 }
diff --git a/src/com/android/settings/vpn2/AdvancedVpnFeatureProviderImpl.java b/src/com/android/settings/vpn2/AdvancedVpnFeatureProviderImpl.java
index c5bc69c..b8f58a9 100644
--- a/src/com/android/settings/vpn2/AdvancedVpnFeatureProviderImpl.java
+++ b/src/com/android/settings/vpn2/AdvancedVpnFeatureProviderImpl.java
@@ -46,4 +46,9 @@
     public boolean isAdvancedVpnRemovable() {
         return true;
     }
+
+    @Override
+    public boolean isDisconnectDialogEnabled() {
+        return true;
+    }
 }
diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java
index 3b875eb..a91bb6c 100644
--- a/src/com/android/settings/vpn2/VpnSettings.java
+++ b/src/com/android/settings/vpn2/VpnSettings.java
@@ -366,7 +366,7 @@
     public void setShownPreferences(final Collection<Preference> updates) {
         retainAllPreference(updates);
 
-        final PreferenceGroup vpnGroup = getPreferenceScreen();
+        final PreferenceGroup vpnGroup = mPreferenceScreen;
         updatePreferenceGroup(vpnGroup, updates);
 
         // Show all new preferences on the screen
@@ -448,14 +448,16 @@
         } else if (preference instanceof AppPreference) {
             AppPreference pref = (AppPreference) preference;
             boolean connected = (pref.getState() == AppPreference.STATE_CONNECTED);
+            String vpnPackageName = pref.getPackageName();
 
-            if (!connected) {
+            if ((!connected) || (isAdvancedVpn(mFeatureProvider, vpnPackageName, getContext())
+                    && !mFeatureProvider.isDisconnectDialogEnabled())) {
                 try {
                     UserHandle user = UserHandle.of(pref.getUserId());
-                    Context userContext = getActivity().createPackageContextAsUser(
-                            getActivity().getPackageName(), 0 /* flags */, user);
+                    Context userContext = getContext().createPackageContextAsUser(
+                            getContext().getPackageName(), 0 /* flags */, user);
                     PackageManager pm = userContext.getPackageManager();
-                    Intent appIntent = pm.getLaunchIntentForPackage(pref.getPackageName());
+                    Intent appIntent = pm.getLaunchIntentForPackage(vpnPackageName);
                     if (appIntent != null) {
                         userContext.startActivityAsUser(appIntent, user);
                         return true;
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);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
index 1b1e469..af1030c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
@@ -402,6 +402,17 @@
     }
 
     @Test
+    public void isForDailyChart_returnExpectedResult() {
+        assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ true, 0L)).isTrue();
+        // 2022-01-01 00:00:00
+        assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ false, 1640966400000L))
+                .isTrue();
+        // 2022-01-01 01:00:05
+        assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ false, 1640970005000L))
+                .isFalse();
+    }
+
+    @Test
     public void getBatteryUsageMap_emptyHistoryMap_returnNull() {
         final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay =
                 new ArrayList<>();
diff --git a/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java b/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
index d6ba33a..953a524 100644
--- a/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
+++ b/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
@@ -21,16 +21,21 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.app.AppOpsManager;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.os.Looper;
 import android.os.UserHandle;
+import android.text.TextUtils;
 import android.util.ArraySet;
 
 import androidx.preference.Preference;
@@ -48,6 +53,7 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
@@ -58,13 +64,18 @@
 
 @RunWith(AndroidJUnit4.class)
 public class VpnSettingsTest {
-    private static final String ADVANCED_VPN_GROUP_KEY = "advanced_vpn_group";
-    private static final String VPN_GROUP_KEY = "vpn_group";
-    private static final String ADVANCED_VPN_GROUP_TITLE = "advanced_vpn_group_title";
-    private static final String VPN_GROUP_TITLE = "vpn_group_title";
-    private static final String FAKE_PACKAGE_NAME = "com.fake.package.name";
-    private static final String ADVANCED_VPN_GROUP_PACKAGE_NAME = "com.advanced.package.name";
     private static final int USER_ID_1 = UserHandle.USER_NULL;
+    private static final String VPN_GROUP_KEY = "vpn_group";
+    private static final String VPN_GROUP_TITLE = "vpn_group_title";
+    private static final String VPN_PACKAGE_NAME = "vpn.package.name";
+    private static final String VPN_LAUNCH_INTENT = "vpn.action";
+    private static final String ADVANCED_VPN_GROUP_KEY = "advanced_vpn_group";
+    private static final String ADVANCED_VPN_GROUP_TITLE = "advanced_vpn_group_title";
+    private static final String ADVANCED_VPN_PACKAGE_NAME = "advanced.vpn.package.name";
+    private static final String ADVANCED_VPN_LAUNCH_INTENT = "advanced.vpn.action";
+
+    private final Intent mVpnIntent = new Intent().setAction(VPN_LAUNCH_INTENT);
+    private final Intent mAdvancedVpnIntent = new Intent().setAction(ADVANCED_VPN_LAUNCH_INTENT);
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -108,7 +119,7 @@
         when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.getVpnPreferenceGroupTitle(mContext))
                 .thenReturn(VPN_GROUP_TITLE);
         when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.getAdvancedVpnPackageName())
-                .thenReturn(ADVANCED_VPN_GROUP_PACKAGE_NAME);
+                .thenReturn(ADVANCED_VPN_PACKAGE_NAME);
         when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isAdvancedVpnSupported(any()))
                 .thenReturn(true);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
@@ -122,7 +133,7 @@
     public void setShownAdvancedPreferences_hasGeneralVpn_returnsVpnCountAs1() {
         Set<Preference> updates = new ArraySet<>();
         AppPreference pref =
-                spy(new AppPreference(mContext, USER_ID_1, FAKE_PACKAGE_NAME));
+                spy(new AppPreference(mContext, USER_ID_1, VPN_PACKAGE_NAME));
         updates.add(pref);
 
         mVpnSettings.setShownAdvancedPreferences(updates);
@@ -136,7 +147,7 @@
     public void setShownAdvancedPreferences_hasAdvancedVpn_returnsAdvancedVpnCountAs1() {
         Set<Preference> updates = new ArraySet<>();
         AppPreference pref =
-                spy(new AppPreference(mContext, USER_ID_1, ADVANCED_VPN_GROUP_PACKAGE_NAME));
+                spy(new AppPreference(mContext, USER_ID_1, ADVANCED_VPN_PACKAGE_NAME));
         updates.add(pref);
 
         mVpnSettings.setShownAdvancedPreferences(updates);
@@ -175,7 +186,7 @@
         List<AppOpsManager.OpEntry> opEntries = new ArrayList<>();
         List<AppOpsManager.PackageOps> apps = new ArrayList<>();
         AppOpsManager.PackageOps packageOps =
-                new AppOpsManager.PackageOps(FAKE_PACKAGE_NAME, uid, opEntries);
+                new AppOpsManager.PackageOps(VPN_PACKAGE_NAME, uid, opEntries);
         apps.add(packageOps);
         when(mAppOpsManager.getPackagesForOps((int[]) any())).thenReturn(apps);
         when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isAdvancedVpnSupported(any()))
@@ -185,4 +196,90 @@
                 mFakeFeatureFactory.getAdvancedVpnFeatureProvider(),
                 mAppOpsManager)).isEmpty();
     }
+
+    @Test
+    public void clickVpn_VpnConnected_doesNotStartVpnLaunchIntent()
+            throws PackageManager.NameNotFoundException {
+        Set<Preference> updates = new ArraySet<>();
+        AppPreference pref = spy(new AppPreference(mContext, USER_ID_1, VPN_PACKAGE_NAME));
+        pref.setState(AppPreference.STATE_CONNECTED);
+        updates.add(pref);
+        when(mContext.createPackageContextAsUser(any(), anyInt(), any())).thenReturn(mContext);
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        when(mPackageManager.getLaunchIntentForPackage(any())).thenReturn(mVpnIntent);
+        ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+        doNothing().when(mContext).startActivityAsUser(captor.capture(), any());
+        mVpnSettings.setShownPreferences(updates);
+
+        mVpnSettings.onPreferenceClick(pref);
+
+        verify(mContext, never()).startActivityAsUser(any(), any());
+    }
+
+    @Test
+    public void clickVpn_VpnDisconnected_startsVpnLaunchIntent()
+            throws PackageManager.NameNotFoundException {
+        Set<Preference> updates = new ArraySet<>();
+        AppPreference pref = spy(new AppPreference(mContext, USER_ID_1, VPN_PACKAGE_NAME));
+        pref.setState(AppPreference.STATE_DISCONNECTED);
+        updates.add(pref);
+        when(mContext.createPackageContextAsUser(any(), anyInt(), any())).thenReturn(mContext);
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        when(mPackageManager.getLaunchIntentForPackage(any())).thenReturn(mVpnIntent);
+        ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+        doNothing().when(mContext).startActivityAsUser(captor.capture(), any());
+        mVpnSettings.setShownPreferences(updates);
+
+        mVpnSettings.onPreferenceClick(pref);
+
+        verify(mContext).startActivityAsUser(captor.capture(), any());
+        assertThat(TextUtils.equals(captor.getValue().getAction(),
+                VPN_LAUNCH_INTENT)).isTrue();
+    }
+
+    @Test
+    public void clickAdvancedVpn_VpnConnectedDisconnectDialogDisabled_startsAppLaunchIntent()
+            throws PackageManager.NameNotFoundException {
+        Set<Preference> updates = new ArraySet<>();
+        AppPreference pref =
+                spy(new AppPreference(mContext, USER_ID_1, ADVANCED_VPN_PACKAGE_NAME));
+        pref.setState(AppPreference.STATE_CONNECTED);
+        updates.add(pref);
+        when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isDisconnectDialogEnabled())
+                .thenReturn(false);
+        when(mContext.createPackageContextAsUser(any(), anyInt(), any())).thenReturn(mContext);
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        when(mPackageManager.getLaunchIntentForPackage(any())).thenReturn(mAdvancedVpnIntent);
+        ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+        doNothing().when(mContext).startActivityAsUser(captor.capture(), any());
+        mVpnSettings.setShownAdvancedPreferences(updates);
+
+        mVpnSettings.onPreferenceClick(pref);
+
+        verify(mContext).startActivityAsUser(captor.capture(), any());
+        assertThat(TextUtils.equals(captor.getValue().getAction(),
+                ADVANCED_VPN_LAUNCH_INTENT)).isTrue();
+    }
+
+    @Test
+    public void clickAdvancedVpn_VpnConnectedDisconnectDialogEnabled_doesNotStartAppLaunchIntent()
+            throws PackageManager.NameNotFoundException {
+        Set<Preference> updates = new ArraySet<>();
+        AppPreference pref =
+                spy(new AppPreference(mContext, USER_ID_1, ADVANCED_VPN_PACKAGE_NAME));
+        pref.setState(AppPreference.STATE_CONNECTED);
+        updates.add(pref);
+        when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isDisconnectDialogEnabled())
+                .thenReturn(true);
+        when(mContext.createPackageContextAsUser(any(), anyInt(), any())).thenReturn(mContext);
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        when(mPackageManager.getLaunchIntentForPackage(any())).thenReturn(mAdvancedVpnIntent);
+        ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+        doNothing().when(mContext).startActivityAsUser(captor.capture(), any());
+        mVpnSettings.setShownAdvancedPreferences(updates);
+
+        mVpnSettings.onPreferenceClick(pref);
+
+        verify(mContext, never()).startActivityAsUser(any(), any());
+    }
 }
