Merge "[MEP] Inserting a pSIM while user has 2 esims, showing the MEP dialog"
diff --git a/color-check-baseline.xml b/color-check-baseline.xml
index 559a589..16658f8 100644
--- a/color-check-baseline.xml
+++ b/color-check-baseline.xml
@@ -2885,6 +2885,22 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="            android:color="@color/accessibility_feature_background"/>"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/ic_audio_description.xml"
+            line="22"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="        android:fillColor=&quot;@color/battery_good_color_light&quot;"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/res/drawable/ic_audio_description.xml b/res/drawable/ic_audio_description.xml
new file mode 100644
index 0000000..0226582
--- /dev/null
+++ b/res/drawable/ic_audio_description.xml
@@ -0,0 +1,35 @@
+<!--
+  Copyright 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.
+  -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <com.android.settingslib.widget.AdaptiveIconShapeDrawable
+            android:width="@dimen/accessibility_icon_size"
+            android:height="@dimen/accessibility_icon_size"
+            android:color="@color/accessibility_feature_background"/>
+    </item>
+    <item android:gravity="center">
+        <vector
+            android:width="@dimen/accessibility_icon_foreground_size"
+            android:height="@dimen/accessibility_icon_foreground_size"
+            android:viewportWidth="24"
+            android:viewportHeight="24">
+            <path
+                android:fillColor="@android:color/white"
+                android:pathData="M10,18v-4L8,14v-2q0,-1.65 1.175,-2.825Q10.35,8 12,8q1.65,0 2.825,1.175Q16,10.35 16,12v2h-2v4h2.8q0.5,0 0.85,-0.35t0.35,-0.85L18,12q0,-2.5 -1.75,-4.25T12,6Q9.5,6 7.75,7.75T6,12v4.8q0,0.5 0.35,0.85t0.85,0.35zM5,21q-0.825,0 -1.413,-0.587Q3,19.825 3,19L3,5q0,-0.825 0.587,-1.413Q4.175,3 5,3h14q0.825,0 1.413,0.587Q21,4.175 21,5v14q0,0.825 -0.587,1.413Q19.825,21 19,21zM5,19h14L19,5L5,5v14zM5,19L5,5v14z"/>
+        </vector>
+    </item>
+</layer-list>
\ No newline at end of file
diff --git a/res/layout/forgot_password_activity.xml b/res/layout/forgot_password_activity.xml
index ed1e2d2..7973251 100644
--- a/res/layout/forgot_password_activity.xml
+++ b/res/layout/forgot_password_activity.xml
@@ -32,6 +32,7 @@
 
         <TextView
             style="@style/SudDescription.Glif"
+            android:id="@+id/forgot_password_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:gravity="center"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a50c51a..a829847 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5554,6 +5554,13 @@
     </plurals>
     <!-- Title for the accessibility audio adjustment page. [CHAR LIMIT=50] -->
     <string name="accessibility_audio_adjustment_title">Audio adjustment</string>
+    <!-- Title for control audio description preference. [CHAR LIMIT=50] -->
+    <string name="accessibility_toggle_audio_description_preference_title">Audio Description</string>
+    <!-- Summary for accessibility preference for audio description when need
+    audio description in adopted apps. [CHAR_LIMIT=NONE] -->
+    <string name="accessibility_audio_description_summary">Select audio sound track with audio description by default</string>
+    <!-- List of synonyms used in the settings search bar to find the "Audio Description. [CHAR LIMIT=NONE] -->
+    <string name="keywords_audio_description">audio description, audio, description, low vision,</string>
 
     <!-- Preference's shortcut when enabled. [CHAR LIMIT=NONE] -->
     <string name="accessibility_summary_shortcut_enabled">Shortcut on</string>
@@ -12032,20 +12039,44 @@
 
     <!-- Title of setting on security settings screen on a financed device. This will take the user to a screen with information about what a device administrator can control and their impact on the user's privacy on a financed device. Shown on financed-managed devices only. [CHAR LIMIT=NONE] -->
     <string name="financed_privacy_settings">Financed device info</string>
-    <!-- Section header. This section shows what information a device administrator can see on a financed device. [CHAR LIMIT=60] -->
-    <string name="financed_privacy_exposure_category">Types of information your device administrator can see</string>
-    <!-- Label explaining that the device administrator can see data associated on the user's financed device. [CHAR LIMIT=NONE] -->
-    <string name="financed_privacy_data">Data associated with your account, such as email and calendar info</string>
-    <!-- Section header. This section shows what changes a device administrator made to a financed device. [CHAR LIMIT=60] -->
-    <string name="financed_privacy_exposure_changes_category">Changes made by your device administrator</string>
-    <!-- Label explaining that the device admin can lock the device and change the user's password on their financed device. [CHAR LIMIT=NONE] -->
-    <string name="financed_privacy_lock_device">Device administrator can lock this device and reset password</string>
-    <!-- Label explaining that the device admin can wipe the device remotely for a financed device. [CHAR LIMIT=NONE] -->
-    <string name="financed_privacy_wipe_device">Device administrator can delete all device data</string>
-    <!-- Label explaining that the device admin configured the device to wipe itself when an incorrect password is entered too many times on a financed device. [CHAR LIMIT=NONE] -->
-    <string name="financed_privacy_failed_password_wipe_device">Failed password attempts before deleting device data</string>
-    <!-- Financed Privacy settings activity header, summarizing the changes a credit provider can make to a financed device. [CHAR LIMIT=NONE] -->
-    <string name="financed_privacy_header">Your credit provider can change settings and install software on this device.\n\nTo learn more, contact your creditor provider.</string>
+    <!-- Top introduction on the financed device privacy settings, summarizing the changes a credit provider can make to a financed device. [CHAR LIMIT=NONE] -->
+    <string name="financed_privacy_intro">Your credit provider can change settings and install software on this device.\n\nIf you miss a payment, your device will be locked.\n\nTo learn more, contact your credit provider.</string>
+    <!-- Section header. This section shows what restrictions will be enforced on the device when it is financed. [CHAR LIMIT=60] -->
+    <string name="financed_privacy_restrictions_category">If your device is financed, you can\u2019t:</string>
+    <!-- Label explaining that installing apps from unknown sources beyond Play Store. [CHAR LIMIT=60]-->
+    <string name="financed_privacy_install_apps">Install apps from outside the Play Store</string>
+    <!-- Label explaining that rebooting the device into safe mode. [CHAR LIMIT=60]-->
+    <string name="financed_privacy_safe_mode">Reboot your device into safe mode</string>
+    <!-- Label explaining that adding more than one user into the device. [CHAR LIMIT=60]-->
+    <string name="financed_privacy_multi_users">Add multiple users to your device</string>
+    <!-- Label explaining that updating the date and time on the device. [CHAR LIMIT=60] -->
+    <string name="financed_privacy_config_date_time">Change date, time, and time zones</string>
+    <!-- Label explaining that turning on the developer options on the device. [CHAR LIMIT=40]-->
+    <string name="financed_privacy_developer_options">Use developer options</string>
+    <!-- Section header. This section shows how credit provider would control the device. [CHAR LIMIT=40]-->
+    <string name="financed_privacy_credit_provider_capabilities_category">Your credit provider can:</string>
+    <!-- Label explaining that IMEI can be access by the credit provider. [CHAR LIMIT=40] -->
+    <string name="financed_privacy_IMEI">Access your IMEI number</string>
+    <!-- Label explaining that device can be reset and data can be deleted. [CHAR LIMIT=40]-->
+    <string name="financed_privacy_factory_reset">Factory reset your device</string>
+    <!-- Section header. This section shows what the user can do if the device is locked by the credit provider. [CHAR LIMIT=100] -->
+    <string name="financed_privacy_locked_mode_category">If your device is locked, you can only use it to:</string>
+    <!-- Label explaining that calling emergency numbers. [CHAR LIMIT=40]-->
+    <string name="financed_privacy_emergency_calls">Make emergency calls</string>
+    <!-- Label explaining that access basic system level data including date, time, network status, and battery info. [CHAR LIMIT=100]-->
+    <string name="financed_privacy_system_info">View system info like date, time, network status, and battery</string>
+    <!-- Label explaining that powering on or off the device. [CHAR LIMIT=60]-->
+    <string name="financed_privacy_turn_on_off_device">Turn your device on or off</string>
+    <!-- Label explaining that accessing notifications and text messages. [CHAR LIMIT=60]-->
+    <string name="financed_privacy_notifications">View notifications &amp; text messages</string>
+    <!-- Label explaining that using apps that are allowed to be used by the credit provider when the device is locked. [CHAR LIMIT=100]-->
+    <string name="financed_privacy_allowlisted_apps">Access apps that are allowed by the credit provider</string>
+    <!-- Section header. This sections shows what would happen if the device is fully paid. [CHAR LIMIT=60] -->
+    <string name="financed_privacy_fully_paid_category">Once you pay the full amount:</string>
+    <!-- Label explaining that all previously restrictions enforce by the credit provider will be revoked. [CHAR LIMIT=100]-->
+    <string name="financed_privacy_restrictions_removed">All restrictions are removed from the device</string>
+    <!-- Label explaining that the app installed by credit provider can be uninstalled. [CHAR LIMIT=60]-->
+    <string name="financed_privacy_uninstall_creditor_app">You can uninstall the creditor app</string>
 
     <!-- Strings for displaying which applications were set as default for specific actions. -->
     <!-- Title for the apps that have been set as default handlers of camera-related intents. [CHAR LIMIT=30] -->
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index dcf3fc2..fcdf47b 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -81,6 +81,16 @@
             settings:keywords="@string/keywords_magnification"
             settings:controller="com.android.settings.accessibility.MagnificationPreferenceController"/>
 
+        <SwitchPreference
+            android:key="toggle_audio_description"
+            android:persistent="false"
+            android:icon="@drawable/ic_audio_description"
+            android:summary="@string/accessibility_audio_description_summary"
+            android:title="@string/accessibility_toggle_audio_description_preference_title"
+            settings:keywords="@string/keywords_audio_description"
+            settings:searchable="true"
+            settings:controller="com.android.settings.accessibility.AudioDescriptionPreferenceController"/>
+
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/res/xml/financed_privacy_settings.xml b/res/xml/financed_privacy_settings.xml
index 742d7e1..4e5a46a 100644
--- a/res/xml/financed_privacy_settings.xml
+++ b/res/xml/financed_privacy_settings.xml
@@ -19,66 +19,102 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/financed_privacy_settings">
 
-    <PreferenceCategory android:key="exposure_category"
+    <com.android.settingslib.widget.TopIntroPreference
+        android:title="@string/financed_privacy_intro"
+        settings:searchable="false" />
+
+    <PreferenceCategory android:key="restrictions_category"
+        android:order="100"
+        android:title="@string/financed_privacy_restrictions_category"
+        android:contentDescription="@string/financed_privacy_restrictions_category">
+        <Preference android:key="financed_privacy_install_apps"
+            android:order="110"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_install_apps"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_safe_mode"
+            android:order="120"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_safe_mode"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_multi_users"
+            android:order="130"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_multi_users"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_config_date_time"
+            android:order="140"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_config_date_time"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_developer_options"
+            android:order="150"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_developer_options"
+            android:selectable="false" />
+    </PreferenceCategory>
+
+    <PreferenceCategory android:key="credit_provider_capabilities_category"
         android:order="200"
-        android:title="@string/financed_privacy_exposure_category"
-        android:contentDescription="@string/financed_privacy_exposure_category">
-        <Preference android:key="enterprise_privacy_enterprise_data"
+        android:title="@string/financed_privacy_credit_provider_capabilities_category"
+        android:contentDescription="@string/financed_privacy_credit_provider_capabilities_category">
+        <Preference android:key="financed_privacy_IMEI"
             android:order="210"
             android:layout_height="wrap_content"
