From 24f8463af4101fb69ffbe9e0a6d9bfee61436745 Mon Sep 17 00:00:00 2001 From: Hao Dong Date: Tue, 17 Jan 2023 10:39:46 +0800 Subject: [PATCH] Add udfps/ and support a11y for the udfps enroll view. This CL calls methods in UdfpsEnrollUtils.java to announce a11y message. Besides, scale factor calculation and UdfpsOverlayParams.java are removed since they are added in settingslib/. Test: manually tested on device: Turn on talkback and turn this flag on via adb command adb shell setprop sys.fflag.override.settings_show_udfps_enroll_in_settings true Bug: 186873966, 260617060 Change-Id: I408ac6a36352aa4bfd4ac1374e3922163dbc2199 --- res/layout/udfps_enroll_view.xml | 9 -- .../FingerprintEnrollEnrolling.java | 61 ++++++++---- .../fingerprint/UdfpsEnrollView.java | 32 +++---- .../fingerprint/UdfpsOverlayParams.java | 95 ------------------- 4 files changed, 51 insertions(+), 146 deletions(-) delete mode 100644 src/com/android/settings/biometrics/fingerprint/UdfpsOverlayParams.java diff --git a/res/layout/udfps_enroll_view.xml b/res/layout/udfps_enroll_view.xml index e1c21526cc2..6bf339b6b07 100644 --- a/res/layout/udfps_enroll_view.xml +++ b/res/layout/udfps_enroll_view.xml @@ -20,15 +20,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - { + // Map the touch to portrait mode if the device is in + // landscape mode. + final Point scaledTouch = + mUdfpsUtils.getTouchInNativeCoordinates(event.getPointerId(0), + event, udfpsEnrollView.getOverlayParams()); + + final String theStr = mUdfpsUtils.onTouchOutsideOfSensorArea( + mAccessibilityManager.isTouchExplorationEnabled(), context, + scaledTouch.x, scaledTouch.y, udfpsEnrollView.getOverlayParams()); + if (theStr != null) { + v.announceForAccessibility(theStr); + } + return false; + }; + + enrollLayout.findManagedViewById(isLandscape ? R.id.sud_landscape_content_area + : R.id.sud_layout_content).setOnHoverListener(onHoverListener); + } + public static class IconTouchDialog extends InstrumentedDialogFragment { @Override diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java index 3d77f0e8b63..96b49aa0edf 100644 --- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java +++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java @@ -25,7 +25,6 @@ import android.util.AttributeSet; import android.util.RotationUtils; import android.view.Gravity; import android.view.Surface; -import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; @@ -34,11 +33,13 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.settings.R; +import com.android.settingslib.udfps.UdfpsOverlayParams; /** * View corresponding with udfps_enroll_view.xml */ public class UdfpsEnrollView extends FrameLayout implements UdfpsEnrollHelper.Listener { + private static final String TAG = "UdfpsEnrollView"; @NonNull private final UdfpsEnrollDrawable mFingerprintDrawable; @NonNull @@ -98,12 +99,15 @@ public class UdfpsEnrollView extends FrameLayout implements UdfpsEnrollHelper.Li onFingerDown(); } - @Override public void onPointerUp(int sensorId) { onFingerUp(); } + public UdfpsOverlayParams getOverlayParams() { + return mOverlayParams; + } + void setOverlayParams(UdfpsOverlayParams params) { mOverlayParams = params; @@ -124,7 +128,6 @@ public class UdfpsEnrollView extends FrameLayout implements UdfpsEnrollHelper.Li private void onSensorRectUpdated() { updateDimensions(); - updateAccessibilityViewLocation(); // Updates sensor rect in relation to the overlay view mSensorRect.set(getPaddingX(), getPaddingY(), @@ -135,7 +138,7 @@ public class UdfpsEnrollView extends FrameLayout implements UdfpsEnrollHelper.Li private void updateDimensions() { // Original sensorBounds assume portrait mode. - final Rect rotatedBounds = mOverlayParams.getSensorBounds(); + final Rect rotatedBounds = new Rect(mOverlayParams.getSensorBounds()); int rotation = mOverlayParams.getRotation(); if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) { RotationUtils.rotateBounds( @@ -192,27 +195,14 @@ public class UdfpsEnrollView extends FrameLayout implements UdfpsEnrollHelper.Li setLayoutParams(params); } - private void updateAccessibilityViewLocation() { - View fingerprintAccessibilityView = findViewById(R.id.udfps_enroll_accessibility_view); - ViewGroup.LayoutParams params = fingerprintAccessibilityView.getLayoutParams(); - params.width = mOverlayParams.getSensorBounds().width(); - params.height = mOverlayParams.getSensorBounds().height(); - fingerprintAccessibilityView.setLayoutParams(params); - fingerprintAccessibilityView.requestLayout(); - } - private void onFingerDown() { - if (mOverlayParams.isOptical()) { - mFingerprintDrawable.setShouldSkipDraw(true); - mFingerprintDrawable.invalidateSelf(); - } + mFingerprintDrawable.setShouldSkipDraw(true); + mFingerprintDrawable.invalidateSelf(); } private void onFingerUp() { - if (mOverlayParams.isOptical()) { - mFingerprintDrawable.setShouldSkipDraw(false); - mFingerprintDrawable.invalidateSelf(); - } + mFingerprintDrawable.setShouldSkipDraw(false); + mFingerprintDrawable.invalidateSelf(); } private int getPaddingX() { diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsOverlayParams.java b/src/com/android/settings/biometrics/fingerprint/UdfpsOverlayParams.java deleted file mode 100644 index 9b52ad62302..00000000000 --- a/src/com/android/settings/biometrics/fingerprint/UdfpsOverlayParams.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2022 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.fingerprint; - -import android.graphics.Rect; - -import androidx.annotation.NonNull; - -/** - * Collection of parameters that define an under-display fingerprint sensor (UDFPS) overlay. - * - * [sensorBounds] coordinates of the bounding box around the sensor in natural orientation, in - * pixels, for the current resolution. - * - * [overlayBounds] coordinates of the UI overlay in natural orientation, in pixels, for the current - * resolution. - * - * [naturalDisplayWidth] width of the physical display in natural orientation, in pixels, for the - * current resolution. - * - * [naturalDisplayHeight] height of the physical display in natural orientation, in pixels, for the - * current resolution. - * - * [scaleFactor] ratio of a dimension in the current resolution to the corresponding dimension in - * the native resolution. - * - * [rotation] current rotation of the display. - */ -public final class UdfpsOverlayParams { - @NonNull - private final Rect mSensorBounds; - @NonNull - private final Rect mOverlayBounds; - private final int mNaturalDisplayWidth; - private final int mNaturalDisplayHeight; - private final float mScaleFactor; - private final int mRotation; - private final boolean mIsOptical; - - public UdfpsOverlayParams(@NonNull Rect sensorBounds, @NonNull Rect overlayBounds, - int naturalDisplayWidth, int naturalDisplayHeight, float scaleFactor, int rotation, - boolean isOptical) { - mSensorBounds = sensorBounds; - mOverlayBounds = overlayBounds; - mNaturalDisplayWidth = naturalDisplayWidth; - mNaturalDisplayHeight = naturalDisplayHeight; - mScaleFactor = scaleFactor; - mRotation = rotation; - mIsOptical = isOptical; - } - - @NonNull - public Rect getSensorBounds() { - return mSensorBounds; - } - - @NonNull - public Rect getOverlayBounds() { - return mOverlayBounds; - } - - public int getNaturalDisplayWidth() { - return mNaturalDisplayWidth; - } - - public int getNaturalDisplayHeight() { - return mNaturalDisplayHeight; - } - - public float getScaleFactor() { - return mScaleFactor; - } - - public int getRotation() { - return mRotation; - } - - public boolean isOptical() { - return mIsOptical; - } -}