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.template.RequireScrollMixin;
|
||||||
import com.google.android.setupdesign.util.DynamicColorPalette;
|
import com.google.android.setupdesign.util.DynamicColorPalette;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract base class for the intro onboarding activity for biometric enrollment.
|
* 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);
|
!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
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
@@ -497,14 +512,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
|||||||
getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT);
|
getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void removeEnrollNextBiometricIfSkipEnroll(@Nullable Intent data) {
|
private void removeEnrollNextBiometricIfSkipEnroll(@Nullable Intent data) {
|
||||||
if (data != null
|
if (data != null
|
||||||
&& data.getBooleanExtra(
|
&& data.getBooleanExtra(
|
||||||
MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, false)) {
|
MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, false)) {
|
||||||
removeEnrollNextBiometric();
|
removeEnrollNextBiometric();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected void handleBiometricResultSkipOrFinished(int resultCode, @Nullable Intent data) {
|
|
||||||
|
private void handleBiometricResultSkipOrFinished(int resultCode, @Nullable Intent data) {
|
||||||
removeEnrollNextBiometricIfSkipEnroll(data);
|
removeEnrollNextBiometricIfSkipEnroll(data);
|
||||||
if (resultCode == RESULT_SKIP) {
|
if (resultCode == RESULT_SKIP) {
|
||||||
onEnrollmentSkipped(data);
|
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.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.Mockito.doAnswer;
|
import static org.mockito.Mockito.doAnswer;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -64,6 +66,7 @@ import com.android.settings.R;
|
|||||||
import com.android.settings.Settings;
|
import com.android.settings.Settings;
|
||||||
import com.android.settings.biometrics.BiometricEnrollBase;
|
import com.android.settings.biometrics.BiometricEnrollBase;
|
||||||
import com.android.settings.biometrics.BiometricUtils;
|
import com.android.settings.biometrics.BiometricUtils;
|
||||||
|
import com.android.settings.biometrics.MultiBiometricEnrollHelper;
|
||||||
import com.android.settings.password.ChooseLockSettingsHelper;
|
import com.android.settings.password.ChooseLockSettingsHelper;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||||
@@ -206,6 +209,12 @@ public class FaceEnrollIntroductionTest {
|
|||||||
testIntent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
testIntent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||||
FaceEnrollOptions.ENROLL_REASON_SETTINGS);
|
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(
|
when(mFakeFeatureFactory.mFaceFeatureProvider.getPostureGuidanceIntent(any())).thenReturn(
|
||||||
null /* Simulate no posture intent */);
|
null /* Simulate no posture intent */);
|
||||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||||
@@ -690,4 +699,16 @@ public class FaceEnrollIntroductionTest {
|
|||||||
.isEqualTo(FaceEnrollOptions.ENROLL_REASON_SETTINGS);
|
.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.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
@@ -44,6 +45,7 @@ import android.hardware.fingerprint.FingerprintEnrollOptions;
|
|||||||
import android.hardware.fingerprint.FingerprintManager;
|
import android.hardware.fingerprint.FingerprintManager;
|
||||||
import android.hardware.fingerprint.FingerprintSensorProperties;
|
import android.hardware.fingerprint.FingerprintSensorProperties;
|
||||||
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
||||||
|
import android.os.Looper;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
@@ -55,6 +57,7 @@ import com.android.internal.widget.VerifyCredentialResponse;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.biometrics.BiometricUtils;
|
import com.android.settings.biometrics.BiometricUtils;
|
||||||
import com.android.settings.biometrics.GatekeeperPasswordProvider;
|
import com.android.settings.biometrics.GatekeeperPasswordProvider;
|
||||||
|
import com.android.settings.biometrics.MultiBiometricEnrollHelper;
|
||||||
|
|
||||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||||
import com.google.android.setupdesign.GlifLayout;
|
import com.google.android.setupdesign.GlifLayout;
|
||||||
@@ -70,6 +73,7 @@ import org.mockito.stubbing.Answer;
|
|||||||
import org.robolectric.Robolectric;
|
import org.robolectric.Robolectric;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
import org.robolectric.Shadows;
|
||||||
import org.robolectric.android.controller.ActivityController;
|
import org.robolectric.android.controller.ActivityController;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -353,7 +357,19 @@ public class FingerprintEnrollIntroductionTest {
|
|||||||
false);
|
false);
|
||||||
Assert.assertEquals(View.INVISIBLE,
|
Assert.assertEquals(View.INVISIBLE,
|
||||||
mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility());
|
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() {
|
private Intent newTokenOnlyIntent() {
|
||||||
@@ -383,6 +399,15 @@ public class FingerprintEnrollIntroductionTest {
|
|||||||
.putExtra(EXTRA_KEY_GK_PW_HANDLE, 1L);
|
.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) {
|
private VerifyCredentialResponse newGoodCredential(long gkPwHandle, @NonNull byte[] hat) {
|
||||||
return new VerifyCredentialResponse.Builder()
|
return new VerifyCredentialResponse.Builder()
|
||||||
.setGatekeeperPasswordHandle(gkPwHandle)
|
.setGatekeeperPasswordHandle(gkPwHandle)
|
||||||
|
|||||||
Reference in New Issue
Block a user