Show customized message for private space lock setup screen

go/ss/3kmkEkasv6vmDDo.png
go/ss/7CzzSXZthbJVcEr.png

Bug: 308862923
Test: atest ChooseLockGenericTest and Verified manually customized
message is shown when passed with intent.

Change-Id: I784d42c4702801ec45bc8d4c5e911a404f549d46
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 71a7b30..84bef3e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1310,6 +1310,10 @@
     <string name="privatespace_retry_signin_title">Sign in to set up Private Space</string>
     <!-- Summary for the Private Space account login error screen. [CHAR LIMIT=NONE] -->
     <string name="privatespace_retry_summary">You need to sign in to an account to set up Private Space</string>
+    <!-- private space lock setup screen title. This title is asking the user to choose a type of screen lock (such as a pattern, PIN, or password) that they need to enter to unlock private space. [CHAR LIMIT=60] -->
+    <string name="private_space_lock_setup_title">Choose a lock for your private space</string>
+    <!-- private space lock setup screen description [CHAR LIMIT=NONE] -->
+    <string name="private_space_lock_setup_description">You can unlock your private space using your fingerprint. For security, this option requires a backup lock.</string>
 
     <!-- TODO(b/309950257): Remove below strings once QSTIle fulfillment is complete. -->
     <!-- Header in hide Private Space settings page to unhide Private Space. [CHAR LIMIT=90] -->
@@ -1323,7 +1327,6 @@
     <!-- Note in hide Private Space settings page to inform that this is a development feature. [CHAR LIMIT=NONE] -->
     <string name="privatespace_development_note">Note to Googlers: The development of this feature is still in progress</string>
 
-
     <!-- Text shown when "Add fingerprint" button is disabled -->
     <string name="fingerprint_add_max">You can add up to <xliff:g id="count" example="5">%d</xliff:g> fingerprints</string>
     <!-- Text shown when users has enrolled a maximum number of fingerprints [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 0bf1255..76e342e 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -30,6 +30,8 @@
 
 import static com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment.RESULT_FINISHED;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
@@ -86,6 +88,10 @@
 
 import com.google.android.setupcompat.util.WizardManagerHelper;
 
+/**
+ * Activity class that provides a generic implementation for displaying options to choose a lock
+ * type, either for setting up a new lock or updating an existing lock.
+ */
 public class ChooseLockGeneric extends SettingsActivity {
     public static final String CONFIRM_CREDENTIALS = "confirm_credentials";
 
@@ -194,6 +200,8 @@
         protected boolean mForBiometrics = false;
 
         private boolean mOnlyEnforceDevicePasswordRequirement = false;
+        private int mExtraLockScreenTitleResId;
+        private int mExtraLockScreenDescriptionResId;
 
         @Override
         public int getMetricsCategory() {
@@ -242,6 +250,10 @@
             mForBiometrics = intent.getBooleanExtra(
                     ChooseLockSettingsHelper.EXTRA_KEY_FOR_BIOMETRICS, false);
 
+            mExtraLockScreenTitleResId = intent.getIntExtra(EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE, -1);
+            mExtraLockScreenDescriptionResId =
+                    intent.getIntExtra(EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION, -1);
+
             mRequestedMinComplexity = intent.getIntExtra(
                     EXTRA_KEY_REQUESTED_MIN_COMPLEXITY, PASSWORD_COMPLEXITY_NONE);
             mOnlyEnforceDevicePasswordRequirement = intent.getBooleanExtra(
@@ -343,13 +355,19 @@
                 if (updateExistingLock) {
                     getActivity().setTitle(mDpm.getResources().getString(
                             LOCK_SETTINGS_UPDATE_PROFILE_LOCK_TITLE,
-                            () -> getString(
-                                    R.string.lock_settings_picker_update_profile_lock_title)));
+                            () -> getString(mExtraLockScreenTitleResId != -1
+                                    ? mExtraLockScreenTitleResId
+                                    : R.string.lock_settings_picker_update_profile_lock_title)));
                 } else {
                     getActivity().setTitle(mDpm.getResources().getString(
                             LOCK_SETTINGS_NEW_PROFILE_LOCK_TITLE,
-                            () -> getString(R.string.lock_settings_picker_new_profile_lock_title)));
+                            () -> getString(mExtraLockScreenTitleResId != -1
+                                    ? mExtraLockScreenTitleResId
+                                    : R.string.lock_settings_picker_new_profile_lock_title)));
                 }
