Merge "Add accessibility for Face"

This commit is contained in:
Kevin Chyn
2018-12-19 07:55:04 +00:00
committed by Android (Google) Code Review
9 changed files with 208 additions and 7 deletions

View File

@@ -40,8 +40,10 @@ import com.google.android.setupdesign.GlifLayout;
*/
public abstract class BiometricEnrollBase extends InstrumentedActivity
implements View.OnClickListener {
public static final String EXTRA_KEY_LAUNCHED_CONFIRM = "launched_confirm_lock";
public static final String EXTRA_KEY_LAUNCHED_CONFIRM = "launched_confirm_lock";
public static final String EXTRA_KEY_REQUIRE_VISION = "accessibility_vision";
public static final String EXTRA_KEY_REQUIRE_DIVERSITY = "accessibility_diversity";
/**
* Used by the choose fingerprint wizard to indicate the wizard is

View File

@@ -0,0 +1,66 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.settings.biometrics.face;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import com.android.settings.R;
/**
* A layout that contains a start-justified title, and an end-justified switch.
*/
public class FaceEnrollAccessibilityToggle extends LinearLayout {
private Switch mSwitch;
public FaceEnrollAccessibilityToggle(Context context) {
this(context, null /* attrs */);
}
public FaceEnrollAccessibilityToggle(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public FaceEnrollAccessibilityToggle(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
LayoutInflater.from(context).inflate(R.layout.face_enroll_accessibility_toggle,
this, true /* attachToRoot */);
final TypedArray a =
context.obtainStyledAttributes(attrs, R.styleable.FaceEnrollAccessibilityToggle);
try {
final CharSequence title =
a.getText(R.styleable.FaceEnrollAccessibilityToggle_messageText);
final TextView titleTextView = findViewById(R.id.title);
titleTextView.setText(title);
} finally {
a.recycle();
}
mSwitch = findViewById(R.id.toggle);
}
public boolean isChecked() {
return mSwitch.isChecked();
}
}

View File

@@ -29,11 +29,12 @@ import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricEnrollSidecar;
import com.android.settings.biometrics.BiometricErrorDialog;
import com.android.settings.biometrics.BiometricsEnrollEnrolling;
import com.android.settings.password.ChooseLockSettingsHelper;
import java.util.ArrayList;
public class FaceEnrollEnrolling extends BiometricsEnrollEnrolling {
@@ -46,6 +47,8 @@ public class FaceEnrollEnrolling extends BiometricsEnrollEnrolling {
private Interpolator mLinearOutSlowInInterpolator;
private FaceEnrollPreviewFragment mPreviewFragment;
private ArrayList<Integer> mDisabledFeatures = new ArrayList<>();
private FaceFeatureProvider.Listener mListener = new FaceFeatureProvider.Listener() {
@Override
public void onEnrolled() {
@@ -91,6 +94,13 @@ public class FaceEnrollEnrolling extends BiometricsEnrollEnrolling {
Button skipButton = findViewById(R.id.skip_button);
skipButton.setOnClickListener(this);
if (!getIntent().getBooleanExtra(BiometricEnrollBase.EXTRA_KEY_REQUIRE_DIVERSITY, true)) {
mDisabledFeatures.add(FaceManager.FEATURE_REQUIRE_REQUIRE_DIVERSITY);
}
if (!getIntent().getBooleanExtra(BiometricEnrollBase.EXTRA_KEY_REQUIRE_VISION, true)) {
mDisabledFeatures.add(FaceManager.FEATURE_REQUIRE_ATTENTION);
}
startEnrollment();
}
@@ -114,7 +124,12 @@ public class FaceEnrollEnrolling extends BiometricsEnrollEnrolling {
@Override
protected BiometricEnrollSidecar getSidecar() {
return new FaceEnrollSidecar();
final int[] disabledFeatures = new int[mDisabledFeatures.size()];
for (int i = 0; i < mDisabledFeatures.size(); i++) {
disabledFeatures[i] = mDisabledFeatures.get(i);
}
return new FaceEnrollSidecar(disabledFeatures);
}
@Override

View File

@@ -20,7 +20,9 @@ import android.app.admin.DevicePolicyManager;
import android.content.Intent;
import android.hardware.face.FaceManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto;
@@ -37,11 +39,22 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
private static final String TAG = "FaceIntro";
private FaceManager mFaceManager;
private FaceEnrollAccessibilityToggle mSwitchVision;
private FaceEnrollAccessibilityToggle mSwitchDiversity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFaceManager = Utils.getFaceManagerOrNull(this);
final LinearLayout accessibilityLayout = findViewById(R.id.accessibility_layout);
final Button accessibilityButton = findViewById(R.id.accessibility_button);
accessibilityButton.setOnClickListener(view -> {
accessibilityButton.setVisibility(View.INVISIBLE);
accessibilityLayout.setVisibility(View.VISIBLE);
});
mSwitchVision = findViewById(R.id.toggle_vision);
mSwitchDiversity = findViewById(R.id.toggle_diversity);
}
@Override
@@ -116,7 +129,10 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
@Override
protected Intent getEnrollingIntent() {
return new Intent(this, FaceEnrollEnrolling.class);
final Intent intent = new Intent(this, FaceEnrollEnrolling.class);
intent.putExtra(EXTRA_KEY_REQUIRE_VISION, mSwitchVision.isChecked());
intent.putExtra(EXTRA_KEY_REQUIRE_DIVERSITY, mSwitchDiversity.isChecked());
return intent;
}
@Override

View File

@@ -24,13 +24,22 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollSidecar;
import java.util.ArrayList;
import java.util.Arrays;
/**
* Sidecar fragment to handle the state around face enrollment
*/
public class FaceEnrollSidecar extends BiometricEnrollSidecar {
private final int[] mDisabledFeatures;
private FaceManager mFaceManager;
public FaceEnrollSidecar(int[] disabledFeatures) {
mDisabledFeatures = Arrays.copyOf(disabledFeatures, disabledFeatures.length);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
@@ -43,9 +52,9 @@ public class FaceEnrollSidecar extends BiometricEnrollSidecar {
if (mUserId != UserHandle.USER_NULL) {
mFaceManager.setActiveUser(mUserId);
}
// TODO: Send the list of disabled features
mFaceManager.enroll(mToken, mEnrollmentCancel,
mEnrollmentCallback, new int[0] /* disabledFeatures */);
mEnrollmentCallback, mDisabledFeatures);
}
private FaceManager.EnrollmentCallback mEnrollmentCallback