-            android:title="@string/financed_privacy_data"
-            android:selectable="false"/>
-        <Preference android:key="enterprise_privacy_installed_packages"
+            android:title="@string/financed_privacy_IMEI"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_factory_reset"
             android:order="220"
-            android:title="@string/enterprise_privacy_installed_packages"
-            android:selectable="false"/>
-        <Preference android:key="enterprise_privacy_usage_stats"
-            android:order="230"
-            android:title="@string/enterprise_privacy_usage_stats"
-            android:selectable="false"/>
-        <Preference android:key="network_logs"
-            android:order="240"
-            android:title="@string/enterprise_privacy_network_logs"
-            android:selectable="false"/>
-        <Preference android:key="bug_reports"
-            android:order="250"
-            android:title="@string/enterprise_privacy_bug_reports"
-            android:selectable="false"/>
-        <Preference android:key="security_logs"
-            android:order="260"
-            android:title="@string/enterprise_privacy_security_logs"
-            android:selectable="false"/>
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_factory_reset"
+            android:selectable="false" />
     </PreferenceCategory>
 
-    <PreferenceCategory android:title="@string/financed_privacy_exposure_changes_category"
+    <PreferenceCategory android:key="locked_mode_category"
         android:order="300"
-        android:key="exposure_changes_category">
-        <Preference android:fragment="com.android.settings.enterprise.ApplicationListFragment$EnterpriseInstalledPackages"
+        android:title="@string/financed_privacy_locked_mode_category"
+        android:contentDescription="@string/financed_privacy_locked_mode_category">
+        <Preference android:key="financed_privacy_emergency_calls"
             android:order="310"
-            android:key="number_enterprise_installed_packages"
-            android:title="@string/enterprise_privacy_enterprise_installed_packages"/>
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_emergency_calls"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_system_info"
+            android:order="320"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_system_info"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_turn_on_off_device"
+            android:order="330"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_turn_on_off_device"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_notifications"
+            android:order="340"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_notifications"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_allowlisted_apps"
+            android:order="350"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_allowlisted_apps"
+            android:selectable="false" />
     </PreferenceCategory>
 
-    <PreferenceCategory android:key="device_access_category"
-        android:order="500"
-        android:title="@string/enterprise_privacy_device_access_category">
-        <Preference android:key="enterprise_privacy_lock_device"
-            android:order="510"
-            android:title="@string/financed_privacy_lock_device"
-            android:selectable="false"/>
-        <Preference android:key="enterprise_privacy_wipe_device"
-            android:order="520"
-            android:title="@string/financed_privacy_wipe_device"
-            android:selectable="false"/>
-        <Preference android:key="failed_password_wipe_current_user"
-            android:order="530"
-            android:title="@string/financed_privacy_failed_password_wipe_device"
-            android:selectable="false"/>
+    <PreferenceCategory android:key="fully_paid_category"
+        android:order="400"
+        android:title="@string/financed_privacy_fully_paid_category"
+        android:contentDescription="@string/financed_privacy_fully_paid_category">
+        <Preference android:key="financed_privacy_restrictions_removed"
+            android:order="410"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_restrictions_removed"
+            android:selectable="false" />
+        <Preference android:key="financed_privacy_uninstall_creditor_app"
+            android:order="420"
+            android:layout_height="wrap_content"
+            android:title="@string/financed_privacy_uninstall_creditor_app"
+            android:selectable="false" />
     </PreferenceCategory>
 
-    <com.android.settingslib.widget.FooterPreference
-        android:key="financed_privacy_footer"
-        android:title="@string/financed_privacy_header"
-        android:selectable="false"
-        settings:searchable="false"/>
 </PreferenceScreen>
diff --git a/res/xml/interact_across_profiles_permissions_details.xml b/res/xml/interact_across_profiles_permissions_details.xml
index bf0ea8f..2e0f3d8 100644
--- a/res/xml/interact_across_profiles_permissions_details.xml
+++ b/res/xml/interact_across_profiles_permissions_details.xml
@@ -32,10 +32,12 @@
             android:key="interact_across_profiles_settings_switch" />
 
         <Preference
+            android:key="interact_across_profiles_summary_1"
             android:summary="@string/interact_across_profiles_summary_1"
             android:selectable="false" />
 
         <Preference
+            android:key="interact_across_profiles_summary_2"
             android:summary="@string/interact_across_profiles_summary_2"
             android:selectable="false" />
 
diff --git a/src/com/android/settings/FallbackHome.java b/src/com/android/settings/FallbackHome.java
index 40867aa..b70470b 100644
--- a/src/com/android/settings/FallbackHome.java
+++ b/src/com/android/settings/FallbackHome.java
@@ -42,7 +42,7 @@
 
 public class FallbackHome extends Activity {
     private static final String TAG = "FallbackHome";
-    private static final int PROGRESS_TIMEOUT = 2000;
+    private int mProgressTimeout;
 
     private boolean mProvisioned;
     private WallpaperManager mWallManager;
@@ -76,6 +76,12 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        mProgressTimeout = getResources().getInteger(
+            com.android.internal.R.integer.config_progressTimeoutFallbackHome);
+
+        if (mProgressTimeout <= 0) {
+            mProgressTimeout = 0;
+        }
 
         // Set ourselves totally black before the device is provisioned so that
         // we don't flash the wallpaper before SUW
@@ -107,7 +113,7 @@
     protected void onResume() {
         super.onResume();
         if (mProvisioned) {
-            mHandler.postDelayed(mProgressTimeoutRunnable, PROGRESS_TIMEOUT);
+            mHandler.postDelayed(mProgressTimeoutRunnable, mProgressTimeout);
         }
     }
 
diff --git a/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java b/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java
index f9b537b..5fc4cd2 100644
--- a/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java
@@ -221,6 +221,13 @@
             extras.putString(AccessibilitySettings.EXTRA_SETTINGS_COMPONENT_NAME,
                     new ComponentName(packageName, settingsClassName).flattenToString());
         }
+
+        final String tileServiceClassName = info.getTileServiceClassName();
+        if (!TextUtils.isEmpty(tileServiceClassName)) {
+            extras.putString(AccessibilitySettings.EXTRA_TILE_SERVICE_COMPONENT_NAME,
+                    new ComponentName(packageName, tileServiceClassName).flattenToString());
+        }
+
         extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName);
         extras.putInt(AccessibilitySettings.EXTRA_ANIMATED_IMAGE_RES, info.getAnimatedImageRes());
 
diff --git a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
index 0ca16cb..773c987 100644
--- a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
+++ b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
@@ -46,6 +46,7 @@
 import androidx.annotation.DrawableRes;
 import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.RawRes;
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.AlertDialog;
@@ -125,9 +126,15 @@
     }
 
     static AlertDialog createAccessibilityTutorialDialog(Context context, int shortcutTypes) {
+        return createAccessibilityTutorialDialog(context, shortcutTypes, mOnClickListener);
+    }
+
+    static AlertDialog createAccessibilityTutorialDialog(Context context, int shortcutTypes,
+            @Nullable DialogInterface.OnClickListener negativeButtonListener) {
         return new AlertDialog.Builder(context)
                 .setView(createShortcutNavigationContentView(context, shortcutTypes))
-                .setNegativeButton(R.string.accessibility_tutorial_dialog_button, mOnClickListener)
+                .setNegativeButton(R.string.accessibility_tutorial_dialog_button,
+                        negativeButtonListener)
                 .create();
     }
 
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index b712b9d..e834640 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -97,6 +97,7 @@
     static final String EXTRA_SETTINGS_TITLE = "settings_title";
     static final String EXTRA_COMPONENT_NAME = "component_name";
     static final String EXTRA_SETTINGS_COMPONENT_NAME = "settings_component_name";
+    static final String EXTRA_TILE_SERVICE_COMPONENT_NAME = "tile_service_component_name";
     static final String EXTRA_VIDEO_RAW_RESOURCE_ID = "video_resource";
     static final String EXTRA_LAUNCHED_FROM_SUW = "from_suw";
     static final String EXTRA_ANIMATED_IMAGE_RES = "animated_image_res";
@@ -573,11 +574,13 @@
                         serviceEnabled);
                 final String htmlDescription = info.loadHtmlDescription(mPm);
                 final String settingsClassName = info.getSettingsActivityName();
+                final String tileServiceClassName = info.getTileServiceClassName();
 
                 putBasicExtras(preference, prefKey, title, description, imageRes, htmlDescription,
                         componentName);
                 putServiceExtras(preference, resolveInfo, serviceEnabled);
                 putSettingsExtras(preference, packageName, settingsClassName);
+                putTileServiceExtras(preference, packageName, tileServiceClassName);
 
                 preferenceList.add(preference);
             }
@@ -631,10 +634,13 @@
                 final int imageRes = info.getAnimatedImageRes();
                 final String htmlDescription = info.loadHtmlDescription(mPm);
                 final String settingsClassName = info.getSettingsActivityName();
+                final String tileServiceClassName = info.getTileServiceClassName();
 
                 putBasicExtras(preference, prefKey, title, description, imageRes, htmlDescription,
                         componentName);
                 putSettingsExtras(preference, componentName.getPackageName(), settingsClassName);
+                putTileServiceExtras(preference, componentName.getPackageName(),
+                        tileServiceClassName);
 
                 preferenceList.add(preference);
             }
@@ -730,7 +736,11 @@
         /**
          * Puts the service extras into {@link RestrictedPreference}'s getExtras().
          *
-         * Called by {@link AccessibilityServiceInfo} for now.
+         * <p><b>Note:</b> Called by {@link AccessibilityServiceInfo}.</p>
+         *
+         * @param preference The preference we are configuring.
+         * @param resolveInfo The service resolve info.
+         * @param serviceEnabled Whether the accessibility service is enabled.
          */
         private void putServiceExtras(RestrictedPreference preference, ResolveInfo resolveInfo,
                 Boolean serviceEnabled) {
@@ -743,7 +753,12 @@
         /**
          * Puts the settings extras into {@link RestrictedPreference}'s getExtras().
          *
-         * Called when settings UI is needed.
+         * <p><b>Note:</b> Called when settings UI is needed.</p>
+         *
+         * @param preference The preference we are configuring.
+         * @param packageName Package of accessibility feature.
+         * @param settingsClassName The component name of an activity that allows the user to modify
+         *                          the settings for this accessibility feature.
          */
         private void putSettingsExtras(RestrictedPreference preference, String packageName,
                 String settingsClassName) {
@@ -756,5 +771,27 @@
                         new ComponentName(packageName, settingsClassName).flattenToString());
             }
         }
+
+        /**
+         * Puts the information about a particular application
+         * {@link android.service.quicksettings.TileService} into {@link RestrictedPreference}'s
+         * getExtras().
+         *
+         * <p><b>Note:</b> Called when a tooltip of
+         * {@link android.service.quicksettings.TileService} is needed.</p>
+         *
+         * @param preference The preference we are configuring.
+         * @param packageName Package of accessibility feature.
+         * @param tileServiceClassName The component name of tileService is associated with this
+         *                             accessibility feature.
+         */
+        private void putTileServiceExtras(RestrictedPreference preference, String packageName,
+                String tileServiceClassName) {
+            final Bundle extras = preference.getExtras();
+            if (!TextUtils.isEmpty(tileServiceClassName)) {
+                extras.putString(EXTRA_TILE_SERVICE_COMPONENT_NAME,
+                        new ComponentName(packageName, tileServiceClassName).flattenToString());
+            }
+        }
     }
 }
