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);