Add face enroll accessibility dialog

When accessibility services such as talkback are enabled, and the
user tries to start the non-accessibility enrollment flow, present
a confirmation dialog.

Fixes: 152633740
Test: Enable talkback, start enrollment
      1) Accessibility flow --> no dialog, as expected
      2) Non-accessibility flow --> new dialog shown
Test: No talkback, start enrollment. No dialog shown in either case
Change-Id: I0cd07a9d0012f6c9bea36e74365a6707755d3ab7
This commit is contained in:
Kevin Chyn
2020-07-16 13:26:17 -07:00
parent f9cf7d32ec
commit 243aa8e2e0
3 changed files with 93 additions and 5 deletions

View File

@@ -55,6 +55,7 @@ public class FaceEnrollEducation extends BiometricEnrollBase {
private Intent mResultIntent;
private TextView mDescriptionText;
private boolean mNextClicked;
private boolean mAccessibilityEnabled;
private CompoundButton.OnCheckedChangeListener mSwitchDiversityListener =
new CompoundButton.OnCheckedChangeListener() {
@@ -123,13 +124,12 @@ public class FaceEnrollEducation extends BiometricEnrollBase {
.setTheme(R.style.SudGlifButton_Primary)
.build();
boolean accessibilityEnabled = false;
final AccessibilityManager accessibilityManager = getApplicationContext().getSystemService(
AccessibilityManager.class);
if (accessibilityManager != null) {
// Add additional check for touch exploration. This prevents other accessibility
// features such as Live Transcribe from defaulting to the accessibility setup.
accessibilityEnabled = accessibilityManager.isEnabled()
mAccessibilityEnabled = accessibilityManager.isEnabled()
&& accessibilityManager.isTouchExplorationEnabled();
}
mFooterBarMixin.setPrimaryButton(footerButton);
@@ -147,7 +147,7 @@ public class FaceEnrollEducation extends BiometricEnrollBase {
mSwitchDiversity.getSwitch().toggle();
});
if (accessibilityEnabled) {
if (mAccessibilityEnabled) {
accessibilityButton.callOnClick();
}
}
@@ -194,9 +194,20 @@ public class FaceEnrollEducation extends BiometricEnrollBase {
if (mResultIntent != null) {
intent.putExtras(mResultIntent);
}
mNextClicked = true;
intent.putExtra(EXTRA_KEY_REQUIRE_DIVERSITY, !mSwitchDiversity.isChecked());
startActivityForResult(intent, BIOMETRIC_FIND_SENSOR_REQUEST);
if (!mSwitchDiversity.isChecked() && mAccessibilityEnabled) {
FaceEnrollAccessibilityDialog dialog = FaceEnrollAccessibilityDialog.newInstance();
dialog.setPositiveButtonListener((dialog1, which) -> {
startActivityForResult(intent, BIOMETRIC_FIND_SENSOR_REQUEST);
mNextClicked = true;
});
dialog.show(getSupportFragmentManager(), FaceEnrollAccessibilityDialog.class.getName());
} else {
startActivityForResult(intent, BIOMETRIC_FIND_SENSOR_REQUEST);
mNextClicked = true;
}
}
protected void onSkipButtonClick(View view) {