Merge "Create MoreSecurtiyPrivacyFragment"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9fb7ce1..ecd8aad 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -930,6 +930,18 @@
     <string name="security_settings_udfps_enroll_progress_a11y_message">Enrolling fingerprint <xliff:g id="percentage" example="10">%d</xliff:g> percent</string>
     <!-- Title shown in fingerprint enrollment dialog once enrollment is completed [CHAR LIMIT=29] -->
     <string name="security_settings_fingerprint_enroll_finish_title">Fingerprint added</string>
+    <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (tablet) [CHAR LIMIT=NONE] -->
+    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
+    <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (device) [CHAR LIMIT=NONE] -->
+    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
+    <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (default) [CHAR LIMIT=NONE] -->
+    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
+    <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (tablet) [CHAR LIMIT=NONE] -->
+    <string name="security_settings_fingerprint_enroll_finish_v2_add_fingerprint_message" product="tablet">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps or approve a purchase. \n\nAdd another fingerprint so it\u2019s easier to unlock when you hold your tablet in different ways.</string>
+    <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (device) [CHAR LIMIT=NONE] -->
+    <string name="security_settings_fingerprint_enroll_finish_v2_add_fingerprint_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps or approve a purchase.\n\nAdd another fingerprint so it\u2019s easier to unlock when you hold your device in different ways.</string>
+    <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (default) [CHAR LIMIT=NONE] -->
+    <string name="security_settings_fingerprint_enroll_finish_v2_add_fingerprint_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps or approve a purchase.\n\nAdd another fingerprint so it\u2019s easier to unlock when you hold your phone in different ways.</string>
     <!-- Title for require screen on to auth toggle shown in fingerprint enrollment dialog once enrollment is completed. [CHAR LIMIT=NONE] -->
     <string name="security_settings_require_screen_on_to_auth_title">Touch to unlock anytime</string>
     <!-- Description for require screen on to auth toggle shown in fingerprint enrollment dialog once enrollment is completed. [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index 10cdc4d..8e52c16 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -64,8 +64,9 @@
     private static final String CATEGORY_CAPTIONS = "captions_category";
     private static final String CATEGORY_AUDIO = "audio_category";
     private static final String CATEGORY_DISPLAY = "display_category";
-    private static final String CATEGORY_INTERACTION_CONTROL = "interaction_control_category";
     private static final String CATEGORY_DOWNLOADED_SERVICES = "user_installed_services_category";
+    @VisibleForTesting
+    static final String CATEGORY_INTERACTION_CONTROL = "interaction_control_category";
 
     private static final String[] CATEGORIES = new String[]{
             CATEGORY_SCREEN_READER, CATEGORY_CAPTIONS, CATEGORY_AUDIO, CATEGORY_DISPLAY,
@@ -144,7 +145,8 @@
 
     private final Map<String, PreferenceCategory> mCategoryToPrefCategoryMap =
             new ArrayMap<>();
-    private final Map<Preference, PreferenceCategory> mServicePreferenceToPreferenceCategoryMap =
+    @VisibleForTesting
+    final Map<Preference, PreferenceCategory> mServicePreferenceToPreferenceCategoryMap =
             new ArrayMap<>();
     private final Map<ComponentName, PreferenceCategory> mPreBundledServiceComponentToCategoryMap =
             new ArrayMap<>();
@@ -352,6 +354,12 @@
         initializePreBundledServicesMapFromArray(CATEGORY_INTERACTION_CONTROL,
                 R.array.config_preinstalled_interaction_control_services);
 
+        // ACCESSIBILITY_MENU_IN_SYSTEM is a default pre-bundled interaction control service.
+        // If the device opts out of including this service then this is a no-op.
+        mPreBundledServiceComponentToCategoryMap.put(
+                AccessibilityManager.ACCESSIBILITY_MENU_IN_SYSTEM,
+                mCategoryToPrefCategoryMap.get(CATEGORY_INTERACTION_CONTROL));
+
         final List<RestrictedPreference> preferenceList = getInstalledAccessibilityList(
                 getPrefContext());
 
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
index 2125d52..bbaa3c7 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
@@ -70,6 +70,9 @@
         }
         setHeaderText(R.string.security_settings_fingerprint_enroll_finish_title);
         setDescriptionText(R.string.security_settings_fingerprint_enroll_finish_v2_message);
+        if (mCanAssumeSfps) {
+            setDescriptionForSfps();
+        }
 
         mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
         mFooterBarMixin.setSecondaryButton(
@@ -90,6 +93,20 @@
         );
     }
 