+            } else if (mExtraLockScreenTitleResId != -1) {
+                // Show customized screen lock title if it is passed as an extra in the intent.
+                getActivity().setTitle(mExtraLockScreenTitleResId);
             } else {
                 updateExistingLock = mLockPatternUtils.isSecure(mUserId);
                 if (updateExistingLock) {
@@ -377,7 +395,16 @@
             setHeaderView(R.layout.choose_lock_generic_biometric_header);
             TextView textView = getHeaderView().findViewById(R.id.biometric_header_description);
 
-            if (mForFingerprint) {
+            if (mIsManagedProfile) {
+                textView.setText(mDpm.getResources().getString(
+                        WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE,
+                        () -> getString(mExtraLockScreenDescriptionResId != -1
+                                ? mExtraLockScreenDescriptionResId
+                                : R.string.lock_settings_picker_profile_message)));
+            } else if (mExtraLockScreenDescriptionResId != -1) {
+                // Show customized description in screen lock if passed as an extra in the intent.
+                textView.setText(mExtraLockScreenDescriptionResId);
+            } else if (mForFingerprint) {
                 if (mIsSetNewPassword) {
                     textView.setText(R.string.fingerprint_unlock_title);
                 } else {
@@ -396,13 +423,7 @@
                     textView.setText(R.string.lock_settings_picker_biometric_message);
                 }
             } else {
-                if (mIsManagedProfile) {
-                    textView.setText(mDpm.getResources().getString(
-                            WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE,
-                            () -> getString(R.string.lock_settings_picker_profile_message)));
-                } else {
-                    textView.setText("");
-                }
+                textView.setText("");
             }
         }
 
@@ -426,6 +447,8 @@
                 }
                 // Forward the target user id to  ChooseLockGeneric.
                 chooseLockGenericIntent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+                chooseLockGenericIntent.putExtra(
+                        EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE, mExtraLockScreenTitleResId);
                 chooseLockGenericIntent.putExtra(CONFIRM_CREDENTIALS, !mPasswordConfirmed);
                 chooseLockGenericIntent.putExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY,
                         mRequestedMinComplexity);
diff --git a/src/com/android/settings/password/ChooseLockSettingsHelper.java b/src/com/android/settings/password/ChooseLockSettingsHelper.java
index e5fc550..21fd94c 100644
--- a/src/com/android/settings/password/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/password/ChooseLockSettingsHelper.java
@@ -118,6 +118,14 @@
     public static final String EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY =
             "device_password_requirement_only";
 
+    /** Intent extra for passing the screen title resource ID to show in the set lock screen. */
+    public static final String EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE =
+            "choose_lock_setup_screen_title";
+
+    /** Intent extra for passing the description resource ID to show in the set lock screen. */
+    public static final String EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION =
+            "choose_lock_setup_screen_description";
+
     @VisibleForTesting @NonNull LockPatternUtils mLockPatternUtils;
     @NonNull private final Activity mActivity;
     @Nullable private final Fragment mFragment;
diff --git a/src/com/android/settings/password/SetNewPasswordActivity.java b/src/com/android/settings/password/SetNewPasswordActivity.java
index bb3c6df..9614d28 100644
--- a/src/com/android/settings/password/SetNewPasswordActivity.java
+++ b/src/com/android/settings/password/SetNewPasswordActivity.java
@@ -24,6 +24,8 @@
 import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
 
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
@@ -126,6 +128,10 @@
                 : new Intent(this, ChooseLockGeneric.class);
         intent.setAction(mNewPasswordAction);
         intent.putExtras(chooseLockFingerprintExtras);
+        intent.putExtra(EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE,
+                getIntent().getIntExtra(EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE, -1));
+        intent.putExtra(EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION,
+                getIntent().getIntExtra(EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION, -1));
         if (mCallerAppName != null) {
             intent.putExtra(EXTRA_KEY_CALLER_APP_NAME, mCallerAppName);
         }