diff --git a/src/com/android/settings/accessibility/AudioDescriptionPreferenceController.java b/src/com/android/settings/accessibility/AudioDescriptionPreferenceController.java
new file mode 100644
index 0000000..a05a0d0
--- /dev/null
+++ b/src/com/android/settings/accessibility/AudioDescriptionPreferenceController.java
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.accessibility;
+
+import static android.provider.Settings.Secure.ENABLED_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.provider.Settings;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
+/**
+ * A toggle preference controller for audio description
+ */
+public class AudioDescriptionPreferenceController extends TogglePreferenceController {
+
+    static final String PREF_KEY = "toggle_audio_description";
+
+    public AudioDescriptionPreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    @Override
+    public boolean isChecked() {
+        return Settings.Secure.getIntForUser(mContext.getContentResolver(),
+                ENABLED_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT,
+                OFF /* default */,
+                UserHandle.USER_CURRENT) == ON;
+    }
+
+    @Override
+    public boolean setChecked(boolean isChecked) {
+        return Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                ENABLED_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT,
+                isChecked ? ON : OFF,
+                UserHandle.USER_CURRENT);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
+    }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
+}
diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
index 00f2804..ce8db21 100644
--- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
@@ -20,9 +20,11 @@
 
 import android.accessibilityservice.AccessibilityShortcutInfo;
 import android.app.ActivityOptions;
+import android.app.Dialog;
 import android.content.ActivityNotFoundException;
 import android.content.ComponentName;
 import android.content.ContentResolver;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.net.Uri;
@@ -51,6 +53,7 @@
     private static final String TAG = "LaunchA11yActivity";
     private static final String EMPTY_STRING = "";
     protected static final String KEY_LAUNCH_PREFERENCE = "launch_preference";
+    private ComponentName mTileComponentName;
 
     @Override
     public int getMetricsCategory() {
@@ -106,6 +109,13 @@
                 AccessibilitySettings.EXTRA_SETTINGS_TITLE);
         mSettingsIntent = TextUtils.isEmpty(settingsTitle) ? null : getSettingsIntent(arguments);
         mSettingsTitle = (mSettingsIntent == null) ? null : settingsTitle;
+
+        // Tile service.
+        if (arguments.containsKey(AccessibilitySettings.EXTRA_TILE_SERVICE_COMPONENT_NAME)) {
+            final String tileServiceComponentName = arguments.getString(
+                    AccessibilitySettings.EXTRA_TILE_SERVICE_COMPONENT_NAME);
+            mTileComponentName = ComponentName.unflattenFromString(tileServiceComponentName);
+        }
     }
 
     @Override
@@ -116,12 +126,30 @@
 
     @Override
     ComponentName getTileComponentName() {
-        return null;
+        return mTileComponentName;
     }
 
     @Override
     CharSequence getTileName() {
-        return null;
+        final ComponentName componentName = getTileComponentName();
+        if (componentName == null) {
+            return null;
+        }
+        return loadTileLabel(getPrefContext(), componentName);
+    }
+
+    @Override
+    public Dialog onCreateDialog(int dialogId) {
+        switch (dialogId) {
+            case AccessibilityDialogUtils.DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
+                final Dialog dialog = AccessibilityGestureNavigationTutorial
+                        .createAccessibilityTutorialDialog(getPrefContext(),
+                                getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
+                dialog.setCanceledOnTouchOutside(false);
+                return dialog;
+            default:
+                return super.onCreateDialog(dialogId);
+        }
     }
 
     @Override
@@ -208,4 +236,22 @@
 
         return settingsIntent;
     }
+
+    /**
+     * This method will be invoked when a button in the tutorial dialog is clicked.
+     *
+     * @param dialog The dialog that received the click
+     * @param which  The button that was clicked
+     */
+    private void callOnTutorialDialogButtonClicked(DialogInterface dialog, int which) {
+        dialog.dismiss();
+        showQuickSettingsTooltipIfNeeded();
+    }
+
+
+    @Override
+    protected void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) {
+        super.callOnAlertDialogCheckboxClicked(dialog, which);
+        showQuickSettingsTooltipIfNeeded(getShortcutTypeCheckBoxValue());
+    }
 }
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index a1c98cd..d7a506a 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -65,6 +65,7 @@
     private static final String EMPTY_STRING = "";
 
     private Dialog mWarningDialog;
+    private ComponentName mTileComponentName;
     private BroadcastReceiver mPackageRemovedReceiver;
     private boolean mDisabledStateLogged = false;
     private long mStartTimeMillsForLogging = 0;
@@ -168,9 +169,9 @@
 
     @Override
     public Dialog onCreateDialog(int dialogId) {
+        final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
         switch (dialogId) {
-            case DialogEnums.ENABLE_WARNING_FROM_TOGGLE: {
-                final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
+            case DialogEnums.ENABLE_WARNING_FROM_TOGGLE:
                 if (info == null) {
                     return null;
                 }
@@ -178,10 +179,8 @@
                         .createCapabilitiesDialog(getPrefContext(), info,
                                 this::onDialogButtonFromEnableToggleClicked,
                                 this::onDialogButtonFromUninstallClicked);
-                break;
-            }
-            case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT_TOGGLE: {
-                final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
+                return mWarningDialog;
+            case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT_TOGGLE:
                 if (info == null) {
                     return null;
                 }
@@ -189,10 +188,8 @@
                         .createCapabilitiesDialog(getPrefContext(), info,
                                 this::onDialogButtonFromShortcutToggleClicked,
                                 this::onDialogButtonFromUninstallClicked);
-                break;
-            }
-            case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT: {
-                final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
+                return mWarningDialog;
+            case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT:
                 if (info == null) {
                     return null;
                 }
@@ -200,23 +197,24 @@
                         .createCapabilitiesDialog(getPrefContext(), info,
                                 this::onDialogButtonFromShortcutClicked,
                                 this::onDialogButtonFromUninstallClicked);
-                break;
-            }
-            case DialogEnums.DISABLE_WARNING_FROM_TOGGLE: {
-                final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
+                return mWarningDialog;
+            case DialogEnums.DISABLE_WARNING_FROM_TOGGLE:
                 if (info == null) {
                     return null;
                 }
                 mWarningDialog = AccessibilityServiceWarning
                         .createDisableDialog(getPrefContext(), info,
                                 this::onDialogButtonFromDisableToggleClicked);
-                break;
-            }
-            default: {
-                mWarningDialog = super.onCreateDialog(dialogId);
-            }
+                return mWarningDialog;
+            case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
+                final Dialog dialog = AccessibilityGestureNavigationTutorial
+                        .createAccessibilityTutorialDialog(getPrefContext(),
+                                getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
+                dialog.setCanceledOnTouchOutside(false);
+                return dialog;
+            default:
+                return super.onCreateDialog(dialogId);
         }
-        return mWarningDialog;
     }
 
     @Override
@@ -243,12 +241,16 @@
 
     @Override
     ComponentName getTileComponentName() {
-        return null;
+        return mTileComponentName;
     }
 
     @Override
     CharSequence getTileName() {
-        return null;
+        final ComponentName componentName = getTileComponentName();
+        if (componentName == null) {
+            return null;
+        }
+        return loadTileLabel(getPrefContext(), componentName);
     }
 
     @Override
@@ -386,6 +388,12 @@
         mPackageName = getAccessibilityServiceInfo().getResolveInfo().loadLabel(
                 getPackageManager());
 
+        if (arguments.containsKey(AccessibilitySettings.EXTRA_TILE_SERVICE_COMPONENT_NAME)) {
+            final String tileServiceComponentName = arguments.getString(
+                    AccessibilitySettings.EXTRA_TILE_SERVICE_COMPONENT_NAME);
+            mTileComponentName = ComponentName.unflattenFromString(tileServiceComponentName);
+        }
+
         mStartTimeMillsForLogging = arguments.getLong(AccessibilitySettings.EXTRA_TIME_FOR_LOGGING);
     }
 
@@ -488,6 +496,23 @@
         mWarningDialog.dismiss();
     }
 
+    /**
+     * This method will be invoked when a button in the tutorial dialog is clicked.
+     *
+     * @param dialog The dialog that received the click
+     * @param which  The button that was clicked
+     */
+    private void callOnTutorialDialogButtonClicked(DialogInterface dialog, int which) {
+        dialog.dismiss();
+        showQuickSettingsTooltipIfNeeded();
+    }
+
+    @Override
+    protected void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) {
+        super.callOnAlertDialogCheckboxClicked(dialog, which);
+        showQuickSettingsTooltipIfNeeded(getShortcutTypeCheckBoxValue());
+    }
+
     void onDialogButtonFromShortcutClicked(View view) {
         final int viewId = view.getId();
         if (viewId == R.id.permission_enable_allow_button) {
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 0cc1f1c..08e9b88 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -25,7 +25,9 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
 import android.graphics.drawable.Drawable;
 import android.icu.text.CaseMap;
 import android.net.Uri;
@@ -33,6 +35,7 @@
 import android.os.Handler;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.service.quicksettings.TileService;
 import android.text.Html;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
@@ -799,6 +802,19 @@
     }
 
     /**
+     * Shows the quick settings tooltip if the quick settings service and the shortcut are assigned.
+     * The tooltip only shows once.
+     *
+     * @param shortcutType The shortcut type.
+     */
+    protected void showQuickSettingsTooltipIfNeeded(@UserShortcutType int shortcutType) {
+        if (shortcutType == AccessibilityUtil.UserShortcutType.EMPTY) {
+            return;
+        }
+        showQuickSettingsTooltipIfNeeded();
+    }
+
+    /**
      * Shows the quick settings tooltip if the quick settings service is assigned. The tooltip only
      * shows once.
      */
@@ -830,4 +846,20 @@
                 tileComponentName);
         mNeedsQSTooltipReshow = false;
     }
+
+    /** Returns user visible name of the tile by given {@link ComponentName}. */
+    protected CharSequence loadTileLabel(Context context, ComponentName componentName) {
+        final PackageManager packageManager = context.getPackageManager();
+        final Intent queryIntent = new Intent(TileService.ACTION_QS_TILE);
+        final List<ResolveInfo> resolveInfos =
+                packageManager.queryIntentServices(queryIntent, PackageManager.GET_META_DATA);
+        for (ResolveInfo info : resolveInfos) {
+            final ServiceInfo serviceInfo = info.serviceInfo;
+            if (TextUtils.equals(componentName.getPackageName(), serviceInfo.packageName)
+                    && TextUtils.equals(componentName.getClassName(), serviceInfo.name)) {
+                return serviceInfo.loadLabel(packageManager);
+            }
+        }
+        return null;
+    }
 }
diff --git a/src/com/android/settings/accounts/ManagedProfileSettings.java b/src/com/android/settings/accounts/ManagedProfileSettings.java
index a6fa15a..001a2cd 100644
--- a/src/com/android/settings/accounts/ManagedProfileSettings.java
+++ b/src/com/android/settings/accounts/ManagedProfileSettings.java
@@ -16,6 +16,12 @@
 
 package com.android.settings.accounts;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CROSS_PROFILE_CALENDAR_SUMMARY;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CROSS_PROFILE_CALENDAR_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONTACT_SEARCH_SUMMARY;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONTACT_SEARCH_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SETTING;
+
 import android.app.settings.SettingsEnums;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -78,6 +84,17 @@
         super.onCreate(icicle);
         mManagedProfileBroadcastReceiver = new ManagedProfileBroadcastReceiver();
         mManagedProfileBroadcastReceiver.register(getActivity());
