Drop PendingIntent extras from external packages during enrollment.
Bug: 388528350 Flag: EXEMPT bugfix Test: atest FingerprintEnrollIntroductionTest FaceEnrollIntroductionTest Change-Id: I61281dcf95e53100a96d6a218f3f00fd1b4ea3f9 (cherry picked from commit 4ccdeee849d5fef78498ba33cadc525523efcbd7)
This commit is contained in:
@@ -50,6 +50,8 @@ import com.google.android.setupdesign.span.LinkSpan;
|
||||
import com.google.android.setupdesign.template.RequireScrollMixin;
|
||||
import com.google.android.setupdesign.util.DynamicColorPalette;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Abstract base class for the intro onboarding activity for biometric enrollment.
|
||||
*/
|
||||
@@ -249,6 +251,19 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
||||
!isScrollNeeded && !enrollmentCompleted ? View.VISIBLE : View.INVISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
|
||||
if (!getPackageName().equals(getCallingPackage())) {
|
||||
for (String key : List.of(MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL,
|
||||
MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE,
|
||||
MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT)) {
|
||||
getIntent().removeExtra(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
@@ -497,14 +512,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
||||
getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT);
|
||||
}
|
||||
|
||||
protected void removeEnrollNextBiometricIfSkipEnroll(@Nullable Intent data) {
|
||||
private void removeEnrollNextBiometricIfSkipEnroll(@Nullable Intent data) {
|
||||
if (data != null
|
||||
&& data.getBooleanExtra(
|
||||
MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, false)) {
|
||||
removeEnrollNextBiometric();
|
||||
}
|
||||
}
|
||||
protected void handleBiometricResultSkipOrFinished(int resultCode, @Nullable Intent data) {
|
||||
|
||||
private void handleBiometricResultSkipOrFinished(int resultCode, @Nullable Intent data) {
|
||||
removeEnrollNextBiometricIfSkipEnroll(data);
|
||||
if (resultCode == RESULT_SKIP) {
|
||||
onEnrollmentSkipped(data);
|
||||
|
||||
@@ -32,11 +32,13 @@ import static com.google.common.truth.Truth.assertWithMessage;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
@@ -64,6 +66,7 @@ import com.android.settings.R;
|
||||
import com.android.settings.Settings;
|
||||
import com.android.settings.biometrics.BiometricEnrollBase;
|
||||
import com.android.settings.biometrics.BiometricUtils;
|
||||
import com.android.settings.biometrics.MultiBiometricEnrollHelper;
|
||||
import com.android.settings.password.ChooseLockSettingsHelper;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||
@@ -206,6 +209,12 @@ public class FaceEnrollIntroductionTest {
|
||||
testIntent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
FaceEnrollOptions.ENROLL_REASON_SETTINGS);
|
||||
|
||||
testIntent.putExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE,
|
||||
mock(PendingIntent.class));
|
||||
testIntent.putExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT,
|
||||
mock(PendingIntent.class));
|
||||
testIntent.putExtra(MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, false);
|
||||
|
||||
when(mFakeFeatureFactory.mFaceFeatureProvider.getPostureGuidanceIntent(any())).thenReturn(
|
||||
null /* Simulate no posture intent */);
|
||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||
@@ -690,4 +699,16 @@ public class FaceEnrollIntroductionTest {
|
||||
.isEqualTo(FaceEnrollOptions.ENROLL_REASON_SETTINGS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void drops_pendingIntents() {
|
||||
setupActivity();
|
||||
|
||||
mController.start();
|
||||
Shadows.shadowOf(Looper.getMainLooper()).idle();
|
||||
|
||||
final Intent intent = mActivity.getIntent();
|
||||
assertThat(intent.hasExtra(MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL)).isFalse();
|
||||
assertThat(intent.hasExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE)).isFalse();
|
||||
assertThat(intent.hasExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT)).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
@@ -44,6 +45,7 @@ import android.hardware.fingerprint.FingerprintEnrollOptions;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.FingerprintSensorProperties;
|
||||
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
||||
import android.os.Looper;
|
||||
import android.os.UserManager;
|
||||
import android.view.View;
|
||||
|
||||
@@ -55,6 +57,7 @@ import com.android.internal.widget.VerifyCredentialResponse;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.biometrics.BiometricUtils;
|
||||
import com.android.settings.biometrics.GatekeeperPasswordProvider;
|
||||
import com.android.settings.biometrics.MultiBiometricEnrollHelper;
|
||||
|
||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||
import com.google.android.setupdesign.GlifLayout;
|
||||
@@ -70,6 +73,7 @@ import org.mockito.stubbing.Answer;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.Shadows;
|
||||
import org.robolectric.android.controller.ActivityController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -353,7 +357,19 @@ public class FingerprintEnrollIntroductionTest {
|
||||
false);
|
||||
Assert.assertEquals(View.INVISIBLE,
|
||||
mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void drops_pendingIntents() {
|
||||
setupFingerprintEnrollIntroWith(newExternalPendingIntent());
|
||||
|
||||
mController.start();
|
||||
Shadows.shadowOf(Looper.getMainLooper()).idle();
|
||||
|
||||
final Intent intent = mFingerprintEnrollIntroduction.getIntent();
|
||||
assertThat(intent.hasExtra(MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL)).isFalse();
|
||||
assertThat(intent.hasExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE)).isFalse();
|
||||
assertThat(intent.hasExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT)).isFalse();
|
||||
}
|
||||
|
||||
private Intent newTokenOnlyIntent() {
|
||||
@@ -383,6 +399,15 @@ public class FingerprintEnrollIntroductionTest {
|
||||
.putExtra(EXTRA_KEY_GK_PW_HANDLE, 1L);
|
||||
}
|
||||
|
||||
private Intent newExternalPendingIntent() {
|
||||
return newTokenOnlyIntent()
|
||||
.putExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE,
|
||||
mock(PendingIntent.class))
|
||||
.putExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT,
|
||||
mock(PendingIntent.class))
|
||||
.putExtra(MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, false);
|
||||
}
|
||||
|
||||
private VerifyCredentialResponse newGoodCredential(long gkPwHandle, @NonNull byte[] hat) {
|
||||
return new VerifyCredentialResponse.Builder()
|
||||
.setGatekeeperPasswordHandle(gkPwHandle)
|
||||
|
||||
Reference in New Issue
Block a user