diff --git a/src/com/android/settings/password/ConfirmLockPassword.java b/src/com/android/settings/password/ConfirmLockPassword.java index b9b1810da25..ead79d74d71 100644 --- a/src/com/android/settings/password/ConfirmLockPassword.java +++ b/src/com/android/settings/password/ConfirmLockPassword.java @@ -64,6 +64,7 @@ import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockscreenCredential; import com.android.internal.widget.TextViewInputDisabler; import com.android.settings.R; +import com.android.settings.SetupRedactionInterstitial; import com.android.settingslib.animation.AppearAnimationUtils; import com.android.settingslib.animation.DisappearAnimationUtils; @@ -723,6 +724,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity { Intent result = new Intent(); if (mRemoteValidation && containsGatekeeperPasswordHandle(resultData)) { result.putExtra(EXTRA_KEY_GK_PW_HANDLE, getGatekeeperPasswordHandle(resultData)); + SetupRedactionInterstitial.setEnabled(getContext(), true); } mCredentialCheckResultTracker.setResult(/* matched= */ true, result, /* timeoutMs= */ 0, mEffectiveUserId); diff --git a/src/com/android/settings/password/ConfirmLockPattern.java b/src/com/android/settings/password/ConfirmLockPattern.java index 3415478c912..28d790e1912 100644 --- a/src/com/android/settings/password/ConfirmLockPattern.java +++ b/src/com/android/settings/password/ConfirmLockPattern.java @@ -54,6 +54,7 @@ import com.android.internal.widget.LockPatternView; import com.android.internal.widget.LockPatternView.Cell; import com.android.internal.widget.LockscreenCredential; import com.android.settings.R; +import com.android.settings.SetupRedactionInterstitial; import com.android.settingslib.animation.AppearAnimationCreator; import com.android.settingslib.animation.AppearAnimationUtils; import com.android.settingslib.animation.DisappearAnimationUtils; @@ -751,6 +752,7 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity { Intent result = new Intent(); if (mRemoteValidation && containsGatekeeperPasswordHandle(resultData)) { result.putExtra(EXTRA_KEY_GK_PW_HANDLE, getGatekeeperPasswordHandle(resultData)); + SetupRedactionInterstitial.setEnabled(getContext(), true); } mCredentialCheckResultTracker.setResult(/* matched= */ true, result, /* timeoutMs= */ 0, mEffectiveUserId); diff --git a/tests/robotests/src/com/android/settings/password/ConfirmLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/ConfirmLockPasswordTest.java index 4ac375fed17..9e8535a30da 100644 --- a/tests/robotests/src/com/android/settings/password/ConfirmLockPasswordTest.java +++ b/tests/robotests/src/com/android/settings/password/ConfirmLockPasswordTest.java @@ -16,6 +16,8 @@ package com.android.settings.password; +import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED; + import static com.android.settings.password.ConfirmLockPassword.ConfirmLockPasswordFragment; import static com.android.settings.password.TestUtils.GUESS_INVALID_RESULT; import static com.android.settings.password.TestUtils.GUESS_VALID_RESULT; @@ -42,6 +44,7 @@ import static org.mockito.Mockito.verifyNoInteractions; import android.Manifest; import android.app.KeyguardManager; import android.app.admin.ManagedSubscriptionsPolicy; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.UserHandle; @@ -55,6 +58,7 @@ import androidx.test.core.app.ApplicationProvider; import com.android.internal.widget.LockPatternUtils; import com.android.settings.R; +import com.android.settings.SetupRedactionInterstitial; import com.android.settings.testutils.shadow.ShadowDevicePolicyManager; import com.android.settings.testutils.shadow.ShadowLockPatternUtils; import com.android.settings.testutils.shadow.ShadowUserManager; @@ -305,6 +309,32 @@ public class ConfirmLockPasswordTest { assertThat(mLockPatternUtils.isSecure(fragment.mEffectiveUserId)).isFalse(); } + @Test + public void onChosenLockSaveFinished_setsRedactionInterstitial() throws Exception { + // This test verifies that the RedactionInterstitial is available. This is the screen + // responsible for allowing the user to show sensitive lockscreen content. This + // also allows the Settings tile for RedactionInterstitial to appear in the "anything else" + // page during SUW. + final ConfirmDeviceCredentialBaseActivity activity = + buildConfirmDeviceCredentialBaseActivity( + ConfirmLockPassword.class, + createRemoteLockscreenValidationIntent( + KeyguardManager.PASSWORD, VALID_REMAINING_ATTEMPTS)); + final ConfirmLockPasswordFragment fragment = + (ConfirmLockPasswordFragment) getConfirmDeviceCredentialBaseFragment(activity); + final Intent intent = new Intent(); + intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, 1L); + + fragment.onChosenLockSaveFinished(true, intent); + + final ComponentName componentName = + new ComponentName(mContext, SetupRedactionInterstitial.class); + final int isEnabled = mContext.getPackageManager() + .getComponentEnabledSetting(componentName); + + assertThat(isEnabled).isEqualTo(COMPONENT_ENABLED_STATE_ENABLED); + } + private void triggerHandleNext( ConfirmLockPasswordFragment fragment, ImeAwareEditText passwordEntry) { passwordEntry.setText("Password"); diff --git a/tests/robotests/src/com/android/settings/password/ConfirmLockPatternTest.java b/tests/robotests/src/com/android/settings/password/ConfirmLockPatternTest.java index 04a76b85bd2..9e7ec061e90 100644 --- a/tests/robotests/src/com/android/settings/password/ConfirmLockPatternTest.java +++ b/tests/robotests/src/com/android/settings/password/ConfirmLockPatternTest.java @@ -16,6 +16,9 @@ package com.android.settings.password; +import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED; + +import static com.android.settings.password.ConfirmLockPattern.ConfirmLockPatternFragment; import static com.android.settings.password.TestUtils.GUESS_INVALID_RESULT; import static com.android.settings.password.TestUtils.GUESS_VALID_RESULT; import static com.android.settings.password.TestUtils.LOCKOUT_RESULT; @@ -39,6 +42,7 @@ import static org.mockito.Mockito.verifyNoInteractions; import android.Manifest; import android.app.KeyguardManager; import android.app.admin.ManagedSubscriptionsPolicy; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.UserHandle; @@ -51,6 +55,7 @@ import androidx.test.core.app.ApplicationProvider; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternView; import com.android.settings.R; +import com.android.settings.SetupRedactionInterstitial; import com.android.settings.testutils.shadow.ShadowDevicePolicyManager; import com.android.settings.testutils.shadow.ShadowLockPatternUtils; import com.android.settings.testutils.shadow.ShadowUserManager; @@ -284,6 +289,32 @@ public class ConfirmLockPatternTest { assertThat(mLockPatternUtils.isSecure(fragment.mEffectiveUserId)).isFalse(); } + @Test + public void onChosenLockSaveFinished_setsRedactionInterstitial() throws Exception { + // This test verifies that the RedactionInterstitial is available. This is the screen + // responsible for allowing the user to show sensitive lockscreen content. This + // also allows the Settings tile for RedactionInterstitial to appear in the "anything else" + // page during SUW. + final ConfirmDeviceCredentialBaseActivity activity = + buildConfirmDeviceCredentialBaseActivity( + ConfirmLockPattern.class, + createRemoteLockscreenValidationIntent( + KeyguardManager.PATTERN, VALID_REMAINING_ATTEMPTS)); + final ConfirmLockPatternFragment fragment = (ConfirmLockPatternFragment) + getConfirmDeviceCredentialBaseFragment(activity); + final Intent intent = new Intent(); + intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, 1L); + + fragment.onChosenLockSaveFinished(true, intent); + + final ComponentName componentName = + new ComponentName(mContext, SetupRedactionInterstitial.class); + final int isEnabled = mContext.getPackageManager() + .getComponentEnabledSetting(componentName); + + assertThat(isEnabled).isEqualTo(COMPONENT_ENABLED_STATE_ENABLED); + } + private void triggerOnPatternDetected(LockPatternView lockPatternView) { List pattern = List.of(LockPatternView.Cell.of(0, 0)); lockPatternView.setPattern(LockPatternView.DisplayMode.Correct, pattern);