+        replaceEnterpriseStringTitle("work_mode",
+                WORK_PROFILE_SETTING, R.string.work_mode_label);
+        replaceEnterpriseStringTitle("contacts_search",
+                WORK_PROFILE_CONTACT_SEARCH_TITLE, R.string.managed_profile_contact_search_title);
+        replaceEnterpriseStringSummary("contacts_search",
+                WORK_PROFILE_CONTACT_SEARCH_SUMMARY,
+                R.string.managed_profile_contact_search_summary);
+        replaceEnterpriseStringTitle("cross_profile_calendar",
+                CROSS_PROFILE_CALENDAR_TITLE, R.string.cross_profile_calendar_title);
+        replaceEnterpriseStringSummary("cross_profile_calendar",
+                CROSS_PROFILE_CALENDAR_SUMMARY, R.string.cross_profile_calendar_summary);
     }
 
     @Override
diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
index a38ed11..5bc4118 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.applications.appinfo;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECTED_WORK_AND_PERSONAL_APPS_TITLE;
+
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
 import android.app.Activity;
@@ -238,6 +240,8 @@
         startListeningToPackageRemove();
 
         setHasOptionsMenu(true);
+        replaceEnterpriseStringTitle("interact_across_profiles",
+                CONNECTED_WORK_AND_PERSONAL_APPS_TITLE, R.string.interact_across_profiles_title);
     }
 
     @Override
diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
index aee360e..164cfd9 100644
--- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
+++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
@@ -18,6 +18,7 @@
 import static com.android.settings.widget.EntityHeaderController.ActionType;
 
 import android.app.Activity;
+import android.app.LocaleConfig;
 import android.app.LocaleManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
@@ -289,12 +290,18 @@
 
         @VisibleForTesting
         void handleSupportedLocales() {
-            //TODO Waiting for PackageManager api
-            String[] languages = getAssetSystemLocales();
-
-            for (String language : languages) {
-                mSupportedLocales.add(Locale.forLanguageTag(language));
+            LocaleList localeList = getPackageLocales();
+            if (localeList == null) {
+                String[] languages = getAssetSystemLocales();
+                for (String language : languages) {
+                    mSupportedLocales.add(Locale.forLanguageTag(language));
+                }
+            } else {
+                for (int i = 0; i < localeList.size(); i++) {
+                    mSupportedLocales.add(localeList.get(i));
+                }
             }
+
             if (mSuggestedLocales != null || !mSuggestedLocales.isEmpty()) {
                 mSupportedLocales.removeAll(mSuggestedLocales);
             }
@@ -349,9 +356,23 @@
                         packageManager.getPackageInfo(mPackageName, PackageManager.MATCH_ALL)
                                 .applicationInfo).getAssets().getNonSystemLocales();
             } catch (PackageManager.NameNotFoundException e) {
-                Log.w(TAG, "Can not found the package name : " + e);
+                Log.w(TAG, "Can not found the package name : " + mPackageName + " / " + e);
             }
             return new String[0];
         }
+
+        @VisibleForTesting
+        LocaleList getPackageLocales() {
+            try {
+                LocaleConfig localeConfig =
+                        new LocaleConfig(mContext.createPackageContext(mPackageName, 0));
+                if (localeConfig.getStatus() == LocaleConfig.STATUS_SUCCESS) {
+                    return localeConfig.getSupportedLocales();
+                }
+            } catch (PackageManager.NameNotFoundException e) {
+                Log.w(TAG, "Can not found the package name : " + mPackageName + " / " + e);
+            }
+            return null;
+        }
     }
 }
diff --git a/src/com/android/settings/applications/specialaccess/SpecialAccessSettings.java b/src/com/android/settings/applications/specialaccess/SpecialAccessSettings.java
index f96ff63..2cbc304 100644
--- a/src/com/android/settings/applications/specialaccess/SpecialAccessSettings.java
+++ b/src/com/android/settings/applications/specialaccess/SpecialAccessSettings.java
@@ -16,7 +16,11 @@
 
 package com.android.settings.applications.specialaccess;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECTED_WORK_AND_PERSONAL_APPS_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGE_DEVICE_ADMIN_APPS;
+
 import android.app.settings.SettingsEnums;
+import android.os.Bundle;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -34,6 +38,15 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        replaceEnterpriseStringTitle("interact_across_profiles",
+                CONNECTED_WORK_AND_PERSONAL_APPS_TITLE, R.string.interact_across_profiles_title);
+        replaceEnterpriseStringTitle("device_administrators",
+                MANAGE_DEVICE_ADMIN_APPS, R.string.manage_device_admin);
+    }
+
+    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.special_access;
     }
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
index e133c62..de79739 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
@@ -27,6 +27,8 @@
 import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_DEVICE_ADMIN;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_WORK_PROFILE;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_PROFILE_OWNER_DIALOG_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_PROFILE_OWNER_POSTSETUP_WARNING;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.UNINSTALL_DEVICE_ADMIN;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.USER_ADMIN_POLICIES_WARNING;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_ADMIN_POLICIES_WARNING;
 
@@ -309,11 +311,13 @@
                 return;
             }
 
-            // othewise, only the defined default supervision profile owner can be set after user
-            // setup.
+            // otherwise, only the defined default supervision profile owner or holder of
+            // supersvision role can be set after user setup.
             final String supervisor = getString(
                     com.android.internal.R.string.config_defaultSupervisionProfileOwnerComponent);
-            if (TextUtils.isEmpty(supervisor)) {
+            final String supervisionRolePackage = getString(
+                    com.android.internal.R.string.config_systemSupervision);
+            if (TextUtils.isEmpty(supervisor) && TextUtils.isEmpty(supervisionRolePackage)) {
                 Log.w(TAG, "Unable to set profile owner post-setup, no default supervisor"
                         + "profile owner defined");
                 finish();
@@ -322,7 +326,8 @@
 
             final ComponentName supervisorComponent = ComponentName.unflattenFromString(
                     supervisor);
-            if (supervisorComponent == null || who.compareTo(supervisorComponent) != 0) {
+            if (!who.equals(supervisorComponent)
+                    && !who.getPackageName().equals(supervisionRolePackage)) {
                 Log.w(TAG, "Unable to set non-default profile owner post-setup " + who);
                 finish();
                 return;
@@ -365,6 +370,10 @@
         mAdminDescription = (TextView)findViewById(R.id.admin_description);
         mProfileOwnerWarning = (TextView) findViewById(R.id.profile_owner_warning);
 
+        mProfileOwnerWarning.setText(
+                mDPM.getString(SET_PROFILE_OWNER_POSTSETUP_WARNING,
+                        () -> getString(R.string.adding_profile_owner_warning)));
+
         mAddMsg = (TextView)findViewById(R.id.add_msg);
         mAddMsgExpander = (ImageView) findViewById(R.id.add_msg_expander);
         final View.OnClickListener onClickListener = new View.OnClickListener() {
@@ -410,6 +419,8 @@
         });
 
         mUninstallButton = (Button) findViewById(R.id.uninstall_button);
+        mUninstallButton.setText(mDPM.getString(UNINSTALL_DEVICE_ADMIN,
+                () -> getString(R.string.uninstall_device_admin)));
         mUninstallButton.setFilterTouchesWhenObscured(true);
         mUninstallButton.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminSettings.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminSettings.java
index 4a99073..3819124 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminSettings.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminSettings.java
@@ -16,7 +16,10 @@
 
 package com.android.settings.applications.specialaccess.deviceadmin;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.NO_DEVICE_ADMINS;
+
 import android.app.settings.SettingsEnums;
+import android.os.Bundle;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -32,6 +35,14 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        // TODO: Replace PreferenceScreen title manage_device_admin/MANAGE_DEVICE_ADMIN_APPS
+        replaceEnterpriseStringTitle("device_admin_footer",
+                NO_DEVICE_ADMINS, R.string.no_device_admins);
+    }
+
+    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.device_admin_settings;
     }
diff --git a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java
index 4e96aa3..e85a513 100644
--- a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java
+++ b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java
@@ -17,9 +17,13 @@
 
 import static android.app.admin.DevicePolicyResources.Strings.Settings.APP_CAN_ACCESS_PERSONAL_DATA;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.APP_CAN_ACCESS_PERSONAL_PERMISSIONS;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECTED_APPS_SHARE_PERMISSIONS_AND_DATA;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECT_APPS_DIALOG_SUMMARY;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECT_APPS_DIALOG_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.HOW_TO_DISCONNECT_APPS;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.INSTALL_IN_PERSONAL_PROFILE_TO_CONNECT_PROMPT;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.INSTALL_IN_WORK_PROFILE_TO_CONNECT_PROMPT;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ONLY_CONNECT_TRUSTED_APPS;
 import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
 import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
 import static android.provider.Settings.ACTION_MANAGE_CROSS_PROFILE_ACCESS;
@@ -46,6 +50,7 @@
 import android.os.UserManager;
 import android.stats.devicepolicy.DevicePolicyEnums;
 import android.util.IconDrawableFactory;
+import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -72,9 +77,11 @@
             "interact_across_profiles_extra_summary";
     public static final String EXTRA_SHOW_FRAGMENT_ARGS = ":settings:show_fragment_args";
     public static final String INTENT_KEY = "intent";
+    private static final String TAG = "InteractAcrossProfilesDetails";
 
     private Context mContext;
     private CrossProfileApps mCrossProfileApps;
+    private DevicePolicyManager mDevicePolicyManager;
     private UserManager mUserManager;
     private RestrictedSwitchPreference mSwitchPref;
     private LayoutPreference mHeader;
@@ -94,6 +101,7 @@
 
         mContext = getContext();
         mCrossProfileApps = mContext.getSystemService(CrossProfileApps.class);
+        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
         mUserManager = mContext.getSystemService(UserManager.class);
         mPackageManager = mContext.getPackageManager();
 
@@ -106,6 +114,18 @@
         mInstallAppIntent = AppStoreUtil.getAppStoreLink(mContext, mPackageName);
 
         addPreferencesFromResource(R.xml.interact_across_profiles_permissions_details);
+
+        replaceEnterpriseStringSummary("interact_across_profiles_summary_1",
+                CONNECTED_APPS_SHARE_PERMISSIONS_AND_DATA,
+                R.string.interact_across_profiles_summary_1);
+        replaceEnterpriseStringSummary("interact_across_profiles_summary_2",
+                ONLY_CONNECT_TRUSTED_APPS,
+                R.string.interact_across_profiles_summary_2);
+        replaceEnterpriseStringSummary("interact_across_profiles_extra_summary",
+                HOW_TO_DISCONNECT_APPS,
+                R.string.interact_across_profiles_summary_3);
+
+
         mSwitchPref = findPreference(INTERACT_ACROSS_PROFILES_SETTINGS_SWITCH);
         mSwitchPref.setOnPreferenceClickListener(this);
 
@@ -127,6 +147,19 @@
         logPageLaunchMetrics();
     }
 
+    private void replaceEnterpriseStringSummary(
+            String preferenceKey, String overrideKey, int resource) {
+        Preference preference = findPreference(preferenceKey);
+        if (preference == null) {
+            Log.d(TAG, "Could not find enterprise preference " + preferenceKey);
+            return;
+        }
+
+        preference.setSummary(
+                mDevicePolicyManager.getString(overrideKey,
+                        () -> getString(resource)));
+    }
+
     private void maybeShowExtraSummary() {
         Preference extraSummary = findPreference(INTERACT_ACROSS_PROFILE_EXTRA_SUMMARY_KEY);
         if (extraSummary == null) {
@@ -264,7 +297,8 @@
         final TextView dialogTitle = dialogView.findViewById(
                 R.id.interact_across_profiles_consent_dialog_title);
         dialogTitle.setText(mDpm.getString(CONNECT_APPS_DIALOG_TITLE, () ->
-                getString(R.string.interact_across_profiles_consent_dialog_title, mAppLabel)));
+                getString(R.string.interact_across_profiles_consent_dialog_title, mAppLabel),
+                mAppLabel));
 
         final TextView appDataSummary = dialogView.findViewById(R.id.app_data_summary);
         appDataSummary.setText(
@@ -280,6 +314,12 @@
                         mAppLabel),
                 mAppLabel));
 