diff --git a/src/com/android/settings/privatespace/PrivateProfileContextHelperActivity.java b/src/com/android/settings/privatespace/PrivateProfileContextHelperActivity.java
index 31d4be9..aa980ee 100644
--- a/src/com/android/settings/privatespace/PrivateProfileContextHelperActivity.java
+++ b/src/com/android/settings/privatespace/PrivateProfileContextHelperActivity.java
@@ -20,6 +20,8 @@
 import static android.app.admin.DevicePolicyManager.EXTRA_PASSWORD_COMPLEXITY;
 import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_LOW;
 
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE;
 import static com.android.settings.privatespace.PrivateSpaceSetupActivity.ACCOUNT_LOGIN_ACTION;
 import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
 import static com.android.settings.privatespace.PrivateSpaceSetupActivity.SET_LOCK_ACTION;
@@ -34,6 +36,7 @@
 import androidx.annotation.Nullable;
 import androidx.fragment.app.FragmentActivity;
 
+import com.android.settings.R;
 import com.android.settings.SetupWizardUtils;
 import com.android.settings.overlay.FeatureFactory;
 
@@ -77,6 +80,11 @@
     private void createPrivateSpaceLock() {
         final Intent intent = new Intent(ACTION_SET_NEW_PASSWORD);
         intent.putExtra(EXTRA_PASSWORD_COMPLEXITY, PASSWORD_COMPLEXITY_LOW);
+        intent.putExtra(
+                EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE, R.string.private_space_lock_setup_title);
+        intent.putExtra(
+                EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION,
+                R.string.private_space_lock_setup_description);
         mVerifyDeviceLock.launch(intent);
     }
 
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
index e625827..ca1ab54 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
@@ -28,6 +28,8 @@
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
 import static com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment.KEY_LOCK_SETTINGS_FOOTER;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_FOR_BIOMETRICS;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_FOR_FACE;
@@ -52,6 +54,7 @@
 import android.hardware.fingerprint.FingerprintManager;
 import android.os.Bundle;
 import android.provider.Settings.Global;
+import android.widget.TextView;
 
 import androidx.annotation.Nullable;
 import androidx.preference.Preference;
@@ -380,6 +383,47 @@
     }
 
     @Test
+    public void onSetNewPassword_withTitleAndDescription_displaysPassedTitleAndDescription() {
+        Intent intent =
+                new Intent(ACTION_SET_NEW_PASSWORD)
+                        .putExtra(
+                                EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE,
+                                R.string.private_space_lock_setup_title)
+                        .putExtra(
+                                EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION,
+                                R.string.private_space_lock_setup_description);
+        initActivity(intent);
+
+        CharSequence expectedTitle = mActivity.getString(R.string.private_space_lock_setup_title);
+        CharSequence expectedDescription =
+                mActivity.getString(R.string.private_space_lock_setup_description);
+        assertThat(mActivity.getTitle().toString().contentEquals(expectedTitle)).isTrue();
+        TextView textView =
+                mFragment.getHeaderView().findViewById(R.id.biometric_header_description);
+        assertThat(textView.getText().toString().contentEquals(expectedDescription)).isTrue();
+    }
+
+    @Test
+    public void onSetNewPassword_withLockScreenTitle_titlePassedOntoNextActivity() {
+        Intent intent =
+                new Intent(ACTION_SET_NEW_PASSWORD)
+                        .putExtra(
+                                EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE,
+                                R.string.private_space_lock_setup_title);
+        initActivity(intent);
+
+        Preference facePref = new Preference(application);
+        facePref.setKey("unlock_skip_biometrics");
+        boolean result = mFragment.onPreferenceTreeClick(facePref);
+
+        assertThat(result).isTrue();
+        Intent actualIntent = shadowOf(mActivity).getNextStartedActivityForResult().intent;
+        assertThat(actualIntent.hasExtra(EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE)).isTrue();
+        assertThat(actualIntent.getIntExtra(EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE, -1))
+                .isEqualTo(R.string.private_space_lock_setup_title);
+    }
+
+    @Test
     public void testUnifyProfile_IntentPassedToChooseLockPassword() {
         final Bundle arguments = new Bundle();
         arguments.putInt(ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_ID, 11);