+    private void setDescriptionForSfps() {
+        final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
+        if (fpm != null) {
+            final List<FingerprintSensorPropertiesInternal> props =
+                    fpm.getSensorPropertiesInternal();
+            final int maxEnrollments = props.get(0).maxEnrollmentsPerUser;
+            final int enrolled = fpm.getEnrolledFingerprints(mUserId).size();
+            if (enrolled < maxEnrollments) {
+                setDescriptionText(R.string
+                        .security_settings_fingerprint_enroll_finish_v2_add_fingerprint_message);
+            }
+        }
+    }
+
     @Override
     public void onBackPressed() {
         updateFingerprintSuggestionEnableState();
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index 30aa00a..bf3951e 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -328,13 +328,43 @@
 
     }
 
+    @Test
+    @Config(shadows = {ShadowFragment.class, ShadowUserManager.class})
+    public void testAccessibilityMenuInSystem_IncludedInInteractionControl() {
+        mShadowAccessibilityManager.setInstalledAccessibilityServiceList(
+                List.of(getMockAccessibilityServiceInfo(
+                        AccessibilityManager.ACCESSIBILITY_MENU_IN_SYSTEM)));
+        setupFragment();
+
+        final RestrictedPreference pref = mFragment.getPreferenceScreen().findPreference(
+                AccessibilityManager.ACCESSIBILITY_MENU_IN_SYSTEM.flattenToString());
+        final String prefCategory = mFragment.mServicePreferenceToPreferenceCategoryMap.get(
+                pref).getKey();
+        assertThat(prefCategory).isEqualTo(AccessibilitySettings.CATEGORY_INTERACTION_CONTROL);
+    }
+
+    @Test
+    @Config(shadows = {ShadowFragment.class, ShadowUserManager.class})
+    public void testAccessibilityMenuInSystem_NoPrefWhenNotInstalled() {
+        mShadowAccessibilityManager.setInstalledAccessibilityServiceList(List.of());
+        setupFragment();
+
+        final RestrictedPreference pref = mFragment.getPreferenceScreen().findPreference(
+                AccessibilityManager.ACCESSIBILITY_MENU_IN_SYSTEM.flattenToString());
+        assertThat(pref).isNull();
+    }
+
     private AccessibilityServiceInfo getMockAccessibilityServiceInfo(String packageName,
             String className) {
+        return getMockAccessibilityServiceInfo(new ComponentName(packageName, className));
+    }
+
+    private AccessibilityServiceInfo getMockAccessibilityServiceInfo(ComponentName componentName) {
         final ApplicationInfo applicationInfo = new ApplicationInfo();
         final ServiceInfo serviceInfo = new ServiceInfo();
-        applicationInfo.packageName = packageName;
-        serviceInfo.packageName = packageName;
-        serviceInfo.name = className;
+        applicationInfo.packageName = componentName.getPackageName();
+        serviceInfo.packageName = componentName.getPackageName();
+        serviceInfo.name = componentName.getClassName();
         serviceInfo.applicationInfo = applicationInfo;
 
         final ResolveInfo resolveInfo = new ResolveInfo();
@@ -342,7 +372,7 @@
         try {
             final AccessibilityServiceInfo info = new AccessibilityServiceInfo(resolveInfo,
                     mContext);
-            info.setComponentName(new ComponentName(packageName, className));
+            info.setComponentName(componentName);
             return info;
         } catch (XmlPullParserException | IOException e) {
             // Do nothing