+        final TextView dialogSummary =
+                dialogView.findViewById(R.id.interact_across_profiles_consent_dialog_summary);
+        dialogSummary.setText(mDpm.getString(CONNECT_APPS_DIALOG_SUMMARY,
+                () -> getString(
+                        R.string.interact_across_profiles_consent_dialog_summary)));
+
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
         builder.setView(dialogView)
                 .setPositiveButton(R.string.allow, new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java
index b75e02a..c70a56a 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingController.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java
@@ -435,7 +435,7 @@
      */
     public void onCancel() {
         Log.d(TAG, "Pairing dialog canceled");
-        mDevice.cancelPairing();
+        mDevice.cancelBondProcess();
     }
 
     /**
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingService.java b/src/com/android/settings/bluetooth/BluetoothPairingService.java
index bc5dc66..9883e61 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingService.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingService.java
@@ -98,7 +98,7 @@
             } else if (action.equals(ACTION_DISMISS_PAIRING)) {
                 Log.d(TAG, "Notification cancel " + " (" +
                         mDevice.getName() + ")");
-                mDevice.cancelPairing();
+                mDevice.cancelBondProcess();
             } else {
                 int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,
                         BluetoothDevice.ERROR);
@@ -144,7 +144,7 @@
             createPairingNotification(intent);
         } else if (TextUtils.equals(action, ACTION_DISMISS_PAIRING)) {
             Log.d(TAG, "Notification cancel " + " (" + mDevice.getName() + ")");
-            mDevice.cancelPairing();
+            mDevice.cancelBondProcess();
             mNm.cancel(NOTIFICATION_ID);
             stopSelf();
         } else if (TextUtils.equals(action, ACTION_PAIRING_DIALOG)) {
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index e38d843..cfdfdaa 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -16,6 +16,7 @@
 package com.android.settings.dashboard;
 
 import android.app.Activity;
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -79,6 +80,7 @@
     private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController;
     private boolean mListeningToCategoryChange;
     private List<String> mSuppressInjectedTileKeys;
+    private DevicePolicyManager mDevicePolicyManager;
 
     @Override
     public void onAttach(Context context) {
@@ -148,6 +150,7 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
+        mDevicePolicyManager = getSystemService(DevicePolicyManager.class);
         // Set ComparisonCallback so we get better animation when list changes.
         getPreferenceManager().setPreferenceComparisonCallback(
                 new PreferenceManager.SimplePreferenceComparisonCallback());
@@ -566,4 +569,30 @@
             resolver.unregisterContentObserver(observer);
         });
     }
+
+    protected void replaceEnterpriseStringTitle(
+            String preferenceKey, String overrideKey, int resource) {
+        Preference preference = findPreference(preferenceKey);
+        if (preference == null) {
+            Log.d(TAG, "Could not find enterprise preference " + preferenceKey);
+            return;
+        }
+
+        preference.setTitle(
+                mDevicePolicyManager.getString(overrideKey,
+                        () -> getString(resource)));
+    }
+
+    protected void replaceEnterpriseStringSummary(
+            String preferenceKey, String overrideKey, int resource) {
+        Preference preference = findPreference(preferenceKey);
+        if (preference == null) {
+            Log.d(TAG, "Could not find enterprise preference " + preferenceKey);
+            return;
+        }
+
+        preference.setSummary(
+                mDevicePolicyManager.getString(overrideKey,
+                        () -> getString(resource)));
+    }
 }
diff --git a/src/com/android/settings/display/TimeoutListPreference.java b/src/com/android/settings/display/TimeoutListPreference.java
index f9a731d..0b2d18f 100644
--- a/src/com/android/settings/display/TimeoutListPreference.java
+++ b/src/com/android/settings/display/TimeoutListPreference.java
@@ -53,6 +53,7 @@
         super.onPrepareDialogBuilder(builder, listener);
         if (mAdmin != null) {
             builder.setView(R.layout.admin_disabled_other_options_footer);
+            // TODO: replace Text on textview with admin_disabled_other_options
         } else {
             builder.setView(null);
         }
diff --git a/src/com/android/settings/display/darkmode/BedtimeSettings.java b/src/com/android/settings/display/darkmode/BedtimeSettings.java
index d9a458c..28121b2 100644
--- a/src/com/android/settings/display/darkmode/BedtimeSettings.java
+++ b/src/com/android/settings/display/darkmode/BedtimeSettings.java
@@ -17,11 +17,13 @@
 package com.android.settings.display.darkmode;
 
 import static android.provider.Settings.ACTION_BEDTIME_SETTINGS;
+import static android.util.FeatureFlagUtils.SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME;
 
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.util.FeatureFlagUtils;
 
 import androidx.annotation.Nullable;
 
@@ -44,6 +46,10 @@
      */
     @Nullable
     public Intent getBedtimeSettingsIntent() {
+        if (!FeatureFlagUtils.isEnabled(mContext,
+                SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME)) {
+            return null;
+        }
         Intent bedtimeSettingsIntent = new Intent(ACTION_BEDTIME_SETTINGS).setPackage(
                 mWellbeingPackage);
         ResolveInfo bedtimeSettingInfo = mPackageManager.resolveActivity(bedtimeSettingsIntent,
diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
index fe02fda..055e868 100644
--- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
+++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.enterprise;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.DISABLED_BY_IT_ADMIN_TITLE;
+
 import android.annotation.NonNull;
 import android.annotation.UserIdInt;
 import android.app.Activity;
@@ -67,6 +69,13 @@
                 .createInstance(mActivity, restriction,
                         new DeviceAdminStringProviderImpl(mActivity),
                         UserHandle.SYSTEM);
+        DevicePolicyManager devicePolicyManager =
+                mActivity.getSystemService(DevicePolicyManager.class);
+
+        TextView title = mDialogView.findViewById(R.id.admin_support_dialog_title);
+        title.setText(devicePolicyManager.getString(DISABLED_BY_IT_ADMIN_TITLE,
+                () -> mActivity.getString(R.string.disabled_by_policy_title)));
+
     }
 
     private @UserIdInt int getEnforcementAdminUserId(@NonNull EnforcedAdmin admin) {
diff --git a/src/com/android/settings/enterprise/ApplicationListFragment.java b/src/com/android/settings/enterprise/ApplicationListFragment.java
index 17de9f8..a82789b 100644
--- a/src/com/android/settings/enterprise/ApplicationListFragment.java
+++ b/src/com/android/settings/enterprise/ApplicationListFragment.java
@@ -19,6 +19,7 @@
 import android.Manifest;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.os.Bundle;
 
 import com.android.settings.R;
 import com.android.settings.applications.ApplicationFeatureProvider;
@@ -44,6 +45,11 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+    }
+
+    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.app_list_disclosure_settings;
     }
diff --git a/src/com/android/settings/enterprise/PrivacySettingsFinancedPreference.java b/src/com/android/settings/enterprise/PrivacySettingsFinancedPreference.java
index 12901a6..8612f6a 100644
--- a/src/com/android/settings/enterprise/PrivacySettingsFinancedPreference.java
+++ b/src/com/android/settings/enterprise/PrivacySettingsFinancedPreference.java
@@ -20,10 +20,8 @@
 import android.provider.SearchIndexableResource;
 
 import com.android.settings.R;
-import com.android.settings.widget.PreferenceCategoryController;
 import com.android.settingslib.core.AbstractPreferenceController;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -61,18 +59,6 @@
      */
     @Override
     public List<AbstractPreferenceController> createPreferenceControllers(boolean async) {
-        final List<AbstractPreferenceController> controllers = new ArrayList<>();
-        controllers.add(new NetworkLogsPreferenceController(mContext));
-        controllers.add(new BugReportsPreferenceController(mContext));
-        controllers.add(new SecurityLogsPreferenceController(mContext));
-        final List<AbstractPreferenceController> exposureChangesCategoryControllers =
-                new ArrayList<>();
-        exposureChangesCategoryControllers.add(new EnterpriseInstalledPackagesPreferenceController(
-                mContext, async));
-        controllers.addAll(exposureChangesCategoryControllers);
-        controllers.add(new PreferenceCategoryController(mContext, KEY_EXPOSURE_CHANGES_CATEGORY)
-                .setChildren(exposureChangesCategoryControllers));
-        controllers.add(new FailedPasswordWipeCurrentUserPreferenceController(mContext));
-        return controllers;
+        return Collections.emptyList();
     }
 }
diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java
index c896629..58c082b 100644
--- a/src/com/android/settings/language/LanguageAndInputSettings.java
+++ b/src/com/android/settings/language/LanguageAndInputSettings.java
@@ -16,9 +16,12 @@
 
 package com.android.settings.language;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_KEYBOARDS_AND_TOOLS;
+
 import android.app.Activity;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.os.Bundle;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -71,6 +74,14 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        replaceEnterpriseStringTitle("language_and_input_for_work_category",
+                WORK_PROFILE_KEYBOARDS_AND_TOOLS,
+                R.string.language_and_input_for_work_category_title);
+    }
+
+    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.language_and_input;
     }
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 8f9787b..ab3ed20 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.location;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LOCATION_SWITCH_TITLE;
+
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.location.SettingInjectorService;
@@ -63,6 +65,7 @@
 
     private LocationSwitchBarController mSwitchBarController;
     private LocationEnabler mLocationEnabler;
+    private RecentLocationAccessPreferenceController mController;
 
     @Override
     public int getMetricsCategory() {
@@ -86,18 +89,35 @@
         super.onAttach(context);
 
         use(AppLocationPermissionPreferenceController.class).init(this);
-        use(RecentLocationAccessPreferenceController.class).init(this);
+        mController = use(RecentLocationAccessPreferenceController.class);
+        mController.init(this);
         use(RecentLocationAccessSeeAllButtonPreferenceController.class).init(this);
         use(LocationForWorkPreferenceController.class).init(this);
         use(LocationSettingsFooterPreferenceController.class).init(this);
     }
 
     @Override
+    public void onPause() {
+        super.onPause();
+        if (mController != null) {
+            mController.clearPreferenceList();
+        }
+    }
+
+    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.location_settings;
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        replaceEnterpriseStringTitle("managed_profile_location_switch",
+                WORK_PROFILE_LOCATION_SWITCH_TITLE, R.string.managed_profile_location_switch_title);
+    }
+
+    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/location/LocationWorkProfileSettings.java b/src/com/android/settings/location/LocationWorkProfileSettings.java
index 24c44f3..d8db33d 100644
--- a/src/com/android/settings/location/LocationWorkProfileSettings.java
+++ b/src/com/android/settings/location/LocationWorkProfileSettings.java
@@ -16,8 +16,11 @@
 
 package com.android.settings.location;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LOCATION_SWITCH_TITLE;
