From 2d7985fbf30e6a99cfb73879805d767de47e96c1 Mon Sep 17 00:00:00 2001 From: josephpv Date: Wed, 15 Nov 2023 22:42:25 +0000 Subject: [PATCH] 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 --- res/values/strings.xml | 5 ++- .../settings/password/ChooseLockGeneric.java | 45 ++++++++++++++----- .../password/ChooseLockSettingsHelper.java | 8 ++++ .../password/SetNewPasswordActivity.java | 6 +++ .../PrivateProfileContextHelperActivity.java | 8 ++++ .../password/ChooseLockGenericTest.java | 44 ++++++++++++++++++ 6 files changed, 104 insertions(+), 12 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 71a7b30e451..84bef3e8e12 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1310,6 +1310,10 @@ Sign in to set up Private Space You need to sign in to an account to set up Private Space + + Choose a lock for your private space + + You can unlock your private space using your fingerprint. For security, this option requires a backup lock. @@ -1323,7 +1327,6 @@ Note to Googlers: The development of this feature is still in progress - You can add up to %d fingerprints diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java index 0bf1255b3b9..76e342e095c 100644 --- a/src/com/android/settings/password/ChooseLockGeneric.java +++ b/src/com/android/settings/password/ChooseLockGeneric.java @@ -30,6 +30,8 @@ import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROF 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.android.settingslib.widget.FooterPreference; 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 @@ public class ChooseLockGeneric extends SettingsActivity { protected boolean mForBiometrics = false; private boolean mOnlyEnforceDevicePasswordRequirement = false; + private int mExtraLockScreenTitleResId; + private int mExtraLockScreenDescriptionResId; @Override public int getMetricsCategory() { @@ -242,6 +250,10 @@ public class ChooseLockGeneric extends SettingsActivity { 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 @@ public class ChooseLockGeneric extends SettingsActivity { 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 @@ public class ChooseLockGeneric extends SettingsActivity { 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 @@ public class ChooseLockGeneric extends SettingsActivity { 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 @@ public class ChooseLockGeneric extends SettingsActivity { } // 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 e5fc5507815..21fd94c554c 100644 --- a/src/com/android/settings/password/ChooseLockSettingsHelper.java +++ b/src/com/android/settings/password/ChooseLockSettingsHelper.java @@ -118,6 +118,14 @@ public final class ChooseLockSettingsHelper { 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 bb3c6dfbf64..9614d280009 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.EXTRA_PASSWORD_COMPLEXITY; 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 @@ public class SetNewPasswordActivity extends Activity implements SetNewPasswordCo : 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 31d4be97749..aa980eeaf28 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.ACTION_SET_NEW_PASSWORD; 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.activity.result.contract.ActivityResultContracts; 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 @@ public class PrivateProfileContextHelperActivity extends FragmentActivity { 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 e625827d4a6..ca1ab542c11 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 android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; 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.face.FaceManager; 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; @@ -379,6 +382,47 @@ public class ChooseLockGenericTest { .isEqualTo("app name"); } + @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();