+
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.os.Bundle;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -41,6 +44,13 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        replaceEnterpriseStringTitle("managed_profile_location_switch",
+                WORK_PROFILE_LOCATION_SWITCH_TITLE, R.string.managed_profile_location_switch_title);
+    }
+
+    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
index ba660ee..ea3704c 100644
--- a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
+++ b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
@@ -127,6 +127,15 @@
     }
 
     /**
+     * Clears the list of apps which recently accessed location from the screen.
+     */
+    public void clearPreferenceList() {
+        if (mCategoryRecentLocationRequests != null) {
+            mCategoryRecentLocationRequests.removeAll();
+        }
+    }
+
+    /**
      * Initialize {@link ProfileSelectFragment.ProfileType} of the controller
      *
      * @param type {@link ProfileSelectFragment.ProfileType} of the controller.
diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java
index 5f78acc..f888ea7 100644
--- a/src/com/android/settings/notification/ConfigureNotificationSettings.java
+++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.notification;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LOCK_SCREEN_REDACT_NOTIFICATION_SUMMARY;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LOCK_SCREEN_REDACT_NOTIFICATION_TITLE;
+
 import android.app.Activity;
 import android.app.Application;
 import android.app.settings.SettingsEnums;
@@ -70,6 +73,17 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        replaceEnterpriseStringTitle("lock_screen_work_redact",
+                WORK_PROFILE_LOCK_SCREEN_REDACT_NOTIFICATION_TITLE,
+                R.string.lock_screen_notifs_redact_work);
+        replaceEnterpriseStringSummary("lock_screen_work_redact",
+                WORK_PROFILE_LOCK_SCREEN_REDACT_NOTIFICATION_SUMMARY,
+                R.string.lock_screen_notifs_redact_work_summary);
+    }
+
+    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.configure_notification_settings;
     }
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index ab53a3f..971937c 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.notification;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SOUND_SETTINGS_SECTION_HEADER;
+
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
@@ -97,6 +99,9 @@
                             .findFragmentByTag(TAG);
             mDialogFragment = dialogFragment;
         }
+        replaceEnterpriseStringTitle("sound_work_settings",
+                WORK_PROFILE_SOUND_SETTINGS_SECTION_HEADER,
+                R.string.sound_work_settings);
     }
 
     @Override
diff --git a/src/com/android/settings/notification/SoundWorkSettings.java b/src/com/android/settings/notification/SoundWorkSettings.java
index d30c04f..eb7f05e 100644
--- a/src/com/android/settings/notification/SoundWorkSettings.java
+++ b/src/com/android/settings/notification/SoundWorkSettings.java
@@ -16,6 +16,12 @@
 
 package com.android.settings.notification;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_ALARM_RINGTONE_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOTIFICATION_RINGTONE_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_RINGTONE_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_USE_PERSONAL_SOUNDS_SUMMARY;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_USE_PERSONAL_SOUNDS_TITLE;
+
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
@@ -64,6 +70,18 @@
                 mRequestPreference = findPreference(selectedPreference);
             }
         }
+        replaceEnterpriseStringTitle("work_use_personal_sounds",
+                WORK_PROFILE_USE_PERSONAL_SOUNDS_TITLE, R.string.work_use_personal_sounds_title);
+        replaceEnterpriseStringSummary("work_use_personal_sounds",
+                WORK_PROFILE_USE_PERSONAL_SOUNDS_SUMMARY,
+                R.string.work_use_personal_sounds_summary);
+        replaceEnterpriseStringTitle("work_ringtone",
+                WORK_PROFILE_RINGTONE_TITLE, R.string.work_ringtone_title);
+        replaceEnterpriseStringTitle("work_alarm_ringtone",
+                WORK_PROFILE_ALARM_RINGTONE_TITLE, R.string.work_alarm_ringtone_title);
+        replaceEnterpriseStringTitle("work_notification",
+                WORK_PROFILE_NOTIFICATION_RINGTONE_TITLE,
+                R.string.work_notification_ringtone_title);
     }
 
     @Override
diff --git a/src/com/android/settings/password/ForgotPasswordActivity.java b/src/com/android/settings/password/ForgotPasswordActivity.java
index 1f1df18..d963a05 100644
--- a/src/com/android/settings/password/ForgotPasswordActivity.java
+++ b/src/com/android/settings/password/ForgotPasswordActivity.java
@@ -16,12 +16,16 @@
 
 package com.android.settings.password;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.FORGOT_PASSWORD_TEXT;
+
 import android.app.Activity;
+import android.app.admin.DevicePolicyManager;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.util.Log;
+import android.widget.TextView;
 
 import com.android.settings.R;
 
@@ -45,6 +49,11 @@
         }
         setContentView(R.layout.forgot_password_activity);
 
+        DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
+        TextView forgotPasswordText = (TextView) findViewById(R.id.forgot_password_text);
+        forgotPasswordText.setText(devicePolicyManager.getString(
+                FORGOT_PASSWORD_TEXT, () -> getString(R.string.forgot_password_text)));
+
         final GlifLayout layout = findViewById(R.id.setup_wizard_layout);
         layout.getMixin(FooterBarMixin.class).setPrimaryButton(
                 new FooterButton.Builder(this)
diff --git a/src/com/android/settings/privacy/PrivacyDashboardFragment.java b/src/com/android/settings/privacy/PrivacyDashboardFragment.java
index 7aa65b7..0638c60 100644
--- a/src/com/android/settings/privacy/PrivacyDashboardFragment.java
+++ b/src/com/android/settings/privacy/PrivacyDashboardFragment.java
@@ -16,8 +16,15 @@
 
 package com.android.settings.privacy;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECTED_WORK_AND_PERSONAL_APPS_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LOCKED_NOTIFICATION_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOTIFICATIONS_SECTION_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PRIVACY_POLICY_INFO;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PRIVACY_POLICY_INFO_SUMMARY;
+
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.os.Bundle;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -51,6 +58,24 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        replaceEnterpriseStringTitle("privacy_lock_screen_work_profile_notifications",
+                WORK_PROFILE_LOCKED_NOTIFICATION_TITLE,
+                R.string.locked_work_profile_notification_title);
+        replaceEnterpriseStringTitle("interact_across_profiles_privacy",
+                CONNECTED_WORK_AND_PERSONAL_APPS_TITLE, R.string.interact_across_profiles_title);
+        replaceEnterpriseStringTitle("privacy_work_profile_notifications_category",
+                WORK_PROFILE_NOTIFICATIONS_SECTION_HEADER, R.string.profile_section_header);
+        replaceEnterpriseStringTitle("work_policy_info",
+                WORK_PROFILE_PRIVACY_POLICY_INFO, R.string.work_policy_privacy_settings);
+        replaceEnterpriseStringSummary("work_policy_info",
+                WORK_PROFILE_PRIVACY_POLICY_INFO_SUMMARY,
+                R.string.work_policy_privacy_settings_summary);
+
+    }
+
+    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.privacy_dashboard_settings;
     }
diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java
index 39355f3..b3351ac 100644
--- a/src/com/android/settings/security/LockscreenDashboardFragment.java
+++ b/src/com/android/settings/security/LockscreenDashboardFragment.java
@@ -16,9 +16,13 @@
 
 package com.android.settings.security;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LOCKED_NOTIFICATION_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOTIFICATIONS_SECTION_HEADER;
+
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.hardware.display.AmbientDisplayConfiguration;
+import android.os.Bundle;
 
 import androidx.annotation.VisibleForTesting;
 
@@ -76,6 +80,16 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        replaceEnterpriseStringTitle("security_setting_lock_screen_notif_work",
+                WORK_PROFILE_LOCKED_NOTIFICATION_TITLE,
+                R.string.locked_work_profile_notification_title);
+        replaceEnterpriseStringTitle("security_setting_lock_screen_notif_work_header",
+                WORK_PROFILE_NOTIFICATIONS_SECTION_HEADER, R.string.profile_section_header);
+    }
+
+    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.security_lockscreen_settings;
     }
diff --git a/src/com/android/settings/security/SecurityAdvancedSettings.java b/src/com/android/settings/security/SecurityAdvancedSettings.java
index ce4a59c..e5f4945 100644
--- a/src/com/android/settings/security/SecurityAdvancedSettings.java
+++ b/src/com/android/settings/security/SecurityAdvancedSettings.java
@@ -16,9 +16,17 @@
 
 package com.android.settings.security;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.FINGERPRINT_FOR_WORK;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_DEVICE_INFO;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGE_DEVICE_ADMIN_APPS;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SECURITY_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_UNIFY_LOCKS_SUMMARY;
+
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Bundle;
 
 import com.android.settings.R;
 import com.android.settings.biometrics.combination.CombinedBiometricProfileStatusPreferenceController;
@@ -54,6 +62,27 @@
             "com.android.settings.category.ia.legacy_advanced_security";
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        replaceEnterpriseStringTitle("unlock_set_or_change_profile",
+                WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE,
+                R.string.unlock_set_unlock_launch_picker_title_profile);
+        replaceEnterpriseStringSummary("unification",
+                WORK_PROFILE_UNIFY_LOCKS_SUMMARY,
+                R.string.lock_settings_profile_unification_summary);
+        replaceEnterpriseStringTitle("fingerprint_settings_profile",
+                FINGERPRINT_FOR_WORK,
+                R.string.security_settings_work_fingerprint_preference_title);
+        replaceEnterpriseStringTitle("manage_device_admin",
+                MANAGE_DEVICE_ADMIN_APPS, R.string.manage_device_admin);
+        replaceEnterpriseStringTitle("security_category_profile",
+                WORK_PROFILE_SECURITY_TITLE, R.string.lock_settings_profile_title);
+        replaceEnterpriseStringTitle("enterprise_privacy", MANAGED_DEVICE_INFO,
+                R.string.enterprise_privacy_settings);
+
+    }
+
+    @Override
     public int getMetricsCategory() {
         return SettingsEnums.SECURITY_ADVANCED;
     }
diff --git a/src/com/android/settings/users/UserDialogs.java b/src/com/android/settings/users/UserDialogs.java
index 3c19d7e..4dcec4d 100644
--- a/src/com/android/settings/users/UserDialogs.java
+++ b/src/com/android/settings/users/UserDialogs.java
@@ -18,6 +18,7 @@
 
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_REMOVE_MESSAGE;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_REMOVE_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_MANAGED_BY;
 
 import android.app.Dialog;
 import android.app.admin.DevicePolicyManager;
@@ -89,6 +90,8 @@
      */
     private static View createRemoveManagedUserDialogView(Context context, int userId) {
         PackageManager packageManager = context.getPackageManager();
+        DevicePolicyManager devicePolicyManager =
+                context.getSystemService(DevicePolicyManager.class);
         ApplicationInfo mdmApplicationInfo = Utils.getAdminApplicationInfo(context, userId);
         if (mdmApplicationInfo == null) {
             return null;
@@ -102,6 +105,16 @@
         Drawable badgedApplicationIcon = packageManager.getApplicationIcon(mdmApplicationInfo);
         imageView.setImageDrawable(badgedApplicationIcon);
 
+        TextView openingParagraph = (TextView)
+                view.findViewById(R.id.delete_managed_profile_opening_paragraph);
+        openingParagraph.setText(devicePolicyManager.getString(WORK_PROFILE_MANAGED_BY,
+                () -> context.getString(
+                        R.string.opening_paragraph_delete_profile_unknown_company)));
+        TextView closingParagraph = (TextView)
+                view.findViewById(R.id.delete_managed_profile_closing_paragraph);
+        closingParagraph.setText(devicePolicyManager.getString(WORK_PROFILE_CONFIRM_REMOVE_MESSAGE,
+                () -> context.getString(R.string.work_profile_confirm_remove_message)));
+
         CharSequence appLabel = packageManager.getApplicationLabel(mdmApplicationInfo);
         CharSequence badgedAppLabel = packageManager.getUserBadgedLabel(appLabel,
                 new UserHandle(userId));
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
index cf0ce96..6efdcf7a 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
@@ -22,26 +22,41 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.verify;
+
 import android.content.Context;
+import android.content.DialogInterface;
 
 import androidx.appcompat.app.AlertDialog;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
 
 /** Tests for {@link AccessibilityGestureNavigationTutorial}. */
 @RunWith(RobolectricTestRunner.class)
 public final class AccessibilityGestureNavigationTutorialTest {
 
-    private Context mContext;
+    @Rule
+    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+    @Mock
+    private DialogInterface.OnClickListener mMockOnClickListener;
+
+    private final Context mContext = ApplicationProvider.getApplicationContext();
     private int mShortcutTypes;
 
     @Before
     public void setUp() {
-        mContext = RuntimeEnvironment.application;
+        mContext.setTheme(R.style.Theme_AppCompat);
         mShortcutTypes = /* initial */ 0;
     }
 
@@ -86,4 +101,28 @@
                 mShortcutTypes)).hasSize(/* expectedSize= */ 2);
         assertThat(alertDialog).isNotNull();
     }
+
+    @Test
+    public void performClickOnNegativeButton_turnOnSoftwareShortcut_dismiss() {
+        mShortcutTypes |= UserShortcutType.SOFTWARE;
+        final AlertDialog alertDialog =
+                createAccessibilityTutorialDialog(mContext, mShortcutTypes);
+        alertDialog.show();
+
+        alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();
+
+        assertThat(alertDialog.isShowing()).isFalse();
+    }
+
+    @Test
+    public void performClickOnNegativeButton_turnOnSoftwareShortcut_callOnClickListener() {
+        mShortcutTypes |= UserShortcutType.SOFTWARE;
+        final AlertDialog alertDialog =
+                createAccessibilityTutorialDialog(mContext, mShortcutTypes, mMockOnClickListener);
+        alertDialog.show();
+
+        alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();
+
+        verify(mMockOnClickListener).onClick(alertDialog, DialogInterface.BUTTON_NEGATIVE);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AudioDescriptionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AudioDescriptionPreferenceControllerTest.java
new file mode 100644
index 0000000..1d3ffa8
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AudioDescriptionPreferenceControllerTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.
+ */
+
+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 static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+
+@RunWith(RobolectricTestRunner.class)
+public class AudioDescriptionPreferenceControllerTest {
+
+    private static final String KEY_AUDIO_DESCRIPTION =
+            Settings.Secure.ENABLED_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT;
+    private static final int UNKNOWN = -1;
+
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+    private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
+    private final AudioDescriptionPreferenceController mController =
+            new AudioDescriptionPreferenceController(mContext,
+                    AudioDescriptionPreferenceController.PREF_KEY);
+
+    @Before
+    public void setUp() {
+        final PreferenceManager preferenceManager = new PreferenceManager(mContext);
+        final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext);
+        mSwitchPreference.setKey(AudioDescriptionPreferenceController.PREF_KEY);
+        screen.addPreference(mSwitchPreference);
+        mController.displayPreference(screen);
+    }
+
+    @Test
+    public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(
+                BasePreferenceController.AVAILABLE);
+    }
+
+    @Test
+    public void isChecked_disableAudioDescription_onResumeShouldReturnFalse() {
+        Settings.Secure.putInt(mContext.getContentResolver(), KEY_AUDIO_DESCRIPTION, OFF);
+
+        mController.updateState(mSwitchPreference);
+
+        assertThat(mController.isChecked()).isFalse();
+        assertThat(mSwitchPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void isChecked_enableAudioDescription_onResumeShouldReturnTrue() {
+        Settings.Secure.putInt(mContext.getContentResolver(), KEY_AUDIO_DESCRIPTION, ON);
+
+        mController.updateState(mSwitchPreference);
+
+        assertThat(mController.isChecked()).isTrue();
+        assertThat(mSwitchPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void performClick_enableAudioDescription_shouldReturnTrue() {
+        Settings.Secure.putInt(mContext.getContentResolver(), KEY_AUDIO_DESCRIPTION, OFF);
+
+        mController.updateState(mSwitchPreference);
+
+        mSwitchPreference.performClick();
+
+        verify(mSwitchPreference).setChecked(true);
+        assertThat(mController.isChecked()).isTrue();
+        assertThat(mSwitchPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void performClick_disableAudioDescription_shouldReturnFalse() {
+        Settings.Secure.putInt(mContext.getContentResolver(), KEY_AUDIO_DESCRIPTION, ON);
+
+        mController.updateState(mSwitchPreference);
+
+        mSwitchPreference.performClick();
+
+        verify(mSwitchPreference).setChecked(false);
+        assertThat(mController.isChecked()).isFalse();
+        assertThat(mSwitchPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void setChecked_setFalse_shouldDisableAudioDescription() {
+        mController.setChecked(false);
+
+        assertThat(Settings.Secure.getInt(
+            mContext.getContentResolver(), KEY_AUDIO_DESCRIPTION, UNKNOWN)).isEqualTo(OFF);
+    }
+
+    @Test
+    public void setChecked_setTrue_shouldEnableAudioDescription() {
+        mController.setChecked(true);
+
+        assertThat(Settings.Secure.getInt(
+            mContext.getContentResolver(), KEY_AUDIO_DESCRIPTION, UNKNOWN)).isEqualTo(ON);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragmentTest.java
new file mode 100644
index 0000000..0c656b3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragmentTest.java
@@ -0,0 +1,145 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.service.quicksettings.TileService;
+
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.Shadows;
+import org.robolectric.shadows.ShadowPackageManager;
+
+import java.util.Arrays;
+
+/** Tests for {@link LaunchAccessibilityActivityPreferenceFragment} */
+@RunWith(RobolectricTestRunner.class)
+public class LaunchAccessibilityActivityPreferenceFragmentTest {
+
+    private static final String PLACEHOLDER_PACKAGE_NAME = "com.placeholder.example";
+    private static final String PLACEHOLDER_TILE_CLASS_NAME =
+            PLACEHOLDER_PACKAGE_NAME + "tile.placeholder";
+    private static final String PLACEHOLDER_TILE_CLASS_NAME2 =
+            PLACEHOLDER_PACKAGE_NAME + "tile.placeholder2";
+    private static final ComponentName PLACEHOLDER_TILE_COMPONENT_NAME = new ComponentName(
+            PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME);
+    private static final String PLACEHOLDER_TILE_NAME =
+            PLACEHOLDER_PACKAGE_NAME + "tile.placeholder";
+    private static final String PLACEHOLDER_TILE_NAME2 =
+            PLACEHOLDER_PACKAGE_NAME + "tile.placeholder2";
+
+    private TestLaunchAccessibilityActivityPreferenceFragment mFragment;
+    private PreferenceScreen mScreen;
+    private Context mContext = ApplicationProvider.getApplicationContext();
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private PreferenceManager mPreferenceManager;
+
+    @Before
+    public void setUpTestFragment() {
+        MockitoAnnotations.initMocks(this);
+
+        mFragment = spy(new TestLaunchAccessibilityActivityPreferenceFragment());
+        when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
+        when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
+        when(mFragment.getContext()).thenReturn(mContext);
+        mScreen = spy(new PreferenceScreen(mContext, /* attrs= */ null));
+        when(mScreen.getPreferenceManager()).thenReturn(mPreferenceManager);
+        doReturn(mScreen).when(mFragment).getPreferenceScreen();
+    }
+
+    @Test
+    public void getTileName_noTileServiceAssigned_noMatchString() {
+        final CharSequence tileName = mFragment.getTileName();
+        assertThat(tileName.toString()).isEqualTo("");
+    }
+
+    @Test
+    public void getTileName_hasOneTileService_haveMatchString() {
+        final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
+        final ResolveInfo info = new ResolveInfo();
+        info.serviceInfo = new FakeServiceInfo();
+        info.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
+        info.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME;
+        final ShadowPackageManager shadowPackageManager =
+                Shadows.shadowOf(mContext.getPackageManager());
+        shadowPackageManager.setResolveInfosForIntent(tileProbe, Arrays.asList(info));
+
+        final CharSequence tileName = mFragment.getTileName();
+        assertThat(tileName.toString()).isEqualTo(PLACEHOLDER_TILE_NAME);
+    }
+
+    @Test
+    public void getTileName_hasTwoTileServices_haveMatchString() {
+        final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
+        final ResolveInfo info = new ResolveInfo();
+        info.serviceInfo = new FakeServiceInfo();
+        info.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
+        info.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME;
+        final ResolveInfo info2 = new ResolveInfo();
+        info2.serviceInfo = new FakeServiceInfo2();
+        info2.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
+        info2.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME2;
+        final ShadowPackageManager shadowPackageManager =
+                Shadows.shadowOf(mContext.getPackageManager());
+        shadowPackageManager.setResolveInfosForIntent(tileProbe, Arrays.asList(info, info2));
+
+        final CharSequence tileName = mFragment.getTileName();
+        assertThat(tileName.toString()).isEqualTo(PLACEHOLDER_TILE_NAME);
+    }
+
+    private static class FakeServiceInfo extends ServiceInfo {
+        public String loadLabel(PackageManager mgr) {
+            return PLACEHOLDER_TILE_NAME;
+        }
+    }
+
+    private static class FakeServiceInfo2 extends ServiceInfo {
+        public String loadLabel(PackageManager mgr) {
+            return PLACEHOLDER_TILE_NAME2;
+        }
+    }
+
+    private static class TestLaunchAccessibilityActivityPreferenceFragment
+            extends LaunchAccessibilityActivityPreferenceFragment {
+
+        @Override
+        protected ComponentName getTileComponentName() {
+            return PLACEHOLDER_TILE_COMPONENT_NAME;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java
new file mode 100644
index 0000000..db5b83c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java
@@ -0,0 +1,145 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.service.quicksettings.TileService;
+
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.Shadows;
+import org.robolectric.shadows.ShadowPackageManager;
+
+import java.util.Arrays;
+
+/** Tests for {@link ToggleAccessibilityServicePreferenceFragment} */
+@RunWith(RobolectricTestRunner.class)
+public class ToggleAccessibilityServicePreferenceFragmentTest {
+
+    private static final String PLACEHOLDER_PACKAGE_NAME = "com.placeholder.example";
+    private static final String PLACEHOLDER_TILE_CLASS_NAME =
+            PLACEHOLDER_PACKAGE_NAME + "tile.placeholder";
+    private static final String PLACEHOLDER_TILE_CLASS_NAME2 =
+            PLACEHOLDER_PACKAGE_NAME + "tile.placeholder2";
+    private static final ComponentName PLACEHOLDER_TILE_COMPONENT_NAME = new ComponentName(
+            PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME);
+    private static final String PLACEHOLDER_TILE_NAME =
+            PLACEHOLDER_PACKAGE_NAME + "tile.placeholder";
+    private static final String PLACEHOLDER_TILE_NAME2 =
+            PLACEHOLDER_PACKAGE_NAME + "tile.placeholder2";
+
+    private TestToggleAccessibilityServicePreferenceFragment mFragment;
+    private PreferenceScreen mScreen;
+    private Context mContext = ApplicationProvider.getApplicationContext();
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private PreferenceManager mPreferenceManager;
+
+    @Before
+    public void setUpTestFragment() {
+        MockitoAnnotations.initMocks(this);
+
+        mFragment = spy(new TestToggleAccessibilityServicePreferenceFragment());
+        when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
+        when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
+        when(mFragment.getContext()).thenReturn(mContext);
+        mScreen = spy(new PreferenceScreen(mContext, /* attrs= */ null));
+        when(mScreen.getPreferenceManager()).thenReturn(mPreferenceManager);
+        doReturn(mScreen).when(mFragment).getPreferenceScreen();
+    }
+
+    @Test
+    public void getTileName_noTileServiceAssigned_noMatchString() {
+        final CharSequence tileName = mFragment.getTileName();
+        assertThat(tileName.toString()).isEqualTo("");
+    }
+
+    @Test
+    public void getTileName_hasOneTileService_haveMatchString() {
+        final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
+        final ResolveInfo info = new ResolveInfo();
+        info.serviceInfo = new FakeServiceInfo();
+        info.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
+        info.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME;
+        final ShadowPackageManager shadowPackageManager =
+                Shadows.shadowOf(mContext.getPackageManager());
+        shadowPackageManager.setResolveInfosForIntent(tileProbe, Arrays.asList(info));
+
+        final CharSequence tileName = mFragment.getTileName();
+        assertThat(tileName.toString()).isEqualTo(PLACEHOLDER_TILE_NAME);
+    }
+
+    @Test
+    public void getTileName_hasTwoTileServices_haveMatchString() {
+        final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
+        final ResolveInfo info = new ResolveInfo();
+        info.serviceInfo = new FakeServiceInfo();
+        info.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
+        info.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME;
+        final ResolveInfo info2 = new ResolveInfo();
+        info2.serviceInfo = new FakeServiceInfo2();
+        info2.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
+        info2.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME2;
+        final ShadowPackageManager shadowPackageManager =
+                Shadows.shadowOf(mContext.getPackageManager());
+        shadowPackageManager.setResolveInfosForIntent(tileProbe, Arrays.asList(info, info2));
+
+        final CharSequence tileName = mFragment.getTileName();
+        assertThat(tileName.toString()).isEqualTo(PLACEHOLDER_TILE_NAME);
+    }
+
+    private static class FakeServiceInfo extends ServiceInfo {
+        public String loadLabel(PackageManager mgr) {
+            return PLACEHOLDER_TILE_NAME;
+        }
+    }
+
+    private static class FakeServiceInfo2 extends ServiceInfo {
+        public String loadLabel(PackageManager mgr) {
+            return PLACEHOLDER_TILE_NAME2;
+        }
+    }
+
+    private static class TestToggleAccessibilityServicePreferenceFragment
+            extends ToggleAccessibilityServicePreferenceFragment {
+
+        @Override
+        protected ComponentName getTileComponentName() {
+            return PLACEHOLDER_TILE_COMPONENT_NAME;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingServiceTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingServiceTest.java
index e73b447..3194e55 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingServiceTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingServiceTest.java
@@ -106,7 +106,7 @@
 
         mBluetoothPairingService.onStartCommand(intent, /* flags */ 0, /* startId */ 0);
 
-        verify(mDevice).cancelPairing();
+        verify(mDevice).cancelBondProcess();
         verify(mNm).cancel(mBluetoothPairingService.NOTIFICATION_ID);
     }
 
diff --git a/tests/robotests/src/com/android/settings/enterprise/AbsBasePrivacySettingsPreference.java b/tests/robotests/src/com/android/settings/enterprise/AbsBasePrivacySettingsPreference.java
index 5cf2224..34b218a 100644
--- a/tests/robotests/src/com/android/settings/enterprise/AbsBasePrivacySettingsPreference.java
+++ b/tests/robotests/src/com/android/settings/enterprise/AbsBasePrivacySettingsPreference.java
@@ -84,18 +84,6 @@
 
     protected void verifyFinancedPreferenceControllers(
             List<AbstractPreferenceController> controllers) {
-        assertThat(controllers).isNotNull();
-        assertThat(controllers.size()).isEqualTo(6);
-        int position = 0;
-        assertThat(controllers.get(position++)).isInstanceOf(NetworkLogsPreferenceController.class);
-        assertThat(controllers.get(position++)).isInstanceOf(BugReportsPreferenceController.class);
-        assertThat(controllers.get(position++)).isInstanceOf(
-                SecurityLogsPreferenceController.class);
-        assertThat(controllers.get(position++)).isInstanceOf(
-                EnterpriseInstalledPackagesPreferenceController.class);
-        assertThat(controllers.get(position++)).isInstanceOf(
-                PreferenceCategoryController.class);
-        assertThat(controllers.get(position)).isInstanceOf(
-                FailedPasswordWipeCurrentUserPreferenceController.class);
+        assertThat(controllers).isEmpty();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/testutils/BedtimeSettingsUtils.java b/tests/robotests/src/com/android/settings/testutils/BedtimeSettingsUtils.java
index 59c501b..ac55334 100644
--- a/tests/robotests/src/com/android/settings/testutils/BedtimeSettingsUtils.java
+++ b/tests/robotests/src/com/android/settings/testutils/BedtimeSettingsUtils.java
@@ -17,6 +17,7 @@
 package com.android.settings.testutils;
 
 import static android.provider.Settings.ACTION_BEDTIME_SETTINGS;
+import static android.util.FeatureFlagUtils.SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME;
 
 import static org.robolectric.Shadows.shadowOf;
 
@@ -25,6 +26,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ResolveInfo;
+import android.util.FeatureFlagUtils;
 
 /** A helper class for installing bedtime settings activity. */
 public final class BedtimeSettingsUtils {
@@ -35,6 +37,8 @@
     }
 
     public void installBedtimeSettings(String wellbeingPackage, boolean enabled) {
+        FeatureFlagUtils.setEnabled(mContext, SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME,
+                true /* enabled */);
         Intent bedtimeSettingsIntent = new Intent(ACTION_BEDTIME_SETTINGS)
                 .setPackage(wellbeingPackage);
         ResolveInfo bedtimeResolveInfo = new ResolveInfo();
diff --git a/tests/unit/OWNERS b/tests/unit/OWNERS
index 4123742..8a7a27e 100644
--- a/tests/unit/OWNERS
+++ b/tests/unit/OWNERS
@@ -1,2 +1,2 @@
-# Additional reviewers for this and subdirectories.
-goldmanj@google.com
+# We do not guard tests - everyone is welcomed to contribute to tests.
+per-file *.java=*
\ No newline at end of file
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
index 1042a6a..ed4c127 100644
--- a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
+++ b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
@@ -55,6 +55,7 @@
     private LocaleList mSystemLocales;
     private LocaleList mAppLocale;
     private String[] mAssetLocales;
+    private LocaleList mPackageLocales;
 
     @Before
     @UiThreadTest
@@ -67,11 +68,13 @@
         when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
         when(mContext.getSystemService(LocaleManager.class)).thenReturn(mLocaleManager);
 
-        setupInitialLocales("en",
-                "tw",
-                "jp",
-                "en, uk, jp, ne",
-                new String[]{"en", "ne", "ms", "pa"});
+        setupInitialLocales(
+                /* appLocale= */ "en",
+                /* simCountry= */ "tw",
+                /* networkCountry= */ "jp",
+                /* systemLocales= */ "en, uk, jp, ne",
+                /* packageLocales= */ "pa, cn, tw, en",
+                /* assetLocales= */ new String[]{"en", "ne", "ms", "pa"});
     }
 
     @Test
@@ -105,11 +108,13 @@
     @UiThreadTest
     public void handleAllLocalesData_withoutAppLocale_1stSuggestedLocaleIsSimCountryLocale() {
         Locale simCountryLocale = new Locale("zh", "TW");
-        setupInitialLocales("",
-                "tw",
-                "",
-                "en, uk, jp, ne",
-                new String[]{"en", "ne", "ms", "pa"});
+        setupInitialLocales(
+                /* appLocale= */ "",
+                /* simCountry= */ "tw",
+                /* networkCountry= */ "",
+                /* systemLocales= */ "en, uk, jp, ne",
+                /* packageLocales= */ "",
+                /* assetLocales= */ new String[]{});
         DummyAppLocaleDetailsHelper helper =
                 new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
 
@@ -124,11 +129,13 @@
     @UiThreadTest
     public void handleAllLocalesData_withoutAppLocale_1stSuggestedLocaleIsNetworkCountryLocale() {
         Locale networkCountryLocale = new Locale("en", "GB");
-        setupInitialLocales("",
-                "",
-                "gb",
-                "en, uk, jp, ne",
-                new String[]{"en", "ne", "ms", "pa"});
+        setupInitialLocales(
+                /* appLocale= */ "",
+                /* simCountry= */ "",
+                /* networkCountry= */ "gb",
+                /* systemLocales= */ "en, uk, jp, ne",
+                /* packageLocales= */ "",
+                /* assetLocales= */ new String[]{});
         DummyAppLocaleDetailsHelper helper =
                 new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
 
@@ -142,11 +149,32 @@
     @Test
     @UiThreadTest
     public void handleAllLocalesData_noAppAndSimNetworkLocale_1stLocaleIsFirstOneInSystemLocales() {
-        setupInitialLocales("",
-                "",
-                "",
-                "en, uk, jp, ne",
-                new String[]{"en", "ne", "ms", "pa"});
+        setupInitialLocales(
+                /* appLocale= */ "",
+                /* simCountry= */ "",
+                /* networkCountry= */ "",
+                /* systemLocales= */ "en, uk, jp, ne",
+                /* packageLocales= */ "",
+                /* assetLocales= */ new String[]{});
+        DummyAppLocaleDetailsHelper helper =
+                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
+
+        helper.handleAllLocalesData();
+
+        Locale locale = Iterables.get(helper.getSuggestedLocales(), 0);
+        assertTrue(locale.equals(mSystemLocales.get(0)));
+    }
+
+    @Test
+    @UiThreadTest
+    public void handleAllLocalesData_hasPackageAndSystemLocales_1stLocaleIs1stOneInSystemLocales() {
+        setupInitialLocales(
+                /* appLocale= */ "",
+                /* simCountry= */ "",
+                /* networkCountry= */ "",
+                /* systemLocales= */ "en, uk, jp, ne",
+                /* packageLocales= */ "pa, cn, tw, en",
+                /* assetLocales= */ new String[]{});
         DummyAppLocaleDetailsHelper helper =
                 new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
 
@@ -204,6 +232,11 @@
      *
      * @param systemLocales  System locales, a locale list by a multiple language tags with comma.
      *                       example: "en, uk, jp"
+     *
+     * @param packageLocales PackageManager locales, a locale list by a multiple language tags with
+     *                       comma.
+     *                       example: "en, uk, jp"
+     *
      * @param assetLocales   Asset locales, a locale list by a multiple language tags with String
      *                       array.
      *                       example: new String[] {"en", "ne", "ms", "pa"}
@@ -212,10 +245,12 @@
             String simCountry,
             String networkCountry,
             String systemLocales,
+            String packageLocales,
             String[] assetLocales) {
         mAppLocale = LocaleList.forLanguageTags(appLocale);
         mSystemLocales = LocaleList.forLanguageTags(systemLocales);
         mAssetLocales = assetLocales;
+        mPackageLocales = LocaleList.forLanguageTags(packageLocales);
         when(mTelephonyManager.getSimCountryIso()).thenReturn(simCountry);
         when(mTelephonyManager.getNetworkCountryIso()).thenReturn(networkCountry);
         when(mLocaleManager.getApplicationLocales(anyString())).thenReturn(mAppLocale);
@@ -237,6 +272,10 @@
         LocaleList getCurrentSystemLocales() {
             return mSystemLocales;
         }
-    }
 
+        @Override
+        LocaleList getPackageLocales() {
+            return mPackageLocales;
+        }
+    }
 }